@oxyhq/bloom 0.79.0 → 0.80.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 (147) hide show
  1. package/README.md +3 -3
  2. package/lib/commonjs/provider/index.js +11 -7
  3. package/lib/commonjs/provider/index.js.map +1 -1
  4. package/lib/commonjs/scroll/context.js +96 -0
  5. package/lib/commonjs/scroll/context.js.map +1 -0
  6. package/lib/commonjs/scroll/expo-router/index.js +133 -0
  7. package/lib/commonjs/scroll/expo-router/index.js.map +1 -0
  8. package/lib/commonjs/scroll/index.js +85 -21
  9. package/lib/commonjs/scroll/index.js.map +1 -1
  10. package/lib/commonjs/scroll/index.web.js +221 -121
  11. package/lib/commonjs/scroll/index.web.js.map +1 -1
  12. package/lib/commonjs/scroll/scrollable.native.js +58 -0
  13. package/lib/commonjs/scroll/scrollable.native.js.map +1 -0
  14. package/lib/commonjs/scroll/scrollable.web.js +9 -3
  15. package/lib/commonjs/scroll/scrollable.web.js.map +1 -1
  16. package/lib/commonjs/scroll/store.js +47 -25
  17. package/lib/commonjs/scroll/store.js.map +1 -1
  18. package/lib/commonjs/tabs/Tabs.js +263 -63
  19. package/lib/commonjs/tabs/Tabs.js.map +1 -1
  20. package/lib/commonjs/tabs/expo-router/RouterTabs.js +215 -0
  21. package/lib/commonjs/tabs/expo-router/RouterTabs.js.map +1 -0
  22. package/lib/commonjs/tabs/expo-router/index.js +13 -0
  23. package/lib/commonjs/tabs/expo-router/index.js.map +1 -0
  24. package/lib/commonjs/theme/color-policy.js +11 -10
  25. package/lib/commonjs/theme/color-policy.js.map +1 -1
  26. package/lib/module/provider/index.js +10 -6
  27. package/lib/module/provider/index.js.map +1 -1
  28. package/lib/module/scroll/context.js +90 -0
  29. package/lib/module/scroll/context.js.map +1 -0
  30. package/lib/module/scroll/expo-router/index.js +128 -0
  31. package/lib/module/scroll/expo-router/index.js.map +1 -0
  32. package/lib/module/scroll/index.js +80 -21
  33. package/lib/module/scroll/index.js.map +1 -1
  34. package/lib/module/scroll/index.web.js +218 -122
  35. package/lib/module/scroll/index.web.js.map +1 -1
  36. package/lib/module/scroll/scrollable.native.js +54 -0
  37. package/lib/module/scroll/scrollable.native.js.map +1 -0
  38. package/lib/module/scroll/scrollable.web.js +9 -3
  39. package/lib/module/scroll/scrollable.web.js.map +1 -1
  40. package/lib/module/scroll/store.js +47 -25
  41. package/lib/module/scroll/store.js.map +1 -1
  42. package/lib/module/tabs/Tabs.js +271 -65
  43. package/lib/module/tabs/Tabs.js.map +1 -1
  44. package/lib/module/tabs/expo-router/RouterTabs.js +210 -0
  45. package/lib/module/tabs/expo-router/RouterTabs.js.map +1 -0
  46. package/lib/module/tabs/expo-router/index.js +10 -0
  47. package/lib/module/tabs/expo-router/index.js.map +1 -0
  48. package/lib/module/theme/color-policy.js +11 -10
  49. package/lib/module/theme/color-policy.js.map +1 -1
  50. package/lib/typescript/commonjs/provider/index.d.ts +7 -5
  51. package/lib/typescript/commonjs/provider/index.d.ts.map +1 -1
  52. package/lib/typescript/commonjs/scroll/context.d.ts +14 -0
  53. package/lib/typescript/commonjs/scroll/context.d.ts.map +1 -0
  54. package/lib/typescript/commonjs/scroll/expo-router/index.d.ts +7 -0
  55. package/lib/typescript/commonjs/scroll/expo-router/index.d.ts.map +1 -0
  56. package/lib/typescript/commonjs/scroll/index.d.ts +14 -23
  57. package/lib/typescript/commonjs/scroll/index.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/scroll/index.web.d.ts +17 -19
  59. package/lib/typescript/commonjs/scroll/index.web.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/scroll/scrollable.native.d.ts +23 -0
  61. package/lib/typescript/commonjs/scroll/scrollable.native.d.ts.map +1 -0
  62. package/lib/typescript/commonjs/scroll/scrollable.web.d.ts +18 -5
  63. package/lib/typescript/commonjs/scroll/scrollable.web.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/scroll/store.d.ts +41 -22
  65. package/lib/typescript/commonjs/scroll/store.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/scroll/types.d.ts +82 -12
  67. package/lib/typescript/commonjs/scroll/types.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/tabs/Tabs.d.ts +41 -1
  69. package/lib/typescript/commonjs/tabs/Tabs.d.ts.map +1 -1
  70. package/lib/typescript/commonjs/tabs/expo-router/RouterTabs.d.ts +80 -0
  71. package/lib/typescript/commonjs/tabs/expo-router/RouterTabs.d.ts.map +1 -0
  72. package/lib/typescript/commonjs/tabs/expo-router/index.d.ts +9 -0
  73. package/lib/typescript/commonjs/tabs/expo-router/index.d.ts.map +1 -0
  74. package/lib/typescript/commonjs/tabs/types.d.ts +48 -4
  75. package/lib/typescript/commonjs/tabs/types.d.ts.map +1 -1
  76. package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
  77. package/lib/typescript/module/provider/index.d.ts +7 -5
  78. package/lib/typescript/module/provider/index.d.ts.map +1 -1
  79. package/lib/typescript/module/scroll/context.d.ts +14 -0
  80. package/lib/typescript/module/scroll/context.d.ts.map +1 -0
  81. package/lib/typescript/module/scroll/expo-router/index.d.ts +7 -0
  82. package/lib/typescript/module/scroll/expo-router/index.d.ts.map +1 -0
  83. package/lib/typescript/module/scroll/index.d.ts +14 -23
  84. package/lib/typescript/module/scroll/index.d.ts.map +1 -1
  85. package/lib/typescript/module/scroll/index.web.d.ts +17 -19
  86. package/lib/typescript/module/scroll/index.web.d.ts.map +1 -1
  87. package/lib/typescript/module/scroll/scrollable.native.d.ts +23 -0
  88. package/lib/typescript/module/scroll/scrollable.native.d.ts.map +1 -0
  89. package/lib/typescript/module/scroll/scrollable.web.d.ts +18 -5
  90. package/lib/typescript/module/scroll/scrollable.web.d.ts.map +1 -1
  91. package/lib/typescript/module/scroll/store.d.ts +41 -22
  92. package/lib/typescript/module/scroll/store.d.ts.map +1 -1
  93. package/lib/typescript/module/scroll/types.d.ts +82 -12
  94. package/lib/typescript/module/scroll/types.d.ts.map +1 -1
  95. package/lib/typescript/module/tabs/Tabs.d.ts +41 -1
  96. package/lib/typescript/module/tabs/Tabs.d.ts.map +1 -1
  97. package/lib/typescript/module/tabs/expo-router/RouterTabs.d.ts +80 -0
  98. package/lib/typescript/module/tabs/expo-router/RouterTabs.d.ts.map +1 -0
  99. package/lib/typescript/module/tabs/expo-router/index.d.ts +9 -0
  100. package/lib/typescript/module/tabs/expo-router/index.d.ts.map +1 -0
  101. package/lib/typescript/module/tabs/types.d.ts +48 -4
  102. package/lib/typescript/module/tabs/types.d.ts.map +1 -1
  103. package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
  104. package/package.json +29 -1
  105. package/src/__tests__/BloomProvider.web.test.tsx +8 -15
  106. package/src/__tests__/Tabs.test.tsx +187 -0
  107. package/src/__tests__/optional-peer-imports.test.ts +7 -2
  108. package/src/__tests__/scroll-expo-router-adapter.test.tsx +164 -0
  109. package/src/__tests__/scroll-native.test.tsx +465 -0
  110. package/src/__tests__/scroll-store.test.ts +41 -17
  111. package/src/__tests__/scroll-web.test.tsx +797 -108
  112. package/src/provider/index.tsx +10 -7
  113. package/src/scroll/context.tsx +107 -0
  114. package/src/scroll/expo-router/index.ts +140 -0
  115. package/src/scroll/index.ts +92 -25
  116. package/src/scroll/index.web.tsx +255 -162
  117. package/src/scroll/scrollable.native.ts +64 -0
  118. package/src/scroll/scrollable.web.ts +30 -8
  119. package/src/scroll/store.ts +47 -25
  120. package/src/scroll/types.ts +82 -12
  121. package/src/tabs/Tabs.tsx +352 -77
  122. package/src/tabs/expo-router/RouterTabs.tsx +268 -0
  123. package/src/tabs/expo-router/index.ts +8 -0
  124. package/src/tabs/types.ts +48 -4
  125. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +5 -5
  126. package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +11 -11
  127. package/src/theme/__tests__/policy-legibility.test.ts +10 -7
  128. package/src/theme/color-policy.ts +11 -10
  129. package/lib/commonjs/provider/scroll-provider.js +0 -13
  130. package/lib/commonjs/provider/scroll-provider.js.map +0 -1
  131. package/lib/commonjs/provider/scroll-provider.web.js +0 -13
  132. package/lib/commonjs/provider/scroll-provider.web.js.map +0 -1
  133. package/lib/module/provider/scroll-provider.js +0 -16
  134. package/lib/module/provider/scroll-provider.js.map +0 -1
  135. package/lib/module/provider/scroll-provider.web.js +0 -5
  136. package/lib/module/provider/scroll-provider.web.js.map +0 -1
  137. package/lib/typescript/commonjs/provider/scroll-provider.d.ts +0 -14
  138. package/lib/typescript/commonjs/provider/scroll-provider.d.ts.map +0 -1
  139. package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts +0 -3
  140. package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts.map +0 -1
  141. package/lib/typescript/module/provider/scroll-provider.d.ts +0 -14
  142. package/lib/typescript/module/provider/scroll-provider.d.ts.map +0 -1
  143. package/lib/typescript/module/provider/scroll-provider.web.d.ts +0 -3
  144. package/lib/typescript/module/provider/scroll-provider.web.d.ts.map +0 -1
  145. package/src/__tests__/scroll-native.test.ts +0 -25
  146. package/src/provider/scroll-provider.ts +0 -13
  147. package/src/provider/scroll-provider.web.ts +0 -2
@@ -10,16 +10,12 @@ exports.deriveScrollKey = deriveScrollKey;
10
10
  *
11
11
  * This file deliberately contains NO React and NO DOM/native imports so the
12
12
  * logic can be unit-tested in isolation and shared verbatim by the web and
13
- * native barrels. The web barrel drives it with real scroll offsets; the
14
- * native barrel never instantiates it (native-stack already restores scroll).
13
+ * native barrels.
15
14
  */
16
-
17
15
  /**
18
- * Separator between the navigation route key and an optional caller-supplied
19
- * sub-key. A route may host more than one independently-scrolling list (e.g.
20
- * a tabbed profile screen), so each list contributes its own sub-key.
16
+ * Separator between the two components of a storage key.
21
17
  *
22
- * `\0` (NUL) can never appear in a React Navigation route key or in a
18
+ * `\0` (NUL) can never appear in a router-derived content id or in a
23
19
  * developer-authored sub-key, so it is collision-free as a delimiter. It is
24
20
  * written as an escape sequence (not a literal byte) so the source stays
25
21
  * text-diffable.
@@ -27,28 +23,48 @@ exports.deriveScrollKey = deriveScrollKey;
27
23
  const COMPOSITE_KEY_SEPARATOR = '\0';
28
24
 
29
25
  /**
30
- * Derive the storage key for a scrollable from its owning route key and an
31
- * optional caller sub-key.
26
+ * Derive the storage key for a scrollable from WHAT its screen is showing plus
27
+ * an optional caller sub-key.
28
+ *
29
+ * The key is CONTENT identity, deliberately not the navigation entry. An offset
30
+ * belongs to what the user was looking at, so returning to it restores however
31
+ * they got there — browser Back or Forward, a tab press, an in-app link — and
32
+ * only content never seen this session opens at the top. Keying on the entry
33
+ * would defeat that: a tab press and `router.replace` both mint a fresh entry,
34
+ * so both would open at the top even though the user has been there.
35
+ *
36
+ * The trade, chosen rather than overlooked: the same content occupying two LIVE
37
+ * entries now shares one offset. Pushing `/@alice` on top of `/@alice` in a
38
+ * native stack restores the first one's position instead of opening at the top,
39
+ * and while both are mounted each writes to the same key. That is the price of
40
+ * a tab press restoring, which is the behaviour that was asked for.
32
41
  *
33
- * - `routeKey` is React Navigation's stable per-route `route.key`.
34
- * - `subKey` distinguishes multiple scrollables that share a single route.
42
+ * The key is always the same two-field composite, with an absent sub-key
43
+ * written as empty, so two different identities can never collapse onto one key
44
+ * by omission.
35
45
  *
36
- * Returns `null` when there is no route key to anchor against (the scrollable
37
- * is not inside a navigator), which the caller treats as "do not persist".
46
+ * Returns `null` when there is no content id to anchor against (the scrollable
47
+ * is not inside a navigator, or the adapter cannot answer), which every caller
48
+ * treats as "do not persist and do not restore".
38
49
  */
39
- function deriveScrollKey(routeKey, subKey) {
40
- if (!routeKey) return null;
41
- if (subKey === undefined || subKey === '') return routeKey;
42
- return `${routeKey}${COMPOSITE_KEY_SEPARATOR}${subKey}`;
50
+ function deriveScrollKey(contentId, subKey) {
51
+ if (!contentId) return null;
52
+ return [contentId, subKey ?? ''].join(COMPOSITE_KEY_SEPARATOR);
43
53
  }
44
54
 
45
55
  /**
46
56
  * In-memory map of `scrollKey -> last-known scroll offset`.
47
57
  *
48
- * Mirrors the semantics of Bluesky's `Map<screenKey, scrollY>`: offsets live
49
- * only for the lifetime of the document/session. We never persist them — a
50
- * full reload should start at the top and we never auto-evict, because a
51
- * route can be revisited via browser Forward/Back long after it blurred.
58
+ * Offsets live only for the lifetime of the document/session. We never persist
59
+ * them a full reload should start at the top and we never auto-evict,
60
+ * because an entry can be revisited via browser Forward/Back long after it
61
+ * blurred.
62
+ *
63
+ * Deliberately an instance held in React context rather than a module-level
64
+ * singleton: a dependency tree can legitimately contain two copies of Bloom
65
+ * (a hoisted one plus a nested one under another Oxy package), and a
66
+ * module-global would then exist twice with no way for either half to see the
67
+ * other's offsets.
52
68
  */
53
69
  class ScrollOffsetStore {
54
70
  offsets = new Map();
@@ -59,19 +75,25 @@ class ScrollOffsetStore {
59
75
  }
60
76
 
61
77
  /**
62
- * Read the saved offset for a key. Returns `0` when nothing was saved, so
63
- * callers can restore unconditionally (an unseen list restores to the top).
78
+ * Read the saved offset for a key. Returns `0` when nothing was saved, which
79
+ * is the same value a caller writes when {@link has} is false — an unseen
80
+ * list restores to the top.
64
81
  */
65
82
  read(key) {
66
83
  return this.offsets.get(key) ?? 0;
67
84
  }
68
85
 
69
- /** Whether an offset was ever saved for this key. */
86
+ /**
87
+ * Whether an offset was ever saved for this key. This — not `read() > 0` —
88
+ * is what separates "restore" from "reset": a key that was never seen and a
89
+ * key deliberately saved at the top both read 0, and only the store knows
90
+ * which is which.
91
+ */
70
92
  has(key) {
71
93
  return this.offsets.has(key);
72
94
  }
73
95
 
74
- /** Drop a saved offset (e.g. when a route is permanently removed). */
96
+ /** Drop a saved offset (e.g. when an entry is permanently removed). */
75
97
  forget(key) {
76
98
  this.offsets.delete(key);
77
99
  }
@@ -1 +1 @@
1
- {"version":3,"names":["COMPOSITE_KEY_SEPARATOR","deriveScrollKey","routeKey","subKey","undefined","ScrollOffsetStore","offsets","Map","save","key","offset","set","read","get","has","forget","delete","clear","size","exports"],"sourceRoot":"../../../src","sources":["scroll/store.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,uBAAuB,GAAG,IAAI;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAC7BC,QAA4B,EAC5BC,MAAe,EACA;EACf,IAAI,CAACD,QAAQ,EAAE,OAAO,IAAI;EAC1B,IAAIC,MAAM,KAAKC,SAAS,IAAID,MAAM,KAAK,EAAE,EAAE,OAAOD,QAAQ;EAC1D,OAAO,GAAGA,QAAQ,GAAGF,uBAAuB,GAAGG,MAAM,EAAE;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,iBAAiB,CAAC;EACZC,OAAO,GAAG,IAAIC,GAAG,CAAiB,CAAC;;EAEpD;EACAC,IAAIA,CAACC,GAAW,EAAEC,MAAc,EAAQ;IACtC,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACF,GAAG,EAAEC,MAAM,GAAG,CAAC,GAAGA,MAAM,GAAG,CAAC,CAAC;EAChD;;EAEA;AACF;AACA;AACA;EACEE,IAAIA,CAACH,GAAW,EAAU;IACxB,OAAO,IAAI,CAACH,OAAO,CAACO,GAAG,CAACJ,GAAG,CAAC,IAAI,CAAC;EACnC;;EAEA;EACAK,GAAGA,CAACL,GAAW,EAAW;IACxB,OAAO,IAAI,CAACH,OAAO,CAACQ,GAAG,CAACL,GAAG,CAAC;EAC9B;;EAEA;EACAM,MAAMA,CAACN,GAAW,EAAQ;IACxB,IAAI,CAACH,OAAO,CAACU,MAAM,CAACP,GAAG,CAAC;EAC1B;;EAEA;EACAQ,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACX,OAAO,CAACW,KAAK,CAAC,CAAC;EACtB;;EAEA;EACA,IAAIC,IAAIA,CAAA,EAAW;IACjB,OAAO,IAAI,CAACZ,OAAO,CAACY,IAAI;EAC1B;AACF;AAACC,OAAA,CAAAd,iBAAA,GAAAA,iBAAA","ignoreList":[]}
1
+ {"version":3,"names":["COMPOSITE_KEY_SEPARATOR","deriveScrollKey","contentId","subKey","join","ScrollOffsetStore","offsets","Map","save","key","offset","set","read","get","has","forget","delete","clear","size","exports"],"sourceRoot":"../../../src","sources":["scroll/store.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,uBAAuB,GAAG,IAAI;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAC7BC,SAAwB,EACxBC,MAAe,EACA;EACf,IAAI,CAACD,SAAS,EAAE,OAAO,IAAI;EAC3B,OAAO,CAACA,SAAS,EAAEC,MAAM,IAAI,EAAE,CAAC,CAACC,IAAI,CAACJ,uBAAuB,CAAC;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,iBAAiB,CAAC;EACZC,OAAO,GAAG,IAAIC,GAAG,CAAiB,CAAC;;EAEpD;EACAC,IAAIA,CAACC,GAAW,EAAEC,MAAc,EAAQ;IACtC,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACF,GAAG,EAAEC,MAAM,GAAG,CAAC,GAAGA,MAAM,GAAG,CAAC,CAAC;EAChD;;EAEA;AACF;AACA;AACA;AACA;EACEE,IAAIA,CAACH,GAAW,EAAU;IACxB,OAAO,IAAI,CAACH,OAAO,CAACO,GAAG,CAACJ,GAAG,CAAC,IAAI,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEK,GAAGA,CAACL,GAAW,EAAW;IACxB,OAAO,IAAI,CAACH,OAAO,CAACQ,GAAG,CAACL,GAAG,CAAC;EAC9B;;EAEA;EACAM,MAAMA,CAACN,GAAW,EAAQ;IACxB,IAAI,CAACH,OAAO,CAACU,MAAM,CAACP,GAAG,CAAC;EAC1B;;EAEA;EACAQ,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACX,OAAO,CAACW,KAAK,CAAC,CAAC;EACtB;;EAEA;EACA,IAAIC,IAAIA,CAAA,EAAW;IACjB,OAAO,IAAI,CAACZ,OAAO,CAACY,IAAI;EAC1B;AACF;AAACC,OAAA,CAAAd,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -6,83 +6,227 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.TabsTrigger = exports.TabsContent = exports.Tabs = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
9
10
  var _useTheme = require("../theme/use-theme.js");
10
11
  var _usePressAnimation = require("../hooks/usePressAnimation.js");
11
12
  var _tokens = require("../styles/tokens.js");
12
13
  var _shadows = require("../design-tokens/shadows");
13
14
  var _jsxRuntime = require("react/jsx-runtime");
14
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
- const TabsContext = /*#__PURE__*/(0, _react.createContext)({
16
- value: '',
17
- onValueChange: () => {},
18
- variant: 'underline',
19
- fullWidth: false,
20
- reportTriggerLayout: () => {}
21
- });
22
- const TabsBarComponent = ({
16
+ /**
17
+ * Underline travel. The same spring the floating `TabBar` highlight uses, so the
18
+ * two strips read as one motion language; stated here rather than imported
19
+ * because they are separate component families and a shared constant would tie
20
+ * their feel together permanently.
21
+ */
22
+ const SLIDE_SPRING = {
23
+ duration: 420,
24
+ dampingRatio: 0.82
25
+ };
26
+
27
+ /** Visibility, not travel — see {@link TabsContextValue.indicatorOpacity}. */
28
+ const HIGHLIGHT_FADE = {
29
+ duration: 160
30
+ };
31
+
32
+ /**
33
+ * Fraction of the distance to the neighbour a drag must cover before releasing
34
+ * commits. Below it the underline springs home and nothing navigates.
35
+ */
36
+ const COMMIT_THRESHOLD = 0.4;
37
+
38
+ /**
39
+ * How far the underline may stray past the first/last tab, and how heavily that
40
+ * travel is damped. A rubber-band is reserved for the edge, where "there is
41
+ * nothing there" is the true message; used anywhere else it would promise a
42
+ * neighbour that is about to arrive, which is the opposite of what happens.
43
+ */
44
+ const EDGE_RUBBER_BAND_DAMPING = 0.25;
45
+ const EDGE_RUBBER_BAND_MAX = 32;
46
+
47
+ /** Above this the count renders as "99+", so a large tally cannot stretch a tab. */
48
+ const MAX_DISPLAYED_COUNT = 99;
49
+ function formatCount(count) {
50
+ return count > MAX_DISPLAYED_COUNT ? `${MAX_DISPLAYED_COUNT}+` : String(count);
51
+ }
52
+ const TabsContext = /*#__PURE__*/(0, _react.createContext)(null);
53
+
54
+ /**
55
+ * The imperative surface a horizontal drag gesture drives the underline through.
56
+ *
57
+ * It lives here rather than in the gesture's own code because every quantity the
58
+ * drag needs — where the neighbouring trigger is, how wide it is, whether there
59
+ * IS a neighbour — is measured layout the strip already holds and nothing
60
+ * outside it can see. The gesture supplies one number, the finger's delta; the
61
+ * strip decides what that means.
62
+ *
63
+ * Obtained via a `ref` on `Tabs`. The gesture belongs in the LAYOUT beside the
64
+ * strip, never inside a tab screen — a gesture mounted in a screen is destroyed
65
+ * by the navigation it commits, mid-release.
66
+ */
67
+
68
+ function useTabsContext(component) {
69
+ const ctx = (0, _react.useContext)(TabsContext);
70
+ if (!ctx) {
71
+ throw new Error(`${component} must be used within a Tabs`);
72
+ }
73
+ return ctx;
74
+ }
75
+ const TabsBarComponent = /*#__PURE__*/(0, _react.forwardRef)(function TabsBar({
23
76
  value,
24
77
  onValueChange,
78
+ hasSelection = true,
25
79
  variant = 'underline',
26
80
  fullWidth = false,
27
81
  children,
28
82
  style,
29
83
  testID
30
- }) => {
84
+ }, dragRef) {
31
85
  const theme = (0, _useTheme.useTheme)();
32
86
  const isUnderline = variant === 'underline';
33
87
 
34
- // Shared sliding underline: one indicator that translates + resizes between
35
- // triggers. Triggers report their measured {x, width}; the container drives
36
- // these Animated values imperatively (no re-render on measure or slide).
37
- const indicatorX = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
38
- const indicatorWidth = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
88
+ // One shared underline that translates + resizes between triggers. Triggers
89
+ // report their measured {x, width}; whoever owns the selection drives these
90
+ // shared values IMPERATIVELY, and `useAnimatedStyle` below only ever READS
91
+ // them. That split is what makes the animation work on web, where returning
92
+ // an animation from inside a mapper silently does nothing.
93
+ const indicatorX = (0, _reactNativeReanimated.useSharedValue)(0);
94
+ const indicatorWidth = (0, _reactNativeReanimated.useSharedValue)(0);
95
+ // Starts hidden: a strip whose active trigger has not been measured yet must
96
+ // not flash an underline at the origin on its first frame.
97
+ const indicatorOpacity = (0, _reactNativeReanimated.useSharedValue)(0);
98
+ // Live drag, added to the settled position/width rather than replacing them,
99
+ // so a release can fold the delta into the base without a visible jump.
100
+ const dragOffset = (0, _reactNativeReanimated.useSharedValue)(0);
101
+ const dragWidthDelta = (0, _reactNativeReanimated.useSharedValue)(0);
39
102
  const triggerLayoutsRef = (0, _react.useRef)({});
40
103
  const indicatorPlacedRef = (0, _react.useRef)(false);
104
+ const scrollRef = (0, _react.useRef)(null);
105
+ const viewportWidthRef = (0, _react.useRef)(0);
106
+ // The value the underline currently belongs to, from EITHER path. A ref
107
+ // because the layout callback below must see the latest selection without
108
+ // being re-created — and therefore re-firing — on every selection change.
109
+ const selectedValueRef = (0, _react.useRef)(value);
41
110
  const moveIndicator = (0, _react.useCallback)((target, animate) => {
42
111
  if (animate) {
43
- _reactNative.Animated.parallel([_reactNative.Animated.timing(indicatorX, {
44
- toValue: target.x,
45
- duration: 200,
46
- easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
47
- useNativeDriver: false
48
- }), _reactNative.Animated.timing(indicatorWidth, {
49
- toValue: target.width,
50
- duration: 200,
51
- easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
52
- useNativeDriver: false
53
- })]).start();
112
+ indicatorX.value = (0, _reactNativeReanimated.withSpring)(target.x, SLIDE_SPRING);
113
+ indicatorWidth.value = (0, _reactNativeReanimated.withSpring)(target.width, SLIDE_SPRING);
54
114
  } else {
55
- indicatorX.setValue(target.x);
56
- indicatorWidth.setValue(target.width);
115
+ indicatorX.value = target.x;
116
+ indicatorWidth.value = target.width;
57
117
  }
58
- }, [indicatorX, indicatorWidth]);
118
+ indicatorOpacity.value = (0, _reactNativeReanimated.withTiming)(1, HIGHLIGHT_FADE);
119
+ }, [indicatorX, indicatorWidth, indicatorOpacity]);
120
+
121
+ // Keep the active tab in view when the strip overflows its viewport. Centring
122
+ // is what makes a ROUTED strip usable: arriving at a tab that is scrolled out
123
+ // of sight — via a deep link, a Back, or simply a long tab set — must not
124
+ // look like an empty selection.
125
+ const revealTrigger = (0, _react.useCallback)((target, animate) => {
126
+ const viewport = viewportWidthRef.current;
127
+ if (fullWidth || viewport <= 0) return;
128
+ const centred = target.x + target.width / 2 - viewport / 2;
129
+ scrollRef.current?.scrollTo({
130
+ x: Math.max(0, centred),
131
+ animated: animate
132
+ });
133
+ }, [fullWidth]);
134
+ const applySelection = (0, _react.useCallback)(tabValue => {
135
+ const target = triggerLayoutsRef.current[tabValue];
136
+ // Not measured yet — `reportTriggerLayout` places it on arrival.
137
+ if (!target) return;
138
+ const animate = indicatorPlacedRef.current;
139
+ moveIndicator(target, animate);
140
+ revealTrigger(target, animate);
141
+ indicatorPlacedRef.current = true;
142
+ }, [moveIndicator, revealTrigger]);
59
143
  const reportTriggerLayout = (0, _react.useCallback)((tabValue, layout) => {
60
144
  triggerLayoutsRef.current[tabValue] = layout;
61
- // Snap onto the active trigger the moment it's first measured (mount) or
145
+ // Snap onto the active trigger the moment it is first measured (mount), or
62
146
  // when its size changes — never slide in from the origin.
63
- if (tabValue === value) {
147
+ if (tabValue === selectedValueRef.current) {
64
148
  moveIndicator(layout, false);
149
+ revealTrigger(layout, false);
65
150
  indicatorPlacedRef.current = true;
66
151
  }
67
- }, [value, moveIndicator]);
152
+ }, [moveIndicator, revealTrigger]);
153
+ const reportFocused = (0, _react.useCallback)(tabValue => {
154
+ selectedValueRef.current = tabValue;
155
+ applySelection(tabValue);
156
+ }, [applySelection]);
68
157
 
69
- // Slide the indicator to the newly-selected trigger. Syncing an imperative
70
- // Animated value to the controlled `value` prop is a legitimate effect
71
- // (external-system sync); the first placement snaps, later changes animate.
158
+ // CONTROLLED path only: the bar owns the underline when `value` is provided.
159
+ // Syncing an imperative animation to a controlled prop is a legitimate effect
160
+ // (external-system sync). On the focus-driven path each trigger reports
161
+ // instead, so this stays out of the way and there is only ever one writer.
72
162
  (0, _react.useEffect)(() => {
73
- if (!isUnderline) return;
74
- const target = triggerLayoutsRef.current[value];
75
- if (!target) return; // not measured yet — reportTriggerLayout will place it
76
- moveIndicator(target, indicatorPlacedRef.current);
77
- indicatorPlacedRef.current = true;
78
- }, [value, isUnderline, moveIndicator]);
163
+ if (value === undefined) return;
164
+ selectedValueRef.current = value;
165
+ applySelection(value);
166
+ }, [value, applySelection]);
167
+
168
+ // Nothing is focused — fade out where it stands. Position is deliberately
169
+ // untouched: see `TabsProps.hasSelection`. Placing this AFTER the controlled
170
+ // effect is what lets a later re-selection snap back rather than travel,
171
+ // because `indicatorPlacedRef` is left alone here.
172
+ (0, _react.useEffect)(() => {
173
+ if (hasSelection) return;
174
+ indicatorOpacity.value = (0, _reactNativeReanimated.withTiming)(0, HIGHLIGHT_FADE);
175
+ }, [hasSelection, indicatorOpacity]);
176
+ (0, _react.useImperativeHandle)(dragRef, () => ({
177
+ drag(translationX) {
178
+ const current = selectedValueRef.current;
179
+ if (current === undefined) return null;
180
+ // Ordered by measured position, so "the neighbour" means the tab next
181
+ // to it ON SCREEN. Deriving it from child order instead would be wrong
182
+ // the moment a caller reorders or conditionally renders a trigger.
183
+ const ordered = Object.entries(triggerLayoutsRef.current).sort((a, b) => a[1].x - b[1].x);
184
+ const index = ordered.findIndex(([tabValue]) => tabValue === current);
185
+ const from = ordered[index]?.[1];
186
+ if (from === undefined) return null;
187
+
188
+ // Opposite the finger: dragging LEFT reveals the NEXT tab, which is to
189
+ // the right, so that is where the underline goes.
190
+ const travel = -translationX;
191
+ const neighbour = ordered[index + (travel > 0 ? 1 : -1)];
192
+ if (neighbour === undefined) {
193
+ // First or last tab. Resist, never commit — the rubber-band is the
194
+ // honest signal that there is nothing in that direction.
195
+ const damped = Math.min(Math.abs(travel) * EDGE_RUBBER_BAND_DAMPING, EDGE_RUBBER_BAND_MAX);
196
+ dragOffset.value = Math.sign(travel) * damped;
197
+ dragWidthDelta.value = 0;
198
+ return null;
199
+ }
200
+ const [neighbourValue, to] = neighbour;
201
+ const distance = to.x - from.x;
202
+ // Clamped at the neighbour: the underline stops exactly where releasing
203
+ // would leave it, so it never promises travel the commit cannot deliver.
204
+ const progress = Math.min(Math.abs(travel) / Math.abs(distance), 1);
205
+ dragOffset.value = distance * progress;
206
+ dragWidthDelta.value = (to.width - from.width) * progress;
207
+ return progress >= COMMIT_THRESHOLD ? neighbourValue : null;
208
+ },
209
+ release(committed) {
210
+ if (committed === null) {
211
+ dragOffset.value = (0, _reactNativeReanimated.withSpring)(0, SLIDE_SPRING);
212
+ dragWidthDelta.value = (0, _reactNativeReanimated.withSpring)(0, SLIDE_SPRING);
213
+ return;
214
+ }
215
+ // Fold, do not zero — see `TabsDragController.release`.
216
+ indicatorX.value += dragOffset.value;
217
+ indicatorWidth.value += dragWidthDelta.value;
218
+ dragOffset.value = 0;
219
+ dragWidthDelta.value = 0;
220
+ }
221
+ }), [dragOffset, dragWidthDelta, indicatorX, indicatorWidth]);
79
222
  const contextValue = (0, _react.useMemo)(() => ({
80
- value,
223
+ selectedValue: value,
81
224
  onValueChange,
82
225
  variant,
83
226
  fullWidth,
84
- reportTriggerLayout
85
- }), [value, onValueChange, variant, fullWidth, reportTriggerLayout]);
227
+ reportTriggerLayout,
228
+ reportFocused
229
+ }), [value, onValueChange, variant, fullWidth, reportTriggerLayout, reportFocused]);
86
230
  const containerStyle = (0, _react.useMemo)(() => {
87
231
  const base = {
88
232
  flexDirection: 'row',
@@ -107,20 +251,42 @@ const TabsBarComponent = ({
107
251
  }
108
252
  return base;
109
253
  }, [variant, theme]);
110
- const indicator = isUnderline ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
254
+
255
+ // Deps: every shared value the mapper READS is listed. On web WITHOUT the
256
+ // react-native-worklets babel plugin — the production reality for Bloom's
257
+ // Vite consumers — reanimated cannot auto-detect a worklet's reads and drives
258
+ // the mapper off this array instead: omit one and the mapper runs ONCE and
259
+ // freezes at the first frame while the shared value keeps animating
260
+ // underneath, with no error anywhere. Native (plugin present) auto-tracks and
261
+ // ignores the extras, so listing them is correct on both platforms. Same rule
262
+ // as `TabBarBase` and `BottomSheetBase`. Do NOT strip these.
263
+ const indicatorStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
264
+ // The drag deltas ADD to the settled values rather than replacing them,
265
+ // which is what lets a release fold them into the base with no jump.
266
+ width: Math.max(indicatorWidth.value + dragWidthDelta.value, 0),
267
+ opacity: indicatorOpacity.value,
268
+ transform: [{
269
+ translateX: indicatorX.value + dragOffset.value
270
+ }]
271
+ }), [indicatorWidth, dragWidthDelta, indicatorOpacity, indicatorX, dragOffset]);
272
+
273
+ // The underline is a sibling of the triggers INSIDE the scrollable content,
274
+ // so the two share one coordinate space: a trigger's `onLayout` x is already
275
+ // relative to the container the underline is absolutely positioned in. That
276
+ // is why nothing here subtracts a scroll offset — an underline parked outside
277
+ // the scroller would have to, and would lag by a frame on every scroll event.
278
+ const indicator = isUnderline ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
111
279
  pointerEvents: "none",
112
280
  testID: testID ? `${testID}-indicator` : undefined,
113
- style: {
281
+ style: [{
114
282
  position: 'absolute',
115
283
  left: 0,
116
284
  bottom: 0,
117
285
  height: 2,
118
- backgroundColor: theme.colors.primary,
119
- width: indicatorWidth,
120
- transform: [{
121
- translateX: indicatorX
122
- }]
123
- }
286
+ borderTopLeftRadius: 2,
287
+ borderTopRightRadius: 2,
288
+ backgroundColor: theme.colors.primary
289
+ }, indicatorStyle]
124
290
  }) : null;
125
291
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(TabsContext.Provider, {
126
292
  value: contextValue,
@@ -129,41 +295,66 @@ const TabsBarComponent = ({
129
295
  testID: testID,
130
296
  children: [children, indicator]
131
297
  }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
298
+ ref: scrollRef,
132
299
  horizontal: true,
133
300
  showsHorizontalScrollIndicator: false,
134
301
  contentContainerStyle: [containerStyle, style],
302
+ onLayout: e => {
303
+ viewportWidthRef.current = e.nativeEvent.layout.width;
304
+ },
135
305
  testID: testID,
136
306
  children: [children, indicator]
137
307
  })
138
308
  });
139
- };
309
+ });
140
310
  const TabComponent = ({
141
311
  value,
142
312
  label,
143
313
  icon,
314
+ count,
315
+ isFocused,
144
316
  disabled = false,
317
+ onPress: onPressProp,
145
318
  style,
146
319
  textStyle
147
320
  }) => {
148
321
  const theme = (0, _useTheme.useTheme)();
149
322
  const {
150
- value: selectedValue,
323
+ selectedValue,
151
324
  onValueChange,
152
325
  variant,
153
326
  fullWidth,
154
- reportTriggerLayout
155
- } = (0, _react.useContext)(TabsContext);
156
- const isSelected = value === selectedValue;
327
+ reportTriggerLayout,
328
+ reportFocused
329
+ } = useTabsContext('TabsTrigger');
330
+ // The two paths meet here: an explicit `isFocused` (router adapter) wins;
331
+ // otherwise selection comes from the bar's controlled `value`.
332
+ const isSelected = isFocused ?? value === selectedValue;
157
333
  const {
158
334
  scaleAnim,
159
335
  onPressIn,
160
336
  onPressOut
161
337
  } = (0, _usePressAnimation.usePressAnimation)(0.97);
338
+ const resolvedCount = count ?? 0;
339
+ const showCount = resolvedCount > 0;
340
+
341
+ // FOCUS-DRIVEN path only. This covers programmatic navigation too — a deep
342
+ // link, a browser Back, a back gesture — because nothing here asks HOW the
343
+ // change happened: the trigger simply re-renders focused and the underline
344
+ // follows. On the controlled path the bar drives the underline instead, so
345
+ // this stays out of the way to avoid two writers on one shared value.
346
+ (0, _react.useEffect)(() => {
347
+ if (isFocused !== true) return;
348
+ reportFocused(value);
349
+ }, [isFocused, value, reportFocused]);
162
350
  const handlePress = (0, _react.useCallback)(() => {
163
- if (!disabled) {
164
- onValueChange(value);
165
- }
166
- }, [value, disabled, onValueChange]);
351
+ if (disabled) return;
352
+ onPressProp?.();
353
+ // On the focus-driven path navigation is the caller's job (the router
354
+ // adapter's trigger performs it), so reporting a selection here as well
355
+ // would fight the router for the same underline.
356
+ if (isFocused === undefined) onValueChange?.(value);
357
+ }, [value, disabled, onValueChange, onPressProp, isFocused]);
167
358
  const tabStyle = (0, _react.useMemo)(() => {
168
359
  const base = {
169
360
  flexDirection: 'row',
@@ -238,6 +429,7 @@ const TabComponent = ({
238
429
  onPressOut: onPressOut,
239
430
  disabled: disabled,
240
431
  accessibilityRole: "tab",
432
+ accessibilityLabel: showCount ? `${label}, ${resolvedCount}` : label,
241
433
  accessibilityState: {
242
434
  selected: isSelected,
243
435
  disabled
@@ -245,7 +437,15 @@ const TabComponent = ({
245
437
  children: [icon, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
246
438
  style: [labelStyle, textStyle],
247
439
  children: label
248
- })]
440
+ }), showCount ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
441
+ style: {
442
+ fontSize: 11,
443
+ fontWeight: '600',
444
+ color: theme.colors.textTertiary
445
+ },
446
+ numberOfLines: 1,
447
+ children: formatCount(resolvedCount)
448
+ }) : null]
249
449
  })
250
450
  });
251
451
  };
@@ -255,8 +455,8 @@ const TabPanelComponent = ({
255
455
  style
256
456
  }) => {
257
457
  const {
258
- value: selectedValue
259
- } = (0, _react.useContext)(TabsContext);
458
+ selectedValue
459
+ } = useTabsContext('TabsContent');
260
460
  if (value !== selectedValue) return null;
261
461
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
262
462
  style: style,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_usePressAnimation","_tokens","_shadows","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TabsContext","createContext","value","onValueChange","variant","fullWidth","reportTriggerLayout","TabsBarComponent","children","style","testID","theme","useTheme","isUnderline","indicatorX","useRef","Animated","Value","current","indicatorWidth","triggerLayoutsRef","indicatorPlacedRef","moveIndicator","useCallback","target","animate","parallel","timing","toValue","x","duration","easing","Easing","out","cubic","useNativeDriver","width","start","setValue","tabValue","layout","useEffect","contextValue","useMemo","containerStyle","base","flexDirection","alignItems","borderBottomWidth","borderBottomColor","colors","borderLight","backgroundColor","backgroundSecondary","borderRadius","sm","padding","borderWidth","borderColor","border","indicator","jsx","View","pointerEvents","undefined","position","left","bottom","height","primary","transform","translateX","Provider","jsxs","ScrollView","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","TabComponent","label","icon","disabled","textStyle","selectedValue","useContext","isSelected","scaleAnim","onPressIn","onPressOut","usePressAnimation","handlePress","tabStyle","justifyContent","paddingHorizontal","space","lg","paddingVertical","gap","xs","card","assign","bloomShadowStyle","labelStyle","fontSize","fontWeight","color","primaryForeground","textSecondary","onLayout","nativeEvent","scale","flex","Pressable","opacity","onPress","accessibilityRole","accessibilityState","selected","Text","TabPanelComponent","Tabs","exports","memo","displayName","TabsTrigger","TabsContent"],"sourceRoot":"../../../src","sources":["tabs/Tabs.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_useTheme","_usePressAnimation","_tokens","_shadows","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SLIDE_SPRING","duration","dampingRatio","HIGHLIGHT_FADE","COMMIT_THRESHOLD","EDGE_RUBBER_BAND_DAMPING","EDGE_RUBBER_BAND_MAX","MAX_DISPLAYED_COUNT","formatCount","count","String","TabsContext","createContext","useTabsContext","component","ctx","useContext","Error","TabsBarComponent","forwardRef","TabsBar","value","onValueChange","hasSelection","variant","fullWidth","children","style","testID","dragRef","theme","useTheme","isUnderline","indicatorX","useSharedValue","indicatorWidth","indicatorOpacity","dragOffset","dragWidthDelta","triggerLayoutsRef","useRef","indicatorPlacedRef","scrollRef","viewportWidthRef","selectedValueRef","moveIndicator","useCallback","target","animate","withSpring","x","width","withTiming","revealTrigger","viewport","current","centred","scrollTo","Math","max","animated","applySelection","tabValue","reportTriggerLayout","layout","reportFocused","useEffect","undefined","useImperativeHandle","drag","translationX","ordered","entries","sort","a","b","index","findIndex","from","travel","neighbour","damped","min","abs","sign","neighbourValue","to","distance","progress","release","committed","contextValue","useMemo","selectedValue","containerStyle","base","flexDirection","alignItems","borderBottomWidth","borderBottomColor","colors","borderLight","backgroundColor","backgroundSecondary","borderRadius","sm","padding","borderWidth","borderColor","border","indicatorStyle","useAnimatedStyle","opacity","transform","translateX","indicator","jsx","View","pointerEvents","position","left","bottom","height","borderTopLeftRadius","borderTopRightRadius","primary","Provider","jsxs","ScrollView","ref","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","onLayout","nativeEvent","TabComponent","label","icon","isFocused","disabled","onPress","onPressProp","textStyle","isSelected","scaleAnim","onPressIn","onPressOut","usePressAnimation","resolvedCount","showCount","handlePress","tabStyle","justifyContent","paddingHorizontal","space","lg","paddingVertical","gap","xs","card","assign","bloomShadowStyle","labelStyle","fontSize","fontWeight","color","primaryForeground","textSecondary","Animated","scale","flex","Pressable","accessibilityRole","accessibilityLabel","accessibilityState","selected","Text","textTertiary","numberOfLines","TabPanelComponent","Tabs","exports","memo","displayName","TabsTrigger","TabsContent"],"sourceRoot":"../../../src","sources":["tabs/Tabs.tsx"],"mappings":"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","ignoreList":[]}