@multiplatform.one/components 7.10.0 → 7.11.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.
Files changed (65) hide show
  1. package/README.md +98 -0
  2. package/dist/cjs/SheetModal/index.cjs +22 -3
  3. package/dist/cjs/SheetModal/index.native.js +50 -10
  4. package/dist/cjs/SheetModal/index.native.js.map +1 -1
  5. package/dist/cjs/Tabs/index.cjs +33 -12
  6. package/dist/cjs/Tabs/index.native.js +37 -12
  7. package/dist/cjs/Tabs/index.native.js.map +1 -1
  8. package/dist/cjs/layouts/tags.native.js.map +1 -1
  9. package/dist/cjs/views/TreeView.cjs +175 -43
  10. package/dist/cjs/views/TreeView.native.js +181 -46
  11. package/dist/cjs/views/TreeView.native.js.map +1 -1
  12. package/dist/esm/SheetModal/index.mjs +22 -3
  13. package/dist/esm/SheetModal/index.mjs.map +1 -1
  14. package/dist/esm/SheetModal/index.native.js +51 -11
  15. package/dist/esm/SheetModal/index.native.js.map +1 -1
  16. package/dist/esm/Tabs/index.mjs +33 -12
  17. package/dist/esm/Tabs/index.mjs.map +1 -1
  18. package/dist/esm/Tabs/index.native.js +37 -12
  19. package/dist/esm/Tabs/index.native.js.map +1 -1
  20. package/dist/esm/layouts/tags.mjs.map +1 -1
  21. package/dist/esm/layouts/tags.native.js.map +1 -1
  22. package/dist/esm/views/TreeView.mjs +175 -43
  23. package/dist/esm/views/TreeView.mjs.map +1 -1
  24. package/dist/esm/views/TreeView.native.js +181 -46
  25. package/dist/esm/views/TreeView.native.js.map +1 -1
  26. package/dist/jsx/SheetModal/index.mjs +22 -3
  27. package/dist/jsx/SheetModal/index.mjs.map +1 -1
  28. package/dist/jsx/SheetModal/index.native.js +50 -10
  29. package/dist/jsx/SheetModal/index.native.js.map +1 -1
  30. package/dist/jsx/Tabs/index.mjs +33 -12
  31. package/dist/jsx/Tabs/index.mjs.map +1 -1
  32. package/dist/jsx/Tabs/index.native.js +37 -12
  33. package/dist/jsx/Tabs/index.native.js.map +1 -1
  34. package/dist/jsx/layouts/tags.mjs.map +1 -1
  35. package/dist/jsx/layouts/tags.native.js.map +1 -1
  36. package/dist/jsx/views/TreeView.mjs +175 -43
  37. package/dist/jsx/views/TreeView.mjs.map +1 -1
  38. package/dist/jsx/views/TreeView.native.js +181 -46
  39. package/dist/jsx/views/TreeView.native.js.map +1 -1
  40. package/package.json +11 -11
  41. package/src/Accordion/index.tsx +1 -1
  42. package/src/SheetModal/SheetModal.fill.spec.tsx +147 -0
  43. package/src/SheetModal/SheetModal.ownedBody.spec.tsx +200 -0
  44. package/src/SheetModal/SheetModal.stories.spec.tsx +23 -2
  45. package/src/SheetModal/SheetModal.stories.tsx +275 -2
  46. package/src/SheetModal/index.native.tsx +50 -6
  47. package/src/SheetModal/index.tsx +40 -3
  48. package/src/Tabs/Tabs.lifecycle.spec.tsx +123 -0
  49. package/src/Tabs/Tabs.measurement.spec.tsx +186 -0
  50. package/src/Tabs/Tabs.stories.tsx +43 -0
  51. package/src/Tabs/index.tsx +42 -13
  52. package/src/layouts/tags.tsx +2 -1
  53. package/src/views/TreeView.reveal.spec.tsx +7 -0
  54. package/src/views/TreeView.reveal.stories.tsx +134 -0
  55. package/src/views/TreeView.scroll-index.spec.tsx +246 -0
  56. package/src/views/TreeView.scroll.spec.tsx +711 -50
  57. package/src/views/TreeView.tsx +230 -49
  58. package/types/SheetModal/index.d.ts +8 -1
  59. package/types/SheetModal/index.d.ts.map +1 -1
  60. package/types/SheetModal/index.native.d.ts +1 -1
  61. package/types/SheetModal/index.native.d.ts.map +1 -1
  62. package/types/Tabs/index.d.ts.map +1 -1
  63. package/types/layouts/tags.d.ts.map +1 -1
  64. package/types/views/TreeView.d.ts +10 -1
  65. package/types/views/TreeView.d.ts.map +1 -1
package/README.md CHANGED
@@ -57,6 +57,104 @@ export function UserCard() {
57
57
  }
58
58
  ```
59
59
 
60
+ ## TreeView scroll retention
61
+
62
+ Keep scroll memory outside the mounted tree, alongside expansion. Pass the measured
63
+ height of the available viewport to `height`; TreeView owns its virtual scrolling.
64
+
65
+ ```tsx
66
+ import { TreeView, type TreeNode } from "@multiplatform.one/components";
67
+ import { Button } from "@multiplatform.one/forms";
68
+ import { useState } from "react";
69
+
70
+ export function Library({ nodes, height }: { nodes: TreeNode[]; height: number }) {
71
+ const [showTree, setShowTree] = useState(true);
72
+ const [offset, setOffset] = useState<number>();
73
+ const [expandedIds, setExpandedIds] = useState<string[]>([]);
74
+ return (
75
+ <>
76
+ <Button onPress={() => setShowTree((shown) => !shown)}>Toggle tree</Button>
77
+ {showTree && (
78
+ <TreeView
79
+ nodes={nodes}
80
+ height={height}
81
+ expandedIds={expandedIds}
82
+ onExpandedIdsChange={setExpandedIds}
83
+ initialScrollOffset={offset}
84
+ onScrollOffsetChange={setOffset}
85
+ />
86
+ )}
87
+ </>
88
+ );
89
+ }
90
+ ```
91
+
92
+ `initialScrollOffset?: number` is a mount-time seed, including when omitted.
93
+ Changing it after mount never requests another scroll. Values use vertical CSS
94
+ pixels on web and layout units on native; fractions are preserved. Negative and
95
+ non-finite seeds become zero. Restoration waits for nonempty data, loaded content
96
+ and a usable visible viewport, then clamps to the actual list extent. An unchanged
97
+ pending target with identical bounds isn't replayed on each layout notification.
98
+
99
+ `onScrollOffsetChange?: (offset: number) => void` reports observed offsets,
100
+ clamped to the current scroll range and deduplicated. It covers manual scrolling,
101
+ keyboard navigation, drag auto-scroll and explicit reveal. A scroll command alone
102
+ isn't confirmation. Subpixel requests reach the list unchanged; observed device
103
+ rounding is reported as observed. No provisional mount-time zero overwrites saved memory while
104
+ restoration is waiting. Callback identity changes alone don't emit.
105
+
106
+ A new explicit `revealRequest` or user scroll/navigation cancels pending initial
107
+ restoration. The seed never returns after reveal cancellation or later dataset
108
+ changes. Acknowledge completed reveals in the persistent controller and only pass
109
+ still-pending requests on remount. Restoration doesn't select, focus, expand, or
110
+ call `onRevealComplete`.
111
+
112
+ Restore data and expansion together before the first usable nonempty layout. If
113
+ saved state itself arrives asynchronously, wait to mount the tree until it's
114
+ known. Retention stores a pixel offset, not an item anchor across dataset edits.
115
+ After restoration, replacing data with an empty list doesn't rearm the seed;
116
+ retain previous rows during refresh or deliberately remount with saved state.
117
+
118
+ The **Retained scroll across unmount and delayed layout** story uses 500 variable
119
+ height rows. Manually scroll, unmount/mount, then test delayed data and hidden
120
+ layout. Remount with reveal to check that reveal wins. Change viewport height to
121
+ check clamping. The story shows observed offsets separately from measured reveal
122
+ completion. Native sheet sizing is a separate host responsibility.
123
+
124
+ ## SheetModal body sizing
125
+
126
+ `SheetModal` sizes its body to the content by default. A consumer-owned
127
+ viewport — a virtualized list, a measured workspace — cannot bootstrap from
128
+ that: on native it is delivered height 0, reports zero, and mounts nothing,
129
+ while a sibling with a declared height gets the space it asked for.
130
+
131
+ `fill?: boolean` (default `false`) opts that body into the sheet's height
132
+ instead. On native it turns the existing keyboard-aware cap into a definite
133
+ frame height and opens every link down to the body, so the remaining height
134
+ reaches the consumer. On web it opens the same chain inside the percent-height
135
+ snapped frame. The grabber, the header and the bottom safe-area spacer stay
136
+ outside the flexible body.
137
+
138
+ ```tsx
139
+ <SheetModal open={open} onOpenChange={setOpen} fill snapPoint={88} header={<Title />}>
140
+ <YStack flex={1} minHeight={0}>
141
+ <Toolbar />
142
+ <MyVirtualList />
143
+ </YStack>
144
+ </SheetModal>
145
+ ```
146
+
147
+ `fill` allocates height; it does not add a scroll owner. With `scrollable`
148
+ false the children keep sole ownership of scrolling and virtualization; with
149
+ `scrollable` true the sheet's own scroller fills the slot instead, and there
150
+ is still exactly one. Leaving `fill` off, or passing `false`, renders the
151
+ unchanged intrinsic body.
152
+
153
+ The contract is proven at the fully expanded rest, where the panel is not
154
+ translated. Smaller detents translate the whole panel down, so an allocated
155
+ body can extend below the visible window there; check the settled rest before
156
+ relying on `fill` with a shorter `snapPoint`.
157
+
60
158
  ## Styling
61
159
 
62
160
  Components resolve structural styling (radius, spacing, elevation, typography)
@@ -35,6 +35,13 @@ const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), selec
35
35
  const IN_DIALOG_REGION = {
36
36
  inDialogRegion: true
37
37
  };
38
+ const fillSlot = {
39
+ flex: 1,
40
+ minHeight: 0
41
+ };
42
+ const nonShrinking = {
43
+ flexShrink: 0
44
+ };
38
45
  const frameRingReset = {
39
46
  outlineWidth: 0,
40
47
  outlineStyle: "none",
@@ -138,7 +145,8 @@ function SheetModal({
138
145
  children,
139
146
  header,
140
147
  snapPoint = 60,
141
- scrollable
148
+ scrollable,
149
+ fill = false
142
150
  }) {
143
151
  const {
144
152
  knobProps
@@ -190,13 +198,24 @@ function SheetModal({
190
198
  value: IN_DIALOG_REGION,
191
199
  children: [header ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
192
200
  id: titleId,
201
+ ...(fill ? nonShrinking : null),
193
202
  children: header
194
- }) : null, scrollable ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Sheet.ScrollView, {
203
+ }) : null, fill ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
204
+ testID: "sheet-modal-body",
205
+ ...fillSlot,
206
+ children: scrollable ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Sheet.ScrollView, {
207
+ testID: "sheet-modal-scroll",
208
+ ...fillSlot,
209
+ children
210
+ }) : children
211
+ }) : scrollable ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Sheet.ScrollView, {
212
+ testID: "sheet-modal-scroll",
195
213
  children
196
214
  }) : children, /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
197
215
  style: {
198
216
  height: "env(safe-area-inset-bottom)"
199
- }
217
+ },
218
+ ...(fill ? nonShrinking : null)
200
219
  })]
201
220
  })
202
221
  })]
@@ -43,6 +43,13 @@ var dismissThreshold = 56;
43
43
  var IN_DIALOG_REGION = {
44
44
  inDialogRegion: true
45
45
  };
46
+ var fillSlot = {
47
+ flex: 1,
48
+ minHeight: 0
49
+ };
50
+ var nonShrinking = {
51
+ flexShrink: 0
52
+ };
46
53
  function SheetModal(param) {
47
54
  var {
48
55
  open,
@@ -50,7 +57,8 @@ function SheetModal(param) {
50
57
  children,
51
58
  header,
52
59
  snapPoint,
53
- scrollable
60
+ scrollable,
61
+ fill = false
54
62
  } = param;
55
63
  var {
56
64
  t
@@ -262,23 +270,34 @@ function SheetModal(param) {
262
270
  var h = Math.round(e.nativeEvent.layout.height);
263
271
  if (h > 0 && h !== measuredHeight) setMeasuredHeight(h);
264
272
  },
273
+ testID: "sheet-modal-frame",
265
274
  style: {
266
275
  // MPO-64: flex children default to flexShrink 0, so without this
267
276
  // the sheet cannot give way to the keyboard.
268
277
  flexShrink: 1,
269
278
  minHeight: 0,
270
279
  maxHeight,
280
+ // The cap is already keyboard- and window-aware; fill only asks
281
+ // for it as a definite height rather than an upper bound.
282
+ ...(fill ? {
283
+ height: maxHeight
284
+ } : null),
271
285
  transform: [{
272
286
  translateY
273
287
  }]
274
288
  },
275
289
  children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
290
+ testID: "sheet-modal-surface",
276
291
  ...knobProps.surface,
277
292
  ...knobProps.borderRadius,
278
293
  borderBottomLeftRadius: 0,
279
294
  borderBottomRightRadius: 0,
280
295
  elevation: knobProps.elevation,
281
296
  maxHeight,
297
+ ...(fill ? {
298
+ ...fillSlot,
299
+ flexShrink: 1
300
+ } : null),
282
301
  paddingTop: "$2",
283
302
  paddingBottom: keyboardInset > 0 ? 8 : bottomInset,
284
303
  overflow: "hidden",
@@ -303,11 +322,13 @@ function SheetModal(param) {
303
322
  ...panResponder.panHandlers,
304
323
  accessibilityRole: "adjustable",
305
324
  accessibilityLabel: t("Drag to resize"),
325
+ testID: "sheet-modal-grabber",
306
326
  style: {
307
327
  alignSelf: "stretch",
308
328
  alignItems: "center",
309
329
  paddingTop: 3,
310
- paddingBottom: 11
330
+ paddingBottom: 11,
331
+ ...(fill ? nonShrinking : null)
311
332
  },
312
333
  children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
313
334
  width: 36,
@@ -319,17 +340,36 @@ function SheetModal(param) {
319
340
  })
320
341
  }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_surfaces.DialogRegionContext.Provider, {
321
342
  value: IN_DIALOG_REGION,
322
- children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
343
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
344
+ testID: "sheet-modal-content",
323
345
  padding: knobProps.panelPadding.padding,
324
346
  gap: knobProps.gap.gap,
325
347
  flexShrink: 1,
326
- children: [header, scrollable ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.ScrollView, {
327
- style: {
328
- flexGrow: 0
329
- },
330
- keyboardShouldPersistTaps: "handled",
331
- children
332
- }) : children]
348
+ ...(fill ? fillSlot : null),
349
+ children: fill ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
350
+ children: [header ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.View, {
351
+ style: nonShrinking,
352
+ children: header
353
+ }) : null, /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.View, {
354
+ testID: "sheet-modal-body",
355
+ style: fillSlot,
356
+ children: scrollable ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.ScrollView, {
357
+ testID: "sheet-modal-scroll",
358
+ style: fillSlot,
359
+ keyboardShouldPersistTaps: "handled",
360
+ children
361
+ }) : children
362
+ })]
363
+ }) : /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
364
+ children: [header, scrollable ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.ScrollView, {
365
+ testID: "sheet-modal-scroll",
366
+ style: {
367
+ flexGrow: 0
368
+ },
369
+ keyboardShouldPersistTaps: "handled",
370
+ children
371
+ }) : children]
372
+ })
333
373
  })
334
374
  })]
335
375
  })
@@ -1 +1 @@
1
- {"version":3,"names":["index_native_exports","__export","SheetModal","module","exports","__toCommonJS","import_jsx_runtime","require","import_react","import_react_native","import_theme","import_detents","import_i18n","import_useKeyboardInset","import_tamagui","import_surfaces","sheetMaxHeightRatio","bottomInset","Platform","OS","backdropStrip","dismissThreshold","IN_DIALOG_REGION","inDialogRegion","param","open","onOpenChange","children","header","snapPoint","scrollable","t","useTranslation","knobProps","useResolvedKnobs","height","windowHeight","useWindowDimensions","keyboardInset","useKeyboardInset","backdropArmed","setBackdropArmed","useState","armTimerRef","useRef","close","useCallback","handleBackdropPress","available","Math","max","maxHeight","minSheetHeight","round","min","measuredHeight","setMeasuredHeight","travel","detents","useMemo","resolveSheetDetents","translateY","Animated","Value","current","restRef","travelRef","detentsRef","presentationRef","activeRef","settleTo","toValue","velocity","arguments","length","spring","damping","stiffness","mass","overshootClamping","useNativeDriver","start","dismiss","presentation","param2","finished","panResponder","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_evt","g","abs","dy","onPanResponderGrant","stopAnimation","value","Number","isFinite","onPanResponderMove","next","setValue","onPanResponderRelease","points","tvl","projected","vy","smallestRest","best","bestDelta","POSITIVE_INFINITY","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","done","delta","err","return","onPanResponderTerminate","enteredRef","enter","clearTimeout","setTimeout","timing","duration","easing","Easing","out","cubic","useEffect","parked","jsx","Modal","visible","transparent","animationType","statusBarTranslucent","onRequestClose","onShow","jsxs","View","style","flex","justifyContent","paddingBottom","Pressable","StyleSheet","absoluteFill","onPress","accessibilityRole","accessibilityLabel","backgroundColor","onLayout","e","h","nativeEvent","layout","flexShrink","minHeight","transform","YStack","surface","borderRadius","borderBottomLeftRadius","borderBottomRightRadius","elevation","paddingTop","overflow","outlineWidth","focusStyle","focusVisibleStyle","accessibilityViewIsModal","onAccessibilityEscape","panHandlers","alignSelf","alignItems","width","opacity","accessible","DialogRegionContext","Provider","padding","panelPadding","gap","ScrollView","flexGrow","keyboardShouldPersistTaps"],"sources":["../../../src/SheetModal/index.native.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["index_native_exports","__export","SheetModal","module","exports","__toCommonJS","import_jsx_runtime","require","import_react","import_react_native","import_theme","import_detents","import_i18n","import_useKeyboardInset","import_tamagui","import_surfaces","sheetMaxHeightRatio","bottomInset","Platform","OS","backdropStrip","dismissThreshold","IN_DIALOG_REGION","inDialogRegion","fillSlot","flex","minHeight","nonShrinking","flexShrink","param","open","onOpenChange","children","header","snapPoint","scrollable","fill","t","useTranslation","knobProps","useResolvedKnobs","height","windowHeight","useWindowDimensions","keyboardInset","useKeyboardInset","backdropArmed","setBackdropArmed","useState","armTimerRef","useRef","close","useCallback","handleBackdropPress","available","Math","max","maxHeight","minSheetHeight","round","min","measuredHeight","setMeasuredHeight","travel","detents","useMemo","resolveSheetDetents","translateY","Animated","Value","current","restRef","travelRef","detentsRef","presentationRef","activeRef","settleTo","toValue","velocity","arguments","length","spring","damping","stiffness","mass","overshootClamping","useNativeDriver","start","dismiss","presentation","param2","finished","panResponder","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_evt","g","abs","dy","onPanResponderGrant","stopAnimation","value","Number","isFinite","onPanResponderMove","next","setValue","onPanResponderRelease","points","tvl","projected","vy","smallestRest","best","bestDelta","POSITIVE_INFINITY","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","done","delta","err","return","onPanResponderTerminate","enteredRef","enter","clearTimeout","setTimeout","timing","duration","easing","Easing","out","cubic","useEffect","parked","jsx","Modal","visible","transparent","animationType","statusBarTranslucent","onRequestClose","onShow","jsxs","View","style","justifyContent","paddingBottom","Pressable","StyleSheet","absoluteFill","onPress","accessibilityRole","accessibilityLabel","backgroundColor","onLayout","e","h","nativeEvent","layout","testID","transform","YStack","surface","borderRadius","borderBottomLeftRadius","borderBottomRightRadius","elevation","paddingTop","overflow","outlineWidth","focusStyle","focusVisibleStyle","accessibilityViewIsModal","onAccessibilityEscape","panHandlers","alignSelf","alignItems","width","opacity","accessible","DialogRegionContext","Provider","padding","panelPadding","gap","Fragment","ScrollView","keyboardShouldPersistTaps","flexGrow"],"sources":["../../../src/SheetModal/index.native.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -57,6 +57,7 @@ function tabsOverflowFades(offset, viewport, content, direction, threshold = 4)
57
57
  };
58
58
  }
59
59
  function tabsScrollIntoViewX(layout, offset, viewport, content, direction, pad = 32) {
60
+ if (![layout.x, layout.width, layout.height, offset, viewport, content].every(Number.isFinite) || layout.width <= 0 || layout.height <= 0 || viewport <= 0 || content <= 0) return void 0;
60
61
  const range = Math.max(content - viewport, 0);
61
62
  if (range <= 0) return void 0;
62
63
  const minScrollLeft = direction === "rtl" ? -range : 0;
@@ -215,16 +216,21 @@ function TabsRoot({
215
216
  onChange?.(next);
216
217
  };
217
218
  const [activeLayout, setActiveLayout] = import_react.default.useState(null);
218
- const handleInteraction = (type, layout) => {
219
- if (type !== "select" || !layout) return;
220
- setActiveLayout(prev => prev && prev.x === layout.x && prev.y === layout.y && prev.width === layout.width && prev.height === layout.height ? prev : layout);
219
+ const handleInteraction = (tabValue, type, layout) => {
220
+ if (type !== "select" || !layout || tabValue !== currentValue) return;
221
+ setActiveLayout(prev => prev && prev.value === tabValue && prev.x === layout.x && prev.y === layout.y && prev.width === layout.width && prev.height === layout.height ? prev : {
222
+ ...layout,
223
+ value: tabValue
224
+ });
221
225
  };
222
226
  const scrollRef = import_react.default.useRef(null);
227
+ const tabRefs = import_react.default.useRef(/* @__PURE__ */new Map());
223
228
  const scrollMetrics = import_react.default.useRef({
224
229
  offset: 0,
225
230
  viewport: 0,
226
231
  content: 0
227
232
  });
233
+ const [sizeRevision, setSizeRevision] = import_react.default.useState(0);
228
234
  const [fades, setFades] = import_react.default.useState({
229
235
  left: false,
230
236
  right: false
@@ -238,25 +244,42 @@ function TabsRoot({
238
244
  const next = tabsOverflowFades(offset, viewport, content, direction);
239
245
  setFades(prev => prev.left === next.left && prev.right === next.right ? prev : next);
240
246
  };
247
+ const updateScrollSize = (dimension, size2) => {
248
+ if (!Object.is(scrollMetrics.current[dimension], size2)) {
249
+ scrollMetrics.current[dimension] = size2;
250
+ if (import_tamagui.isWeb) {
251
+ const selected = tabRefs.current.get(currentValue);
252
+ if (selected && selected.offsetWidth > 0 && selected.offsetHeight > 0) {
253
+ handleInteraction(currentValue, "select", {
254
+ x: selected.offsetLeft,
255
+ y: selected.offsetTop,
256
+ width: selected.offsetWidth,
257
+ height: selected.offsetHeight
258
+ });
259
+ }
260
+ }
261
+ setSizeRevision(current => current + 1);
262
+ }
263
+ updateFades();
264
+ };
241
265
  import_react.default.useEffect(() => {
242
- if (!activeLayout) return;
266
+ if (!activeLayout || activeLayout.value !== currentValue) return;
243
267
  const {
244
268
  offset,
245
269
  viewport,
246
270
  content
247
271
  } = scrollMetrics.current;
248
272
  const target = tabsScrollIntoViewX(activeLayout, offset, viewport, content, direction);
249
- if (target !== void 0) {
273
+ if (target !== void 0 && Math.abs(target - offset) >= 1) {
250
274
  scrollRef.current?.scrollTo({
251
275
  x: target,
252
276
  animated: true
253
277
  });
254
278
  }
255
- }, [activeLayout, direction]);
279
+ }, [activeLayout, currentValue, direction, sizeRevision]);
256
280
  const isUnderline = variant === "underline";
257
281
  const isBand = variant === "band";
258
282
  const equalDistribution = isBand || distribution === "equal";
259
- const tabRefs = import_react.default.useRef(/* @__PURE__ */new Map());
260
283
  const onTabKeyDown = (event, value2) => {
261
284
  if (!["Home", "End", "ArrowLeft", "ArrowRight"].includes(event.key)) return;
262
285
  const enabled = items.filter(item => !disabled && !item.disabled);
@@ -382,7 +405,7 @@ function TabsRoot({
382
405
  }
383
406
  }),
384
407
  hitSlop: tabHitSlop,
385
- onInteraction: handleInteraction,
408
+ onInteraction: (type, layout) => handleInteraction(item.value, type, layout),
386
409
  cursor: isDisabled ? "not-allowed" : "pointer",
387
410
  backgroundColor: isBand ? isActive ? import_componentColors.componentColors.surface.background : isDisabled ? "transparent" : feedbackBackground : "transparent",
388
411
  borderRadius: 0,
@@ -479,12 +502,10 @@ function TabsRoot({
479
502
  updateFades();
480
503
  },
481
504
  onLayout: e => {
482
- scrollMetrics.current.viewport = e.nativeEvent.layout.width;
483
- updateFades();
505
+ updateScrollSize("viewport", e.nativeEvent.layout.width);
484
506
  },
485
507
  onContentSizeChange: w => {
486
- scrollMetrics.current.content = w;
487
- updateFades();
508
+ updateScrollSize("content", w);
488
509
  },
489
510
  children: tabList
490
511
  })
@@ -61,6 +61,7 @@ function tabsOverflowFades(offset, viewport, content, direction) {
61
61
  }
62
62
  function tabsScrollIntoViewX(layout, offset, viewport, content, direction) {
63
63
  var pad = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : 32;
64
+ if (![layout.x, layout.width, layout.height, offset, viewport, content].every(Number.isFinite) || layout.width <= 0 || layout.height <= 0 || viewport <= 0 || content <= 0) return void 0;
64
65
  var range = Math.max(content - viewport, 0);
65
66
  if (range <= 0) return void 0;
66
67
  var minScrollLeft = direction === "rtl" ? -range : 0;
@@ -226,18 +227,23 @@ function TabsRoot(param) {
226
227
  onChange === null || onChange === void 0 ? void 0 : onChange(next);
227
228
  };
228
229
  var [activeLayout, setActiveLayout] = import_react.default.useState(null);
229
- var handleInteraction = function handleInteraction2(type, layout) {
230
- if (type !== "select" || !layout) return;
230
+ var handleInteraction = function handleInteraction2(tabValue, type, layout) {
231
+ if (type !== "select" || !layout || tabValue !== currentValue) return;
231
232
  setActiveLayout(function (prev) {
232
- return prev && prev.x === layout.x && prev.y === layout.y && prev.width === layout.width && prev.height === layout.height ? prev : layout;
233
+ return prev && prev.value === tabValue && prev.x === layout.x && prev.y === layout.y && prev.width === layout.width && prev.height === layout.height ? prev : {
234
+ ...layout,
235
+ value: tabValue
236
+ };
233
237
  });
234
238
  };
235
239
  var scrollRef = import_react.default.useRef(null);
240
+ var tabRefs = import_react.default.useRef(/* @__PURE__ */new Map());
236
241
  var scrollMetrics = import_react.default.useRef({
237
242
  offset: 0,
238
243
  viewport: 0,
239
244
  content: 0
240
245
  });
246
+ var [sizeRevision, setSizeRevision] = import_react.default.useState(0);
241
247
  var [fades, setFades] = import_react.default.useState({
242
248
  left: false,
243
249
  right: false
@@ -253,26 +259,45 @@ function TabsRoot(param) {
253
259
  return prev.left === next.left && prev.right === next.right ? prev : next;
254
260
  });
255
261
  };
262
+ var updateScrollSize = function updateScrollSize2(dimension, size2) {
263
+ if (!Object.is(scrollMetrics.current[dimension], size2)) {
264
+ scrollMetrics.current[dimension] = size2;
265
+ if (import_tamagui.isWeb) {
266
+ var selected = tabRefs.current.get(currentValue);
267
+ if (selected && selected.offsetWidth > 0 && selected.offsetHeight > 0) {
268
+ handleInteraction(currentValue, "select", {
269
+ x: selected.offsetLeft,
270
+ y: selected.offsetTop,
271
+ width: selected.offsetWidth,
272
+ height: selected.offsetHeight
273
+ });
274
+ }
275
+ }
276
+ setSizeRevision(function (current) {
277
+ return current + 1;
278
+ });
279
+ }
280
+ updateFades();
281
+ };
256
282
  import_react.default.useEffect(function () {
257
- if (!activeLayout) return;
283
+ if (!activeLayout || activeLayout.value !== currentValue) return;
258
284
  var {
259
285
  offset,
260
286
  viewport,
261
287
  content
262
288
  } = scrollMetrics.current;
263
289
  var target = tabsScrollIntoViewX(activeLayout, offset, viewport, content, direction);
264
- if (target !== void 0) {
290
+ if (target !== void 0 && Math.abs(target - offset) >= 1) {
265
291
  var _scrollRef_current;
266
292
  (_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : _scrollRef_current.scrollTo({
267
293
  x: target,
268
294
  animated: true
269
295
  });
270
296
  }
271
- }, [activeLayout, direction]);
297
+ }, [activeLayout, currentValue, direction, sizeRevision]);
272
298
  var isUnderline = variant === "underline";
273
299
  var isBand = variant === "band";
274
300
  var equalDistribution = isBand || distribution === "equal";
275
- var tabRefs = import_react.default.useRef(/* @__PURE__ */new Map());
276
301
  var onTabKeyDown = function onTabKeyDown2(event, value2) {
277
302
  var _tabRefs_current_get;
278
303
  if (!["Home", "End", "ArrowLeft", "ArrowRight"].includes(event.key)) return;
@@ -417,7 +442,9 @@ function TabsRoot(param) {
417
442
  }
418
443
  }),
419
444
  hitSlop: tabHitSlop,
420
- onInteraction: handleInteraction,
445
+ onInteraction: function onInteraction(type, layout) {
446
+ return handleInteraction(item.value, type, layout);
447
+ },
421
448
  cursor: isDisabled ? "not-allowed" : "pointer",
422
449
  backgroundColor: isBand ? isActive ? import_componentColors.componentColors.surface.background : isDisabled ? "transparent" : feedbackBackground : "transparent",
423
450
  borderRadius: 0,
@@ -544,12 +571,10 @@ function TabsRoot(param) {
544
571
  updateFades();
545
572
  },
546
573
  onLayout: function onLayout(e) {
547
- scrollMetrics.current.viewport = e.nativeEvent.layout.width;
548
- updateFades();
574
+ updateScrollSize("viewport", e.nativeEvent.layout.width);
549
575
  },
550
576
  onContentSizeChange: function onContentSizeChange(w) {
551
- scrollMetrics.current.content = w;
552
- updateFades();
577
+ updateScrollSize("content", w);
553
578
  },
554
579
  children: tabList
555
580
  })