@multiplatform.one/components 6.6.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Accordion/index.cjs +213 -70
- package/dist/cjs/Accordion/index.native.js +254 -75
- package/dist/cjs/Accordion/index.native.js.map +1 -1
- package/dist/cjs/Alert/index.cjs +204 -56
- package/dist/cjs/Alert/index.native.js +211 -60
- package/dist/cjs/Alert/index.native.js.map +1 -1
- package/dist/cjs/AnimateHeight/index.cjs +166 -0
- package/dist/cjs/AnimateHeight/index.native.js +176 -0
- package/dist/cjs/AnimateHeight/index.native.js.map +1 -0
- package/dist/cjs/Avatar/getInitials.cjs +34 -0
- package/dist/cjs/Avatar/getInitials.native.js +34 -0
- package/dist/cjs/Avatar/getInitials.native.js.map +1 -1
- package/dist/cjs/Avatar/index.cjs +246 -62
- package/dist/cjs/Avatar/index.native.js +252 -68
- package/dist/cjs/Avatar/index.native.js.map +1 -1
- package/dist/cjs/Badge/index.cjs +109 -75
- package/dist/cjs/Badge/index.native.js +110 -76
- package/dist/cjs/Badge/index.native.js.map +1 -1
- package/dist/cjs/Button.cjs +41 -0
- package/dist/cjs/Button.native.js +45 -0
- package/dist/cjs/Button.native.js.map +1 -0
- package/dist/cjs/Carousel/index.cjs +184 -105
- package/dist/cjs/Carousel/index.native.js +212 -107
- package/dist/cjs/Carousel/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +360 -5
- package/dist/cjs/Chip/index.native.js +374 -5
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/DotIndicator/index.cjs +129 -13
- package/dist/cjs/DotIndicator/index.native.js +133 -13
- package/dist/cjs/DotIndicator/index.native.js.map +1 -1
- package/dist/cjs/DropdownMenu/index.cjs +110 -44
- package/dist/cjs/DropdownMenu/index.native.js +113 -46
- package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
- package/dist/cjs/ErrorBoundary/index.cjs +2 -2
- package/dist/cjs/ErrorBoundary/index.native.js +2 -2
- package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
- package/dist/cjs/Pagination.cjs +40 -11
- package/dist/cjs/Pagination.native.js +44 -11
- package/dist/cjs/Pagination.native.js.map +1 -1
- package/dist/cjs/ProgressSteps/index.cjs +163 -107
- package/dist/cjs/ProgressSteps/index.native.js +171 -115
- package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
- package/dist/cjs/Quote/index.cjs +58 -39
- package/dist/cjs/Quote/index.native.js +69 -45
- package/dist/cjs/Quote/index.native.js.map +1 -1
- package/dist/cjs/SheetModal/index.cjs +141 -4
- package/dist/cjs/SheetModal/index.native.js +42 -29
- package/dist/cjs/SheetModal/index.native.js.map +1 -1
- package/dist/cjs/Skeleton/index.cjs +216 -4
- package/dist/cjs/Skeleton/index.native.js +223 -4
- package/dist/cjs/Skeleton/index.native.js.map +1 -1
- package/dist/cjs/SkipLink/index.cjs +91 -57
- package/dist/cjs/SkipLink/index.native.js +92 -66
- package/dist/cjs/SkipLink/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +136 -95
- package/dist/cjs/Tabs/index.native.js +161 -108
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Toast/index.cjs +229 -67
- package/dist/cjs/Toast/index.native.js +232 -67
- package/dist/cjs/Toast/index.native.js.map +1 -1
- package/dist/cjs/Toast/store.cjs +83 -10
- package/dist/cjs/Toast/store.native.js +108 -10
- package/dist/cjs/Toast/store.native.js.map +1 -1
- package/dist/cjs/Tooltip/index.cjs +159 -42
- package/dist/cjs/Tooltip/index.native.js +195 -43
- package/dist/cjs/Tooltip/index.native.js.map +1 -1
- package/dist/cjs/Video/PlayerChrome.cjs +403 -0
- package/dist/cjs/Video/PlayerChrome.native.js +436 -0
- package/dist/cjs/Video/PlayerChrome.native.js.map +1 -0
- package/dist/cjs/Video/VideoFrame.cjs +14 -5
- package/dist/cjs/Video/VideoFrame.native.js +16 -5
- package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
- package/dist/cjs/Video/index.cjs +227 -11
- package/dist/cjs/Video/index.native.js +28 -13
- package/dist/cjs/Video/index.native.js.map +1 -1
- package/dist/cjs/Wheel/index.cjs +144 -93
- package/dist/cjs/Wheel/index.native.js +149 -96
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/actions/DestructiveAction.cjs +2 -2
- package/dist/cjs/actions/DestructiveAction.native.js +2 -2
- package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
- package/dist/cjs/charts/BarChart.cjs +9 -5
- package/dist/cjs/charts/BarChart.native.js +9 -5
- package/dist/cjs/charts/BarChart.native.js.map +1 -1
- package/dist/cjs/charts/LineChart.cjs +2 -2
- package/dist/cjs/charts/LineChart.native.js +2 -2
- package/dist/cjs/charts/LineChart.native.js.map +1 -1
- package/dist/cjs/charts/PieChart.cjs +2 -2
- package/dist/cjs/charts/PieChart.native.js +2 -2
- package/dist/cjs/charts/PieChart.native.js.map +1 -1
- package/dist/cjs/charts/Sparkline.cjs +2 -2
- package/dist/cjs/charts/Sparkline.native.js +2 -2
- package/dist/cjs/charts/Sparkline.native.js.map +1 -1
- package/dist/cjs/charts/index.cjs +4 -0
- package/dist/cjs/charts/index.native.js +4 -0
- package/dist/cjs/charts/index.native.js.map +1 -1
- package/dist/cjs/code/CodeBlock/index.cjs +34 -7
- package/dist/cjs/code/CodeBlock/index.native.js +36 -9
- package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
- package/dist/cjs/feedback/ConfirmDialog.cjs +92 -5
- package/dist/cjs/feedback/ConfirmDialog.native.js +123 -5
- package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/cjs/feedback/NotifyHost.cjs +2 -2
- package/dist/cjs/feedback/NotifyHost.native.js +2 -2
- package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
- package/dist/cjs/icons/themed.cjs +4 -1
- package/dist/cjs/icons/themed.native.js +4 -1
- package/dist/cjs/icons/themed.native.js.map +1 -1
- package/dist/cjs/images/Image/ImageFrame.cjs +242 -0
- package/dist/cjs/images/Image/ImageFrame.native.js +248 -0
- package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -0
- package/dist/cjs/images/Image/index.cjs +93 -40
- package/dist/cjs/images/Image/index.native.js +146 -108
- package/dist/cjs/images/Image/index.native.js.map +1 -1
- package/dist/cjs/images/Image/shared.cjs +106 -0
- package/dist/cjs/images/Image/shared.native.js +109 -0
- package/dist/cjs/images/Image/shared.native.js.map +1 -0
- package/dist/cjs/index.cjs +7 -0
- package/dist/cjs/index.native.js +7 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/knobImmuneExports.cjs +95 -0
- package/dist/cjs/knobImmuneExports.native.js +98 -0
- package/dist/cjs/knobImmuneExports.native.js.map +1 -0
- package/dist/cjs/layouts/AsyncBoundary.cjs +163 -36
- package/dist/cjs/layouts/AsyncBoundary.native.js +166 -37
- package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/cjs/layouts/EmptyState.cjs +157 -0
- package/dist/cjs/layouts/EmptyState.native.js +165 -0
- package/dist/cjs/layouts/EmptyState.native.js.map +1 -0
- package/dist/cjs/layouts/PageTemplates.cjs +13 -5
- package/dist/cjs/layouts/PageTemplates.native.js +13 -5
- package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
- package/dist/cjs/layouts/PaneScaffold.cjs +273 -13
- package/dist/cjs/layouts/PaneScaffold.native.js +294 -13
- package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/cjs/layouts/ViewSwitcher.cjs +65 -23
- package/dist/cjs/layouts/ViewSwitcher.native.js +78 -30
- package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/cjs/layouts/attachments.cjs +350 -185
- package/dist/cjs/layouts/attachments.native.js +370 -186
- package/dist/cjs/layouts/attachments.native.js.map +1 -1
- package/dist/cjs/layouts/breadcrumbs.cjs +161 -62
- package/dist/cjs/layouts/breadcrumbs.native.js +184 -65
- package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/cjs/layouts/page.cjs +71 -111
- package/dist/cjs/layouts/page.native.js +82 -130
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/layouts/pageHeadingScope.cjs +8 -2
- package/dist/cjs/layouts/pageHeadingScope.native.js +10 -2
- package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.cjs +150 -66
- package/dist/cjs/layouts/sidebar.native.js +118 -47
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/cjs/layouts/tags.cjs +321 -138
- package/dist/cjs/layouts/tags.native.js +355 -158
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/layouts/timeline.cjs +129 -56
- package/dist/cjs/layouts/timeline.native.js +179 -55
- package/dist/cjs/layouts/timeline.native.js.map +1 -1
- package/dist/cjs/layouts/toolbar.cjs +56 -20
- package/dist/cjs/layouts/toolbar.native.js +62 -25
- package/dist/cjs/layouts/toolbar.native.js.map +1 -1
- package/dist/cjs/shared/i18n.cjs +46 -0
- package/dist/cjs/shared/i18n.native.js +52 -0
- package/dist/cjs/shared/i18n.native.js.map +1 -0
- package/dist/cjs/shared/textRidesText.cjs +57 -0
- package/dist/cjs/shared/textRidesText.native.js +81 -0
- package/dist/cjs/shared/textRidesText.native.js.map +1 -0
- package/dist/cjs/shared/useReturnFocusOnClose.cjs +7 -1
- package/dist/cjs/shared/useReturnFocusOnClose.native.js +7 -1
- package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/cjs/surfaces.cjs +93 -16
- package/dist/cjs/surfaces.native.js +95 -16
- package/dist/cjs/surfaces.native.js.map +1 -1
- package/dist/cjs/tamagui.cjs +38 -39
- package/dist/cjs/tamagui.native.js +37 -38
- package/dist/cjs/tamagui.native.js.map +1 -1
- package/dist/cjs/views/Calendar.cjs +101 -64
- package/dist/cjs/views/Calendar.native.js +105 -70
- package/dist/cjs/views/Calendar.native.js.map +1 -1
- package/dist/cjs/views/Dashboard.cjs +399 -107
- package/dist/cjs/views/Dashboard.native.js +408 -110
- package/dist/cjs/views/Dashboard.native.js.map +1 -1
- package/dist/cjs/views/Gantt.cjs +256 -59
- package/dist/cjs/views/Gantt.native.js +264 -39
- package/dist/cjs/views/Gantt.native.js.map +1 -1
- package/dist/cjs/views/ImageGrid.cjs +138 -73
- package/dist/cjs/views/ImageGrid.native.js +155 -71
- package/dist/cjs/views/ImageGrid.native.js.map +1 -1
- package/dist/cjs/views/Kanban.cjs +53 -31
- package/dist/cjs/views/Kanban.native.js +55 -41
- package/dist/cjs/views/Kanban.native.js.map +1 -1
- package/dist/cjs/views/List.cjs +280 -93
- package/dist/cjs/views/List.native.js +280 -101
- package/dist/cjs/views/List.native.js.map +1 -1
- package/dist/cjs/views/ReportBuilder.cjs +539 -172
- package/dist/cjs/views/ReportBuilder.native.js +592 -169
- package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
- package/dist/cjs/views/TreeView.cjs +142 -52
- package/dist/cjs/views/TreeView.native.js +170 -55
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/esm/Accordion/index.mjs +216 -73
- package/dist/esm/Accordion/index.mjs.map +1 -1
- package/dist/esm/Accordion/index.native.js +257 -78
- package/dist/esm/Accordion/index.native.js.map +1 -1
- package/dist/esm/Alert/index.mjs +206 -58
- package/dist/esm/Alert/index.mjs.map +1 -1
- package/dist/esm/Alert/index.native.js +213 -62
- package/dist/esm/Alert/index.native.js.map +1 -1
- package/dist/esm/AnimateHeight/index.mjs +140 -0
- package/dist/esm/AnimateHeight/index.mjs.map +1 -0
- package/dist/esm/AnimateHeight/index.native.js +147 -0
- package/dist/esm/AnimateHeight/index.native.js.map +1 -0
- package/dist/esm/Avatar/getInitials.mjs +32 -1
- package/dist/esm/Avatar/getInitials.mjs.map +1 -1
- package/dist/esm/Avatar/getInitials.native.js +32 -1
- package/dist/esm/Avatar/getInitials.native.js.map +1 -1
- package/dist/esm/Avatar/index.mjs +249 -68
- package/dist/esm/Avatar/index.mjs.map +1 -1
- package/dist/esm/Avatar/index.native.js +255 -74
- package/dist/esm/Avatar/index.native.js.map +1 -1
- package/dist/esm/Badge/index.mjs +110 -76
- package/dist/esm/Badge/index.mjs.map +1 -1
- package/dist/esm/Badge/index.native.js +111 -77
- package/dist/esm/Badge/index.native.js.map +1 -1
- package/dist/esm/Button.mjs +16 -0
- package/dist/esm/Button.mjs.map +1 -0
- package/dist/esm/Button.native.js +17 -0
- package/dist/esm/Button.native.js.map +1 -0
- package/dist/esm/Carousel/index.mjs +185 -106
- package/dist/esm/Carousel/index.mjs.map +1 -1
- package/dist/esm/Carousel/index.native.js +213 -108
- package/dist/esm/Carousel/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +356 -2
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +370 -2
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/DotIndicator/index.mjs +130 -14
- package/dist/esm/DotIndicator/index.mjs.map +1 -1
- package/dist/esm/DotIndicator/index.native.js +134 -14
- package/dist/esm/DotIndicator/index.native.js.map +1 -1
- package/dist/esm/DropdownMenu/index.mjs +112 -46
- package/dist/esm/DropdownMenu/index.mjs.map +1 -1
- package/dist/esm/DropdownMenu/index.native.js +115 -48
- package/dist/esm/DropdownMenu/index.native.js.map +1 -1
- package/dist/esm/ErrorBoundary/index.mjs +1 -1
- package/dist/esm/ErrorBoundary/index.native.js +1 -1
- package/dist/esm/Pagination.mjs +41 -12
- package/dist/esm/Pagination.mjs.map +1 -1
- package/dist/esm/Pagination.native.js +45 -12
- package/dist/esm/Pagination.native.js.map +1 -1
- package/dist/esm/ProgressSteps/index.mjs +165 -109
- package/dist/esm/ProgressSteps/index.mjs.map +1 -1
- package/dist/esm/ProgressSteps/index.native.js +173 -117
- package/dist/esm/ProgressSteps/index.native.js.map +1 -1
- package/dist/esm/Quote/index.mjs +59 -40
- package/dist/esm/Quote/index.mjs.map +1 -1
- package/dist/esm/Quote/index.native.js +70 -46
- package/dist/esm/Quote/index.native.js.map +1 -1
- package/dist/esm/SheetModal/index.mjs +144 -7
- package/dist/esm/SheetModal/index.mjs.map +1 -1
- package/dist/esm/SheetModal/index.native.js +41 -28
- package/dist/esm/SheetModal/index.native.js.map +1 -1
- package/dist/esm/Skeleton/index.mjs +213 -2
- package/dist/esm/Skeleton/index.mjs.map +1 -1
- package/dist/esm/Skeleton/index.native.js +220 -2
- package/dist/esm/Skeleton/index.native.js.map +1 -1
- package/dist/esm/SkipLink/index.mjs +93 -59
- package/dist/esm/SkipLink/index.mjs.map +1 -1
- package/dist/esm/SkipLink/index.native.js +94 -68
- package/dist/esm/SkipLink/index.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +137 -96
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +162 -109
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Toast/index.mjs +227 -68
- package/dist/esm/Toast/index.mjs.map +1 -1
- package/dist/esm/Toast/index.native.js +230 -68
- package/dist/esm/Toast/index.native.js.map +1 -1
- package/dist/esm/Toast/store.mjs +75 -11
- package/dist/esm/Toast/store.mjs.map +1 -1
- package/dist/esm/Toast/store.native.js +100 -11
- package/dist/esm/Toast/store.native.js.map +1 -1
- package/dist/esm/Tooltip/index.mjs +147 -42
- package/dist/esm/Tooltip/index.mjs.map +1 -1
- package/dist/esm/Tooltip/index.native.js +184 -44
- package/dist/esm/Tooltip/index.native.js.map +1 -1
- package/dist/esm/Video/PlayerChrome.mjs +377 -0
- package/dist/esm/Video/PlayerChrome.mjs.map +1 -0
- package/dist/esm/Video/PlayerChrome.native.js +407 -0
- package/dist/esm/Video/PlayerChrome.native.js.map +1 -0
- package/dist/esm/Video/VideoFrame.mjs +14 -5
- package/dist/esm/Video/VideoFrame.mjs.map +1 -1
- package/dist/esm/Video/VideoFrame.native.js +16 -5
- package/dist/esm/Video/VideoFrame.native.js.map +1 -1
- package/dist/esm/Video/index.mjs +227 -11
- package/dist/esm/Video/index.mjs.map +1 -1
- package/dist/esm/Video/index.native.js +28 -13
- package/dist/esm/Video/index.native.js.map +1 -1
- package/dist/esm/Wheel/index.mjs +143 -92
- package/dist/esm/Wheel/index.mjs.map +1 -1
- package/dist/esm/Wheel/index.native.js +148 -95
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/actions/DestructiveAction.mjs +1 -1
- package/dist/esm/actions/DestructiveAction.native.js +1 -1
- package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
- package/dist/esm/charts/BarChart.mjs +8 -4
- package/dist/esm/charts/BarChart.mjs.map +1 -1
- package/dist/esm/charts/BarChart.native.js +8 -4
- package/dist/esm/charts/BarChart.native.js.map +1 -1
- package/dist/esm/charts/LineChart.mjs +1 -1
- package/dist/esm/charts/LineChart.native.js +1 -1
- package/dist/esm/charts/PieChart.mjs +1 -1
- package/dist/esm/charts/PieChart.native.js +1 -1
- package/dist/esm/charts/PieChart.native.js.map +1 -1
- package/dist/esm/charts/Sparkline.mjs +1 -1
- package/dist/esm/charts/Sparkline.native.js +1 -1
- package/dist/esm/charts/index.mjs +2 -1
- package/dist/esm/charts/index.mjs.map +1 -1
- package/dist/esm/charts/index.native.js +2 -1
- package/dist/esm/charts/index.native.js.map +1 -1
- package/dist/esm/code/CodeBlock/index.mjs +34 -7
- package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
- package/dist/esm/code/CodeBlock/index.native.js +36 -9
- package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.mjs +93 -6
- package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.native.js +124 -6
- package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/esm/feedback/NotifyHost.mjs +1 -1
- package/dist/esm/feedback/NotifyHost.native.js +1 -1
- package/dist/esm/icons/themed.mjs +5 -2
- package/dist/esm/icons/themed.mjs.map +1 -1
- package/dist/esm/icons/themed.native.js +5 -2
- package/dist/esm/icons/themed.native.js.map +1 -1
- package/dist/esm/images/Image/ImageFrame.mjs +216 -0
- package/dist/esm/images/Image/ImageFrame.mjs.map +1 -0
- package/dist/esm/images/Image/ImageFrame.native.js +219 -0
- package/dist/esm/images/Image/ImageFrame.native.js.map +1 -0
- package/dist/esm/images/Image/index.mjs +94 -41
- package/dist/esm/images/Image/index.mjs.map +1 -1
- package/dist/esm/images/Image/index.native.js +148 -110
- package/dist/esm/images/Image/index.native.js.map +1 -1
- package/dist/esm/images/Image/shared.mjs +76 -0
- package/dist/esm/images/Image/shared.mjs.map +1 -0
- package/dist/esm/images/Image/shared.native.js +76 -0
- package/dist/esm/images/Image/shared.native.js.map +1 -0
- package/dist/esm/index.mjs +4 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +4 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/knobImmuneExports.mjs +70 -0
- package/dist/esm/knobImmuneExports.mjs.map +1 -0
- package/dist/esm/knobImmuneExports.native.js +70 -0
- package/dist/esm/knobImmuneExports.native.js.map +1 -0
- package/dist/esm/layouts/AsyncBoundary.mjs +165 -38
- package/dist/esm/layouts/AsyncBoundary.mjs.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.native.js +168 -39
- package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/esm/layouts/EmptyState.mjs +132 -0
- package/dist/esm/layouts/EmptyState.mjs.map +1 -0
- package/dist/esm/layouts/EmptyState.native.js +137 -0
- package/dist/esm/layouts/EmptyState.native.js.map +1 -0
- package/dist/esm/layouts/PageTemplates.mjs +13 -5
- package/dist/esm/layouts/PageTemplates.mjs.map +1 -1
- package/dist/esm/layouts/PageTemplates.native.js +13 -5
- package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
- package/dist/esm/layouts/PaneScaffold.mjs +277 -17
- package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/esm/layouts/PaneScaffold.native.js +298 -17
- package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/esm/layouts/ViewSwitcher.mjs +66 -24
- package/dist/esm/layouts/ViewSwitcher.mjs.map +1 -1
- package/dist/esm/layouts/ViewSwitcher.native.js +79 -31
- package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/esm/layouts/attachments.mjs +351 -175
- package/dist/esm/layouts/attachments.mjs.map +1 -1
- package/dist/esm/layouts/attachments.native.js +371 -187
- package/dist/esm/layouts/attachments.native.js.map +1 -1
- package/dist/esm/layouts/breadcrumbs.mjs +163 -53
- package/dist/esm/layouts/breadcrumbs.mjs.map +1 -1
- package/dist/esm/layouts/breadcrumbs.native.js +187 -68
- package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/esm/layouts/page.mjs +72 -112
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +83 -131
- package/dist/esm/layouts/page.native.js.map +1 -1
- package/dist/esm/layouts/pageHeadingScope.mjs +8 -3
- package/dist/esm/layouts/pageHeadingScope.mjs.map +1 -1
- package/dist/esm/layouts/pageHeadingScope.native.js +10 -3
- package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/esm/layouts/sidebar.mjs +152 -68
- package/dist/esm/layouts/sidebar.mjs.map +1 -1
- package/dist/esm/layouts/sidebar.native.js +120 -49
- package/dist/esm/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/layouts/tags.mjs +323 -140
- package/dist/esm/layouts/tags.mjs.map +1 -1
- package/dist/esm/layouts/tags.native.js +357 -160
- package/dist/esm/layouts/tags.native.js.map +1 -1
- package/dist/esm/layouts/timeline.mjs +129 -45
- package/dist/esm/layouts/timeline.mjs.map +1 -1
- package/dist/esm/layouts/timeline.native.js +179 -55
- package/dist/esm/layouts/timeline.native.js.map +1 -1
- package/dist/esm/layouts/toolbar.mjs +57 -21
- package/dist/esm/layouts/toolbar.mjs.map +1 -1
- package/dist/esm/layouts/toolbar.native.js +63 -26
- package/dist/esm/layouts/toolbar.native.js.map +1 -1
- package/dist/esm/shared/i18n.mjs +10 -0
- package/dist/esm/shared/i18n.mjs.map +1 -0
- package/dist/esm/shared/i18n.native.js +13 -0
- package/dist/esm/shared/i18n.native.js.map +1 -0
- package/dist/esm/shared/textRidesText.mjs +31 -0
- package/dist/esm/shared/textRidesText.mjs.map +1 -0
- package/dist/esm/shared/textRidesText.native.js +52 -0
- package/dist/esm/shared/textRidesText.native.js.map +1 -0
- package/dist/esm/shared/useReturnFocusOnClose.mjs +7 -1
- package/dist/esm/shared/useReturnFocusOnClose.mjs.map +1 -1
- package/dist/esm/shared/useReturnFocusOnClose.native.js +7 -1
- package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/esm/surfaces.mjs +94 -17
- package/dist/esm/surfaces.mjs.map +1 -1
- package/dist/esm/surfaces.native.js +96 -17
- package/dist/esm/surfaces.native.js.map +1 -1
- package/dist/esm/tamagui.mjs +2 -3
- package/dist/esm/tamagui.mjs.map +1 -1
- package/dist/esm/tamagui.native.js +2 -3
- package/dist/esm/tamagui.native.js.map +1 -1
- package/dist/esm/views/Calendar.mjs +101 -64
- package/dist/esm/views/Calendar.mjs.map +1 -1
- package/dist/esm/views/Calendar.native.js +105 -70
- package/dist/esm/views/Calendar.native.js.map +1 -1
- package/dist/esm/views/Dashboard.mjs +396 -107
- package/dist/esm/views/Dashboard.mjs.map +1 -1
- package/dist/esm/views/Dashboard.native.js +405 -110
- package/dist/esm/views/Dashboard.native.js.map +1 -1
- package/dist/esm/views/Gantt.mjs +256 -59
- package/dist/esm/views/Gantt.mjs.map +1 -1
- package/dist/esm/views/Gantt.native.js +264 -39
- package/dist/esm/views/Gantt.native.js.map +1 -1
- package/dist/esm/views/ImageGrid.mjs +138 -73
- package/dist/esm/views/ImageGrid.mjs.map +1 -1
- package/dist/esm/views/ImageGrid.native.js +155 -71
- package/dist/esm/views/ImageGrid.native.js.map +1 -1
- package/dist/esm/views/Kanban.mjs +52 -30
- package/dist/esm/views/Kanban.mjs.map +1 -1
- package/dist/esm/views/Kanban.native.js +54 -40
- package/dist/esm/views/Kanban.native.js.map +1 -1
- package/dist/esm/views/List.mjs +268 -95
- package/dist/esm/views/List.mjs.map +1 -1
- package/dist/esm/views/List.native.js +280 -104
- package/dist/esm/views/List.native.js.map +1 -1
- package/dist/esm/views/ReportBuilder.mjs +533 -166
- package/dist/esm/views/ReportBuilder.mjs.map +1 -1
- package/dist/esm/views/ReportBuilder.native.js +585 -162
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/TreeView.mjs +142 -52
- package/dist/esm/views/TreeView.mjs.map +1 -1
- package/dist/esm/views/TreeView.native.js +170 -55
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/jsx/Accordion/index.mjs +216 -73
- package/dist/jsx/Accordion/index.mjs.map +1 -1
- package/dist/jsx/Accordion/index.native.js +254 -75
- package/dist/jsx/Accordion/index.native.js.map +1 -1
- package/dist/jsx/Alert/index.mjs +206 -58
- package/dist/jsx/Alert/index.mjs.map +1 -1
- package/dist/jsx/Alert/index.native.js +211 -60
- package/dist/jsx/Alert/index.native.js.map +1 -1
- package/dist/jsx/AnimateHeight/index.mjs +140 -0
- package/dist/jsx/AnimateHeight/index.mjs.map +1 -0
- package/dist/jsx/AnimateHeight/index.native.js +176 -0
- package/dist/jsx/AnimateHeight/index.native.js.map +1 -0
- package/dist/jsx/Avatar/getInitials.mjs +32 -1
- package/dist/jsx/Avatar/getInitials.mjs.map +1 -1
- package/dist/jsx/Avatar/getInitials.native.js +34 -0
- package/dist/jsx/Avatar/getInitials.native.js.map +1 -1
- package/dist/jsx/Avatar/index.mjs +249 -68
- package/dist/jsx/Avatar/index.mjs.map +1 -1
- package/dist/jsx/Avatar/index.native.js +252 -68
- package/dist/jsx/Avatar/index.native.js.map +1 -1
- package/dist/jsx/Badge/index.mjs +110 -76
- package/dist/jsx/Badge/index.mjs.map +1 -1
- package/dist/jsx/Badge/index.native.js +110 -76
- package/dist/jsx/Badge/index.native.js.map +1 -1
- package/dist/jsx/Button.mjs +16 -0
- package/dist/jsx/Button.mjs.map +1 -0
- package/dist/jsx/Button.native.js +45 -0
- package/dist/jsx/Button.native.js.map +1 -0
- package/dist/jsx/Carousel/index.mjs +185 -106
- package/dist/jsx/Carousel/index.mjs.map +1 -1
- package/dist/jsx/Carousel/index.native.js +212 -107
- package/dist/jsx/Carousel/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +356 -2
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +374 -5
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/DotIndicator/index.mjs +130 -14
- package/dist/jsx/DotIndicator/index.mjs.map +1 -1
- package/dist/jsx/DotIndicator/index.native.js +133 -13
- package/dist/jsx/DotIndicator/index.native.js.map +1 -1
- package/dist/jsx/DropdownMenu/index.mjs +112 -46
- package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
- package/dist/jsx/DropdownMenu/index.native.js +113 -46
- package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
- package/dist/jsx/ErrorBoundary/index.mjs +1 -1
- package/dist/jsx/ErrorBoundary/index.native.js +2 -2
- package/dist/jsx/ErrorBoundary/index.native.js.map +1 -1
- package/dist/jsx/Pagination.mjs +41 -12
- package/dist/jsx/Pagination.mjs.map +1 -1
- package/dist/jsx/Pagination.native.js +44 -11
- package/dist/jsx/Pagination.native.js.map +1 -1
- package/dist/jsx/ProgressSteps/index.mjs +165 -109
- package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
- package/dist/jsx/ProgressSteps/index.native.js +171 -115
- package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
- package/dist/jsx/Quote/index.mjs +59 -40
- package/dist/jsx/Quote/index.mjs.map +1 -1
- package/dist/jsx/Quote/index.native.js +69 -45
- package/dist/jsx/Quote/index.native.js.map +1 -1
- package/dist/jsx/SheetModal/index.mjs +144 -7
- package/dist/jsx/SheetModal/index.mjs.map +1 -1
- package/dist/jsx/SheetModal/index.native.js +42 -29
- package/dist/jsx/SheetModal/index.native.js.map +1 -1
- package/dist/jsx/Skeleton/index.mjs +213 -2
- package/dist/jsx/Skeleton/index.mjs.map +1 -1
- package/dist/jsx/Skeleton/index.native.js +223 -4
- package/dist/jsx/Skeleton/index.native.js.map +1 -1
- package/dist/jsx/SkipLink/index.mjs +93 -59
- package/dist/jsx/SkipLink/index.mjs.map +1 -1
- package/dist/jsx/SkipLink/index.native.js +92 -66
- package/dist/jsx/SkipLink/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +137 -96
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +161 -108
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/Toast/index.mjs +227 -68
- package/dist/jsx/Toast/index.mjs.map +1 -1
- package/dist/jsx/Toast/index.native.js +232 -67
- package/dist/jsx/Toast/index.native.js.map +1 -1
- package/dist/jsx/Toast/store.mjs +75 -11
- package/dist/jsx/Toast/store.mjs.map +1 -1
- package/dist/jsx/Toast/store.native.js +108 -10
- package/dist/jsx/Toast/store.native.js.map +1 -1
- package/dist/jsx/Tooltip/index.mjs +147 -42
- package/dist/jsx/Tooltip/index.mjs.map +1 -1
- package/dist/jsx/Tooltip/index.native.js +195 -43
- package/dist/jsx/Tooltip/index.native.js.map +1 -1
- package/dist/jsx/Video/PlayerChrome.mjs +377 -0
- package/dist/jsx/Video/PlayerChrome.mjs.map +1 -0
- package/dist/jsx/Video/PlayerChrome.native.js +436 -0
- package/dist/jsx/Video/PlayerChrome.native.js.map +1 -0
- package/dist/jsx/Video/VideoFrame.mjs +14 -5
- package/dist/jsx/Video/VideoFrame.mjs.map +1 -1
- package/dist/jsx/Video/VideoFrame.native.js +16 -5
- package/dist/jsx/Video/VideoFrame.native.js.map +1 -1
- package/dist/jsx/Video/index.mjs +227 -11
- package/dist/jsx/Video/index.mjs.map +1 -1
- package/dist/jsx/Video/index.native.js +28 -13
- package/dist/jsx/Video/index.native.js.map +1 -1
- package/dist/jsx/Wheel/index.mjs +143 -92
- package/dist/jsx/Wheel/index.mjs.map +1 -1
- package/dist/jsx/Wheel/index.native.js +149 -96
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/actions/DestructiveAction.mjs +1 -1
- package/dist/jsx/actions/DestructiveAction.native.js +2 -2
- package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
- package/dist/jsx/charts/BarChart.mjs +8 -4
- package/dist/jsx/charts/BarChart.mjs.map +1 -1
- package/dist/jsx/charts/BarChart.native.js +9 -5
- package/dist/jsx/charts/BarChart.native.js.map +1 -1
- package/dist/jsx/charts/LineChart.mjs +1 -1
- package/dist/jsx/charts/LineChart.native.js +2 -2
- package/dist/jsx/charts/LineChart.native.js.map +1 -1
- package/dist/jsx/charts/PieChart.mjs +1 -1
- package/dist/jsx/charts/PieChart.native.js +2 -2
- package/dist/jsx/charts/PieChart.native.js.map +1 -1
- package/dist/jsx/charts/Sparkline.mjs +1 -1
- package/dist/jsx/charts/Sparkline.native.js +2 -2
- package/dist/jsx/charts/Sparkline.native.js.map +1 -1
- package/dist/jsx/charts/index.mjs +2 -1
- package/dist/jsx/charts/index.mjs.map +1 -1
- package/dist/jsx/charts/index.native.js +4 -0
- package/dist/jsx/charts/index.native.js.map +1 -1
- package/dist/jsx/code/CodeBlock/index.mjs +34 -7
- package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
- package/dist/jsx/code/CodeBlock/index.native.js +36 -9
- package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
- package/dist/jsx/feedback/ConfirmDialog.mjs +93 -6
- package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
- package/dist/jsx/feedback/ConfirmDialog.native.js +123 -5
- package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/jsx/feedback/NotifyHost.mjs +1 -1
- package/dist/jsx/feedback/NotifyHost.native.js +2 -2
- package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
- package/dist/jsx/icons/themed.mjs +5 -2
- package/dist/jsx/icons/themed.mjs.map +1 -1
- package/dist/jsx/icons/themed.native.js +4 -1
- package/dist/jsx/icons/themed.native.js.map +1 -1
- package/dist/jsx/images/Image/ImageFrame.mjs +216 -0
- package/dist/jsx/images/Image/ImageFrame.mjs.map +1 -0
- package/dist/jsx/images/Image/ImageFrame.native.js +248 -0
- package/dist/jsx/images/Image/ImageFrame.native.js.map +1 -0
- package/dist/jsx/images/Image/index.mjs +94 -41
- package/dist/jsx/images/Image/index.mjs.map +1 -1
- package/dist/jsx/images/Image/index.native.js +146 -108
- package/dist/jsx/images/Image/index.native.js.map +1 -1
- package/dist/jsx/images/Image/shared.mjs +76 -0
- package/dist/jsx/images/Image/shared.mjs.map +1 -0
- package/dist/jsx/images/Image/shared.native.js +109 -0
- package/dist/jsx/images/Image/shared.native.js.map +1 -0
- package/dist/jsx/index.js +4 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +4 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +7 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/knobImmuneExports.mjs +70 -0
- package/dist/jsx/knobImmuneExports.mjs.map +1 -0
- package/dist/jsx/knobImmuneExports.native.js +98 -0
- package/dist/jsx/knobImmuneExports.native.js.map +1 -0
- package/dist/jsx/layouts/AsyncBoundary.mjs +165 -38
- package/dist/jsx/layouts/AsyncBoundary.mjs.map +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js +166 -37
- package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/jsx/layouts/EmptyState.mjs +132 -0
- package/dist/jsx/layouts/EmptyState.mjs.map +1 -0
- package/dist/jsx/layouts/EmptyState.native.js +165 -0
- package/dist/jsx/layouts/EmptyState.native.js.map +1 -0
- package/dist/jsx/layouts/PageTemplates.mjs +13 -5
- package/dist/jsx/layouts/PageTemplates.mjs.map +1 -1
- package/dist/jsx/layouts/PageTemplates.native.js +13 -5
- package/dist/jsx/layouts/PageTemplates.native.js.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.mjs +277 -17
- package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.native.js +294 -13
- package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/jsx/layouts/ViewSwitcher.mjs +66 -24
- package/dist/jsx/layouts/ViewSwitcher.mjs.map +1 -1
- package/dist/jsx/layouts/ViewSwitcher.native.js +78 -30
- package/dist/jsx/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/jsx/layouts/attachments.mjs +351 -175
- package/dist/jsx/layouts/attachments.mjs.map +1 -1
- package/dist/jsx/layouts/attachments.native.js +370 -186
- package/dist/jsx/layouts/attachments.native.js.map +1 -1
- package/dist/jsx/layouts/breadcrumbs.mjs +163 -53
- package/dist/jsx/layouts/breadcrumbs.mjs.map +1 -1
- package/dist/jsx/layouts/breadcrumbs.native.js +184 -65
- package/dist/jsx/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/jsx/layouts/page.mjs +72 -112
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +82 -130
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/layouts/pageHeadingScope.mjs +8 -3
- package/dist/jsx/layouts/pageHeadingScope.mjs.map +1 -1
- package/dist/jsx/layouts/pageHeadingScope.native.js +10 -2
- package/dist/jsx/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/jsx/layouts/sidebar.mjs +152 -68
- package/dist/jsx/layouts/sidebar.mjs.map +1 -1
- package/dist/jsx/layouts/sidebar.native.js +118 -47
- package/dist/jsx/layouts/sidebar.native.js.map +1 -1
- package/dist/jsx/layouts/tags.mjs +323 -140
- package/dist/jsx/layouts/tags.mjs.map +1 -1
- package/dist/jsx/layouts/tags.native.js +355 -158
- package/dist/jsx/layouts/tags.native.js.map +1 -1
- package/dist/jsx/layouts/timeline.mjs +129 -45
- package/dist/jsx/layouts/timeline.mjs.map +1 -1
- package/dist/jsx/layouts/timeline.native.js +179 -55
- package/dist/jsx/layouts/timeline.native.js.map +1 -1
- package/dist/jsx/layouts/toolbar.mjs +57 -21
- package/dist/jsx/layouts/toolbar.mjs.map +1 -1
- package/dist/jsx/layouts/toolbar.native.js +62 -25
- package/dist/jsx/layouts/toolbar.native.js.map +1 -1
- package/dist/jsx/shared/i18n.mjs +10 -0
- package/dist/jsx/shared/i18n.mjs.map +1 -0
- package/dist/jsx/shared/i18n.native.js +52 -0
- package/dist/jsx/shared/i18n.native.js.map +1 -0
- package/dist/jsx/shared/textRidesText.mjs +31 -0
- package/dist/jsx/shared/textRidesText.mjs.map +1 -0
- package/dist/jsx/shared/textRidesText.native.js +81 -0
- package/dist/jsx/shared/textRidesText.native.js.map +1 -0
- package/dist/jsx/shared/useReturnFocusOnClose.mjs +7 -1
- package/dist/jsx/shared/useReturnFocusOnClose.mjs.map +1 -1
- package/dist/jsx/shared/useReturnFocusOnClose.native.js +7 -1
- package/dist/jsx/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/jsx/surfaces.mjs +94 -17
- package/dist/jsx/surfaces.mjs.map +1 -1
- package/dist/jsx/surfaces.native.js +95 -16
- package/dist/jsx/surfaces.native.js.map +1 -1
- package/dist/jsx/tamagui.mjs +2 -3
- package/dist/jsx/tamagui.mjs.map +1 -1
- package/dist/jsx/tamagui.native.js +37 -38
- package/dist/jsx/tamagui.native.js.map +1 -1
- package/dist/jsx/views/Calendar.mjs +101 -64
- package/dist/jsx/views/Calendar.mjs.map +1 -1
- package/dist/jsx/views/Calendar.native.js +105 -70
- package/dist/jsx/views/Calendar.native.js.map +1 -1
- package/dist/jsx/views/Dashboard.mjs +396 -107
- package/dist/jsx/views/Dashboard.mjs.map +1 -1
- package/dist/jsx/views/Dashboard.native.js +408 -110
- package/dist/jsx/views/Dashboard.native.js.map +1 -1
- package/dist/jsx/views/Gantt.mjs +256 -59
- package/dist/jsx/views/Gantt.mjs.map +1 -1
- package/dist/jsx/views/Gantt.native.js +264 -39
- package/dist/jsx/views/Gantt.native.js.map +1 -1
- package/dist/jsx/views/ImageGrid.mjs +138 -73
- package/dist/jsx/views/ImageGrid.mjs.map +1 -1
- package/dist/jsx/views/ImageGrid.native.js +155 -71
- package/dist/jsx/views/ImageGrid.native.js.map +1 -1
- package/dist/jsx/views/Kanban.mjs +52 -30
- package/dist/jsx/views/Kanban.mjs.map +1 -1
- package/dist/jsx/views/Kanban.native.js +55 -41
- package/dist/jsx/views/Kanban.native.js.map +1 -1
- package/dist/jsx/views/List.mjs +268 -95
- package/dist/jsx/views/List.mjs.map +1 -1
- package/dist/jsx/views/List.native.js +280 -101
- package/dist/jsx/views/List.native.js.map +1 -1
- package/dist/jsx/views/ReportBuilder.mjs +533 -166
- package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
- package/dist/jsx/views/ReportBuilder.native.js +592 -169
- package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
- package/dist/jsx/views/TreeView.mjs +142 -52
- package/dist/jsx/views/TreeView.mjs.map +1 -1
- package/dist/jsx/views/TreeView.native.js +170 -55
- package/dist/jsx/views/TreeView.native.js.map +1 -1
- package/package.json +19 -19
- package/src/Accordion/Accordion.lc50.spec.tsx +69 -0
- package/src/Accordion/Accordion.spec.tsx +36 -0
- package/src/Accordion/Accordion.stories.tsx +82 -36
- package/src/Accordion/index.tsx +296 -75
- package/src/Alert/Alert.spec.tsx +137 -1
- package/src/Alert/Alert.stories.tsx +10 -11
- package/src/Alert/index.tsx +244 -62
- package/src/AnimateHeight/AnimateHeight.spec.tsx +152 -0
- package/src/AnimateHeight/index.tsx +237 -0
- package/src/Avatar/Avatar.spec.tsx +73 -2
- package/src/Avatar/Avatar.stories.tsx +106 -4
- package/src/Avatar/getInitials.ts +29 -0
- package/src/Avatar/index.tsx +323 -105
- package/src/Badge/Badge.spec.tsx +83 -0
- package/src/Badge/Badge.stories.tsx +15 -1
- package/src/Badge/index.tsx +138 -84
- package/src/Button.spec.tsx +181 -0
- package/src/Button.stories.tsx +92 -0
- package/src/Button.tsx +43 -0
- package/src/Carousel/Carousel.spec.tsx +152 -0
- package/src/Carousel/index.tsx +239 -102
- package/src/Chip/Chip.spec.tsx +141 -0
- package/src/Chip/Chip.stories.tsx +163 -10
- package/src/Chip/index.tsx +452 -11
- package/src/DialogContent.stories.tsx +8 -6
- package/src/DotIndicator/DotIndicator.stories.tsx +18 -0
- package/src/DotIndicator/dotIndicator.spec.tsx +57 -2
- package/src/DotIndicator/index.tsx +159 -24
- package/src/DropdownMenu/DropdownMenu.spec.tsx +172 -0
- package/src/DropdownMenu/DropdownMenu.stories.tsx +35 -0
- package/src/DropdownMenu/index.tsx +172 -46
- package/src/ErrorBoundary/index.tsx +1 -1
- package/src/Pagination.api.spec.tsx +41 -0
- package/src/Pagination.tsx +49 -8
- package/src/PopoverContent.stories.tsx +4 -2
- package/src/ProgressSteps/ProgressSteps.spec.tsx +48 -1
- package/src/ProgressSteps/ProgressSteps.stories.tsx +48 -0
- package/src/ProgressSteps/index.tsx +224 -133
- package/src/Quote/Quote.lc50.spec.tsx +53 -0
- package/src/Quote/Quote.spec.tsx +9 -2
- package/src/Quote/Quote.stories.tsx +1 -1
- package/src/Quote/index.tsx +77 -60
- package/src/SheetModal/index.native.tsx +41 -39
- package/src/SheetModal/index.tsx +149 -18
- package/src/Skeleton/Skeleton.stories.tsx +109 -93
- package/src/Skeleton/SkeletonText.stories.tsx +11 -0
- package/src/Skeleton/index.tsx +257 -8
- package/src/SkipLink/SkipLink.spec.tsx +35 -0
- package/src/SkipLink/SkipLink.stories.tsx +1 -1
- package/src/SkipLink/index.tsx +120 -71
- package/src/Tabs/Tabs.spec.tsx +65 -0
- package/src/Tabs/Tabs.stories.tsx +32 -0
- package/src/Tabs/index.tsx +188 -133
- package/src/Toast/Toast.spec.tsx +208 -8
- package/src/Toast/Toast.stories.tsx +97 -16
- package/src/Toast/index.tsx +322 -78
- package/src/Toast/store.ts +150 -16
- package/src/Tooltip/Tooltip.lc50.spec.tsx +52 -0
- package/src/Tooltip/Tooltip.spec.tsx +99 -0
- package/src/Tooltip/Tooltip.stories.tsx +23 -0
- package/src/Tooltip/index.tsx +200 -44
- package/src/Video/PlayerChrome.tsx +412 -0
- package/src/Video/Video.spec.tsx +47 -4
- package/src/Video/Video.stories.tsx +2 -1
- package/src/Video/VideoFrame.tsx +15 -3
- package/src/Video/index.native.tsx +20 -12
- package/src/Video/index.tsx +285 -21
- package/src/Video/types.ts +7 -1
- package/src/Wheel/Wheel.spec.tsx +217 -2
- package/src/Wheel/Wheel.stories.tsx +39 -13
- package/src/Wheel/index.tsx +205 -134
- package/src/actions/DestructiveAction.tsx +1 -1
- package/src/charts/BarChart.tsx +14 -3
- package/src/charts/LineChart.tsx +1 -1
- package/src/charts/PieChart.tsx +1 -1
- package/src/charts/Sparkline.tsx +1 -1
- package/src/charts/charts.spec.tsx +25 -0
- package/src/charts/index.ts +9 -0
- package/src/code/CodeBlock/index.tsx +43 -7
- package/src/export-surface.spec.tsx +137 -0
- package/src/feedback/ConfirmDialog.spec.tsx +36 -0
- package/src/feedback/ConfirmDialog.stories.tsx +20 -1
- package/src/feedback/ConfirmDialog.tsx +121 -9
- package/src/feedback/NotifyHost.tsx +1 -1
- package/src/icons/themed.tsx +7 -2
- package/src/images/Image/Image.spec.tsx +136 -73
- package/src/images/Image/Image.stories.tsx +113 -9
- package/src/images/Image/ImageFrame.tsx +288 -0
- package/src/images/Image/index.native.tsx +177 -144
- package/src/images/Image/index.tsx +103 -51
- package/src/images/Image/shared.ts +88 -0
- package/src/images/Image/types.ts +32 -1
- package/src/index.ts +18 -0
- package/src/knobImmuneExports.ts +97 -0
- package/src/layouts/AsyncBoundary.spec.tsx +77 -0
- package/src/layouts/AsyncBoundary.stories.tsx +33 -1
- package/src/layouts/AsyncBoundary.tsx +183 -46
- package/src/layouts/Attachments.stories.tsx +28 -14
- package/src/layouts/Breadcrumbs.stories.tsx +22 -1
- package/src/layouts/EmptyState.stories.tsx +94 -26
- package/src/layouts/EmptyState.tsx +169 -0
- package/src/layouts/PageHeader.stories.tsx +68 -15
- package/src/layouts/PageTemplates.tsx +11 -6
- package/src/layouts/PaneScaffold.stories.tsx +132 -37
- package/src/layouts/PaneScaffold.tsx +354 -18
- package/src/layouts/ScreenToolbar.stories.tsx +36 -11
- package/src/layouts/Sidebar.stories.tsx +30 -7
- package/src/layouts/Tags.stories.tsx +31 -32
- package/src/layouts/Timeline.stories.tsx +2 -2
- package/src/layouts/Toolbar.stories.tsx +19 -0
- package/src/layouts/ViewSwitcher.stories.tsx +11 -3
- package/src/layouts/ViewSwitcher.tsx +101 -48
- package/src/layouts/attachments.tsx +394 -186
- package/src/layouts/breadcrumbs.tsx +213 -75
- package/src/layouts/layouts.spec.tsx +32 -0
- package/src/layouts/page.tsx +103 -164
- package/src/layouts/pageHeadingScope.tsx +28 -2
- package/src/layouts/sidebar.tsx +184 -91
- package/src/layouts/tags-trigger.spec.tsx +8 -8
- package/src/layouts/tags.tsx +356 -159
- package/src/layouts/timeline-comments.spec.tsx +17 -0
- package/src/layouts/timeline.tsx +179 -65
- package/src/layouts/toolbar.tsx +78 -27
- package/src/shared/i18n.ts +26 -0
- package/src/shared/textRidesText.ts +57 -0
- package/src/shared/useReturnFocusOnClose.ts +7 -1
- package/src/surfaces.tsx +83 -22
- package/src/tamagui.spec.ts +19 -4
- package/src/tamagui.ts +14 -6
- package/src/views/Calendar.stories.tsx +2 -1
- package/src/views/Calendar.tsx +129 -81
- package/src/views/Dashboard.stories.tsx +132 -1
- package/src/views/Dashboard.tsx +440 -127
- package/src/views/Gantt.stories.tsx +6 -5
- package/src/views/Gantt.tsx +330 -61
- package/src/views/ImageGrid.stories.tsx +81 -17
- package/src/views/ImageGrid.tsx +176 -96
- package/src/views/Kanban.native.tsx +73 -42
- package/src/views/Kanban.stories.tsx +42 -26
- package/src/views/Kanban.tsx +68 -40
- package/src/views/List.stories.tsx +107 -29
- package/src/views/List.tsx +335 -109
- package/src/views/ReportBuilder.stories.tsx +28 -1
- package/src/views/ReportBuilder.tsx +647 -275
- package/src/views/TreeView.stories.tsx +19 -0
- package/src/views/TreeView.tsx +194 -59
- package/types/Accordion/index.d.ts +10 -2
- package/types/Accordion/index.d.ts.map +1 -1
- package/types/Alert/index.d.ts +8 -2
- package/types/Alert/index.d.ts.map +1 -1
- package/types/AnimateHeight/index.d.ts +48 -0
- package/types/AnimateHeight/index.d.ts.map +1 -0
- package/types/Avatar/getInitials.d.ts +26 -0
- package/types/Avatar/getInitials.d.ts.map +1 -1
- package/types/Avatar/index.d.ts +34 -11
- package/types/Avatar/index.d.ts.map +1 -1
- package/types/Badge/index.d.ts +17 -12
- package/types/Badge/index.d.ts.map +1 -1
- package/types/Button.d.ts +42 -0
- package/types/Button.d.ts.map +1 -0
- package/types/Carousel/index.d.ts.map +1 -1
- package/types/Chip/index.d.ts +41 -1
- package/types/Chip/index.d.ts.map +1 -1
- package/types/DotIndicator/index.d.ts +4 -3
- package/types/DotIndicator/index.d.ts.map +1 -1
- package/types/DropdownMenu/index.d.ts +39 -5
- package/types/DropdownMenu/index.d.ts.map +1 -1
- package/types/ErrorBoundary/index.d.ts +1 -1
- package/types/Pagination.d.ts.map +1 -1
- package/types/ProgressSteps/index.d.ts +20 -5
- package/types/ProgressSteps/index.d.ts.map +1 -1
- package/types/Quote/index.d.ts +4 -3
- package/types/Quote/index.d.ts.map +1 -1
- package/types/SheetModal/index.d.ts +7 -10
- package/types/SheetModal/index.d.ts.map +1 -1
- package/types/SheetModal/index.native.d.ts +6 -13
- package/types/SheetModal/index.native.d.ts.map +1 -1
- package/types/Skeleton/index.d.ts +40 -1
- package/types/Skeleton/index.d.ts.map +1 -1
- package/types/SkipLink/index.d.ts +5 -6
- package/types/SkipLink/index.d.ts.map +1 -1
- package/types/Tabs/index.d.ts +12 -10
- package/types/Tabs/index.d.ts.map +1 -1
- package/types/Toast/index.d.ts +32 -9
- package/types/Toast/index.d.ts.map +1 -1
- package/types/Toast/store.d.ts +59 -4
- package/types/Toast/store.d.ts.map +1 -1
- package/types/Tooltip/index.d.ts +50 -5
- package/types/Tooltip/index.d.ts.map +1 -1
- package/types/Video/PlayerChrome.d.ts +24 -0
- package/types/Video/PlayerChrome.d.ts.map +1 -0
- package/types/Video/VideoFrame.d.ts.map +1 -1
- package/types/Video/index.d.ts +3 -2
- package/types/Video/index.d.ts.map +1 -1
- package/types/Video/index.native.d.ts +3 -2
- package/types/Video/index.native.d.ts.map +1 -1
- package/types/Video/types.d.ts +7 -1
- package/types/Video/types.d.ts.map +1 -1
- package/types/Wheel/index.d.ts +10 -1
- package/types/Wheel/index.d.ts.map +1 -1
- package/types/charts/BarChart.d.ts +7 -1
- package/types/charts/BarChart.d.ts.map +1 -1
- package/types/charts/index.d.ts +1 -0
- package/types/charts/index.d.ts.map +1 -1
- package/types/code/CodeBlock/index.d.ts.map +1 -1
- package/types/feedback/ConfirmDialog.d.ts +6 -0
- package/types/feedback/ConfirmDialog.d.ts.map +1 -1
- package/types/icons/themed.d.ts.map +1 -1
- package/types/images/Image/ImageFrame.d.ts +40 -0
- package/types/images/Image/ImageFrame.d.ts.map +1 -0
- package/types/images/Image/index.d.ts +1 -1
- package/types/images/Image/index.d.ts.map +1 -1
- package/types/images/Image/index.native.d.ts +1 -1
- package/types/images/Image/index.native.d.ts.map +1 -1
- package/types/images/Image/shared.d.ts +13 -0
- package/types/images/Image/shared.d.ts.map +1 -0
- package/types/images/Image/types.d.ts +27 -1
- package/types/images/Image/types.d.ts.map +1 -1
- package/types/index.d.ts +6 -0
- package/types/index.d.ts.map +1 -1
- package/types/knobImmuneExports.d.ts +21 -0
- package/types/knobImmuneExports.d.ts.map +1 -0
- package/types/layouts/AsyncBoundary.d.ts +20 -2
- package/types/layouts/AsyncBoundary.d.ts.map +1 -1
- package/types/layouts/EmptyState.d.ts +26 -0
- package/types/layouts/EmptyState.d.ts.map +1 -0
- package/types/layouts/PageTemplates.d.ts +5 -3
- package/types/layouts/PageTemplates.d.ts.map +1 -1
- package/types/layouts/PaneScaffold.d.ts +27 -5
- package/types/layouts/PaneScaffold.d.ts.map +1 -1
- package/types/layouts/ViewSwitcher.d.ts +7 -4
- package/types/layouts/ViewSwitcher.d.ts.map +1 -1
- package/types/layouts/attachments.d.ts +4 -2
- package/types/layouts/attachments.d.ts.map +1 -1
- package/types/layouts/breadcrumbs.d.ts +13 -5
- package/types/layouts/breadcrumbs.d.ts.map +1 -1
- package/types/layouts/page.d.ts +16 -27
- package/types/layouts/page.d.ts.map +1 -1
- package/types/layouts/pageHeadingScope.d.ts +14 -1
- package/types/layouts/pageHeadingScope.d.ts.map +1 -1
- package/types/layouts/sidebar.d.ts +3 -1
- package/types/layouts/sidebar.d.ts.map +1 -1
- package/types/layouts/tags.d.ts +4 -1
- package/types/layouts/tags.d.ts.map +1 -1
- package/types/layouts/timeline.d.ts +7 -5
- package/types/layouts/timeline.d.ts.map +1 -1
- package/types/layouts/toolbar.d.ts +1 -1
- package/types/layouts/toolbar.d.ts.map +1 -1
- package/types/shared/i18n.d.ts +14 -0
- package/types/shared/i18n.d.ts.map +1 -0
- package/types/shared/textRidesText.d.ts +20 -0
- package/types/shared/textRidesText.d.ts.map +1 -0
- package/types/shared/useReturnFocusOnClose.d.ts.map +1 -1
- package/types/surfaces.d.ts +0 -14
- package/types/surfaces.d.ts.map +1 -1
- package/types/tamagui.d.ts +2 -3
- package/types/tamagui.d.ts.map +1 -1
- package/types/views/Calendar.d.ts.map +1 -1
- package/types/views/Dashboard.d.ts +68 -6
- package/types/views/Dashboard.d.ts.map +1 -1
- package/types/views/Gantt.d.ts +5 -0
- package/types/views/Gantt.d.ts.map +1 -1
- package/types/views/ImageGrid.d.ts +4 -0
- package/types/views/ImageGrid.d.ts.map +1 -1
- package/types/views/Kanban.d.ts.map +1 -1
- package/types/views/Kanban.native.d.ts +12 -1
- package/types/views/Kanban.native.d.ts.map +1 -1
- package/types/views/List.d.ts +45 -6
- package/types/views/List.d.ts.map +1 -1
- package/types/views/ReportBuilder.d.ts +8 -54
- package/types/views/ReportBuilder.d.ts.map +1 -1
- package/types/views/TreeView.d.ts +13 -11
- package/types/views/TreeView.d.ts.map +1 -1
package/src/layouts/timeline.tsx
CHANGED
|
@@ -13,14 +13,17 @@ import {
|
|
|
13
13
|
import { useDirection } from "../hooks/useDirection";
|
|
14
14
|
import {
|
|
15
15
|
MIN_PRESS_TARGET,
|
|
16
|
+
ensureFocusVisibleRing,
|
|
16
17
|
formatAbsoluteDateTime,
|
|
17
18
|
formatRelativeTimestamp,
|
|
19
|
+
getGroupPosition,
|
|
18
20
|
pressTargetHitSlop,
|
|
19
21
|
pressTargetStyle,
|
|
22
|
+
stackRadiusProps,
|
|
20
23
|
useResolvedKnobs,
|
|
21
24
|
} from "@multiplatform.one/theme";
|
|
22
25
|
import React, { useCallback, useMemo, useState } from "react";
|
|
23
|
-
import { useTranslation } from "
|
|
26
|
+
import { useTranslation } from "../shared/i18n";
|
|
24
27
|
import {
|
|
25
28
|
Button,
|
|
26
29
|
H2,
|
|
@@ -287,6 +290,80 @@ export function threadEntries(entries: TimelineEntry[]): TimelineThread[] {
|
|
|
287
290
|
return threads;
|
|
288
291
|
}
|
|
289
292
|
|
|
293
|
+
/** Flat feed walk: roots, then one-level replies, then an open reply composer. */
|
|
294
|
+
type TimelineFeedItem =
|
|
295
|
+
| { key: string; kind: "entry"; entry: TimelineEntry; rootId: string; isReply: boolean }
|
|
296
|
+
| { key: string; kind: "reply-composer"; parent: TimelineEntry; rootId: string };
|
|
297
|
+
|
|
298
|
+
function flattenFeedItems(
|
|
299
|
+
threads: TimelineThread[],
|
|
300
|
+
entries: TimelineEntry[],
|
|
301
|
+
replyTarget: { rootId: string; parentId: string } | null,
|
|
302
|
+
): TimelineFeedItem[] {
|
|
303
|
+
const items: TimelineFeedItem[] = [];
|
|
304
|
+
for (const thread of threads) {
|
|
305
|
+
items.push({
|
|
306
|
+
key: thread.entry.id,
|
|
307
|
+
kind: "entry",
|
|
308
|
+
entry: thread.entry,
|
|
309
|
+
rootId: thread.entry.id,
|
|
310
|
+
isReply: false,
|
|
311
|
+
});
|
|
312
|
+
for (const reply of thread.replies) {
|
|
313
|
+
items.push({
|
|
314
|
+
key: reply.id,
|
|
315
|
+
kind: "entry",
|
|
316
|
+
entry: reply,
|
|
317
|
+
rootId: thread.entry.id,
|
|
318
|
+
isReply: true,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
if (replyTarget && replyTarget.rootId === thread.entry.id) {
|
|
322
|
+
items.push({
|
|
323
|
+
key: `reply-composer-${thread.entry.id}`,
|
|
324
|
+
kind: "reply-composer",
|
|
325
|
+
parent: entries.find((e) => e.id === replyTarget.parentId) ?? thread.entry,
|
|
326
|
+
rootId: thread.entry.id,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return items;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* GitHub/Primer + Frappe Desk spine: a flat 1px scheme-aware connector through
|
|
335
|
+
* the avatar/badge column. First/last items clip the line to the node center
|
|
336
|
+
* so the rail does not run off the stacked group (Primer `clipSidebar`).
|
|
337
|
+
*/
|
|
338
|
+
function TimelineSpine({
|
|
339
|
+
show,
|
|
340
|
+
clipStart,
|
|
341
|
+
clipEnd,
|
|
342
|
+
columnPx,
|
|
343
|
+
insetStart,
|
|
344
|
+
}: {
|
|
345
|
+
show: boolean;
|
|
346
|
+
clipStart: boolean;
|
|
347
|
+
clipEnd: boolean;
|
|
348
|
+
columnPx: number;
|
|
349
|
+
insetStart: number;
|
|
350
|
+
}) {
|
|
351
|
+
if (!show) return null;
|
|
352
|
+
const nodeCenter = insetStart + columnPx / 2;
|
|
353
|
+
return (
|
|
354
|
+
<YStack
|
|
355
|
+
position="absolute"
|
|
356
|
+
width={1}
|
|
357
|
+
top={clipStart ? nodeCenter : 0}
|
|
358
|
+
bottom={clipEnd ? nodeCenter : 0}
|
|
359
|
+
backgroundColor={componentColors.divider}
|
|
360
|
+
pointerEvents="none"
|
|
361
|
+
zIndex={0}
|
|
362
|
+
{...(isWeb ? { insetInlineStart: nodeCenter } : { start: nodeCenter })}
|
|
363
|
+
/>
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
|
|
290
367
|
function getEntryActionLabel(
|
|
291
368
|
entry: TimelineEntry,
|
|
292
369
|
labels: { madeChanges: string; addedAttachment: string; assigned: string },
|
|
@@ -337,11 +414,13 @@ function TimelineSkeleton({
|
|
|
337
414
|
// ---------------------------------------------------------------------------
|
|
338
415
|
|
|
339
416
|
/**
|
|
340
|
-
* Timeline: a mixed activity feed in the GitHub/
|
|
341
|
-
* render as conversation (avatar
|
|
342
|
-
* Reply, one-level threaded replies); system events
|
|
343
|
-
* assignment/info) render as compact muted
|
|
344
|
-
*
|
|
417
|
+
* Timeline: a mixed activity feed in the GitHub/Frappe Desk mold. Comment
|
|
418
|
+
* entries render as conversation cards (avatar on a spine, display name,
|
|
419
|
+
* relative time, body, Reply, one-level threaded replies); system events
|
|
420
|
+
* (version/attachment/assignment/info) render as compact muted rows on the
|
|
421
|
+
* same spine. Feed rows are ONE stacked group (LC-72): outer corners only,
|
|
422
|
+
* hairlines between items, hover/press inherit that geometry. An inline
|
|
423
|
+
* composer sits at the top of the feed (Desk communications).
|
|
345
424
|
* Fully data-agnostic -- accepts entries via props and emits callbacks.
|
|
346
425
|
*/
|
|
347
426
|
export function Timeline({
|
|
@@ -370,7 +449,7 @@ export function Timeline({
|
|
|
370
449
|
...stackProps
|
|
371
450
|
}: TimelineProps) {
|
|
372
451
|
const { t } = useTranslation();
|
|
373
|
-
const { knobProps } = useResolvedKnobs();
|
|
452
|
+
const { knobProps, control } = useResolvedKnobs();
|
|
374
453
|
const LabelTag = TIMELINE_HEADING_TAGS[headingLevel];
|
|
375
454
|
// Reply arrow bends back toward the quoted message — direction-of-travel,
|
|
376
455
|
// so the glyph pair swaps under RTL (Axiom 15 / useDirection pattern).
|
|
@@ -406,6 +485,10 @@ export function Timeline({
|
|
|
406
485
|
const showSkeleton = !hasError && isLoading && entries.length === 0;
|
|
407
486
|
|
|
408
487
|
const threads = useMemo(() => threadEntries(entries), [entries]);
|
|
488
|
+
const feedItems = useMemo(
|
|
489
|
+
() => flattenFeedItems(threads, entries, replyTarget),
|
|
490
|
+
[threads, entries, replyTarget],
|
|
491
|
+
);
|
|
409
492
|
|
|
410
493
|
const submitComment = useCallback(
|
|
411
494
|
(content: string, parentId?: string) => {
|
|
@@ -470,6 +553,9 @@ export function Timeline({
|
|
|
470
553
|
const systemFontSize = compact ? "$1" : "$2";
|
|
471
554
|
const avatarSize = compact ? "$1.5" : sz === "$5" ? "$3" : "$2";
|
|
472
555
|
const replyAvatarSize = compact ? "$1" : "$1.5";
|
|
556
|
+
// Twin of the live avatar/badge column — spine centers on this well.
|
|
557
|
+
const columnPx = compact ? 20 : sz === "$5" ? 34 : 24;
|
|
558
|
+
const rowPad = compact ? 8 : sz === "$5" ? 16 : 12;
|
|
473
559
|
|
|
474
560
|
const emptyIconSize = compact
|
|
475
561
|
? sz === "$3"
|
|
@@ -707,7 +793,7 @@ export function Timeline({
|
|
|
707
793
|
),
|
|
708
794
|
});
|
|
709
795
|
|
|
710
|
-
/** Conversation entry: avatar
|
|
796
|
+
/** Conversation entry: avatar on the spine + GitHub/Desk comment card. */
|
|
711
797
|
const renderCommentEntry = (entry: TimelineEntry, rootId: string, isReply: boolean) => {
|
|
712
798
|
const displayName = getEntryDisplayName(entry);
|
|
713
799
|
return (
|
|
@@ -716,12 +802,24 @@ export function Timeline({
|
|
|
716
802
|
aria-label={`${displayName}, ${formatVisibleTimestamp(entry)}`}
|
|
717
803
|
gap={compact ? "$2" : "$3"}
|
|
718
804
|
alignItems="flex-start"
|
|
719
|
-
borderRadius={radiusToken}
|
|
720
|
-
onPress={onEntryClick ? () => onEntryClick(entry) : undefined}
|
|
721
|
-
cursor={onEntryClick ? "pointer" : "default"}
|
|
722
805
|
>
|
|
723
|
-
|
|
724
|
-
|
|
806
|
+
<YStack
|
|
807
|
+
width={columnPx}
|
|
808
|
+
minHeight={columnPx}
|
|
809
|
+
alignItems="center"
|
|
810
|
+
justifyContent="flex-start"
|
|
811
|
+
zIndex={1}
|
|
812
|
+
>
|
|
813
|
+
{renderAvatar(entry, isReply ? replyAvatarSize : avatarSize)}
|
|
814
|
+
</YStack>
|
|
815
|
+
<YStack
|
|
816
|
+
flex={1}
|
|
817
|
+
minWidth={0}
|
|
818
|
+
gap="$1"
|
|
819
|
+
backgroundColor={componentColors.surface.background}
|
|
820
|
+
{...knobProps.borderRadius}
|
|
821
|
+
padding={compact ? "$2" : "$3"}
|
|
822
|
+
>
|
|
725
823
|
<XStack gap="$2" alignItems="center" flexWrap="wrap">
|
|
726
824
|
<Text fontSize={nameFontSize} fontWeight="600" color={componentColors.text.primary}>
|
|
727
825
|
{displayName}
|
|
@@ -743,7 +841,12 @@ export function Timeline({
|
|
|
743
841
|
{/* DG-LAY-04 / D-02 press-floor: the chromeless pill paints at
|
|
744
842
|
the $1/$2 token (20/28px) but the press box is floored at 44
|
|
745
843
|
via the house pressTarget* channel (grown transparent box +
|
|
746
|
-
negative outset + hitSlop) — layout height stays token-sized.
|
|
844
|
+
negative outset + hitSlop) — layout height stays token-sized.
|
|
845
|
+
LC-54 amendment (2026-08-13): the grown box NEVER paints —
|
|
846
|
+
the Button's default hover/press fills would spread across
|
|
847
|
+
the whole 44px floor and cover the comment text above via
|
|
848
|
+
the negative outset, so the consumer eject pins them to
|
|
849
|
+
transparent and feedback rides subtree opacity instead. */}
|
|
747
850
|
<Button
|
|
748
851
|
chromeless
|
|
749
852
|
size={compact ? "$1" : "$2"}
|
|
@@ -752,6 +855,8 @@ export function Timeline({
|
|
|
752
855
|
hitSlop={pressTargetHitSlop(compact ? 20 : 28)}
|
|
753
856
|
borderRadius={radiusToken}
|
|
754
857
|
opacity={0.8}
|
|
858
|
+
hoverStyle={{ backgroundColor: "transparent", opacity: 1 }}
|
|
859
|
+
pressStyle={{ backgroundColor: "transparent", opacity: 0.9 }}
|
|
755
860
|
icon={<ReplyIcon size={compact ? 10 : 12} />}
|
|
756
861
|
aria-label={`${replyLabel} ${displayName}`}
|
|
757
862
|
onPress={(e) => {
|
|
@@ -768,7 +873,7 @@ export function Timeline({
|
|
|
768
873
|
);
|
|
769
874
|
};
|
|
770
875
|
|
|
771
|
-
/** System/event entry: compact, muted,
|
|
876
|
+
/** System/event entry: compact, muted, badge-on-spine single-line row. */
|
|
772
877
|
const renderSystemEntry = (entry: TimelineEntry) => {
|
|
773
878
|
const displayName = getEntryDisplayName(entry);
|
|
774
879
|
const actionLabel = getEntryActionLabel(entry, {
|
|
@@ -777,27 +882,25 @@ export function Timeline({
|
|
|
777
882
|
assigned: assignedLabel,
|
|
778
883
|
});
|
|
779
884
|
const iconSize = compact ? 12 : 14;
|
|
780
|
-
const discSize = compact ? 20 : 24;
|
|
781
885
|
return (
|
|
782
886
|
<XStack
|
|
783
887
|
role="article"
|
|
784
888
|
aria-label={`${displayName} ${actionLabel ?? entry.content ?? ""}`.trim()}
|
|
785
889
|
gap={compact ? "$2" : "$3"}
|
|
786
890
|
alignItems="flex-start"
|
|
787
|
-
borderRadius={radiusToken}
|
|
788
|
-
onPress={onEntryClick ? () => onEntryClick(entry) : undefined}
|
|
789
|
-
cursor={onEntryClick ? "pointer" : "default"}
|
|
790
891
|
>
|
|
791
892
|
<YStack
|
|
792
|
-
width={
|
|
793
|
-
height={
|
|
893
|
+
width={columnPx}
|
|
894
|
+
height={columnPx}
|
|
794
895
|
alignItems="center"
|
|
795
896
|
justifyContent="center"
|
|
796
|
-
|
|
897
|
+
zIndex={1}
|
|
898
|
+
backgroundColor={componentColors.surface.background}
|
|
899
|
+
{...knobProps.borderRadius}
|
|
797
900
|
>
|
|
798
901
|
{getEntryIcon(entry, iconSize)}
|
|
799
902
|
</YStack>
|
|
800
|
-
<YStack flex={1} gap="$0.5" paddingTop={2}>
|
|
903
|
+
<YStack flex={1} gap="$0.5" paddingTop={2} minWidth={0}>
|
|
801
904
|
<XStack gap="$1.5" alignItems="center" flexWrap="wrap">
|
|
802
905
|
<Text fontSize={systemFontSize} fontWeight="600" color={mutedColor}>
|
|
803
906
|
{displayName}
|
|
@@ -840,46 +943,47 @@ export function Timeline({
|
|
|
840
943
|
return defaultContent;
|
|
841
944
|
};
|
|
842
945
|
|
|
843
|
-
const
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
946
|
+
const renderStackedRow = (
|
|
947
|
+
key: string,
|
|
948
|
+
children: React.ReactNode,
|
|
949
|
+
index: number,
|
|
950
|
+
count: number,
|
|
951
|
+
entry?: TimelineEntry,
|
|
952
|
+
) => {
|
|
953
|
+
const position = getGroupPosition(index, count);
|
|
954
|
+
const corners = stackRadiusProps(position, radiusToken);
|
|
955
|
+
const clickable = !!(entry && onEntryClick);
|
|
847
956
|
return (
|
|
848
|
-
<YStack
|
|
849
|
-
{
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
</YStack>
|
|
875
|
-
)}
|
|
957
|
+
<YStack
|
|
958
|
+
key={key}
|
|
959
|
+
position="relative"
|
|
960
|
+
overflow="hidden"
|
|
961
|
+
{...corners}
|
|
962
|
+
padding={rowPad}
|
|
963
|
+
borderBottomWidth={position === "last" || position === "only" ? 0 : 1}
|
|
964
|
+
borderBottomColor={componentColors.divider}
|
|
965
|
+
backgroundColor="transparent"
|
|
966
|
+
hoverStyle={{ ...control.hoverKnobProps, ...corners }}
|
|
967
|
+
pressStyle={clickable ? { ...control.pressKnobProps, ...corners } : undefined}
|
|
968
|
+
onPress={clickable && entry ? () => onEntryClick?.(entry) : undefined}
|
|
969
|
+
cursor={clickable ? "pointer" : "default"}
|
|
970
|
+
outlineWidth={0}
|
|
971
|
+
focusStyle={{ outlineWidth: 0 }}
|
|
972
|
+
focusVisibleStyle={clickable ? ensureFocusVisibleRing({ outlineOffset: -2 }) : undefined}
|
|
973
|
+
{...{ "data-group-position": position }}
|
|
974
|
+
>
|
|
975
|
+
<TimelineSpine
|
|
976
|
+
show={count > 1}
|
|
977
|
+
clipStart={position === "first"}
|
|
978
|
+
clipEnd={position === "last"}
|
|
979
|
+
columnPx={columnPx}
|
|
980
|
+
insetStart={rowPad}
|
|
981
|
+
/>
|
|
982
|
+
{children}
|
|
876
983
|
</YStack>
|
|
877
984
|
);
|
|
878
985
|
};
|
|
879
986
|
|
|
880
|
-
// Twin geometry for the loading rows: live avatar column width by size knob.
|
|
881
|
-
const skeletonAvatarPx = compact ? 20 : sz === "$5" ? 34 : 24;
|
|
882
|
-
|
|
883
987
|
return (
|
|
884
988
|
<YStack {...knobProps.gap} {...stackProps}>
|
|
885
989
|
{label && (
|
|
@@ -911,11 +1015,7 @@ export function Timeline({
|
|
|
911
1015
|
errorTitle={loadFailedLabel}
|
|
912
1016
|
loading={
|
|
913
1017
|
showSkeleton ? (
|
|
914
|
-
<TimelineSkeleton
|
|
915
|
-
compact={compact}
|
|
916
|
-
avatarPx={skeletonAvatarPx}
|
|
917
|
-
loadingLabel={t("Loading")}
|
|
918
|
-
/>
|
|
1018
|
+
<TimelineSkeleton compact={compact} avatarPx={columnPx} loadingLabel={t("Loading")} />
|
|
919
1019
|
) : (
|
|
920
1020
|
false
|
|
921
1021
|
)
|
|
@@ -925,10 +1025,24 @@ export function Timeline({
|
|
|
925
1025
|
<YStack
|
|
926
1026
|
role="feed"
|
|
927
1027
|
aria-label={label ?? t("Activity feed")}
|
|
928
|
-
gap={compact ? "$3" : knobProps.gapLg.gap}
|
|
929
1028
|
marginTop={canCompose ? "$2" : undefined}
|
|
930
1029
|
>
|
|
931
|
-
{
|
|
1030
|
+
{feedItems.map((item, index) =>
|
|
1031
|
+
item.kind === "entry"
|
|
1032
|
+
? renderStackedRow(
|
|
1033
|
+
item.key,
|
|
1034
|
+
renderEntryNode(item.entry, item.rootId, item.isReply),
|
|
1035
|
+
index,
|
|
1036
|
+
feedItems.length,
|
|
1037
|
+
item.entry,
|
|
1038
|
+
)
|
|
1039
|
+
: renderStackedRow(
|
|
1040
|
+
item.key,
|
|
1041
|
+
renderReplyComposer(item.parent),
|
|
1042
|
+
index,
|
|
1043
|
+
feedItems.length,
|
|
1044
|
+
),
|
|
1045
|
+
)}
|
|
932
1046
|
</YStack>
|
|
933
1047
|
</AsyncBoundary>
|
|
934
1048
|
</YStack>
|
package/src/layouts/toolbar.tsx
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
MIN_PRESS_TARGET,
|
|
3
|
+
Surface,
|
|
4
|
+
hairline,
|
|
5
|
+
hairlineWidth,
|
|
6
|
+
pressTargetHitSlop,
|
|
7
|
+
pressTargetStyle,
|
|
8
|
+
useResolvedKnobs,
|
|
9
|
+
} from "@multiplatform.one/theme";
|
|
2
10
|
import type React from "react";
|
|
3
|
-
import { useTranslation } from "
|
|
11
|
+
import { useTranslation } from "../shared/i18n";
|
|
4
12
|
import { Button } from "@multiplatform.one/forms";
|
|
5
|
-
import { Group, Separator, XStack, isWeb } from "tamagui";
|
|
13
|
+
import { Group, ScrollView, Separator, XStack, isWeb } from "tamagui";
|
|
6
14
|
|
|
7
15
|
export interface ToolbarAction {
|
|
8
16
|
label: string;
|
|
@@ -69,7 +77,20 @@ function partitionByDestructive(actions: ToolbarAction[]) {
|
|
|
69
77
|
return { neutral, destructive };
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
export function Toolbar({
|
|
80
|
+
export function Toolbar(props: ToolbarProps) {
|
|
81
|
+
// Toolbar chrome is small + compact (Primer ActionBar / Spectrum quiet /
|
|
82
|
+
// Linear). Pre-LC-76 this rode `compact: true` (which then stepped size AND
|
|
83
|
+
// space); with the axes split, the Surface host declares the same intent
|
|
84
|
+
// lawfully: an LC-78 subtree ceiling, so hosted actions clamp to
|
|
85
|
+
// small+compact while ambient pages keep their own size.
|
|
86
|
+
return (
|
|
87
|
+
<Surface size="small" density="compact">
|
|
88
|
+
<ToolbarInner {...props} />
|
|
89
|
+
</Surface>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function ToolbarInner({
|
|
73
94
|
primaryActions = [],
|
|
74
95
|
secondaryActions = [],
|
|
75
96
|
position = "top",
|
|
@@ -77,7 +98,15 @@ export function Toolbar({
|
|
|
77
98
|
}: ToolbarProps) {
|
|
78
99
|
const { t } = useTranslation();
|
|
79
100
|
const loadingLabel = loadingLabelProp ?? t("Loading...");
|
|
101
|
+
// Must run inside <Surface> so size/density clamp to this ceiling.
|
|
102
|
+
// Painted actions stay ≥44 via the pressTarget* channel (LC-54).
|
|
80
103
|
const { knobProps } = useResolvedKnobs();
|
|
104
|
+
// Recipe height, not the flat token ramp — `sizeToken` is the recipe KEY
|
|
105
|
+
// (LC-75). Flat `$3` is 36 while the painted small control is 28, which
|
|
106
|
+
// under-slopped the native press target below the 44 floor.
|
|
107
|
+
const sizePx = knobProps.control.height;
|
|
108
|
+
const pressFloor = pressTargetStyle();
|
|
109
|
+
const actionHitSlop = pressTargetHitSlop(sizePx);
|
|
81
110
|
|
|
82
111
|
// Route emphasis through the intent system (accent/error) instead of
|
|
83
112
|
// hardcoded color themes, so toolbar actions share the app's one solid
|
|
@@ -90,7 +119,6 @@ export function Toolbar({
|
|
|
90
119
|
const renderAction = (action: ToolbarAction) => (
|
|
91
120
|
<Button
|
|
92
121
|
key={action.label}
|
|
93
|
-
size={knobProps.sizeToken}
|
|
94
122
|
icon={action.icon as any}
|
|
95
123
|
onPress={action.onPress}
|
|
96
124
|
disabled={action.disabled}
|
|
@@ -98,13 +126,16 @@ export function Toolbar({
|
|
|
98
126
|
// and skips the bare-disabled warn; loadingLabel stays for SRs.
|
|
99
127
|
loading={action.loading}
|
|
100
128
|
aria-label={action.loading ? loadingLabel : undefined}
|
|
101
|
-
// DG-ST-03: reason flows through the Button explain affordance.
|
|
102
129
|
disabledReason={action.disabledReason}
|
|
130
|
+
disabledReasonPlacement="inline"
|
|
131
|
+
flexShrink={0}
|
|
103
132
|
{...getButtonIntents(action.variant)}
|
|
104
133
|
// Axiom 13 ONE BODY: the Toolbar's `outlined` variant maps to the
|
|
105
134
|
// Button's canonical boolean `outlined` prop. Passing it as a string
|
|
106
135
|
// `variant` matched no styled-frame key and silently dissolved (DF-10).
|
|
107
136
|
outlined={action.variant === "outlined"}
|
|
137
|
+
{...pressFloor}
|
|
138
|
+
{...(!isWeb ? { hitSlop: actionHitSlop } : undefined)}
|
|
108
139
|
>
|
|
109
140
|
{action.label}
|
|
110
141
|
</Button>
|
|
@@ -117,6 +148,8 @@ export function Toolbar({
|
|
|
117
148
|
<Group
|
|
118
149
|
key={`${region}-fused-${index}`}
|
|
119
150
|
orientation="horizontal"
|
|
151
|
+
flexWrap="nowrap"
|
|
152
|
+
flexShrink={0}
|
|
120
153
|
data-toolbar-cluster="fused"
|
|
121
154
|
data-toolbar-region={region}
|
|
122
155
|
>
|
|
@@ -131,7 +164,8 @@ export function Toolbar({
|
|
|
131
164
|
key={`${region}-independent-${index}`}
|
|
132
165
|
{...knobProps.gap}
|
|
133
166
|
alignItems="center"
|
|
134
|
-
flexWrap="
|
|
167
|
+
flexWrap="nowrap"
|
|
168
|
+
flexShrink={0}
|
|
135
169
|
data-toolbar-cluster="independent"
|
|
136
170
|
data-toolbar-region={region}
|
|
137
171
|
>
|
|
@@ -147,18 +181,20 @@ export function Toolbar({
|
|
|
147
181
|
// Two bar children only (start cluster + trailing cluster). The separator
|
|
148
182
|
// lives INSIDE the trailing cluster between neutral and destructive so it
|
|
149
183
|
// cannot float mid-bar under space-between (SB-D-06 / SB-E-05).
|
|
184
|
+
// Primer ActionBar / Spectrum ActionBar / Linear: one row, leading groups
|
|
185
|
+
// scroll, trailing (incl. destructive) stays pinned.
|
|
150
186
|
return (
|
|
151
187
|
<XStack
|
|
188
|
+
role="toolbar"
|
|
189
|
+
aria-label={t("Toolbar")}
|
|
152
190
|
// LC-39 EARNED-INSET (Axiom 16 ALIGNMENT): the bar paints no
|
|
153
|
-
// distinguishable surface —
|
|
154
|
-
//
|
|
155
|
-
// horizontal
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
// that variant re-earns `panelPadding` with its visible surface.
|
|
159
|
-
paddingVertical={knobProps.panelPadding.padding}
|
|
191
|
+
// distinguishable surface — SF-TRANSPARENT, so it earns no horizontal
|
|
192
|
+
// inset. Spread the panelPadding recipe whole, then eject the
|
|
193
|
+
// horizontal sides. Vertical padding stays (rhythm against the
|
|
194
|
+
// divider edge the bar actually paints).
|
|
195
|
+
{...knobProps.panelPadding}
|
|
160
196
|
paddingHorizontal={0}
|
|
161
|
-
{...knobProps.
|
|
197
|
+
{...knobProps.gapLg}
|
|
162
198
|
// Bar edge is a divider (not a control border): hairline on high-DPI
|
|
163
199
|
// (Axiom 15). Only class the side that carries the rule so the low-DPI
|
|
164
200
|
// fallback cannot paint the other edge.
|
|
@@ -168,28 +204,41 @@ export function Toolbar({
|
|
|
168
204
|
className: position === "top" ? "mp-hairline-b" : "mp-hairline-t",
|
|
169
205
|
})}
|
|
170
206
|
borderColor="$borderColor"
|
|
171
|
-
|
|
207
|
+
backgroundColor="transparent"
|
|
172
208
|
justifyContent="space-between"
|
|
173
209
|
alignItems="center"
|
|
174
|
-
flexWrap="
|
|
210
|
+
flexWrap="nowrap"
|
|
211
|
+
width="100%"
|
|
212
|
+
minHeight={MIN_PRESS_TARGET}
|
|
213
|
+
overflow="hidden"
|
|
175
214
|
data-testid="toolbar"
|
|
176
215
|
>
|
|
177
|
-
<
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
216
|
+
<ScrollView
|
|
217
|
+
horizontal
|
|
218
|
+
showsHorizontalScrollIndicator={false}
|
|
219
|
+
flex={1}
|
|
181
220
|
flexShrink={1}
|
|
182
|
-
|
|
221
|
+
minWidth={0}
|
|
222
|
+
{...(isWeb ? { overflow: "scroll" as const } : undefined)}
|
|
223
|
+
contentContainerStyle={{ alignItems: "center" }}
|
|
183
224
|
>
|
|
184
|
-
|
|
185
|
-
|
|
225
|
+
<XStack
|
|
226
|
+
{...knobProps.gapLg}
|
|
227
|
+
alignItems="center"
|
|
228
|
+
flexWrap="nowrap"
|
|
229
|
+
flexShrink={0}
|
|
230
|
+
data-toolbar-slot="start"
|
|
231
|
+
>
|
|
232
|
+
{renderClusters(primaryActions, "primary")}
|
|
233
|
+
</XStack>
|
|
234
|
+
</ScrollView>
|
|
186
235
|
|
|
187
236
|
{hasTrailing && (
|
|
188
237
|
<XStack
|
|
189
238
|
{...knobProps.gap}
|
|
190
239
|
alignItems="center"
|
|
191
|
-
flexWrap="
|
|
192
|
-
flexShrink={
|
|
240
|
+
flexWrap="nowrap"
|
|
241
|
+
flexShrink={0}
|
|
193
242
|
marginInlineStart="auto"
|
|
194
243
|
justifyContent="flex-end"
|
|
195
244
|
data-toolbar-slot="end"
|
|
@@ -199,7 +248,9 @@ export function Toolbar({
|
|
|
199
248
|
<Separator
|
|
200
249
|
vertical
|
|
201
250
|
{...hairline.vline}
|
|
202
|
-
|
|
251
|
+
// Match the painted control chrome, not the flat token ramp
|
|
252
|
+
// (LC-75: sizeToken is a key, not a height scalar).
|
|
253
|
+
height={knobProps.control.height}
|
|
203
254
|
alignSelf="center"
|
|
204
255
|
data-toolbar-separator="destructive"
|
|
205
256
|
/>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as ReactI18next from "react-i18next";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* react-i18next is an OPTIONAL peer: apps that never render the i18n-using
|
|
5
|
+
* catalog components (Alert, Toast, Carousel, views/, layouts/, …) may omit
|
|
6
|
+
* it entirely and tree-shake those components away. When it is missing, the
|
|
7
|
+
* bundler substitutes an empty optional-peer-dep stub for the package —
|
|
8
|
+
* direct named imports would then surface as dozens of cryptic
|
|
9
|
+
* MISSING_EXPORT warnings and undefined-call crashes far from the cause.
|
|
10
|
+
* Every catalog usage routes through this namespace access instead, so
|
|
11
|
+
* omission stays warning-free for tree-shakers and fails loudly — naming the
|
|
12
|
+
* package and the fix — the moment an i18n-using component actually renders.
|
|
13
|
+
*/
|
|
14
|
+
export const useTranslation = ((...args: unknown[]) => {
|
|
15
|
+
const impl = (ReactI18next as { useTranslation?: (...args: unknown[]) => unknown })
|
|
16
|
+
.useTranslation;
|
|
17
|
+
if (typeof impl !== "function") {
|
|
18
|
+
throw new Error(
|
|
19
|
+
"[@multiplatform.one/components] react-i18next is not installed, but a component that " +
|
|
20
|
+
"translates its built-in copy was rendered. Add react-i18next and i18next to your " +
|
|
21
|
+
"app's dependencies (they are optional peers so apps that never render these " +
|
|
22
|
+
"components can omit them).",
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return impl(...args);
|
|
26
|
+
}) as typeof ReactI18next.useTranslation;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-82 TEXT-RIDES-TEXT (catalog arm) — shared wrap-and-coalesce for child
|
|
3
|
+
* slots that render into Views. Mirrors the reference remedy in
|
|
4
|
+
* `public/forms/src/Button/index.tsx`: the singleton auto-wrap misses
|
|
5
|
+
* `{label}{cond ? suffix : ""}` (TWO string children), which web renders and
|
|
6
|
+
* native rejects ("Text strings must be rendered within a <Text> component"),
|
|
7
|
+
* silently dropping the label. Each run of adjacent bare string/number
|
|
8
|
+
* children coalesces into one concatenated label handed to the slot's own
|
|
9
|
+
* Text wrapper; element children pass through untouched, order preserved.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ReactNode } from "react";
|
|
13
|
+
import { Children } from "react";
|
|
14
|
+
|
|
15
|
+
/** Bare string/number children are legal only inside Text. */
|
|
16
|
+
export const isBareTextChild = (child: unknown): child is string | number =>
|
|
17
|
+
typeof child === "string" || typeof child === "number";
|
|
18
|
+
|
|
19
|
+
function coalesceBareTextRuns(
|
|
20
|
+
children: ReturnType<typeof Children.toArray>,
|
|
21
|
+
renderLabel: (label: string, key: string) => ReactNode,
|
|
22
|
+
): ReactNode[] {
|
|
23
|
+
const out: ReactNode[] = [];
|
|
24
|
+
let run: string | undefined;
|
|
25
|
+
let runIndex = 0;
|
|
26
|
+
const flushRun = () => {
|
|
27
|
+
if (run !== undefined && run !== "") out.push(renderLabel(run, `lc50-run-${runIndex++}`));
|
|
28
|
+
run = undefined;
|
|
29
|
+
};
|
|
30
|
+
for (const child of children) {
|
|
31
|
+
if (isBareTextChild(child)) {
|
|
32
|
+
run = (run ?? "") + String(child);
|
|
33
|
+
} else {
|
|
34
|
+
flushRun();
|
|
35
|
+
out.push(child);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
flushRun();
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Wrap ALL bare string/number children of a View-rendering slot: singleton
|
|
44
|
+
* strings/numbers and runs inside arrays go through `renderLabel` (the slot's
|
|
45
|
+
* Text wrapper); pure-element children return unchanged.
|
|
46
|
+
*/
|
|
47
|
+
export function wrapBareTextChildren(
|
|
48
|
+
children: ReactNode,
|
|
49
|
+
renderLabel: (label: string, key?: string) => ReactNode,
|
|
50
|
+
): ReactNode {
|
|
51
|
+
if (isBareTextChild(children)) return renderLabel(String(children));
|
|
52
|
+
if (Array.isArray(children)) {
|
|
53
|
+
const flattened = Children.toArray(children);
|
|
54
|
+
if (flattened.some(isBareTextChild)) return coalesceBareTextRuns(flattened, renderLabel);
|
|
55
|
+
}
|
|
56
|
+
return children;
|
|
57
|
+
}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
import { useEffect, useRef } from "react";
|
|
19
19
|
import { isWeb } from "tamagui";
|
|
20
|
+
import { wasKeyboardFocus } from "@multiplatform.one/theme";
|
|
20
21
|
|
|
21
22
|
const canUseDom = () => isWeb && typeof document !== "undefined";
|
|
22
23
|
|
|
@@ -40,7 +41,12 @@ export function useReturnFocusOnClose(open: boolean) {
|
|
|
40
41
|
const restore = () => {
|
|
41
42
|
const target = prevRef.current;
|
|
42
43
|
if (!target || !target.isConnected) return;
|
|
43
|
-
if (focusIsDropped())
|
|
44
|
+
if (focusIsDropped()) {
|
|
45
|
+
target.focus({
|
|
46
|
+
preventScroll: true,
|
|
47
|
+
focusVisible: wasKeyboardFocus(),
|
|
48
|
+
} as FocusOptions);
|
|
49
|
+
}
|
|
44
50
|
};
|
|
45
51
|
// Exit animations unmount the overlay a few frames later; retry after
|
|
46
52
|
// the typical exit window. Both calls are idempotent.
|