@oxyhq/bloom 0.51.0 → 0.52.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 (122) hide show
  1. package/lib/commonjs/frosted-icon-button/shared.js +11 -1
  2. package/lib/commonjs/frosted-icon-button/shared.js.map +1 -1
  3. package/lib/commonjs/tab-bar/TabBarBase.js +30 -5
  4. package/lib/commonjs/tab-bar/TabBarBase.js.map +1 -1
  5. package/lib/commonjs/tab-bar/glyph.js +9 -4
  6. package/lib/commonjs/tab-bar/glyph.js.map +1 -1
  7. package/lib/commonjs/tab-bar/glyph.native.js +7 -2
  8. package/lib/commonjs/tab-bar/glyph.native.js.map +1 -1
  9. package/lib/commonjs/tab-bar/index.js +7 -0
  10. package/lib/commonjs/tab-bar/index.js.map +1 -1
  11. package/lib/commonjs/tab-bar/index.web.js +7 -0
  12. package/lib/commonjs/tab-bar/index.web.js.map +1 -1
  13. package/lib/commonjs/tab-bar/shared.js +32 -1
  14. package/lib/commonjs/tab-bar/shared.js.map +1 -1
  15. package/lib/commonjs/tab-bar/surface-solid.js +43 -0
  16. package/lib/commonjs/tab-bar/surface-solid.js.map +1 -0
  17. package/lib/commonjs/tab-bar/surface.js +5 -42
  18. package/lib/commonjs/tab-bar/surface.js.map +1 -1
  19. package/lib/commonjs/tab-bar/surface.native.js +65 -8
  20. package/lib/commonjs/tab-bar/surface.native.js.map +1 -1
  21. package/lib/commonjs/tab-bar/use-reserved-space.js +50 -0
  22. package/lib/commonjs/tab-bar/use-reserved-space.js.map +1 -0
  23. package/lib/module/frosted-icon-button/shared.js +11 -1
  24. package/lib/module/frosted-icon-button/shared.js.map +1 -1
  25. package/lib/module/tab-bar/TabBarBase.js +31 -6
  26. package/lib/module/tab-bar/TabBarBase.js.map +1 -1
  27. package/lib/module/tab-bar/glyph.js +9 -4
  28. package/lib/module/tab-bar/glyph.js.map +1 -1
  29. package/lib/module/tab-bar/glyph.native.js +7 -2
  30. package/lib/module/tab-bar/glyph.native.js.map +1 -1
  31. package/lib/module/tab-bar/index.js +1 -0
  32. package/lib/module/tab-bar/index.js.map +1 -1
  33. package/lib/module/tab-bar/index.web.js +1 -0
  34. package/lib/module/tab-bar/index.web.js.map +1 -1
  35. package/lib/module/tab-bar/shared.js +30 -0
  36. package/lib/module/tab-bar/shared.js.map +1 -1
  37. package/lib/module/tab-bar/surface-solid.js +37 -0
  38. package/lib/module/tab-bar/surface-solid.js.map +1 -0
  39. package/lib/module/tab-bar/surface.js +10 -23
  40. package/lib/module/tab-bar/surface.js.map +1 -1
  41. package/lib/module/tab-bar/surface.native.js +68 -9
  42. package/lib/module/tab-bar/surface.native.js.map +1 -1
  43. package/lib/module/tab-bar/use-reserved-space.js +46 -0
  44. package/lib/module/tab-bar/use-reserved-space.js.map +1 -0
  45. package/lib/typescript/commonjs/benefit-list/types.d.ts +2 -1
  46. package/lib/typescript/commonjs/benefit-list/types.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/fab/types.d.ts +4 -2
  48. package/lib/typescript/commonjs/fab/types.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/frosted-icon-button/shared.d.ts +11 -1
  50. package/lib/typescript/commonjs/frosted-icon-button/shared.d.ts.map +1 -1
  51. package/lib/typescript/commonjs/frosted-icon-button/types.d.ts +2 -1
  52. package/lib/typescript/commonjs/frosted-icon-button/types.d.ts.map +1 -1
  53. package/lib/typescript/commonjs/tab-bar/TabBarBase.d.ts.map +1 -1
  54. package/lib/typescript/commonjs/tab-bar/glyph.d.ts +1 -1
  55. package/lib/typescript/commonjs/tab-bar/glyph.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/tab-bar/glyph.native.d.ts +1 -1
  57. package/lib/typescript/commonjs/tab-bar/glyph.native.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/tab-bar/index.d.ts +1 -0
  59. package/lib/typescript/commonjs/tab-bar/index.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/tab-bar/index.web.d.ts +1 -0
  61. package/lib/typescript/commonjs/tab-bar/index.web.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/tab-bar/shared.d.ts +25 -0
  63. package/lib/typescript/commonjs/tab-bar/shared.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/tab-bar/surface-solid.d.ts +6 -0
  65. package/lib/typescript/commonjs/tab-bar/surface-solid.d.ts.map +1 -0
  66. package/lib/typescript/commonjs/tab-bar/surface.d.ts +28 -5
  67. package/lib/typescript/commonjs/tab-bar/surface.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/tab-bar/surface.native.d.ts.map +1 -1
  69. package/lib/typescript/commonjs/tab-bar/types.d.ts +43 -4
  70. package/lib/typescript/commonjs/tab-bar/types.d.ts.map +1 -1
  71. package/lib/typescript/commonjs/tab-bar/use-reserved-space.d.ts +25 -0
  72. package/lib/typescript/commonjs/tab-bar/use-reserved-space.d.ts.map +1 -0
  73. package/lib/typescript/module/benefit-list/types.d.ts +2 -1
  74. package/lib/typescript/module/benefit-list/types.d.ts.map +1 -1
  75. package/lib/typescript/module/fab/types.d.ts +4 -2
  76. package/lib/typescript/module/fab/types.d.ts.map +1 -1
  77. package/lib/typescript/module/frosted-icon-button/shared.d.ts +11 -1
  78. package/lib/typescript/module/frosted-icon-button/shared.d.ts.map +1 -1
  79. package/lib/typescript/module/frosted-icon-button/types.d.ts +2 -1
  80. package/lib/typescript/module/frosted-icon-button/types.d.ts.map +1 -1
  81. package/lib/typescript/module/tab-bar/TabBarBase.d.ts.map +1 -1
  82. package/lib/typescript/module/tab-bar/glyph.d.ts +1 -1
  83. package/lib/typescript/module/tab-bar/glyph.d.ts.map +1 -1
  84. package/lib/typescript/module/tab-bar/glyph.native.d.ts +1 -1
  85. package/lib/typescript/module/tab-bar/glyph.native.d.ts.map +1 -1
  86. package/lib/typescript/module/tab-bar/index.d.ts +1 -0
  87. package/lib/typescript/module/tab-bar/index.d.ts.map +1 -1
  88. package/lib/typescript/module/tab-bar/index.web.d.ts +1 -0
  89. package/lib/typescript/module/tab-bar/index.web.d.ts.map +1 -1
  90. package/lib/typescript/module/tab-bar/shared.d.ts +25 -0
  91. package/lib/typescript/module/tab-bar/shared.d.ts.map +1 -1
  92. package/lib/typescript/module/tab-bar/surface-solid.d.ts +6 -0
  93. package/lib/typescript/module/tab-bar/surface-solid.d.ts.map +1 -0
  94. package/lib/typescript/module/tab-bar/surface.d.ts +28 -5
  95. package/lib/typescript/module/tab-bar/surface.d.ts.map +1 -1
  96. package/lib/typescript/module/tab-bar/surface.native.d.ts.map +1 -1
  97. package/lib/typescript/module/tab-bar/types.d.ts +43 -4
  98. package/lib/typescript/module/tab-bar/types.d.ts.map +1 -1
  99. package/lib/typescript/module/tab-bar/use-reserved-space.d.ts +25 -0
  100. package/lib/typescript/module/tab-bar/use-reserved-space.d.ts.map +1 -0
  101. package/package.json +2 -8
  102. package/src/__tests__/TabBar.test.tsx +82 -2
  103. package/src/__tests__/TabBarGlassFallback.test.tsx +234 -0
  104. package/src/__tests__/TabBarLongPress.test.tsx +258 -0
  105. package/src/__tests__/TabBarReservedSpace.test.tsx +150 -0
  106. package/src/__tests__/TabBarWebFork.test.ts +47 -0
  107. package/src/__tests__/icon-references.test.ts +243 -0
  108. package/src/benefit-list/types.ts +2 -1
  109. package/src/fab/types.ts +4 -2
  110. package/src/frosted-icon-button/shared.ts +11 -1
  111. package/src/frosted-icon-button/types.ts +2 -1
  112. package/src/tab-bar/TabBarBase.tsx +39 -5
  113. package/src/tab-bar/glyph.native.tsx +5 -2
  114. package/src/tab-bar/glyph.tsx +8 -4
  115. package/src/tab-bar/index.ts +1 -0
  116. package/src/tab-bar/index.web.tsx +1 -0
  117. package/src/tab-bar/shared.ts +38 -0
  118. package/src/tab-bar/surface-solid.tsx +40 -0
  119. package/src/tab-bar/surface.native.tsx +77 -15
  120. package/src/tab-bar/surface.tsx +10 -29
  121. package/src/tab-bar/types.ts +43 -4
  122. package/src/tab-bar/use-reserved-space.ts +44 -0
@@ -7,13 +7,15 @@ exports.TabBarSurface = TabBarSurface;
7
7
  var _expoGlassEffect = require("expo-glass-effect");
8
8
  var _reactNative = require("react-native");
9
9
  var _reactNativeReanimated = _interopRequireDefault(require("react-native-reanimated"));
10
+ var _surfaceSolid = require("./surface-solid.js");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  /**
13
14
  * Ported from expo-glass-tabs v0.1.1 — src/glass-tab-bar.tsx
14
15
  * (MIT © 2026 David Mokos). See the top-level NOTICE.
15
16
  *
16
- * NATIVE variant of the tab bar's capsule surface — real liquid glass.
17
+ * NATIVE variant of the tab bar's capsule surface — real liquid glass, degrading
18
+ * to the solid surface whenever the glass is not actually usable.
17
19
  *
18
20
  * `expo-glass-effect` is imported STATICALLY and this file is the only place it
19
21
  * appears: Metro selects `.native` on iOS/Android, so the import never reaches
@@ -25,15 +27,71 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
25
27
  *
26
28
  * `isLiquidGlassAvailable()` is false on Android and pre-iOS-26, where the
27
29
  * package's `GlassView` has no material to render; those platforms get the same
28
- * opaque fallback the neutral variant paints.
30
+ * opaque fallback the neutral variant paints. "Installed" is not "usable"
31
+ * though, and BOTH remaining hazards sit at MODULE scope, which is why neither
32
+ * can be handled by a branch inside the component:
33
+ *
34
+ * 1. THE NATIVE MODULE. On iOS `isLiquidGlassAvailable()` resolves
35
+ * `ExpoGlassEffect` through `requireNativeModule`, which THROWS
36
+ * `Cannot find native module …` by contract when that module is not in the
37
+ * binary. For these apps it is a normal deploy state rather than a
38
+ * misconfiguration: an OTA JS update can land on a binary built before the
39
+ * package was linked, while the JS side always resolves because expo-router
40
+ * depends on it. Unguarded, the throw escapes render and takes down the whole
41
+ * screen the bar is on.
42
+ * 2. THE EXPORTS. `Animated.createAnimatedComponent(GlassView)` runs at IMPORT
43
+ * time, so a tree that resolves the specifier to something without
44
+ * `GlassView` hands React an `undefined` element type before any render
45
+ * happens.
46
+ *
47
+ * `isGlassEffectAPIAvailable()` is upstream's own third condition: on some iOS 26
48
+ * betas `UIGlassEffect` is missing and touching `GlassView` crashes NATIVELY,
49
+ * below JS (expo/expo#40911). It first shipped in expo-glass-effect 0.1.9, which is
50
+ * exactly why the peer floor is `>=0.1.9`: this file imports the symbol STATICALLY,
51
+ * and a floor predating it would be the same incoherence as declaring a
52
+ * statically-imported package optional. The `typeof` guard below is still not
53
+ * redundant — a peer range only WARNS, so a consumer can resolve an older copy
54
+ * anyway. A missing probe therefore means "not applicable", never "unavailable";
55
+ * reading it the other way would delete the glass look from every working device.
56
+ *
57
+ * Everything that fails routes to the SAME solid surface Android already paints —
58
+ * the intended fallback path, not a new one.
29
59
  */
30
60
 
31
- const AnimatedGlassView = _reactNativeReanimated.default.createAnimatedComponent(_expoGlassEffect.GlassView);
61
+ /**
62
+ * The animated glass view, or `null` when the package did not deliver the two
63
+ * exports this file needs. Built once, and guarded HERE rather than in the
64
+ * component because `createAnimatedComponent` runs on import (hazard 2 above).
65
+ */const AnimatedGlassView = Boolean(_expoGlassEffect.GlassView) && typeof _expoGlassEffect.isLiquidGlassAvailable === 'function' ? _reactNativeReanimated.default.createAnimatedComponent(_expoGlassEffect.GlassView) : null;
66
+
67
+ /** Memo for {@link glassIsUsable} — the answer cannot change within a session. */
68
+ let glassUsable;
69
+
70
+ /**
71
+ * Whether this build can really render glass. Probed once: the native lookup
72
+ * behind it is not free, and on the failing path it throws.
73
+ *
74
+ * The `catch` reports rather than swallows. A bar that silently painted itself
75
+ * opaque on every iOS device would be far more expensive to find than one warning
76
+ * line, and reaching this branch always means a real, fixable packaging mistake.
77
+ * Warning exactly once falls out of the memo — the body runs at most one time.
78
+ */
79
+ function glassIsUsable() {
80
+ if (glassUsable !== undefined) return glassUsable;
81
+ try {
82
+ glassUsable = (0, _expoGlassEffect.isLiquidGlassAvailable)() && (typeof _expoGlassEffect.isGlassEffectAPIAvailable !== 'function' || (0, _expoGlassEffect.isGlassEffectAPIAvailable)());
83
+ } catch (error) {
84
+ glassUsable = false;
85
+ // eslint-disable-next-line no-console
86
+ console.warn('[Bloom] TabBar: expo-glass-effect could not report liquid-glass availability, ' + 'so the bar is painting its solid surface. Install expo-glass-effect and ' + 'rebuild the native app to get the glass capsule.', error);
87
+ }
88
+ return glassUsable;
89
+ }
32
90
  function TabBarSurface({
33
91
  theme,
34
92
  style
35
93
  }) {
36
- if ((0, _expoGlassEffect.isLiquidGlassAvailable)()) {
94
+ if (AnimatedGlassView !== null && glassIsUsable()) {
37
95
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimatedGlassView, {
38
96
  glassEffectStyle: "regular",
39
97
  style: [_reactNative.StyleSheet.absoluteFill, styles.surface, {
@@ -41,10 +99,9 @@ function TabBarSurface({
41
99
  }, style]
42
100
  });
43
101
  }
44
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
45
- style: [_reactNative.StyleSheet.absoluteFill, styles.surface, {
46
- backgroundColor: theme.solidFallback
47
- }, style]
102
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_surfaceSolid.SolidTabBarSurface, {
103
+ theme: theme,
104
+ style: style
48
105
  });
49
106
  }
50
107
  TabBarSurface.displayName = 'TabBarSurface';
@@ -1 +1 @@
1
- {"version":3,"names":["_expoGlassEffect","require","_reactNative","_reactNativeReanimated","_interopRequireDefault","_jsxRuntime","e","__esModule","default","AnimatedGlassView","Animated","createAnimatedComponent","GlassView","TabBarSurface","theme","style","isLiquidGlassAvailable","jsx","glassEffectStyle","StyleSheet","absoluteFill","styles","surface","backgroundColor","glassTint","View","solidFallback","displayName","create","borderCurve"],"sourceRoot":"../../../src","sources":["tab-bar/surface.native.tsx"],"mappings":";;;;;;AAkBA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAC,sBAAA,CAAAH,OAAA;AAA+C,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AApB/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,MAAMG,iBAAiB,GAAGC,8BAAQ,CAACC,uBAAuB,CAACC,0BAAS,CAAC;AAE9D,SAASC,aAAaA,CAAC;EAAEC,KAAK;EAAEC;AAA0B,CAAC,EAAE;EAClE,IAAI,IAAAC,uCAAsB,EAAC,CAAC,EAAE;IAC5B,oBACE,IAAAX,WAAA,CAAAY,GAAA,EAACR,iBAAiB;MAChBS,gBAAgB,EAAC,SAAS;MAC1BH,KAAK,EAAE,CACLI,uBAAU,CAACC,YAAY,EACvBC,MAAM,CAACC,OAAO,EACd;QAAEC,eAAe,EAAET,KAAK,CAACU;MAAU,CAAC,EACpCT,KAAK;IACL,CACH,CAAC;EAEN;EAEA,oBACE,IAAAV,WAAA,CAAAY,GAAA,EAACd,sBAAA,CAAAK,OAAQ,CAACiB,IAAI;IACZV,KAAK,EAAE,CACLI,uBAAU,CAACC,YAAY,EACvBC,MAAM,CAACC,OAAO,EACd;MAAEC,eAAe,EAAET,KAAK,CAACY;IAAc,CAAC,EACxCX,KAAK;EACL,CACH,CAAC;AAEN;AAEAF,aAAa,CAACc,WAAW,GAAG,eAAe;AAE3C,MAAMN,MAAM,GAAGF,uBAAU,CAACS,MAAM,CAAC;EAC/BN,OAAO,EAAE;IACPO,WAAW,EAAE;EACf;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_expoGlassEffect","require","_reactNative","_reactNativeReanimated","_interopRequireDefault","_surfaceSolid","_jsxRuntime","e","__esModule","default","AnimatedGlassView","Boolean","GlassView","isLiquidGlassAvailable","Animated","createAnimatedComponent","glassUsable","glassIsUsable","undefined","isGlassEffectAPIAvailable","error","console","warn","TabBarSurface","theme","style","jsx","glassEffectStyle","StyleSheet","absoluteFill","styles","surface","backgroundColor","glassTint","SolidTabBarSurface","displayName","create","borderCurve"],"sourceRoot":"../../../src","sources":["tab-bar/surface.native.tsx"],"mappings":";;;;;;AA+CA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAC,sBAAA,CAAAH,OAAA;AAGA,IAAAI,aAAA,GAAAJ,OAAA;AAAqD,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AApDrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA,GACA,MAAMG,iBAAiB,GACrBC,OAAO,CAACC,0BAAS,CAAC,IAAI,OAAOC,uCAAsB,KAAK,UAAU,GAC9DC,8BAAQ,CAACC,uBAAuB,CAACH,0BAAS,CAAC,GAC3C,IAAI;;AAEV;AACA,IAAII,WAAgC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAAA,EAAY;EAChC,IAAID,WAAW,KAAKE,SAAS,EAAE,OAAOF,WAAW;EAEjD,IAAI;IACFA,WAAW,GACT,IAAAH,uCAAsB,EAAC,CAAC,KACvB,OAAOM,0CAAyB,KAAK,UAAU,IAAI,IAAAA,0CAAyB,EAAC,CAAC,CAAC;EACpF,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,WAAW,GAAG,KAAK;IACnB;IACAK,OAAO,CAACC,IAAI,CACV,gFAAgF,GAC9E,0EAA0E,GAC1E,kDAAkD,EACpDF,KACF,CAAC;EACH;EAEA,OAAOJ,WAAW;AACpB;AAEO,SAASO,aAAaA,CAAC;EAAEC,KAAK;EAAEC;AAA0B,CAAC,EAAE;EAClE,IAAIf,iBAAiB,KAAK,IAAI,IAAIO,aAAa,CAAC,CAAC,EAAE;IACjD,oBACE,IAAAX,WAAA,CAAAoB,GAAA,EAAChB,iBAAiB;MAChBiB,gBAAgB,EAAC,SAAS;MAC1BF,KAAK,EAAE,CACLG,uBAAU,CAACC,YAAY,EACvBC,MAAM,CAACC,OAAO,EACd;QAAEC,eAAe,EAAER,KAAK,CAACS;MAAU,CAAC,EACpCR,KAAK;IACL,CACH,CAAC;EAEN;EAEA,oBAAO,IAAAnB,WAAA,CAAAoB,GAAA,EAACrB,aAAA,CAAA6B,kBAAkB;IAACV,KAAK,EAAEA,KAAM;IAACC,KAAK,EAAEA;EAAM,CAAE,CAAC;AAC3D;AAEAF,aAAa,CAACY,WAAW,GAAG,eAAe;AAE3C,MAAML,MAAM,GAAGF,uBAAU,CAACQ,MAAM,CAAC;EAC/BL,OAAO,EAAE;IACPM,WAAW,EAAE;EACf;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useTabBarReservedSpace = useTabBarReservedSpace;
7
+ var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
8
+ var _shared = require("./shared.js");
9
+ /**
10
+ * How much room a screen must leave at the bottom for the floating bar.
11
+ *
12
+ * The bar is `position: absolute` over the content, so nothing reserves space
13
+ * for it automatically — every scrollable screen under a tab layout has to pad
14
+ * its own content out from under the pill. That number is built from the bar's
15
+ * private geometry (its expanded height and the gap it keeps from the window's
16
+ * bottom edge), which is exactly why it is exported as a hook: hardcoding it in
17
+ * an app silently drifts the moment the bar changes by a pixel.
18
+ *
19
+ * Platform-neutral, like the rest of the family — `react-native-safe-area-context`
20
+ * is already a required Bloom peer and is what the bar itself measures with.
21
+ */
22
+
23
+ /**
24
+ * The vertical space the tab bar occupies above the bottom of the window, in
25
+ * px. Use it directly as the bottom padding (or bottom offset) of anything that
26
+ * would otherwise sit under the bar:
27
+ *
28
+ * ```tsx
29
+ * const reserved = useTabBarReservedSpace();
30
+ *
31
+ * <Animated.ScrollView contentContainerStyle={{ paddingBottom: reserved }} />
32
+ * <Fab style={{ position: 'absolute', right: 16, bottom: reserved + 12 }} />
33
+ * ```
34
+ *
35
+ * The value ALREADY INCLUDES the bottom safe-area inset — the bar folds the
36
+ * inset into its own bottom gap, so it is measured from the true window edge,
37
+ * not from the safe area. Never write `reserved + insets.bottom`: that counts
38
+ * the home indicator twice and strands a visible band of dead space under every
39
+ * list (a 76px bar reserving 110px on an iOS device or PWA). It is the whole
40
+ * number; nothing needs adding to it.
41
+ *
42
+ * It is the EXPANDED height, deliberately. The bar minimizes while scrolling
43
+ * down and re-expands on the way up, so reserving the minimized height would
44
+ * hide the end of a list the moment the user scrolled back to it.
45
+ */
46
+ function useTabBarReservedSpace() {
47
+ const insets = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
48
+ return (0, _shared.tabBarBottomGap)(insets.bottom) + _shared.EXPANDED_HEIGHT;
49
+ }
50
+ //# sourceMappingURL=use-reserved-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeSafeAreaContext","require","_shared","useTabBarReservedSpace","insets","useSafeAreaInsets","tabBarBottomGap","bottom","EXPANDED_HEIGHT"],"sourceRoot":"../../../src","sources":["tab-bar/use-reserved-space.ts"],"mappings":";;;;;;AAaA,IAAAA,2BAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,sBAAsBA,CAAA,EAAW;EAC/C,MAAMC,MAAM,GAAG,IAAAC,6CAAiB,EAAC,CAAC;EAClC,OAAO,IAAAC,uBAAe,EAACF,MAAM,CAACG,MAAM,CAAC,GAAGC,uBAAe;AACzD","ignoreList":[]}
@@ -92,9 +92,19 @@ export function resolveFrostedPalette(colors, isDark) {
92
92
  * Inject `color` as the icon's `fill` — but only as a FALLBACK: if the caller
93
93
  * already set an explicit `fill` on the icon element, it wins and the node is
94
94
  * returned untouched. Bloom icons resolve their paint as `fill ?? style.color`,
95
- * so a bare `<Icons.X />` gets the theme-aware color for free while an
95
+ * so any bare Bloom icon element gets the theme-aware color for free while an
96
96
  * explicitly-colored icon is never overridden. Non-element children (plain
97
97
  * text/strings) pass through unchanged.
98
+ *
99
+ * KNOWN LIMIT, deliberately not papered over: an icon component that paints from
100
+ * a `color` PROP rather than from `fill`/`style.color` ignores this entirely, and
101
+ * does so SILENTLY — nothing throws, the glyph renders, it simply never takes the
102
+ * tint. `color` is not injected alongside `fill` because the prop is not ours to
103
+ * claim: components use it for semantic variants (`color="danger"`), so writing an
104
+ * `rgb(…)` string into it can produce a worse failure than the one it fixes, and
105
+ * an icon already carrying its own `color` would be clobbered. Consumers with such
106
+ * a set pre-color the element themselves; the tab bar additionally offers
107
+ * `TabBarItem.activeIcon`, which carries selection by shape instead of by tint.
98
108
  */
99
109
  export function applyIconColor(node, color) {
100
110
  if (! /*#__PURE__*/isValidElement(node)) return node;
@@ -1 +1 @@
1
- {"version":3,"names":["cloneElement","isValidElement","withAlpha","SIZE_CONFIG","sm","diameter","iconBox","blur","md","resolveFrostedSize","size","Math","max","round","SURFACE_ALPHA","light","dark","SURFACE_ALPHA_HOVER","RING_ALPHA","RING_ALPHA_HOVER","resolveFrostedPalette","colors","isDark","k","surface","text","surfaceHover","ring","ringHover","icon","activeSurface","primary","activeIcon","primaryForeground","focusRing","shadow","applyIconColor","node","color","el","props","fill"],"sourceRoot":"../../../src","sources":["frosted-icon-button/shared.ts"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,cAAc,QAA2C,OAAO;AAEvF,SAASC,SAAS,QAAQ,yBAAsB;;AAIhD;;AAUA,MAAMC,WAA2D,GAAG;EAClE;EACAC,EAAE,EAAE;IAAEC,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE,EAAE;IAAEC,IAAI,EAAE;EAAG,CAAC;EAC3C;EACAC,EAAE,EAAE;IAAEH,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE,EAAE;IAAEC,IAAI,EAAE;EAAG;AAC5C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,kBAAkBA,CAACC,IAAoC,EAAmB;EACxF,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAO;MACLL,QAAQ,EAAEK,IAAI;MACdJ,OAAO,EAAEK,IAAI,CAACC,GAAG,CAAC,EAAE,EAAED,IAAI,CAACE,KAAK,CAACH,IAAI,GAAG,IAAI,CAAC,CAAC;MAC9CH,IAAI,EAAEI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAACH,IAAI,GAAG,IAAI,CAAC;IAC3C,CAAC;EACH;EACA,OAAOP,WAAW,CAACO,IAAI,CAAC;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMI,aAAa,GAAG;EAAEC,KAAK,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAK,CAAU;AAC1D,MAAMC,mBAAmB,GAAG;EAAEF,KAAK,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAK,CAAU;AAC/D,MAAME,UAAU,GAAG;EAAEH,KAAK,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAK,CAAU;AACvD,MAAMG,gBAAgB,GAAG;EAAEJ,KAAK,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAI,CAAU;;AAE5D;;AA0BA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,qBAAqBA,CAACC,MAAmB,EAAEC,MAAe,EAAkB;EAC1F,MAAMC,CAAC,GAAGD,MAAM,GAAG,MAAM,GAAG,OAAO;EACnC,OAAO;IACLE,OAAO,EAAEtB,SAAS,CAACmB,MAAM,CAACI,IAAI,EAAEX,aAAa,CAACS,CAAC,CAAC,CAAC;IACjDG,YAAY,EAAExB,SAAS,CAACmB,MAAM,CAACI,IAAI,EAAER,mBAAmB,CAACM,CAAC,CAAC,CAAC;IAC5DI,IAAI,EAAEzB,SAAS,CAACmB,MAAM,CAACI,IAAI,EAAEP,UAAU,CAACK,CAAC,CAAC,CAAC;IAC3CK,SAAS,EAAE1B,SAAS,CAACmB,MAAM,CAACI,IAAI,EAAEN,gBAAgB,CAACI,CAAC,CAAC,CAAC;IACtDM,IAAI,EAAER,MAAM,CAACI,IAAI;IACjBK,aAAa,EAAET,MAAM,CAACU,OAAO;IAC7BC,UAAU,EAAEX,MAAM,CAACY,iBAAiB;IACpCC,SAAS,EAAEb,MAAM,CAACU,OAAO;IACzBI,MAAM,EAAEd,MAAM,CAACc;EACjB,CAAC;AACH;;AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,IAAe,EAAEC,KAAa,EAAa;EACxE,IAAI,eAACrC,cAAc,CAACoC,IAAI,CAAC,EAAE,OAAOA,IAAI;EACtC,MAAME,EAAE,GAAGF,IAAuB;EAClC,IAAIE,EAAE,CAACC,KAAK,CAACC,IAAI,IAAI,IAAI,EAAE,OAAOJ,IAAI;EACtC,oBAAOrC,YAAY,CAACuC,EAAE,EAAE;IAAEE,IAAI,EAAEH;EAAM,CAAC,CAAC;AAC1C","ignoreList":[]}
1
+ {"version":3,"names":["cloneElement","isValidElement","withAlpha","SIZE_CONFIG","sm","diameter","iconBox","blur","md","resolveFrostedSize","size","Math","max","round","SURFACE_ALPHA","light","dark","SURFACE_ALPHA_HOVER","RING_ALPHA","RING_ALPHA_HOVER","resolveFrostedPalette","colors","isDark","k","surface","text","surfaceHover","ring","ringHover","icon","activeSurface","primary","activeIcon","primaryForeground","focusRing","shadow","applyIconColor","node","color","el","props","fill"],"sourceRoot":"../../../src","sources":["frosted-icon-button/shared.ts"],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,7 @@ import Animated, { Extrapolation, interpolate, interpolateColor, runOnJS, useAni
22
22
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
23
23
  import { useHaptics } from "../hooks/useHaptics.js";
24
24
  import { setMinimized, useMinimizeState } from "./minimize-context.js";
25
- import { BAR_MARGIN, BLUR_BLEED, EXPANDED_HEIGHT, HIGHLIGHT_EXPANDED, HIGHLIGHT_MINIMIZED, ICON_SIZE, ITEM_GAP, ITEM_PAD_V, LABEL_FONT_SIZE, MINIMIZED_HEIGHT, MINIMIZED_INSET, ROW_PAD_H, SLIDE_SPRING, useTabBarTheme } from "./shared.js";
25
+ import { BAR_MARGIN, BLUR_BLEED, EXPANDED_HEIGHT, HIGHLIGHT_EXPANDED, HIGHLIGHT_MINIMIZED, ICON_SIZE, ITEM_GAP, ITEM_PAD_V, LABEL_FONT_SIZE, LONG_PRESS_MIN_DURATION, MINIMIZED_HEIGHT, MINIMIZED_INSET, ROW_PAD_H, SLIDE_SPRING, tabBarBottomGap, useTabBarTheme } from "./shared.js";
26
26
 
27
27
  /**
28
28
  * What a `TabBarButton` needs from the bar it sits in. `null` when a button is
@@ -41,6 +41,7 @@ function TabBarBody({
41
41
  children,
42
42
  activeIndex,
43
43
  onIndexChange,
44
+ onIndexLongPress,
44
45
  theme: themeOverrides,
45
46
  haptics = true,
46
47
  style,
@@ -71,6 +72,11 @@ function TabBarBody({
71
72
  // scrubbing makes the content jump under the finger.
72
73
  const selectIndex = useCallback(index => onIndexChange?.(index), [onIndexChange]);
73
74
 
75
+ // Long press is reported through the same shape, and deliberately does NOT
76
+ // select: it is a secondary action on the tab under the finger.
77
+ const longPressIndex = useCallback(index => onIndexLongPress?.(index), [onIndexLongPress]);
78
+ const hasLongPress = onIndexLongPress !== undefined;
79
+
74
80
  // CONTROLLED path: the bar owns the highlight when `activeIndex` is provided,
75
81
  // so it tracks the prop even when a consumer renders custom children instead
76
82
  // of `TabBarButton`s. Syncing an imperative animation to a controlled prop is
@@ -135,8 +141,22 @@ function TabBarBody({
135
141
  setMinimized(minimized, 0);
136
142
  runOnJS(selectIndex)(index);
137
143
  });
138
- return Gesture.Race(pan, tap);
139
- }, [windowWidth, tabCount, selectIndex, tick, isDragging, lastTicked, slideIndex, minimized, progress]);
144
+ if (!hasLongPress) return Gesture.Race(pan, tap);
145
+
146
+ // Long press: the ONLY path to one, because the detector consumes the
147
+ // bar's touches and a button's inner `Pressable` therefore never sees a
148
+ // real finger (see `TabBarButtonBody`). Added to the race only when a
149
+ // handler was supplied — an always-armed long press would cancel the pan
150
+ // for anyone who rests a finger before scrubbing, and no existing consumer
151
+ // asked for that. It cannot cost a tap either: the tap gesture gives up at
152
+ // 400ms, before this one can activate at 500ms, so the two are never
153
+ // candidates at the same instant. Resolves its index through the same
154
+ // `indexAtX` worklet as tap and pan, so all three agree on the geometry.
155
+ const longPress = Gesture.LongPress().minDuration(LONG_PRESS_MIN_DURATION).onStart(event => {
156
+ runOnJS(longPressIndex)(Math.round(indexAtX(event.x, progress.value)));
157
+ });
158
+ return Gesture.Race(pan, tap, longPress);
159
+ }, [windowWidth, tabCount, selectIndex, hasLongPress, longPressIndex, tick, isDragging, lastTicked, slideIndex, minimized, progress]);
140
160
 
141
161
  // CRITICAL — every shared value and every scalar a mapper READS must appear
142
162
  // in its dependency array. On web WITHOUT the react-native-worklets babel
@@ -185,7 +205,10 @@ function TabBarBody({
185
205
  }]
186
206
  };
187
207
  }, [progress, slideIndex, windowWidth, tabCount]);
188
- const bottomOffset = Math.max(insets.bottom - 16, 12);
208
+
209
+ // Shared with `useTabBarReservedSpace`, so a consumer reserving layout space
210
+ // for the bar can never drift from where the bar actually sits.
211
+ const bottomOffset = tabBarBottomGap(insets.bottom);
189
212
  const barContext = useMemo(() => ({
190
213
  slideIndex,
191
214
  isDragging,
@@ -315,13 +338,15 @@ function TabBarButtonBody({
315
338
  children: [/*#__PURE__*/_jsx(Glyph, {
316
339
  item: item,
317
340
  tint: theme.inactiveTint,
318
- size: ICON_SIZE
341
+ size: ICON_SIZE,
342
+ active: false
319
343
  }), /*#__PURE__*/_jsx(Animated.View, {
320
344
  style: [StyleSheet.absoluteFill, styles.glyphLayer, activeGlyphStyle],
321
345
  children: /*#__PURE__*/_jsx(Glyph, {
322
346
  item: item,
323
347
  tint: theme.activeTint,
324
- size: ICON_SIZE
348
+ size: ICON_SIZE,
349
+ active: true
325
350
  })
326
351
  })]
327
352
  }), /*#__PURE__*/_jsx(Animated.Text, {
@@ -1 +1 @@
1
- {"version":3,"names":["Children","createContext","useCallback","useContext","useEffect","useMemo","Pressable","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","Animated","Extrapolation","interpolate","interpolateColor","runOnJS","useAnimatedStyle","useSharedValue","withSpring","useSafeAreaInsets","useHaptics","setMinimized","useMinimizeState","BAR_MARGIN","BLUR_BLEED","EXPANDED_HEIGHT","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","ICON_SIZE","ITEM_GAP","ITEM_PAD_V","LABEL_FONT_SIZE","MINIMIZED_HEIGHT","MINIMIZED_INSET","ROW_PAD_H","SLIDE_SPRING","useTabBarTheme","jsx","_jsx","jsxs","_jsxs","BarContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","theme","themeOverrides","haptics","style","viewProps","insets","width","windowWidth","minimized","progress","slideIndex","isDragging","lastTicked","tabCount","Math","max","count","impact","tick","selectIndex","index","undefined","value","gesture","indexAtX","x","minimizedValue","sideInset","CLAMP","barWidth","itemWidth","raw","min","pan","Pan","activeOffsetX","failOffsetY","onStart","round","onUpdate","event","rounded","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","barStyle","height","marginHorizontal","shapeStyle","borderRadius","highlightStyle","barHeight","top","transform","translateX","bottomOffset","bottom","barContext","styles","root","direction","position","left","right","barWrap","marginBottom","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","activeTint","inactiveTint","boxStyle","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","alignSelf","paddingTop","overflow","fontSize","fontWeight","marginTop"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Children","createContext","useCallback","useContext","useEffect","useMemo","Pressable","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","Animated","Extrapolation","interpolate","interpolateColor","runOnJS","useAnimatedStyle","useSharedValue","withSpring","useSafeAreaInsets","useHaptics","setMinimized","useMinimizeState","BAR_MARGIN","BLUR_BLEED","EXPANDED_HEIGHT","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","ICON_SIZE","ITEM_GAP","ITEM_PAD_V","LABEL_FONT_SIZE","LONG_PRESS_MIN_DURATION","MINIMIZED_HEIGHT","MINIMIZED_INSET","ROW_PAD_H","SLIDE_SPRING","tabBarBottomGap","useTabBarTheme","jsx","_jsx","jsxs","_jsxs","BarContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","onIndexLongPress","theme","themeOverrides","haptics","style","viewProps","insets","width","windowWidth","minimized","progress","slideIndex","isDragging","lastTicked","tabCount","Math","max","count","impact","tick","selectIndex","index","longPressIndex","hasLongPress","undefined","value","gesture","indexAtX","x","minimizedValue","sideInset","CLAMP","barWidth","itemWidth","raw","min","pan","Pan","activeOffsetX","failOffsetY","onStart","round","onUpdate","event","rounded","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","longPress","LongPress","minDuration","barStyle","height","marginHorizontal","shapeStyle","borderRadius","highlightStyle","barHeight","top","transform","translateX","bottomOffset","bottom","barContext","styles","root","direction","position","left","right","barWrap","marginBottom","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","activeTint","inactiveTint","boxStyle","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","active","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","alignSelf","paddingTop","overflow","fontSize","fontWeight","marginTop"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":"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","ignoreList":[]}
@@ -4,8 +4,8 @@
4
4
  * Ported from expo-glass-tabs v0.1.1 — src/glass-tab-bar.tsx
5
5
  * (MIT © 2026 David Mokos). See the top-level NOTICE.
6
6
  *
7
- * NEUTRAL default variant of a tab glyph: renders the item's own `icon` node,
8
- * tinted for this crossfade layer.
7
+ * NEUTRAL default variant of a tab glyph: renders the item's own `icon` node
8
+ * or its `activeIcon` on the active layer — tinted for this crossfade layer.
9
9
  *
10
10
  * `item.icon` is the primary icon API for the whole family — a Bloom icon
11
11
  * element, exactly like `TabsTrigger` and `FrostedIconButton` take. `sfSymbol`
@@ -20,18 +20,23 @@ import { jsx as _jsx } from "react/jsx-runtime";
20
20
  export function TabBarGlyph({
21
21
  item,
22
22
  tint,
23
- size
23
+ size,
24
+ active
24
25
  }) {
25
26
  // The tint is injected as the icon's `fill` FALLBACK — an icon that sets its
26
27
  // own `fill` (a brand mark, say) keeps it, so the crossfade layers simply
27
28
  // render it twice at full opacity and it never flickers.
29
+ //
30
+ // `activeIcon` is what makes the crossfade able to swap NODES: an icon set
31
+ // whose selected state is a different SHAPE (outline → filled) cannot be
32
+ // expressed by tinting one node two ways. Absent, the layer renders `icon`.
28
33
  return /*#__PURE__*/_jsx(View, {
29
34
  style: {
30
35
  height: size,
31
36
  alignItems: 'center',
32
37
  justifyContent: 'center'
33
38
  },
34
- children: applyIconColor(item.icon, tint)
39
+ children: applyIconColor(active ? item.activeIcon ?? item.icon : item.icon, tint)
35
40
  });
36
41
  }
37
42
  TabBarGlyph.displayName = 'TabBarGlyph';
@@ -1 +1 @@
1
- {"version":3,"names":["View","applyIconColor","jsx","_jsx","TabBarGlyph","item","tint","size","style","height","alignItems","justifyContent","children","icon","displayName"],"sourceRoot":"../../../src","sources":["tab-bar/glyph.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,IAAI,QAAQ,cAAc;AAEnC,SAASC,cAAc,QAAQ,kCAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG/D,OAAO,SAASC,WAAWA,CAAC;EAAEC,IAAI;EAAEC,IAAI;EAAEC;AAAuB,CAAC,EAAE;EAClE;EACA;EACA;EACA,oBACEJ,IAAA,CAACH,IAAI;IAACQ,KAAK,EAAE;MAAEC,MAAM,EAAEF,IAAI;MAAEG,UAAU,EAAE,QAAQ;MAAEC,cAAc,EAAE;IAAS,CAAE;IAAAC,QAAA,EAC3EX,cAAc,CAACI,IAAI,CAACQ,IAAI,EAAEP,IAAI;EAAC,CAC5B,CAAC;AAEX;AAEAF,WAAW,CAACU,WAAW,GAAG,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["View","applyIconColor","jsx","_jsx","TabBarGlyph","item","tint","size","active","style","height","alignItems","justifyContent","children","activeIcon","icon","displayName"],"sourceRoot":"../../../src","sources":["tab-bar/glyph.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,IAAI,QAAQ,cAAc;AAEnC,SAASC,cAAc,QAAQ,kCAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG/D,OAAO,SAASC,WAAWA,CAAC;EAAEC,IAAI;EAAEC,IAAI;EAAEC,IAAI;EAAEC;AAAyB,CAAC,EAAE;EAC1E;EACA;EACA;EACA;EACA;EACA;EACA;EACA,oBACEL,IAAA,CAACH,IAAI;IAACS,KAAK,EAAE;MAAEC,MAAM,EAAEH,IAAI;MAAEI,UAAU,EAAE,QAAQ;MAAEC,cAAc,EAAE;IAAS,CAAE;IAAAC,QAAA,EAC3EZ,cAAc,CAACO,MAAM,GAAIH,IAAI,CAACS,UAAU,IAAIT,IAAI,CAACU,IAAI,GAAIV,IAAI,CAACU,IAAI,EAAET,IAAI;EAAC,CACtE,CAAC;AAEX;AAEAF,WAAW,CAACY,WAAW,GAAG,aAAa","ignoreList":[]}
@@ -20,7 +20,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
20
20
  export function TabBarGlyph({
21
21
  item,
22
22
  tint,
23
- size
23
+ size,
24
+ active
24
25
  }) {
25
26
  if (item.sfSymbol && Platform.OS === 'ios') {
26
27
  // `TabBarItem.sfSymbol` is a plain `string` because `types.ts` may import
@@ -37,13 +38,17 @@ export function TabBarGlyph({
37
38
  weight: "semibold"
38
39
  });
39
40
  }
41
+
42
+ // Same node-swapping crossfade as the neutral variant: the active layer takes
43
+ // `activeIcon` when the item has one. An SF Symbol never reaches here, and is
44
+ // tinted natively above, so the tint crossfade remains its correct expression.
40
45
  return /*#__PURE__*/_jsx(View, {
41
46
  style: {
42
47
  height: size,
43
48
  alignItems: 'center',
44
49
  justifyContent: 'center'
45
50
  },
46
- children: applyIconColor(item.icon, tint)
51
+ children: applyIconColor(active ? item.activeIcon ?? item.icon : item.icon, tint)
47
52
  });
48
53
  }
49
54
  TabBarGlyph.displayName = 'TabBarGlyph';
@@ -1 +1 @@
1
- {"version":3,"names":["SymbolView","Platform","View","applyIconColor","jsx","_jsx","TabBarGlyph","item","tint","size","sfSymbol","OS","name","tintColor","weight","style","height","alignItems","justifyContent","children","icon","displayName"],"sourceRoot":"../../../src","sources":["tab-bar/glyph.native.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,UAAU,QAAuB,cAAc;AACxD,SAASC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAE7C,SAASC,cAAc,QAAQ,kCAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG/D,OAAO,SAASC,WAAWA,CAAC;EAAEC,IAAI;EAAEC,IAAI;EAAEC;AAAuB,CAAC,EAAE;EAClE,IAAIF,IAAI,CAACG,QAAQ,IAAIT,QAAQ,CAACU,EAAE,KAAK,KAAK,EAAE;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA,oBACEN,IAAA,CAACL,UAAU;MACTY,IAAI,EAAEL,IAAI,CAACG,QAAqB;MAChCG,SAAS,EAAEL,IAAK;MAChBC,IAAI,EAAEA,IAAK;MACXK,MAAM,EAAC;IAAU,CAClB,CAAC;EAEN;EAEA,oBACET,IAAA,CAACH,IAAI;IAACa,KAAK,EAAE;MAAEC,MAAM,EAAEP,IAAI;MAAEQ,UAAU,EAAE,QAAQ;MAAEC,cAAc,EAAE;IAAS,CAAE;IAAAC,QAAA,EAC3EhB,cAAc,CAACI,IAAI,CAACa,IAAI,EAAEZ,IAAI;EAAC,CAC5B,CAAC;AAEX;AAEAF,WAAW,CAACe,WAAW,GAAG,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["SymbolView","Platform","View","applyIconColor","jsx","_jsx","TabBarGlyph","item","tint","size","active","sfSymbol","OS","name","tintColor","weight","style","height","alignItems","justifyContent","children","activeIcon","icon","displayName"],"sourceRoot":"../../../src","sources":["tab-bar/glyph.native.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,UAAU,QAAuB,cAAc;AACxD,SAASC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAE7C,SAASC,cAAc,QAAQ,kCAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG/D,OAAO,SAASC,WAAWA,CAAC;EAAEC,IAAI;EAAEC,IAAI;EAAEC,IAAI;EAAEC;AAAyB,CAAC,EAAE;EAC1E,IAAIH,IAAI,CAACI,QAAQ,IAAIV,QAAQ,CAACW,EAAE,KAAK,KAAK,EAAE;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA,oBACEP,IAAA,CAACL,UAAU;MACTa,IAAI,EAAEN,IAAI,CAACI,QAAqB;MAChCG,SAAS,EAAEN,IAAK;MAChBC,IAAI,EAAEA,IAAK;MACXM,MAAM,EAAC;IAAU,CAClB,CAAC;EAEN;;EAEA;EACA;EACA;EACA,oBACEV,IAAA,CAACH,IAAI;IAACc,KAAK,EAAE;MAAEC,MAAM,EAAER,IAAI;MAAES,UAAU,EAAE,QAAQ;MAAEC,cAAc,EAAE;IAAS,CAAE;IAAAC,QAAA,EAC3EjB,cAAc,CAACO,MAAM,GAAIH,IAAI,CAACc,UAAU,IAAId,IAAI,CAACe,IAAI,GAAIf,IAAI,CAACe,IAAI,EAAEd,IAAI;EAAC,CACtE,CAAC;AAEX;AAEAF,WAAW,CAACiB,WAAW,GAAG,aAAa","ignoreList":[]}
@@ -21,4 +21,5 @@ import { TabBarSurface } from './surface';
21
21
  export const TabBar = createTabBar(TabBarSurface, ProgressiveBlur);
22
22
  export const TabBarButton = createTabBarButton(TabBarGlyph);
23
23
  export { MINIMIZE_SPRING, setMinimized, TabBarMinimizeProvider, useMinimizeOnScroll, useMinimizeState, useTabBarMinimized } from "./minimize-context.js";
24
+ export { useTabBarReservedSpace } from "./use-reserved-space.js";
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ProgressiveBlur","createTabBar","createTabBarButton","TabBarGlyph","TabBarSurface","TabBar","TabBarButton","MINIMIZE_SPRING","setMinimized","TabBarMinimizeProvider","useMinimizeOnScroll","useMinimizeState","useTabBarMinimized"],"sourceRoot":"../../../src","sources":["tab-bar/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,qBAAqB;AACrD,SAASC,YAAY,EAAEC,kBAAkB,QAAQ,iBAAc;AAC/D,SAASC,WAAW,QAAQ,SAAS;AACrC,SAASC,aAAa,QAAQ,WAAW;AAEzC,OAAO,MAAMC,MAAM,GAAGJ,YAAY,CAACG,aAAa,EAAEJ,eAAe,CAAC;AAClE,OAAO,MAAMM,YAAY,GAAGJ,kBAAkB,CAACC,WAAW,CAAC;AAE3D,SACEI,eAAe,EACfC,YAAY,EACZC,sBAAsB,EACtBC,mBAAmB,EACnBC,gBAAgB,EAChBC,kBAAkB,QACb,uBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["ProgressiveBlur","createTabBar","createTabBarButton","TabBarGlyph","TabBarSurface","TabBar","TabBarButton","MINIMIZE_SPRING","setMinimized","TabBarMinimizeProvider","useMinimizeOnScroll","useMinimizeState","useTabBarMinimized","useTabBarReservedSpace"],"sourceRoot":"../../../src","sources":["tab-bar/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,qBAAqB;AACrD,SAASC,YAAY,EAAEC,kBAAkB,QAAQ,iBAAc;AAC/D,SAASC,WAAW,QAAQ,SAAS;AACrC,SAASC,aAAa,QAAQ,WAAW;AAEzC,OAAO,MAAMC,MAAM,GAAGJ,YAAY,CAACG,aAAa,EAAEJ,eAAe,CAAC;AAClE,OAAO,MAAMM,YAAY,GAAGJ,kBAAkB,CAACC,WAAW,CAAC;AAE3D,SACEI,eAAe,EACfC,YAAY,EACZC,sBAAsB,EACtBC,mBAAmB,EACnBC,gBAAgB,EAChBC,kBAAkB,QACb,uBAAoB;AAE3B,SAASC,sBAAsB,QAAQ,yBAAsB","ignoreList":[]}
@@ -23,4 +23,5 @@ import { TabBarSurface } from "./surface.web.js";
23
23
  export const TabBar = createTabBar(TabBarSurface, ProgressiveBlur);
24
24
  export const TabBarButton = createTabBarButton(TabBarGlyph);
25
25
  export { MINIMIZE_SPRING, setMinimized, TabBarMinimizeProvider, useMinimizeOnScroll, useMinimizeState, useTabBarMinimized } from "./minimize-context.js";
26
+ export { useTabBarReservedSpace } from "./use-reserved-space.js";
26
27
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ProgressiveBlur","createTabBar","createTabBarButton","TabBarGlyph","TabBarSurface","TabBar","TabBarButton","MINIMIZE_SPRING","setMinimized","TabBarMinimizeProvider","useMinimizeOnScroll","useMinimizeState","useTabBarMinimized"],"sourceRoot":"../../../src","sources":["tab-bar/index.web.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,YAAY,EAAEC,kBAAkB,QAAQ,iBAAc;AAC/D,SAASC,WAAW,QAAQ,SAAS;AACrC,SAASC,aAAa,QAAQ,kBAAe;AAE7C,OAAO,MAAMC,MAAM,GAAGJ,YAAY,CAACG,aAAa,EAAEJ,eAAe,CAAC;AAClE,OAAO,MAAMM,YAAY,GAAGJ,kBAAkB,CAACC,WAAW,CAAC;AAE3D,SACEI,eAAe,EACfC,YAAY,EACZC,sBAAsB,EACtBC,mBAAmB,EACnBC,gBAAgB,EAChBC,kBAAkB,QACb,uBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["ProgressiveBlur","createTabBar","createTabBarButton","TabBarGlyph","TabBarSurface","TabBar","TabBarButton","MINIMIZE_SPRING","setMinimized","TabBarMinimizeProvider","useMinimizeOnScroll","useMinimizeState","useTabBarMinimized","useTabBarReservedSpace"],"sourceRoot":"../../../src","sources":["tab-bar/index.web.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,YAAY,EAAEC,kBAAkB,QAAQ,iBAAc;AAC/D,SAASC,WAAW,QAAQ,SAAS;AACrC,SAASC,aAAa,QAAQ,kBAAe;AAE7C,OAAO,MAAMC,MAAM,GAAGJ,YAAY,CAACG,aAAa,EAAEJ,eAAe,CAAC;AAClE,OAAO,MAAMM,YAAY,GAAGJ,kBAAkB,CAACC,WAAW,CAAC;AAE3D,SACEI,eAAe,EACfC,YAAY,EACZC,sBAAsB,EACtBC,mBAAmB,EACnBC,gBAAgB,EAChBC,kBAAkB,QACb,uBAAoB;AAE3B,SAASC,sBAAsB,QAAQ,yBAAsB","ignoreList":[]}
@@ -47,6 +47,27 @@ export const BLUR_BLEED = 44;
47
47
  /** Label type size. Small by design — the icon carries the meaning. */
48
48
  export const LABEL_FONT_SIZE = 9.5;
49
49
 
50
+ /**
51
+ * How much of the bottom safe-area inset the bar's own gap absorbs. The pill
52
+ * already floats clear of the content, so sitting the FULL inset below it
53
+ * strands it in the middle of the screen on a home-indicator device.
54
+ */
55
+ const SAFE_AREA_ABSORBED = 16;
56
+ /** Gap floor, for a device (or a browser) reporting no bottom inset at all. */
57
+ const MIN_BOTTOM_GAP = 12;
58
+
59
+ /**
60
+ * Vertical gap between the bottom of the pill and the bottom of the window.
61
+ *
62
+ * The safe-area inset is folded in HERE, which is why anything reserving layout
63
+ * space for the bar must go through `useTabBarReservedSpace` (which derives its
64
+ * number from this same function) rather than adding `insets.bottom` to a
65
+ * hardcoded height — that double-counts the inset.
66
+ */
67
+ export function tabBarBottomGap(bottomInset) {
68
+ return Math.max(bottomInset - SAFE_AREA_ABSORBED, MIN_BOTTOM_GAP);
69
+ }
70
+
50
71
  /**
51
72
  * Slide spring: interruptible by design — rapid tab-hopping retargets with
52
73
  * preserved velocity. Slight under-damping gives the pill a tiny settle, safe
@@ -57,6 +78,15 @@ export const SLIDE_SPRING = {
57
78
  dampingRatio: 0.82
58
79
  };
59
80
 
81
+ /**
82
+ * How long a press must be held before `onIndexLongPress` fires.
83
+ *
84
+ * Comfortably above the tap gesture's own 400ms ceiling: the two can never both
85
+ * be candidates at the same instant, so arming the long press cannot cost the
86
+ * bar a tap. Matches the platform long-press feel (iOS ~0.5s).
87
+ */
88
+ export const LONG_PRESS_MIN_DURATION = 500;
89
+
60
90
  // ---------------------------------------------------------------------------
61
91
  // Theme
62
92
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","withAlpha","useTheme","EXPANDED_HEIGHT","MINIMIZED_HEIGHT","MINIMIZED_INSET","BAR_MARGIN","ROW_PAD_H","LABEL_HEIGHT","ICON_SIZE","ITEM_GAP","LABEL_BLOCK","ITEM_PAD_V","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","BLUR_BLEED","LABEL_FONT_SIZE","SLIDE_SPRING","duration","dampingRatio","resolveTabBarTheme","colors","overrides","activeTint","text","inactiveTint","textSecondary","highlight","contrast50","glassTint","background","solidFallback","backgroundSecondary","useTabBarTheme"],"sourceRoot":"../../../src","sources":["tab-bar/shared.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,OAAO;AAI/B,SAASC,SAAS,QAAQ,yBAAsB;AAEhD,SAASC,QAAQ,QAAQ,uBAAoB;AAG7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMC,eAAe,GAAG,EAAE;AACjC,OAAO,MAAMC,gBAAgB,GAAG,EAAE;AAClC;AACA,OAAO,MAAMC,eAAe,GAAG,EAAE;AACjC;AACA,OAAO,MAAMC,UAAU,GAAG,EAAE;AAC5B;AACA,OAAO,MAAMC,SAAS,GAAG,CAAC;AAC1B,OAAO,MAAMC,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,SAAS,GAAG,EAAE;AAC3B;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAG,CAAC;AACzB,OAAO,MAAMC,WAAW,GAAGH,YAAY,GAAGE,QAAQ;AAClD,OAAO,MAAME,UAAU,GAAG,CAAC;AAC3B;AACA,OAAO,MAAMC,kBAAkB,GAAGJ,SAAS,GAAGE,WAAW,GAAGC,UAAU,GAAG,CAAC;AAC1E,OAAO,MAAME,mBAAmB,GAAGL,SAAS,GAAGG,UAAU,GAAG,CAAC;AAC7D;AACA,OAAO,MAAMG,UAAU,GAAG,EAAE;AAC5B;AACA,OAAO,MAAMC,eAAe,GAAG,GAAG;;AAElC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAG;EAAEC,QAAQ,EAAE,GAAG;EAAEC,YAAY,EAAE;AAAK,CAAC;;AAEjE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,MAAmB,EACnBC,SAAgC,EACnB;EACb,OAAO;IACLC,UAAU,EAAED,SAAS,EAAEC,UAAU,IAAIF,MAAM,CAACG,IAAI;IAChDC,YAAY,EAAEH,SAAS,EAAEG,YAAY,IAAIJ,MAAM,CAACK,aAAa;IAC7DC,SAAS,EAAEL,SAAS,EAAEK,SAAS,IAAIN,MAAM,CAACO,UAAU;IACpDC,SAAS,EAAEP,SAAS,EAAEO,SAAS,IAAI5B,SAAS,CAACoB,MAAM,CAACS,UAAU,EAAE,IAAI,CAAC;IACrEC,aAAa,EAAET,SAAS,EAAES,aAAa,IAAI9B,SAAS,CAACoB,MAAM,CAACW,mBAAmB,EAAE,IAAI;EACvF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACX,SAAgC,EAAe;EAC5E,MAAM;IAAED;EAAO,CAAC,GAAGnB,QAAQ,CAAC,CAAC;EAC7B,MAAM;IAAEqB,UAAU;IAAEE,YAAY;IAAEE,SAAS;IAAEE,SAAS;IAAEE;EAAc,CAAC,GAAGT,SAAS,IAAI,CAAC,CAAC;EAEzF,OAAOtB,OAAO,CACZ,MACEoB,kBAAkB,CAACC,MAAM,EAAE;IACzBE,UAAU;IACVE,YAAY;IACZE,SAAS;IACTE,SAAS;IACTE;EACF,CAAC,CAAC,EACJ,CAACV,MAAM,EAAEE,UAAU,EAAEE,YAAY,EAAEE,SAAS,EAAEE,SAAS,EAAEE,aAAa,CACxE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","withAlpha","useTheme","EXPANDED_HEIGHT","MINIMIZED_HEIGHT","MINIMIZED_INSET","BAR_MARGIN","ROW_PAD_H","LABEL_HEIGHT","ICON_SIZE","ITEM_GAP","LABEL_BLOCK","ITEM_PAD_V","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","BLUR_BLEED","LABEL_FONT_SIZE","SAFE_AREA_ABSORBED","MIN_BOTTOM_GAP","tabBarBottomGap","bottomInset","Math","max","SLIDE_SPRING","duration","dampingRatio","LONG_PRESS_MIN_DURATION","resolveTabBarTheme","colors","overrides","activeTint","text","inactiveTint","textSecondary","highlight","contrast50","glassTint","background","solidFallback","backgroundSecondary","useTabBarTheme"],"sourceRoot":"../../../src","sources":["tab-bar/shared.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Ported from expo-glass-tabs v0.1.1 — src/glass-tab-bar.tsx
5
+ * (MIT © 2026 David Mokos). See the top-level NOTICE.
6
+ *
7
+ * The tab bar's NON-GLASS capsule surface: a plain animated view filled with the
8
+ * theme's near-opaque fallback. Android, pre-iOS-26 devices and any build without
9
+ * a usable `expo-glass-effect` all paint this.
10
+ *
11
+ * It lives in its own module because TWO variants render it and one of them
12
+ * cannot reach the other: Metro resolves a bare `./surface` to
13
+ * `surface.native.tsx` no matter which file asks, so `surface.native.tsx`
14
+ * importing its neutral sibling for the fallback would import ITSELF. A name with
15
+ * no platform variants resolves to this one file everywhere — which is the whole
16
+ * point, so please do not fold it back into `surface.tsx`.
17
+ */
18
+ import { StyleSheet } from 'react-native';
19
+ import Animated from 'react-native-reanimated';
20
+ import { jsx as _jsx } from "react/jsx-runtime";
21
+ export function SolidTabBarSurface({
22
+ theme,
23
+ style
24
+ }) {
25
+ return /*#__PURE__*/_jsx(Animated.View, {
26
+ style: [StyleSheet.absoluteFill, styles.surface, {
27
+ backgroundColor: theme.solidFallback
28
+ }, style]
29
+ });
30
+ }
31
+ SolidTabBarSurface.displayName = 'SolidTabBarSurface';
32
+ const styles = StyleSheet.create({
33
+ surface: {
34
+ borderCurve: 'continuous'
35
+ }
36
+ });
37
+ //# sourceMappingURL=surface-solid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","Animated","jsx","_jsx","SolidTabBarSurface","theme","style","View","absoluteFill","styles","surface","backgroundColor","solidFallback","displayName","create","borderCurve"],"sourceRoot":"../../../src","sources":["tab-bar/surface-solid.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,MAAM,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAI/C,OAAO,SAASC,kBAAkBA,CAAC;EAAEC,KAAK;EAAEC;AAA0B,CAAC,EAAE;EACvE,oBACEH,IAAA,CAACF,QAAQ,CAACM,IAAI;IACZD,KAAK,EAAE,CACLN,UAAU,CAACQ,YAAY,EACvBC,MAAM,CAACC,OAAO,EACd;MAAEC,eAAe,EAAEN,KAAK,CAACO;IAAc,CAAC,EACxCN,KAAK;EACL,CACH,CAAC;AAEN;AAEAF,kBAAkB,CAACS,WAAW,GAAG,oBAAoB;AAErD,MAAMJ,MAAM,GAAGT,UAAU,CAACc,MAAM,CAAC;EAC/BJ,OAAO,EAAE;IACPK,WAAW,EAAE;EACf;AACF,CAAC,CAAC","ignoreList":[]}