@multiplatform.one/components 6.7.0 → 7.1.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 +18 -18
- 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
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { act, fireEvent } from "@testing-library/react";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Text } from "tamagui";
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { AnimateHeight } from "./index";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The shared test setup ships a ResizeObserver mock that never fires, so by
|
|
10
|
+
* default AnimateHeight has no measurement and takes its instant paths (the
|
|
11
|
+
* semantics the Accordion specs rely on). Tests that need the animated paths
|
|
12
|
+
* install this controllable observer plus a fixed getBoundingClientRect.
|
|
13
|
+
*/
|
|
14
|
+
class FiringResizeObserver {
|
|
15
|
+
static instances: FiringResizeObserver[] = [];
|
|
16
|
+
callback: ResizeObserverCallback;
|
|
17
|
+
constructor(callback: ResizeObserverCallback) {
|
|
18
|
+
this.callback = callback;
|
|
19
|
+
FiringResizeObserver.instances.push(this);
|
|
20
|
+
}
|
|
21
|
+
observe() {
|
|
22
|
+
// real observers fire an initial measurement on observe
|
|
23
|
+
this.callback([], this as unknown as ResizeObserver);
|
|
24
|
+
}
|
|
25
|
+
unobserve() {}
|
|
26
|
+
disconnect() {}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function Harness({ initialOpen }: { initialOpen: boolean }) {
|
|
30
|
+
const [open, setOpen] = useState(initialOpen);
|
|
31
|
+
return (
|
|
32
|
+
<>
|
|
33
|
+
<button data-testid="toggle" type="button" onClick={() => setOpen((v) => !v)}>
|
|
34
|
+
toggle
|
|
35
|
+
</button>
|
|
36
|
+
<AnimateHeight open={open} testID="animate-height-outer">
|
|
37
|
+
<Text>Collapsible body</Text>
|
|
38
|
+
</AnimateHeight>
|
|
39
|
+
</>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const originalResizeObserver = window.ResizeObserver;
|
|
44
|
+
|
|
45
|
+
function installFiringObserver(height: number) {
|
|
46
|
+
FiringResizeObserver.instances = [];
|
|
47
|
+
window.ResizeObserver = FiringResizeObserver as unknown as typeof ResizeObserver;
|
|
48
|
+
vi.spyOn(Element.prototype, "getBoundingClientRect").mockReturnValue({
|
|
49
|
+
height,
|
|
50
|
+
width: 260,
|
|
51
|
+
x: 0,
|
|
52
|
+
y: 0,
|
|
53
|
+
top: 0,
|
|
54
|
+
left: 0,
|
|
55
|
+
right: 260,
|
|
56
|
+
bottom: height,
|
|
57
|
+
toJSON: () => ({}),
|
|
58
|
+
} as DOMRect);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
describe("AnimateHeight", () => {
|
|
62
|
+
beforeEach(() => {
|
|
63
|
+
vi.useFakeTimers();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
afterEach(() => {
|
|
67
|
+
vi.useRealTimers();
|
|
68
|
+
vi.restoreAllMocks();
|
|
69
|
+
window.ResizeObserver = originalResizeObserver;
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("follower mode always renders children", () => {
|
|
73
|
+
const result = renderWithProviders(
|
|
74
|
+
<AnimateHeight>
|
|
75
|
+
<Text>Follower body</Text>
|
|
76
|
+
</AnimateHeight>,
|
|
77
|
+
);
|
|
78
|
+
expect(result.container.textContent).toContain("Follower body");
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("collapsible closed at rest renders no children", () => {
|
|
82
|
+
const result = renderWithProviders(<Harness initialOpen={false} />);
|
|
83
|
+
expect(result.container.textContent).not.toContain("Collapsible body");
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("mounts children in the same commit open flips true", () => {
|
|
87
|
+
const result = renderWithProviders(<Harness initialOpen={false} />);
|
|
88
|
+
fireEvent.click(result.getByTestId("toggle"));
|
|
89
|
+
expect(result.container.textContent).toContain("Collapsible body");
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("closing without a measurement unmounts synchronously", () => {
|
|
93
|
+
// default never-firing observer mock: nothing can tween
|
|
94
|
+
const result = renderWithProviders(<Harness initialOpen={true} />);
|
|
95
|
+
expect(result.container.textContent).toContain("Collapsible body");
|
|
96
|
+
fireEvent.click(result.getByTestId("toggle"));
|
|
97
|
+
expect(result.container.textContent).not.toContain("Collapsible body");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("closing with a real measurement keeps children through the exit tween, then unmounts", () => {
|
|
101
|
+
installFiringObserver(120);
|
|
102
|
+
const result = renderWithProviders(<Harness initialOpen={true} />);
|
|
103
|
+
expect(result.container.textContent).toContain("Collapsible body");
|
|
104
|
+
|
|
105
|
+
fireEvent.click(result.getByTestId("toggle"));
|
|
106
|
+
// exit tween in flight — children must stay mounted
|
|
107
|
+
expect(result.container.textContent).toContain("Collapsible body");
|
|
108
|
+
|
|
109
|
+
// knob default transition is "quick" — settle table 450ms + buffer
|
|
110
|
+
act(() => {
|
|
111
|
+
vi.advanceTimersByTime(600);
|
|
112
|
+
});
|
|
113
|
+
expect(result.container.textContent).not.toContain("Collapsible body");
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it("expanding from closed tweens 0 → measured height", () => {
|
|
117
|
+
installFiringObserver(120);
|
|
118
|
+
const result = renderWithProviders(<Harness initialOpen={false} />);
|
|
119
|
+
fireEvent.click(result.getByTestId("toggle"));
|
|
120
|
+
// double rAF lands the measured target (fake timers tick rAF at 16ms)
|
|
121
|
+
act(() => {
|
|
122
|
+
vi.advanceTimersByTime(50);
|
|
123
|
+
});
|
|
124
|
+
act(() => {
|
|
125
|
+
vi.advanceTimersByTime(50);
|
|
126
|
+
});
|
|
127
|
+
const region = result.container.querySelector('[data-testid="animate-height-outer"]');
|
|
128
|
+
// outer carries the measured numeric height once the target lands —
|
|
129
|
+
// tamagui emits it as an atomic height class in this environment
|
|
130
|
+
expect((region as HTMLElement | null)?.className).toContain("_h-120px");
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("reduced motion unmounts immediately on close even with a measurement", () => {
|
|
134
|
+
installFiringObserver(120);
|
|
135
|
+
vi.spyOn(window, "matchMedia").mockImplementation(
|
|
136
|
+
(query: string) =>
|
|
137
|
+
({
|
|
138
|
+
matches: query.includes("prefers-reduced-motion"),
|
|
139
|
+
media: query,
|
|
140
|
+
onchange: null,
|
|
141
|
+
addEventListener: () => {},
|
|
142
|
+
removeEventListener: () => {},
|
|
143
|
+
addListener: () => {},
|
|
144
|
+
removeListener: () => {},
|
|
145
|
+
dispatchEvent: () => false,
|
|
146
|
+
}) as unknown as MediaQueryList,
|
|
147
|
+
);
|
|
148
|
+
const result = renderWithProviders(<Harness initialOpen={true} />);
|
|
149
|
+
fireEvent.click(result.getByTestId("toggle"));
|
|
150
|
+
expect(result.container.textContent).not.toContain("Collapsible body");
|
|
151
|
+
});
|
|
152
|
+
});
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { isWeb } from "@multiplatform.one/platform";
|
|
2
|
+
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
3
|
+
import type { ReactNode } from "react";
|
|
4
|
+
import { forwardRef, useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
5
|
+
import type { LayoutChangeEvent } from "react-native";
|
|
6
|
+
// tamagui 2.0.0-rc dropped the StackProps alias; YStackProps is the same shape.
|
|
7
|
+
import type { TamaguiElement, TransitionProp, YStackProps as StackProps } from "tamagui";
|
|
8
|
+
import { View } from "tamagui";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* AnimateHeight — the house auto-height primitive.
|
|
12
|
+
*
|
|
13
|
+
* CSS cannot transition to `height: auto` — intrinsic (content-driven) height
|
|
14
|
+
* changes snap no matter what `transition` is set, because height never
|
|
15
|
+
* appears as an interpolable value. This container measures its content
|
|
16
|
+
* (ResizeObserver on web, onLayout on native) and drives a NUMERIC `height`
|
|
17
|
+
* through the house `transition` token. The web css driver tweens it; the RN
|
|
18
|
+
* driver applies layout props directly (Axiom 4 native constraint), so native
|
|
19
|
+
* lands correct heights without a decorative tween — no worse than before,
|
|
20
|
+
* while mount/unmount sequencing still works on both platforms.
|
|
21
|
+
*
|
|
22
|
+
* Two modes:
|
|
23
|
+
* - follower (no `open` prop): always mounted; height tracks the content's
|
|
24
|
+
* intrinsic height, so content that grows or shrinks while visible tweens
|
|
25
|
+
* instead of snapping.
|
|
26
|
+
* - collapsible (`open: boolean`): `false` tweens to 0 and unmounts children
|
|
27
|
+
* once the collapse settles (immediately when nothing can tween, e.g.
|
|
28
|
+
* reduced motion or no measurement yet); `true` remounts children and
|
|
29
|
+
* tweens 0 → measured height, then keeps following content changes.
|
|
30
|
+
*
|
|
31
|
+
* Reduced motion is respected CONDITIONALLY: the transition resolves through
|
|
32
|
+
* the knob system (`useResolvedKnobs`), which is `undefined` under OS
|
|
33
|
+
* `prefers-reduced-motion` or `animation="none"` — heights then apply
|
|
34
|
+
* instantly, with no decorative tween, but state changes still land.
|
|
35
|
+
*
|
|
36
|
+
* Padding belongs INSIDE children (or on a wrapper around this component):
|
|
37
|
+
* the measured box is the children's wrapper, so padding on AnimateHeight
|
|
38
|
+
* itself would be excluded from the animated height.
|
|
39
|
+
*/
|
|
40
|
+
export interface AnimateHeightProps extends Omit<StackProps, "height" | "children"> {
|
|
41
|
+
/**
|
|
42
|
+
* Collapsible mode. Omit entirely for follower mode (height always tracks
|
|
43
|
+
* content). `false` collapses to 0 and unmounts children at rest.
|
|
44
|
+
*/
|
|
45
|
+
open?: boolean;
|
|
46
|
+
children?: ReactNode;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Conservative settle time (ms) per house transition token, for unmounting
|
|
51
|
+
* after the collapse tween. Keep in sync with the token vocabulary in
|
|
52
|
+
* public/theme/src/theme/animations (css timings AND spring physics): values
|
|
53
|
+
* cover the native spring tails, which outlast the fixed css durations — on
|
|
54
|
+
* web the box is already clipped to 0 by then, so the later unmount is
|
|
55
|
+
* invisible.
|
|
56
|
+
*/
|
|
57
|
+
const settleTable: Record<string, number> = {
|
|
58
|
+
snappy: 300,
|
|
59
|
+
quick: 450,
|
|
60
|
+
bouncy: 800,
|
|
61
|
+
medium: 600,
|
|
62
|
+
tooltip: 700,
|
|
63
|
+
gentle: 900,
|
|
64
|
+
slow: 1100,
|
|
65
|
+
lazy: 1300,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Settle time before finalizing (unmounting / releasing a clamp) — token
|
|
70
|
+
* settle + buffer. Exported for siblings that sequence work after a height
|
|
71
|
+
* tween (e.g. CodeBlock's reveal releases its maxHeight clamp on settle).
|
|
72
|
+
*/
|
|
73
|
+
export function settleMs(transition: TransitionProp | undefined): number {
|
|
74
|
+
if (!transition) return 0;
|
|
75
|
+
const ms = typeof transition === "string" ? settleTable[transition] : undefined;
|
|
76
|
+
// Non-string TransitionProp shapes (arrays/objects) fall back like an
|
|
77
|
+
// unknown token name.
|
|
78
|
+
return (ms ?? 600) + 80;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export const AnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
82
|
+
function AnimateHeight({ open, children, transition: transitionProp, ...props }, ref) {
|
|
83
|
+
const { knobProps } = useResolvedKnobs();
|
|
84
|
+
// knob transition is undefined under reduced motion / animation="none"
|
|
85
|
+
const transition = transitionProp ?? knobProps.transition;
|
|
86
|
+
const collapsible = open !== undefined;
|
|
87
|
+
|
|
88
|
+
// null = natural (auto) height: initial open/follower render before the
|
|
89
|
+
// first measurement, so there is never a flash of collapsed content.
|
|
90
|
+
const [displayHeight, setDisplayHeight] = useState<number | null>(
|
|
91
|
+
collapsible && !open ? 0 : null,
|
|
92
|
+
);
|
|
93
|
+
// Children stay mounted through the exit tween, then unmount at rest.
|
|
94
|
+
const [exiting, setExiting] = useState(false);
|
|
95
|
+
const [prevOpen, setPrevOpen] = useState(open);
|
|
96
|
+
|
|
97
|
+
const measuredRef = useRef<number | null>(null);
|
|
98
|
+
// Set on closed → open: hold height 0 until the first measurement so the
|
|
99
|
+
// expand tweens 0 → px instead of snapping to auto.
|
|
100
|
+
const openingRef = useRef(false);
|
|
101
|
+
const unmountTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
102
|
+
const rafRef = useRef<number | null>(null);
|
|
103
|
+
const innerRef = useRef<TamaguiElement | null>(null);
|
|
104
|
+
|
|
105
|
+
// Adjust state during render (React's usePrevious pattern) so children
|
|
106
|
+
// mount in the SAME commit `open` flips true, and stay mounted for the
|
|
107
|
+
// exit tween when it flips false.
|
|
108
|
+
if (collapsible && open !== prevOpen) {
|
|
109
|
+
setPrevOpen(open);
|
|
110
|
+
if (open) {
|
|
111
|
+
// Hold at 0 until measurement only when children were unmounted (at
|
|
112
|
+
// rest). Re-opening mid-exit keeps the existing measurement — the
|
|
113
|
+
// observer will not re-fire for unchanged content — so the effect
|
|
114
|
+
// below retargets it directly and the tween reverses in place.
|
|
115
|
+
openingRef.current = !exiting;
|
|
116
|
+
if (exiting) setExiting(false);
|
|
117
|
+
} else {
|
|
118
|
+
openingRef.current = false;
|
|
119
|
+
setExiting(true);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const shouldRenderChildren = !collapsible || open || exiting;
|
|
124
|
+
const atRestClosed = collapsible && !open && !exiting;
|
|
125
|
+
|
|
126
|
+
const clearPending = useCallback(() => {
|
|
127
|
+
if (unmountTimerRef.current != null) {
|
|
128
|
+
clearTimeout(unmountTimerRef.current);
|
|
129
|
+
unmountTimerRef.current = null;
|
|
130
|
+
}
|
|
131
|
+
if (rafRef.current != null && typeof cancelAnimationFrame === "function") {
|
|
132
|
+
cancelAnimationFrame(rafRef.current);
|
|
133
|
+
rafRef.current = null;
|
|
134
|
+
}
|
|
135
|
+
}, []);
|
|
136
|
+
|
|
137
|
+
const handleMeasured = useCallback(
|
|
138
|
+
(height: number) => {
|
|
139
|
+
measuredRef.current = height;
|
|
140
|
+
// Closing (or closed): the target stays 0 — ignore content measures.
|
|
141
|
+
if (collapsible && !open) return;
|
|
142
|
+
if (openingRef.current) {
|
|
143
|
+
openingRef.current = false;
|
|
144
|
+
// Double rAF: guarantee the browser paints the height-0 frame
|
|
145
|
+
// before the target lands, or the 0 → px tween never runs.
|
|
146
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
147
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
148
|
+
rafRef.current = null;
|
|
149
|
+
setDisplayHeight(height);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
setDisplayHeight(height);
|
|
155
|
+
},
|
|
156
|
+
[collapsible, open],
|
|
157
|
+
);
|
|
158
|
+
const handleMeasuredRef = useRef(handleMeasured);
|
|
159
|
+
handleMeasuredRef.current = handleMeasured;
|
|
160
|
+
const transitionRef = useRef(transition);
|
|
161
|
+
transitionRef.current = transition;
|
|
162
|
+
|
|
163
|
+
// Web: ResizeObserver on the content wrapper — fires on observe (initial
|
|
164
|
+
// measure) and on any intrinsic size change while mounted.
|
|
165
|
+
useLayoutEffect(() => {
|
|
166
|
+
if (!isWeb || !shouldRenderChildren) return;
|
|
167
|
+
const node = innerRef.current as unknown as HTMLElement | null;
|
|
168
|
+
if (!node || typeof ResizeObserver === "undefined") return;
|
|
169
|
+
const observer = new ResizeObserver(() => {
|
|
170
|
+
// getBoundingClientRect keeps fractional text heights exact.
|
|
171
|
+
handleMeasuredRef.current(node.getBoundingClientRect().height);
|
|
172
|
+
});
|
|
173
|
+
observer.observe(node);
|
|
174
|
+
return () => observer.disconnect();
|
|
175
|
+
}, [shouldRenderChildren]);
|
|
176
|
+
|
|
177
|
+
// Native: onLayout on the content wrapper is the measurement source.
|
|
178
|
+
const onInnerLayout = useCallback((event: LayoutChangeEvent) => {
|
|
179
|
+
handleMeasuredRef.current(event.nativeEvent.layout.height);
|
|
180
|
+
}, []);
|
|
181
|
+
|
|
182
|
+
// Drive the open/close targets after commit.
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
if (!collapsible) return;
|
|
185
|
+
clearPending();
|
|
186
|
+
if (open) {
|
|
187
|
+
// Opening from closed holds 0 until measurement (openingRef); if a
|
|
188
|
+
// measurement already exists (close interrupted mid-tween), retarget
|
|
189
|
+
// it immediately so the tween reverses from wherever it is.
|
|
190
|
+
if (!openingRef.current && measuredRef.current != null) {
|
|
191
|
+
setDisplayHeight(measuredRef.current);
|
|
192
|
+
}
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Closing: tween px → 0, then unmount at rest. When nothing can tween
|
|
196
|
+
// (no transition token — reduced motion — or no real measurement, as in
|
|
197
|
+
// non-layout test environments), finalize immediately. The transition is
|
|
198
|
+
// read through a ref at close time only — mid-tween knob changes should
|
|
199
|
+
// not restart the exit timer.
|
|
200
|
+
setDisplayHeight(0);
|
|
201
|
+
const closeTransition = transitionRef.current;
|
|
202
|
+
const canTween = Boolean(closeTransition) && (measuredRef.current ?? 0) > 0;
|
|
203
|
+
if (canTween) {
|
|
204
|
+
unmountTimerRef.current = setTimeout(() => {
|
|
205
|
+
unmountTimerRef.current = null;
|
|
206
|
+
setExiting(false);
|
|
207
|
+
}, settleMs(closeTransition));
|
|
208
|
+
} else {
|
|
209
|
+
setExiting(false);
|
|
210
|
+
}
|
|
211
|
+
}, [collapsible, open, clearPending]);
|
|
212
|
+
|
|
213
|
+
useEffect(() => clearPending, [clearPending]);
|
|
214
|
+
|
|
215
|
+
return (
|
|
216
|
+
<View
|
|
217
|
+
ref={ref}
|
|
218
|
+
overflow="hidden"
|
|
219
|
+
{...(displayHeight != null ? { height: displayHeight } : {})}
|
|
220
|
+
{...(atRestClosed ? { display: "none" as const } : {})}
|
|
221
|
+
{...(transition ? { transition } : {})}
|
|
222
|
+
{...props}
|
|
223
|
+
>
|
|
224
|
+
{shouldRenderChildren ? (
|
|
225
|
+
<View
|
|
226
|
+
ref={innerRef}
|
|
227
|
+
// keep natural height inside the clipped, height-driven outer
|
|
228
|
+
flexShrink={0}
|
|
229
|
+
{...(!isWeb ? { onLayout: onInnerLayout } : {})}
|
|
230
|
+
>
|
|
231
|
+
{children}
|
|
232
|
+
</View>
|
|
233
|
+
) : null}
|
|
234
|
+
</View>
|
|
235
|
+
);
|
|
236
|
+
},
|
|
237
|
+
);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { fireEvent } from "@testing-library/react";
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { Avatar, fallbackTone, fallbackToneIndex, getInitials } from "./index";
|
|
4
5
|
|
|
5
6
|
describe("getInitials", () => {
|
|
6
7
|
it("takes first letters of two words", () => {
|
|
@@ -20,7 +21,21 @@ describe("getInitials", () => {
|
|
|
20
21
|
});
|
|
21
22
|
});
|
|
22
23
|
|
|
24
|
+
describe("fallbackTone", () => {
|
|
25
|
+
it("is stable for the same seed", () => {
|
|
26
|
+
expect(fallbackToneIndex("Ada Lovelace")).toBe(fallbackToneIndex("Ada Lovelace"));
|
|
27
|
+
expect(fallbackTone("Ada Lovelace")).toEqual(fallbackTone("Ada Lovelace"));
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("diverges for different names", () => {
|
|
31
|
+
expect(fallbackTone("Ada Lovelace")?.bg).not.toBe(fallbackTone("Grace Hopper")?.bg);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
23
35
|
describe("Avatar", () => {
|
|
36
|
+
const pxOf = (container: HTMLElement) =>
|
|
37
|
+
Number(container.querySelector("[data-avatar-px]")?.getAttribute("data-avatar-px"));
|
|
38
|
+
|
|
24
39
|
it("renders initials from name", () => {
|
|
25
40
|
const { container } = renderWithProviders(<Avatar name="Ada Lovelace" />);
|
|
26
41
|
expect(container.textContent).toContain("AL");
|
|
@@ -42,6 +57,62 @@ describe("Avatar", () => {
|
|
|
42
57
|
);
|
|
43
58
|
expect(container.textContent).toContain("OK");
|
|
44
59
|
});
|
|
60
|
+
|
|
61
|
+
it("keeps size, density, and nested on separate channels", () => {
|
|
62
|
+
const page = renderWithProviders(<Avatar name="Ada Lovelace" />);
|
|
63
|
+
const nested = renderWithProviders(<Avatar name="Ada Lovelace" nested />);
|
|
64
|
+
const compact = renderWithProviders(<Avatar name="Ada Lovelace" compact />);
|
|
65
|
+
expect(pxOf(page.container)).toBe(36);
|
|
66
|
+
expect(pxOf(nested.container)).toBe(32);
|
|
67
|
+
expect(pxOf(compact.container)).toBe(28);
|
|
68
|
+
expect(
|
|
69
|
+
nested.container.querySelector("[data-avatar-nested]")?.getAttribute("data-avatar-nested"),
|
|
70
|
+
).toBe("true");
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("lets an explicit size token eject the recipe", () => {
|
|
74
|
+
const { container } = renderWithProviders(<Avatar name="Ada Lovelace" size="$5" />);
|
|
75
|
+
expect(pxOf(container)).toBe(52);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("restores the 44px floor with hitSlop when painted below it", () => {
|
|
79
|
+
const onPress = vi.fn();
|
|
80
|
+
const { container } = renderWithProviders(
|
|
81
|
+
<Avatar name="Ada Lovelace" nested onPress={onPress} />,
|
|
82
|
+
);
|
|
83
|
+
const el = container.querySelector("[data-avatar-interactive]");
|
|
84
|
+
expect(el?.getAttribute("data-avatar-px")).toBe("32");
|
|
85
|
+
expect(el?.getAttribute("data-avatar-hitslop")).toBe("6");
|
|
86
|
+
fireEvent.click(el as Element);
|
|
87
|
+
expect(onPress).toHaveBeenCalledTimes(1);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe("Avatar.Group", () => {
|
|
92
|
+
it("overflows extras as +N (Primer stack cap)", () => {
|
|
93
|
+
const { container } = renderWithProviders(
|
|
94
|
+
<Avatar.Group max={2}>
|
|
95
|
+
<Avatar name="Ada Lovelace" />
|
|
96
|
+
<Avatar name="Grace Hopper" />
|
|
97
|
+
<Avatar name="Alan Turing" />
|
|
98
|
+
</Avatar.Group>,
|
|
99
|
+
);
|
|
100
|
+
expect(container.textContent).toContain("+1");
|
|
101
|
+
expect(container.querySelector("[data-avatar-group]")).toBeTruthy();
|
|
102
|
+
expect(
|
|
103
|
+
container.querySelector("[data-avatar-overlap]")?.getAttribute("data-avatar-overlap"),
|
|
104
|
+
).toBe("true");
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("flush square stacks declare no identity circle", () => {
|
|
108
|
+
const { container } = renderWithProviders(
|
|
109
|
+
<Avatar.Group circular={false} overlap={false}>
|
|
110
|
+
<Avatar name="Core Team" />
|
|
111
|
+
<Avatar name="Ops Bot" />
|
|
112
|
+
</Avatar.Group>,
|
|
113
|
+
);
|
|
114
|
+
expect(container.querySelector("[data-radius-class='R-IDENTITY']")).toBeNull();
|
|
115
|
+
});
|
|
45
116
|
});
|
|
46
117
|
|
|
47
118
|
// D-09 / LC-60: Avatar is the spec's declared R-IDENTITY part. Knob immunity
|
|
@@ -10,7 +10,7 @@ const meta: Meta<typeof Avatar> = {
|
|
|
10
10
|
docs: {
|
|
11
11
|
description: {
|
|
12
12
|
component:
|
|
13
|
-
"Themed Avatar for assigned users, comments, and activity feeds. Image with initials fallback; size
|
|
13
|
+
"Themed Avatar for assigned users, comments, and activity feeds. Image with initials fallback; size recipe (density ≠ size, nested scales down); compound Avatar.Image / Avatar.Fallback / Avatar.Group.",
|
|
14
14
|
},
|
|
15
15
|
},
|
|
16
16
|
},
|
|
@@ -19,17 +19,74 @@ const meta: Meta<typeof Avatar> = {
|
|
|
19
19
|
src: { control: "text" },
|
|
20
20
|
size: { control: "text" },
|
|
21
21
|
circular: { control: "boolean" },
|
|
22
|
+
nested: { control: "boolean" },
|
|
23
|
+
compact: { control: "boolean" },
|
|
24
|
+
status: { control: "select", options: ["online", "busy", "away", "offline"] },
|
|
22
25
|
},
|
|
23
26
|
};
|
|
24
27
|
export default meta;
|
|
25
28
|
|
|
26
29
|
type Story = StoryObj<typeof Avatar>;
|
|
27
30
|
|
|
31
|
+
const Caption = ({ children }: { children: string }) => (
|
|
32
|
+
<SizableText size="$1" color="$color11">
|
|
33
|
+
{children}
|
|
34
|
+
</SizableText>
|
|
35
|
+
);
|
|
36
|
+
|
|
28
37
|
export const Default: Story = {
|
|
29
38
|
name: "Main",
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
render: () => (
|
|
40
|
+
<YStack gap="$4" padding="$4">
|
|
41
|
+
<XStack gap="$3" alignItems="center">
|
|
42
|
+
<Avatar name="Ada Lovelace" />
|
|
43
|
+
<Avatar name="Grace Hopper" />
|
|
44
|
+
<Avatar name="Alan Turing" />
|
|
45
|
+
<Avatar name="Katherine Johnson" />
|
|
46
|
+
<Avatar name="Linus Torvalds" />
|
|
47
|
+
<Avatar />
|
|
48
|
+
</XStack>
|
|
49
|
+
<XStack gap="$3" alignItems="flex-end">
|
|
50
|
+
{(["$1.5", "$2", "$3", "$4", "$6"] as const).map((size) => (
|
|
51
|
+
<YStack key={size} alignItems="center" gap="$1">
|
|
52
|
+
<Avatar name="Ada Lovelace" size={size} />
|
|
53
|
+
<Caption>{size}</Caption>
|
|
54
|
+
</YStack>
|
|
55
|
+
))}
|
|
56
|
+
</XStack>
|
|
57
|
+
<XStack gap="$4" alignItems="flex-end">
|
|
58
|
+
<YStack alignItems="center" gap="$1">
|
|
59
|
+
<Avatar name="Ada Lovelace" />
|
|
60
|
+
<Caption>page</Caption>
|
|
61
|
+
</YStack>
|
|
62
|
+
<YStack alignItems="center" gap="$1">
|
|
63
|
+
<Avatar name="Ada Lovelace" nested />
|
|
64
|
+
<Caption>nested</Caption>
|
|
65
|
+
</YStack>
|
|
66
|
+
<YStack alignItems="center" gap="$1">
|
|
67
|
+
<Avatar name="Ada Lovelace" compact />
|
|
68
|
+
<Caption>compact</Caption>
|
|
69
|
+
</YStack>
|
|
70
|
+
<Avatar name="Ada Lovelace" status="online" />
|
|
71
|
+
<Avatar name="Grace Hopper" status="busy" />
|
|
72
|
+
<Avatar circular={false} name="Bitspur Labs" />
|
|
73
|
+
</XStack>
|
|
74
|
+
<XStack gap="$4" alignItems="center">
|
|
75
|
+
<Avatar.Group>
|
|
76
|
+
<Avatar name="Ada Lovelace" />
|
|
77
|
+
<Avatar name="Grace Hopper" />
|
|
78
|
+
<Avatar name="Alan Turing" />
|
|
79
|
+
<Avatar name="Katherine Johnson" />
|
|
80
|
+
<Avatar name="Linus Torvalds" />
|
|
81
|
+
</Avatar.Group>
|
|
82
|
+
<Avatar.Group circular={false} overlap={false}>
|
|
83
|
+
<Avatar name="Core Team" />
|
|
84
|
+
<Avatar name="Ops Bot" />
|
|
85
|
+
<Avatar name="Docs Org" />
|
|
86
|
+
</Avatar.Group>
|
|
87
|
+
</XStack>
|
|
88
|
+
</YStack>
|
|
89
|
+
),
|
|
33
90
|
};
|
|
34
91
|
|
|
35
92
|
export const WithImage: Story = {
|
|
@@ -37,6 +94,7 @@ export const WithImage: Story = {
|
|
|
37
94
|
name: "Grace Hopper",
|
|
38
95
|
src: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=150&h=150&dpr=2&q=80",
|
|
39
96
|
size: "$5",
|
|
97
|
+
status: "online",
|
|
40
98
|
},
|
|
41
99
|
};
|
|
42
100
|
|
|
@@ -66,6 +124,50 @@ export const InitialsFallback: Story = {
|
|
|
66
124
|
),
|
|
67
125
|
};
|
|
68
126
|
|
|
127
|
+
export const Nested: Story = {
|
|
128
|
+
render: () => (
|
|
129
|
+
<XStack gap="$4" alignItems="flex-end">
|
|
130
|
+
<YStack alignItems="center" gap="$1">
|
|
131
|
+
<Avatar name="Ada Lovelace" />
|
|
132
|
+
<SizableText size="$1" color="$color11">
|
|
133
|
+
page
|
|
134
|
+
</SizableText>
|
|
135
|
+
</YStack>
|
|
136
|
+
<YStack alignItems="center" gap="$1">
|
|
137
|
+
<Avatar name="Ada Lovelace" nested />
|
|
138
|
+
<SizableText size="$1" color="$color11">
|
|
139
|
+
nested
|
|
140
|
+
</SizableText>
|
|
141
|
+
</YStack>
|
|
142
|
+
<YStack alignItems="center" gap="$1">
|
|
143
|
+
<Avatar name="Ada Lovelace" compact />
|
|
144
|
+
<SizableText size="$1" color="$color11">
|
|
145
|
+
compact
|
|
146
|
+
</SizableText>
|
|
147
|
+
</YStack>
|
|
148
|
+
</XStack>
|
|
149
|
+
),
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export const Group: Story = {
|
|
153
|
+
render: () => (
|
|
154
|
+
<YStack gap="$4">
|
|
155
|
+
<Avatar.Group>
|
|
156
|
+
<Avatar name="Ada Lovelace" />
|
|
157
|
+
<Avatar name="Grace Hopper" />
|
|
158
|
+
<Avatar name="Alan Turing" />
|
|
159
|
+
<Avatar name="Katherine Johnson" />
|
|
160
|
+
<Avatar name="Linus Torvalds" />
|
|
161
|
+
</Avatar.Group>
|
|
162
|
+
<Avatar.Group circular={false} overlap={false}>
|
|
163
|
+
<Avatar name="Core Team" />
|
|
164
|
+
<Avatar name="Ops Bot" />
|
|
165
|
+
<Avatar name="Docs Org" />
|
|
166
|
+
</Avatar.Group>
|
|
167
|
+
</YStack>
|
|
168
|
+
),
|
|
169
|
+
};
|
|
170
|
+
|
|
69
171
|
export const Compound: Story = {
|
|
70
172
|
render: () => (
|
|
71
173
|
<Avatar circular size="$5" backgroundColor="$blue4">
|
|
@@ -13,3 +13,32 @@ export function getInitials(name: string): string {
|
|
|
13
13
|
}
|
|
14
14
|
return trimmed.substring(0, 2).toUpperCase();
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Polaris-style deterministic initials fill. Tokens only — the same seed
|
|
19
|
+
* always lands on the same ramp pair so two "AB" avatars match.
|
|
20
|
+
*/
|
|
21
|
+
export const FALLBACK_TONES = [
|
|
22
|
+
{ bg: "$blue4", fg: "$blue12" },
|
|
23
|
+
{ bg: "$green4", fg: "$green12" },
|
|
24
|
+
{ bg: "$orange4", fg: "$orange12" },
|
|
25
|
+
{ bg: "$purple4", fg: "$purple12" },
|
|
26
|
+
{ bg: "$yellow4", fg: "$yellow12" },
|
|
27
|
+
{ bg: "$red4", fg: "$red12" },
|
|
28
|
+
] as const;
|
|
29
|
+
|
|
30
|
+
export type FallbackTone = (typeof FALLBACK_TONES)[number];
|
|
31
|
+
|
|
32
|
+
export function fallbackToneIndex(seed: string): number {
|
|
33
|
+
let hash = 0;
|
|
34
|
+
for (let i = 0; i < seed.length; i++) {
|
|
35
|
+
hash = (Math.imul(hash, 31) + seed.charCodeAt(i)) | 0;
|
|
36
|
+
}
|
|
37
|
+
return Math.abs(hash) % FALLBACK_TONES.length;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function fallbackTone(seed: string | undefined): FallbackTone | undefined {
|
|
41
|
+
const trimmed = (seed ?? "").trim();
|
|
42
|
+
if (!trimmed) return undefined;
|
|
43
|
+
return FALLBACK_TONES[fallbackToneIndex(trimmed)];
|
|
44
|
+
}
|