@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
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Composable parts (DropdownMenu.Trigger/Content/Item/CheckboxItem/
|
|
13
13
|
* Separator/Label) plus a convenience `items=[]` prop for the common
|
|
14
|
-
* row-actions case.
|
|
14
|
+
* row-actions case. Dismissal follows LC-21: plain items COMMIT-close,
|
|
15
|
+
* checkable items COMPOSE-stay; `closeOnSelect` (entry-level, or menu-level
|
|
16
|
+
* on the root) opts a checkable single-select "radio-style" menu into
|
|
17
|
+
* close-on-pick — entries with `checked` fire BOTH `onCheckedChange` and
|
|
18
|
+
* `onSelect`.
|
|
15
19
|
*/
|
|
16
20
|
|
|
17
21
|
import {
|
|
@@ -21,17 +25,23 @@ import {
|
|
|
21
25
|
useCallback,
|
|
22
26
|
useContext,
|
|
23
27
|
useEffect,
|
|
28
|
+
useLayoutEffect,
|
|
24
29
|
useMemo,
|
|
25
30
|
useRef,
|
|
31
|
+
useState,
|
|
26
32
|
type ReactNode,
|
|
27
33
|
type RefObject,
|
|
28
34
|
} from "react";
|
|
29
35
|
import {
|
|
30
|
-
|
|
36
|
+
OVERLAY_ANCHOR_GAP,
|
|
31
37
|
hairline,
|
|
38
|
+
keyboardFocusRingProps,
|
|
32
39
|
menuRowFrame,
|
|
40
|
+
ensureFocusVisibleRing,
|
|
41
|
+
ensureKeyboardModalityTracking,
|
|
33
42
|
useResolvedKnobs,
|
|
34
43
|
warnBareDisabled,
|
|
44
|
+
wasKeyboardFocus,
|
|
35
45
|
} from "@multiplatform.one/theme";
|
|
36
46
|
import { CheckIcon } from "@phosphor-icons/react";
|
|
37
47
|
import type { GetProps, PopoverContentProps, PopoverProps, TamaguiElement } from "tamagui";
|
|
@@ -72,8 +82,22 @@ export interface DropdownMenuItemSpec {
|
|
|
72
82
|
destructive?: boolean;
|
|
73
83
|
/** Present ⇒ renders as a checkable item (menuitemcheckbox). */
|
|
74
84
|
checked?: boolean;
|
|
85
|
+
/** Toggle callback for checkable entries (fires with the next checked state). */
|
|
75
86
|
onCheckedChange?: (checked: boolean) => void;
|
|
87
|
+
/**
|
|
88
|
+
* Fires on every activation — checkable entries included (alongside
|
|
89
|
+
* `onCheckedChange`), so single-select "radio-style" menus can navigate
|
|
90
|
+
* from the same entry that carries the check mark.
|
|
91
|
+
*/
|
|
76
92
|
onSelect?: () => void;
|
|
93
|
+
/**
|
|
94
|
+
* Close the menu after this entry activates. Defaults per LC-21 class:
|
|
95
|
+
* plain items close (COMMIT — the pick completes the contract), checkable
|
|
96
|
+
* items stay open (COMPOSE — toggles accumulate). The menu-level
|
|
97
|
+
* `closeOnSelect` overrides the class default; this entry-level value
|
|
98
|
+
* wins over both.
|
|
99
|
+
*/
|
|
100
|
+
closeOnSelect?: boolean;
|
|
77
101
|
}
|
|
78
102
|
|
|
79
103
|
export type DropdownMenuEntry = DropdownMenuItemSpec | { separator: true };
|
|
@@ -94,6 +118,13 @@ export interface DropdownMenuProps {
|
|
|
94
118
|
placement?: DropdownMenuPlacement;
|
|
95
119
|
/** Max menu height before the list scrolls (convenience `items` path). */
|
|
96
120
|
maxHeight?: number;
|
|
121
|
+
/**
|
|
122
|
+
* Menu-level close-on-activate default for every item (entry-level
|
|
123
|
+
* `closeOnSelect` wins). Set true on single-select "radio-style" menus —
|
|
124
|
+
* view/board/sort switchers whose checked pick commits and closes
|
|
125
|
+
* (LC-21 COMMIT) — instead of controlling `open` from the consumer.
|
|
126
|
+
*/
|
|
127
|
+
closeOnSelect?: boolean;
|
|
97
128
|
}
|
|
98
129
|
|
|
99
130
|
// ── Context ───────────────────────────────────────────────────
|
|
@@ -103,6 +134,10 @@ interface DropdownMenuContextValue {
|
|
|
103
134
|
setOpen: (open: boolean) => void;
|
|
104
135
|
triggerRef: RefObject<TamaguiElement | null>;
|
|
105
136
|
close: () => void;
|
|
137
|
+
/** Menu-level closeOnSelect default (entry-level values win). */
|
|
138
|
+
closeOnSelect?: boolean;
|
|
139
|
+
/** APG: ArrowUp on the trigger focuses the last item on open. */
|
|
140
|
+
pendingFocusRef: RefObject<"first" | "last">;
|
|
106
141
|
}
|
|
107
142
|
|
|
108
143
|
const DropdownMenuContext = createContext<DropdownMenuContextValue | null>(null);
|
|
@@ -124,13 +159,20 @@ const ItemRow = styled(XStack, {
|
|
|
124
159
|
...menuRowFrame,
|
|
125
160
|
gap: "$2.5",
|
|
126
161
|
cursor: "pointer",
|
|
162
|
+
// LC-72 CONTAINER-CLIP: rows stay square; the overlay clips outer corners.
|
|
163
|
+
// LC-71: rest and pointer-origin focus paint no ring. Keyboard ring is
|
|
164
|
+
// applied per-row via keyboardFocusRingProps (inset so overflow:hidden
|
|
165
|
+
// does not sever it) when wasKeyboardFocus().
|
|
166
|
+
outlineWidth: 0,
|
|
127
167
|
hoverStyle: { backgroundColor: componentColors.interactive.hover },
|
|
128
168
|
pressStyle: { backgroundColor: componentColors.interactive.active },
|
|
129
|
-
|
|
130
|
-
|
|
169
|
+
focusStyle: {
|
|
170
|
+
backgroundColor: componentColors.interactive.hover,
|
|
171
|
+
outlineWidth: 0,
|
|
172
|
+
},
|
|
131
173
|
focusVisibleStyle: {
|
|
132
174
|
backgroundColor: componentColors.interactive.hover,
|
|
133
|
-
|
|
175
|
+
outlineWidth: 0,
|
|
134
176
|
},
|
|
135
177
|
variants: {
|
|
136
178
|
disabled: {
|
|
@@ -165,6 +207,7 @@ function DropdownMenuRoot({
|
|
|
165
207
|
onOpenChange,
|
|
166
208
|
placement = "bottom-start",
|
|
167
209
|
maxHeight,
|
|
210
|
+
closeOnSelect,
|
|
168
211
|
}: DropdownMenuProps) {
|
|
169
212
|
const [open, setOpen] = useControllableState({
|
|
170
213
|
prop: openProp,
|
|
@@ -172,6 +215,7 @@ function DropdownMenuRoot({
|
|
|
172
215
|
onChange: onOpenChange,
|
|
173
216
|
});
|
|
174
217
|
const triggerRef = useRef<TamaguiElement | null>(null);
|
|
218
|
+
const pendingFocusRef = useRef<"first" | "last">("first");
|
|
175
219
|
|
|
176
220
|
const close = useCallback(() => {
|
|
177
221
|
setOpen(false);
|
|
@@ -184,8 +228,8 @@ function DropdownMenuRoot({
|
|
|
184
228
|
}, [setOpen]);
|
|
185
229
|
|
|
186
230
|
const ctx = useMemo<DropdownMenuContextValue>(
|
|
187
|
-
() => ({ open, setOpen, triggerRef, close }),
|
|
188
|
-
[open, setOpen, close],
|
|
231
|
+
() => ({ open, setOpen, triggerRef, close, closeOnSelect, pendingFocusRef }),
|
|
232
|
+
[open, setOpen, close, closeOnSelect],
|
|
189
233
|
);
|
|
190
234
|
|
|
191
235
|
return (
|
|
@@ -194,7 +238,7 @@ function DropdownMenuRoot({
|
|
|
194
238
|
open={open}
|
|
195
239
|
onOpenChange={setOpen}
|
|
196
240
|
placement={placement}
|
|
197
|
-
offset={
|
|
241
|
+
offset={OVERLAY_ANCHOR_GAP}
|
|
198
242
|
stayInFrame
|
|
199
243
|
allowFlip
|
|
200
244
|
>
|
|
@@ -210,6 +254,8 @@ function DropdownMenuRoot({
|
|
|
210
254
|
key={(entry as DropdownMenuItemSpec).key ?? index}
|
|
211
255
|
checked={(entry as DropdownMenuItemSpec).checked!}
|
|
212
256
|
onCheckedChange={(entry as DropdownMenuItemSpec).onCheckedChange}
|
|
257
|
+
onSelect={(entry as DropdownMenuItemSpec).onSelect}
|
|
258
|
+
closeOnSelect={(entry as DropdownMenuItemSpec).closeOnSelect}
|
|
213
259
|
disabled={(entry as DropdownMenuItemSpec).disabled}
|
|
214
260
|
disabledReason={(entry as DropdownMenuItemSpec).disabledReason}
|
|
215
261
|
shortcut={(entry as DropdownMenuItemSpec).shortcut}
|
|
@@ -224,6 +270,7 @@ function DropdownMenuRoot({
|
|
|
224
270
|
disabled={(entry as DropdownMenuItemSpec).disabled}
|
|
225
271
|
disabledReason={(entry as DropdownMenuItemSpec).disabledReason}
|
|
226
272
|
destructive={(entry as DropdownMenuItemSpec).destructive}
|
|
273
|
+
closeOnSelect={(entry as DropdownMenuItemSpec).closeOnSelect}
|
|
227
274
|
onSelect={(entry as DropdownMenuItemSpec).onSelect}
|
|
228
275
|
>
|
|
229
276
|
{(entry as DropdownMenuItemSpec).label}
|
|
@@ -268,13 +315,19 @@ const DropdownMenuTrigger = forwardRef<TamaguiElement, DropdownMenuTriggerProps>
|
|
|
268
315
|
const handleKeyDown = (e: globalThis.KeyboardEvent) => {
|
|
269
316
|
(onKeyDown as unknown as ((e: globalThis.KeyboardEvent) => void) | undefined)?.(e);
|
|
270
317
|
if (e.repeat) return;
|
|
271
|
-
if (e.key === "Enter" || e.key === " " || e.key === "ArrowDown") {
|
|
318
|
+
if (e.key === "Enter" || e.key === " " || e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
272
319
|
swallowNextKeyUp(e.key);
|
|
273
320
|
if (e.defaultPrevented) return; // composed trigger already activated
|
|
274
321
|
e.preventDefault();
|
|
275
322
|
if (e.key === "ArrowDown") {
|
|
323
|
+
ctx.pendingFocusRef.current = "first";
|
|
324
|
+
if (!ctx.open) ctx.setOpen(true);
|
|
325
|
+
} else if (e.key === "ArrowUp") {
|
|
326
|
+
// APG / macOS / Radix: Up opens onto the last item.
|
|
327
|
+
ctx.pendingFocusRef.current = "last";
|
|
276
328
|
if (!ctx.open) ctx.setOpen(true);
|
|
277
329
|
} else {
|
|
330
|
+
ctx.pendingFocusRef.current = "first";
|
|
278
331
|
ctx.setOpen(!ctx.open);
|
|
279
332
|
}
|
|
280
333
|
}
|
|
@@ -296,17 +349,38 @@ const DropdownMenuTrigger = forwardRef<TamaguiElement, DropdownMenuTriggerProps>
|
|
|
296
349
|
export interface DropdownMenuContentProps extends PopoverContentProps {
|
|
297
350
|
/** Max height before the item list scrolls. */
|
|
298
351
|
maxHeight?: number;
|
|
299
|
-
/**
|
|
352
|
+
/**
|
|
353
|
+
* Minimum menu width. Defaults to the measured trigger width
|
|
354
|
+
* (OVERLAY_ANCHOR_GAP rule: anchored menus match the trigger width
|
|
355
|
+
* exactly and may only grow wider for content, never narrower).
|
|
356
|
+
*/
|
|
300
357
|
minWidth?: number;
|
|
301
358
|
}
|
|
302
359
|
|
|
303
360
|
const DropdownMenuContent = forwardRef<TamaguiElement, DropdownMenuContentProps>(
|
|
304
|
-
function DropdownMenuContent({ children, maxHeight, minWidth
|
|
361
|
+
function DropdownMenuContent({ children, maxHeight, minWidth, ...props }, forwardedRef) {
|
|
305
362
|
const ctx = useDropdownMenuContext("Content");
|
|
306
363
|
const { knobProps } = useResolvedKnobs();
|
|
307
364
|
const innerRef = useRef<TamaguiElement | null>(null);
|
|
365
|
+
|
|
366
|
+
// OVERLAY_ANCHOR_GAP rule (theme/layoutTokens): the menu's min-width is
|
|
367
|
+
// the trigger's rendered width — measured on open, so the menu is never
|
|
368
|
+
// narrower than its trigger and content may still grow it wider.
|
|
369
|
+
const [triggerWidth, setTriggerWidth] = useState<number | undefined>(undefined);
|
|
370
|
+
useLayoutEffect(() => {
|
|
371
|
+
if (!isWeb || !ctx.open) return;
|
|
372
|
+
const node = ctx.triggerRef.current as unknown as HTMLElement | null;
|
|
373
|
+
if (node && typeof node.getBoundingClientRect === "function") {
|
|
374
|
+
// Ceil to whole CSS px: a fractional min-width could render the menu
|
|
375
|
+
// a hair narrower than the trigger; never-narrower wins over exact
|
|
376
|
+
// subpixels (and whole-px origins keep borders on device pixels).
|
|
377
|
+
setTriggerWidth(Math.ceil(node.getBoundingClientRect().width));
|
|
378
|
+
}
|
|
379
|
+
}, [ctx.open, ctx.triggerRef]);
|
|
380
|
+
const resolvedMinWidth = minWidth ?? triggerWidth;
|
|
308
381
|
const composedRef = useComposedRefs(innerRef, forwardedRef);
|
|
309
382
|
const typeahead = useRef({ buffer: "", at: 0 });
|
|
383
|
+
if (isWeb) ensureKeyboardModalityTracking();
|
|
310
384
|
|
|
311
385
|
const getItems = useCallback((): HTMLElement[] => {
|
|
312
386
|
const node = innerRef.current as unknown as HTMLElement | null;
|
|
@@ -320,13 +394,19 @@ const DropdownMenuContent = forwardRef<TamaguiElement, DropdownMenuContentProps>
|
|
|
320
394
|
el?.focus();
|
|
321
395
|
}, []);
|
|
322
396
|
|
|
323
|
-
// Menu pattern: focus lands on the first item when the menu opens
|
|
397
|
+
// Menu pattern: focus lands on the first item when the menu opens
|
|
398
|
+
// (last item when opened with ArrowUp — APG menu-button).
|
|
324
399
|
const handleOpenAutoFocus = useCallback(
|
|
325
400
|
(event: Event) => {
|
|
326
401
|
event.preventDefault();
|
|
327
|
-
|
|
402
|
+
const prefer = ctx.pendingFocusRef.current;
|
|
403
|
+
ctx.pendingFocusRef.current = "first";
|
|
404
|
+
requestAnimationFrame(() => {
|
|
405
|
+
const items = getItems();
|
|
406
|
+
focusItem(prefer === "last" ? items[items.length - 1] : items[0]);
|
|
407
|
+
});
|
|
328
408
|
},
|
|
329
|
-
[focusItem, getItems],
|
|
409
|
+
[ctx, focusItem, getItems],
|
|
330
410
|
);
|
|
331
411
|
|
|
332
412
|
// The Popover focus scope does not restore focus to the trigger on its
|
|
@@ -419,7 +499,7 @@ const DropdownMenuContent = forwardRef<TamaguiElement, DropdownMenuContentProps>
|
|
|
419
499
|
// row highlights to the radius knob.
|
|
420
500
|
padding={0}
|
|
421
501
|
overflow="hidden"
|
|
422
|
-
minWidth={
|
|
502
|
+
minWidth={resolvedMinWidth}
|
|
423
503
|
transition={knobProps.transition}
|
|
424
504
|
enterStyle={{ opacity: 0, y: -4, scale: 0.97 }}
|
|
425
505
|
exitStyle={{ opacity: 0, y: -4, scale: 0.97 }}
|
|
@@ -462,12 +542,18 @@ export interface DropdownMenuItemProps extends Omit<
|
|
|
462
542
|
/** Error-intent row (destructive action). */
|
|
463
543
|
destructive?: boolean;
|
|
464
544
|
onSelect?: () => void;
|
|
465
|
-
/**
|
|
545
|
+
/**
|
|
546
|
+
* Close the menu after selecting. Class default when unset: Item closes
|
|
547
|
+
* (LC-21 COMMIT), CheckboxItem stays open (COMPOSE); a menu-level
|
|
548
|
+
* `closeOnSelect` on the root overrides the class default.
|
|
549
|
+
*/
|
|
466
550
|
closeOnSelect?: boolean;
|
|
467
551
|
}
|
|
468
552
|
|
|
469
553
|
interface ItemBodyProps extends DropdownMenuItemProps {
|
|
470
554
|
leading?: ReactNode;
|
|
555
|
+
/** LC-21 class default applied when neither entry nor menu set a value. */
|
|
556
|
+
closeOnSelectDefault?: boolean;
|
|
471
557
|
}
|
|
472
558
|
|
|
473
559
|
const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
|
|
@@ -480,7 +566,8 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
|
|
|
480
566
|
disabledReason,
|
|
481
567
|
destructive = false,
|
|
482
568
|
onSelect,
|
|
483
|
-
closeOnSelect
|
|
569
|
+
closeOnSelect,
|
|
570
|
+
closeOnSelectDefault = true,
|
|
484
571
|
role = "menuitem",
|
|
485
572
|
leading,
|
|
486
573
|
...props
|
|
@@ -490,6 +577,9 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
|
|
|
490
577
|
const ctx = useDropdownMenuContext("Item");
|
|
491
578
|
const { knobProps } = useResolvedKnobs();
|
|
492
579
|
const theme = useTheme();
|
|
580
|
+
const [kbRing, setKbRing] = useState(false);
|
|
581
|
+
const [highlighted, setHighlighted] = useState(false);
|
|
582
|
+
const pointerIntentRef = useRef(false);
|
|
493
583
|
// DG-ST-03: disabled menu items explain inline or DEV-warn.
|
|
494
584
|
warnBareDisabled({
|
|
495
585
|
component: "DropdownMenu.Item",
|
|
@@ -503,16 +593,35 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
|
|
|
503
593
|
| string
|
|
504
594
|
| undefined;
|
|
505
595
|
|
|
596
|
+
// Entry-level closeOnSelect wins over the menu-level default, which wins
|
|
597
|
+
// over the LC-21 class default (Item COMMIT-closes, CheckboxItem
|
|
598
|
+
// COMPOSE-stays).
|
|
599
|
+
const shouldCloseOnSelect = closeOnSelect ?? ctx.closeOnSelect ?? closeOnSelectDefault;
|
|
600
|
+
|
|
506
601
|
const handleSelect = () => {
|
|
507
602
|
if (disabled) return;
|
|
508
603
|
onSelect?.();
|
|
509
|
-
if (
|
|
604
|
+
if (shouldCloseOnSelect) ctx.close();
|
|
510
605
|
};
|
|
511
606
|
|
|
512
|
-
// Destructive
|
|
513
|
-
//
|
|
607
|
+
// Destructive = red text/icon (Linear / Primer / macOS). Highlight fill
|
|
608
|
+
// may tint; the LC-71 ring stays the overlay `$outlineColor`, never the
|
|
609
|
+
// error-intent outline (which reads as a red border on the row).
|
|
514
610
|
const textColor = destructive ? "$red11" : componentColors.text.primary;
|
|
515
611
|
|
|
612
|
+
const highlightFill =
|
|
613
|
+
destructive && !disabled
|
|
614
|
+
? {
|
|
615
|
+
hoverStyle: { backgroundColor: "$red3" },
|
|
616
|
+
pressStyle: { backgroundColor: "$red4" },
|
|
617
|
+
}
|
|
618
|
+
: undefined;
|
|
619
|
+
const focusFill =
|
|
620
|
+
destructive && !disabled
|
|
621
|
+
? { backgroundColor: "$red3" as const }
|
|
622
|
+
: { backgroundColor: componentColors.interactive.hover };
|
|
623
|
+
const ring = kbRing ? keyboardFocusRingProps : { outlineWidth: 0 as const };
|
|
624
|
+
|
|
516
625
|
return (
|
|
517
626
|
<ItemRow
|
|
518
627
|
ref={forwardedRef}
|
|
@@ -522,24 +631,42 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
|
|
|
522
631
|
minHeight={knobProps.sizeToken}
|
|
523
632
|
transition={knobProps.transition}
|
|
524
633
|
onPress={handleSelect}
|
|
634
|
+
{...highlightFill}
|
|
635
|
+
{...(explainedDisable ? { paddingVertical: "$1.5" } : {})}
|
|
636
|
+
{...(props as any)}
|
|
525
637
|
{...(isWeb
|
|
526
638
|
? ({
|
|
527
639
|
tabIndex: -1,
|
|
528
640
|
[MENU_ITEM_ATTR]: "",
|
|
529
|
-
//
|
|
530
|
-
//
|
|
641
|
+
// Radix: pointer-move moves highlight so hover and keyboard
|
|
642
|
+
// never paint two rows at once. LC-71: ring only when the
|
|
643
|
+
// focus is keyboard-origin — pointer-move sets a local flag
|
|
644
|
+
// so wasKeyboardFocus() (still true until pointerdown) does
|
|
645
|
+
// not keep the ring after the mouse takes over.
|
|
646
|
+
onFocus: () => {
|
|
647
|
+
setHighlighted(true);
|
|
648
|
+
setKbRing(wasKeyboardFocus() && !pointerIntentRef.current);
|
|
649
|
+
pointerIntentRef.current = false;
|
|
650
|
+
},
|
|
651
|
+
onBlur: () => {
|
|
652
|
+
setHighlighted(false);
|
|
653
|
+
setKbRing(false);
|
|
654
|
+
},
|
|
655
|
+
onPointerMove: (e: { pointerType?: string; currentTarget: unknown }) => {
|
|
656
|
+
if (disabled) return;
|
|
657
|
+
if (e.pointerType && e.pointerType !== "mouse") return;
|
|
658
|
+
const node = e.currentTarget as HTMLElement;
|
|
659
|
+
if (document.activeElement === node) return;
|
|
660
|
+
pointerIntentRef.current = true;
|
|
661
|
+
node.focus();
|
|
662
|
+
},
|
|
663
|
+
"data-highlighted": highlighted ? "true" : undefined,
|
|
664
|
+
"data-mp-kb-ring": kbRing ? "true" : undefined,
|
|
531
665
|
} as any)
|
|
532
666
|
: {})}
|
|
533
|
-
{...(
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
pressStyle: { backgroundColor: "$red4" },
|
|
537
|
-
focusStyle: { backgroundColor: "$red3" },
|
|
538
|
-
focusVisibleStyle: { backgroundColor: "$red3" },
|
|
539
|
-
}
|
|
540
|
-
: {})}
|
|
541
|
-
{...(explainedDisable ? { paddingVertical: "$1.5" } : {})}
|
|
542
|
-
{...(props as any)}
|
|
667
|
+
{...(kbRing ? keyboardFocusRingProps : { outlineWidth: 0 })}
|
|
668
|
+
focusStyle={{ ...focusFill, ...ring }}
|
|
669
|
+
focusVisibleStyle={{ ...focusFill, ...ring }}
|
|
543
670
|
>
|
|
544
671
|
{leading}
|
|
545
672
|
{icon ? (
|
|
@@ -600,13 +727,6 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
|
|
|
600
727
|
|
|
601
728
|
const DropdownMenuItem = forwardRef<TamaguiElement, DropdownMenuItemProps>(
|
|
602
729
|
function DropdownMenuItem(props, ref) {
|
|
603
|
-
if (props.destructive) {
|
|
604
|
-
return (
|
|
605
|
-
<Intent name="error">
|
|
606
|
-
<DropdownMenuItemBody ref={ref} {...props} />
|
|
607
|
-
</Intent>
|
|
608
|
-
);
|
|
609
|
-
}
|
|
610
730
|
return <DropdownMenuItemBody ref={ref} {...props} />;
|
|
611
731
|
},
|
|
612
732
|
);
|
|
@@ -615,24 +735,30 @@ const DropdownMenuItem = forwardRef<TamaguiElement, DropdownMenuItemProps>(
|
|
|
615
735
|
|
|
616
736
|
export interface DropdownMenuCheckboxItemProps extends Omit<
|
|
617
737
|
DropdownMenuItemProps,
|
|
618
|
-
"destructive" | "icon"
|
|
738
|
+
"destructive" | "icon"
|
|
619
739
|
> {
|
|
620
740
|
checked: boolean;
|
|
741
|
+
/** Toggle callback (fires with the next checked state on every activation). */
|
|
621
742
|
onCheckedChange?: (checked: boolean) => void;
|
|
622
743
|
}
|
|
623
744
|
|
|
624
745
|
const DropdownMenuCheckboxItem = forwardRef<TamaguiElement, DropdownMenuCheckboxItemProps>(
|
|
625
|
-
function DropdownMenuCheckboxItem(
|
|
626
|
-
{ checked, onCheckedChange, closeOnSelect = false, ...props },
|
|
627
|
-
ref,
|
|
628
|
-
) {
|
|
746
|
+
function DropdownMenuCheckboxItem({ checked, onCheckedChange, onSelect, ...props }, ref) {
|
|
629
747
|
return (
|
|
630
748
|
<DropdownMenuItemBody
|
|
631
749
|
ref={ref}
|
|
632
750
|
role={"menuitemcheckbox" as any}
|
|
633
751
|
aria-checked={checked}
|
|
634
|
-
|
|
635
|
-
|
|
752
|
+
// LC-21 COMPOSE class default: toggles accumulate, so the menu stays
|
|
753
|
+
// open unless the entry or the menu opts into close-on-select
|
|
754
|
+
// (single-select radio-style navigation menus do).
|
|
755
|
+
closeOnSelectDefault={false}
|
|
756
|
+
// Both callbacks fire: the toggle contract AND the activation
|
|
757
|
+
// contract — a checked entry's onSelect must never be dropped.
|
|
758
|
+
onSelect={() => {
|
|
759
|
+
onCheckedChange?.(!checked);
|
|
760
|
+
onSelect?.();
|
|
761
|
+
}}
|
|
636
762
|
leading={
|
|
637
763
|
<View
|
|
638
764
|
width={18}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ErrorInfo, ReactNode } from "react";
|
|
2
2
|
import { Component } from "react";
|
|
3
|
-
import { useTranslation } from "
|
|
3
|
+
import { useTranslation } from "../shared/i18n";
|
|
4
4
|
import { Button } from "@multiplatform.one/forms";
|
|
5
5
|
import { H2, YStack } from "tamagui";
|
|
6
6
|
|
|
@@ -343,3 +343,44 @@ describe("Pagination selected mark (LC-05 / D-01)", () => {
|
|
|
343
343
|
expect(other.closest(".t_accent")).toBeNull();
|
|
344
344
|
});
|
|
345
345
|
});
|
|
346
|
+
|
|
347
|
+
describe("Pagination LC-71 RING-ANATOMY / 44px floor", () => {
|
|
348
|
+
it("every numbered page control paints at least 44×44", () => {
|
|
349
|
+
const { container } = renderWithProviders(
|
|
350
|
+
<Pagination variant="numbered" total={8} page={3} showFirstLast />,
|
|
351
|
+
);
|
|
352
|
+
const labels = [
|
|
353
|
+
"Go to first page",
|
|
354
|
+
"Go to previous page",
|
|
355
|
+
"Page 1",
|
|
356
|
+
"Page 3",
|
|
357
|
+
"Go to next page",
|
|
358
|
+
"Go to last page",
|
|
359
|
+
];
|
|
360
|
+
for (const label of labels) {
|
|
361
|
+
const el = byLabel(container, label) as HTMLElement;
|
|
362
|
+
expect(el, label).toBeTruthy();
|
|
363
|
+
const style = getComputedStyle(el);
|
|
364
|
+
expect(
|
|
365
|
+
parseFloat(style.minWidth) || parseFloat(style.width),
|
|
366
|
+
`${label} minWidth`,
|
|
367
|
+
).toBeGreaterThanOrEqual(44);
|
|
368
|
+
expect(
|
|
369
|
+
parseFloat(style.minHeight) || parseFloat(style.height),
|
|
370
|
+
`${label} minHeight`,
|
|
371
|
+
).toBeGreaterThanOrEqual(44);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
it("selected page is fill, not a ring, and unselected siblings have no outline", () => {
|
|
376
|
+
const { container } = renderWithProviders(<Pagination variant="numbered" total={5} page={3} />);
|
|
377
|
+
const current = container.querySelector('[aria-current="page"]') as HTMLElement;
|
|
378
|
+
const other = byLabel(container, "Page 2") as HTMLElement;
|
|
379
|
+
expect(current.closest(".t_accent")).toBeTruthy();
|
|
380
|
+
expect(other.closest(".t_accent")).toBeNull();
|
|
381
|
+
const currentStyle = getComputedStyle(current);
|
|
382
|
+
const otherStyle = getComputedStyle(other);
|
|
383
|
+
expect(parseFloat(currentStyle.outlineWidth) || 0).toBe(0);
|
|
384
|
+
expect(parseFloat(otherStyle.outlineWidth) || 0).toBe(0);
|
|
385
|
+
});
|
|
386
|
+
});
|
package/src/Pagination.tsx
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FOCUS_VISIBLE_RING,
|
|
3
|
+
ensureKeyboardModalityTracking,
|
|
4
|
+
pressTargetStyle,
|
|
5
|
+
useResolvedKnobs,
|
|
6
|
+
wasKeyboardFocus,
|
|
7
|
+
} from "@multiplatform.one/theme";
|
|
2
8
|
import {
|
|
3
9
|
ArrowLeftIcon,
|
|
4
10
|
ArrowRightIcon,
|
|
@@ -10,9 +16,9 @@ import {
|
|
|
10
16
|
} from "@phosphor-icons/react";
|
|
11
17
|
import type React from "react";
|
|
12
18
|
import { useCallback, useState } from "react";
|
|
13
|
-
import { useTranslation } from "
|
|
19
|
+
import { useTranslation } from "./shared/i18n";
|
|
14
20
|
import { Button } from "@multiplatform.one/forms";
|
|
15
|
-
import { Text, XStack, type XStackProps } from "tamagui";
|
|
21
|
+
import { Text, XStack, isWeb, type XStackProps } from "tamagui";
|
|
16
22
|
import { DotIndicator } from "./DotIndicator";
|
|
17
23
|
import { componentColors } from "./componentColors";
|
|
18
24
|
import { useDirection } from "./hooks/useDirection";
|
|
@@ -78,6 +84,11 @@ const stripSteps = {
|
|
|
78
84
|
large: { mark: "$1.5", active: "$3" },
|
|
79
85
|
} as const;
|
|
80
86
|
|
|
87
|
+
/** LC-54 / LC-71: every page control paints at least 44×44. */
|
|
88
|
+
const pageControlFloor = pressTargetStyle();
|
|
89
|
+
|
|
90
|
+
const restRing = { outlineWidth: 0 } as const;
|
|
91
|
+
|
|
81
92
|
export interface PaginationProps extends Omit<XStackProps, "children" | "onChange"> {
|
|
82
93
|
/** Total number of pages/steps */
|
|
83
94
|
total: number;
|
|
@@ -147,6 +158,10 @@ export function Pagination({
|
|
|
147
158
|
const { knobProps } = useResolvedKnobs();
|
|
148
159
|
// LC-25: discrete page jumps tween indicator geometry/color; no continuous drag here.
|
|
149
160
|
const motionTransition = (knobProps.transition as string | undefined) || "quick";
|
|
161
|
+
if (isWeb) ensureKeyboardModalityTracking();
|
|
162
|
+
// LC-71: ring rides the focused page control only, keyboard-origin, never
|
|
163
|
+
// mouse. Selected is fill (below), not this outline channel.
|
|
164
|
+
const [kbFocus, setKbFocus] = useState<string | null>(null);
|
|
150
165
|
|
|
151
166
|
// Directional glyphs encode direction-of-travel (Axiom 15), so they must
|
|
152
167
|
// point toward their targets in RTL too. Mechanism: swap the paired glyph
|
|
@@ -197,6 +212,27 @@ export function Pagination({
|
|
|
197
212
|
}
|
|
198
213
|
}) as unknown as () => void;
|
|
199
214
|
|
|
215
|
+
const pageControlProps = (id: string) => ({
|
|
216
|
+
...pageControlFloor,
|
|
217
|
+
elevation: 0,
|
|
218
|
+
borderWidth: 0,
|
|
219
|
+
borderColor: "transparent",
|
|
220
|
+
shadowColor: "transparent",
|
|
221
|
+
focusStyle: restRing,
|
|
222
|
+
focusVisibleStyle: restRing,
|
|
223
|
+
...(isWeb
|
|
224
|
+
? {
|
|
225
|
+
onFocus: () => {
|
|
226
|
+
if (wasKeyboardFocus()) setKbFocus(id);
|
|
227
|
+
},
|
|
228
|
+
onBlur: () => {
|
|
229
|
+
setKbFocus((prev) => (prev === id ? null : prev));
|
|
230
|
+
},
|
|
231
|
+
}
|
|
232
|
+
: undefined),
|
|
233
|
+
...(kbFocus === id ? FOCUS_VISIBLE_RING : restRing),
|
|
234
|
+
});
|
|
235
|
+
|
|
200
236
|
const isNumbered = variant === "numbered";
|
|
201
237
|
|
|
202
238
|
// The two idioms differ in which glyphs the controls take, whether the
|
|
@@ -246,19 +282,20 @@ export function Pagination({
|
|
|
246
282
|
{isNumbered && showFirstLast && (
|
|
247
283
|
<Button
|
|
248
284
|
size={knobProps.sizeToken}
|
|
249
|
-
|
|
285
|
+
chromeless
|
|
250
286
|
icon={FirstIcon}
|
|
251
287
|
onPress={() => goTo(0)}
|
|
252
288
|
disabled={!canPrev}
|
|
253
289
|
aria-label={t("Go to first page")}
|
|
254
290
|
onKeyDown={activateOnEnterSpace(() => goTo(0), canPrev)}
|
|
291
|
+
{...pageControlProps("first")}
|
|
255
292
|
/>
|
|
256
293
|
)}
|
|
257
294
|
|
|
258
295
|
<Button
|
|
259
296
|
size={knobProps.sizeToken}
|
|
260
297
|
circular={!isNumbered}
|
|
261
|
-
|
|
298
|
+
chromeless
|
|
262
299
|
icon={isNumbered ? PrevIcon : PrevArrowIcon}
|
|
263
300
|
onPress={handlePrev}
|
|
264
301
|
disabled={!canPrev}
|
|
@@ -266,6 +303,7 @@ export function Pagination({
|
|
|
266
303
|
// legacy opacity 0.3 dim stacked on top of it (double-dim).
|
|
267
304
|
aria-label={isNumbered ? t("Go to previous page") : t("Previous page")}
|
|
268
305
|
onKeyDown={activateOnEnterSpace(handlePrev, canPrev)}
|
|
306
|
+
{...pageControlProps("prev")}
|
|
269
307
|
/>
|
|
270
308
|
|
|
271
309
|
{isNumbered ? (
|
|
@@ -279,6 +317,7 @@ export function Pagination({
|
|
|
279
317
|
userSelect="none"
|
|
280
318
|
textAlign="center"
|
|
281
319
|
minWidth="$2"
|
|
320
|
+
minHeight={pageControlFloor.minHeight}
|
|
282
321
|
{...knobProps.body}
|
|
283
322
|
color={componentColors.text.muted}
|
|
284
323
|
>
|
|
@@ -291,7 +330,6 @@ export function Pagination({
|
|
|
291
330
|
<Button
|
|
292
331
|
key={item}
|
|
293
332
|
size={knobProps.sizeToken}
|
|
294
|
-
minWidth={knobProps.sizeToken}
|
|
295
333
|
paddingHorizontal="$2"
|
|
296
334
|
accent={isCurrent}
|
|
297
335
|
chromeless={!isCurrent}
|
|
@@ -300,6 +338,7 @@ export function Pagination({
|
|
|
300
338
|
aria-label={withInterp(t("Page {{number}}"), { number: item })}
|
|
301
339
|
aria-current={isCurrent ? "page" : undefined}
|
|
302
340
|
onKeyDown={activateOnEnterSpace(() => goTo(item - 1), !disabled)}
|
|
341
|
+
{...pageControlProps(`page-${item}`)}
|
|
303
342
|
>
|
|
304
343
|
{String(item)}
|
|
305
344
|
</Button>
|
|
@@ -332,24 +371,26 @@ export function Pagination({
|
|
|
332
371
|
<Button
|
|
333
372
|
size={knobProps.sizeToken}
|
|
334
373
|
circular={!isNumbered}
|
|
335
|
-
|
|
374
|
+
chromeless={!submits}
|
|
336
375
|
theme={submits ? "active" : undefined}
|
|
337
376
|
icon={isNumbered ? NextIcon : submits ? CheckIcon : NextArrowIcon}
|
|
338
377
|
onPress={handleNext}
|
|
339
378
|
disabled={!canNext}
|
|
340
379
|
aria-label={isNumbered ? t("Go to next page") : submits ? t("Submit") : t("Next page")}
|
|
341
380
|
onKeyDown={activateOnEnterSpace(handleNext, canNext)}
|
|
381
|
+
{...pageControlProps(submits ? "submit" : "next")}
|
|
342
382
|
/>
|
|
343
383
|
|
|
344
384
|
{isNumbered && showFirstLast && (
|
|
345
385
|
<Button
|
|
346
386
|
size={knobProps.sizeToken}
|
|
347
|
-
|
|
387
|
+
chromeless
|
|
348
388
|
icon={LastIcon}
|
|
349
389
|
onPress={() => goTo(total - 1)}
|
|
350
390
|
disabled={!canNext}
|
|
351
391
|
aria-label={t("Go to last page")}
|
|
352
392
|
onKeyDown={activateOnEnterSpace(() => goTo(total - 1), canNext)}
|
|
393
|
+
{...pageControlProps("last")}
|
|
353
394
|
/>
|
|
354
395
|
)}
|
|
355
396
|
|
|
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
// Catalog Button (G-15 story honesty / LC-18, UX-P06).
|
|
4
4
|
import { Button } from "@multiplatform.one/forms";
|
|
5
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
5
|
+
import { OVERLAY_ANCHOR_GAP, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
6
6
|
import { Paragraph, Popover, SizableText, YStack } from "tamagui";
|
|
7
7
|
import { PopoverContent } from "./surfaces";
|
|
8
8
|
|
|
@@ -19,7 +19,9 @@ function PopoverHarness({
|
|
|
19
19
|
const [open, setOpen] = useState(startOpen);
|
|
20
20
|
return (
|
|
21
21
|
<YStack minHeight={320} alignItems="center" justifyContent="center">
|
|
22
|
-
|
|
22
|
+
{/* OVERLAY_ANCHOR_GAP rule: popovers keep the shared anchored-overlay
|
|
23
|
+
gap between trigger edge and content (offset lives on the root). */}
|
|
24
|
+
<Popover open={open} onOpenChange={setOpen} placement={placement} offset={OVERLAY_ANCHOR_GAP}>
|
|
23
25
|
<Popover.Trigger asChild>
|
|
24
26
|
<Button>Toggle popover</Button>
|
|
25
27
|
</Popover.Trigger>
|