@oxyhq/bloom 0.24.1 → 0.25.1

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 (45) hide show
  1. package/lib/commonjs/list/index.js +94 -0
  2. package/lib/commonjs/list/index.js.map +1 -0
  3. package/lib/commonjs/list/index.web.js +216 -0
  4. package/lib/commonjs/list/index.web.js.map +1 -0
  5. package/lib/commonjs/list/types.js +6 -0
  6. package/lib/commonjs/list/types.js.map +1 -0
  7. package/lib/commonjs/theme/color-scope/index.js +21 -10
  8. package/lib/commonjs/theme/color-scope/index.js.map +1 -1
  9. package/lib/commonjs/theme/color-scope/index.web.js +21 -10
  10. package/lib/commonjs/theme/color-scope/index.web.js.map +1 -1
  11. package/lib/module/list/index.js +89 -0
  12. package/lib/module/list/index.js.map +1 -0
  13. package/lib/module/list/index.web.js +211 -0
  14. package/lib/module/list/index.web.js.map +1 -0
  15. package/lib/module/list/types.js +4 -0
  16. package/lib/module/list/types.js.map +1 -0
  17. package/lib/module/theme/color-scope/index.js +21 -10
  18. package/lib/module/theme/color-scope/index.js.map +1 -1
  19. package/lib/module/theme/color-scope/index.web.js +21 -10
  20. package/lib/module/theme/color-scope/index.web.js.map +1 -1
  21. package/lib/typescript/commonjs/list/index.d.ts +29 -0
  22. package/lib/typescript/commonjs/list/index.d.ts.map +1 -0
  23. package/lib/typescript/commonjs/list/index.web.d.ts +45 -0
  24. package/lib/typescript/commonjs/list/index.web.d.ts.map +1 -0
  25. package/lib/typescript/commonjs/list/types.d.ts +77 -0
  26. package/lib/typescript/commonjs/list/types.d.ts.map +1 -0
  27. package/lib/typescript/commonjs/theme/color-scope/index.d.ts.map +1 -1
  28. package/lib/typescript/commonjs/theme/color-scope/index.web.d.ts.map +1 -1
  29. package/lib/typescript/module/list/index.d.ts +29 -0
  30. package/lib/typescript/module/list/index.d.ts.map +1 -0
  31. package/lib/typescript/module/list/index.web.d.ts +45 -0
  32. package/lib/typescript/module/list/index.web.d.ts.map +1 -0
  33. package/lib/typescript/module/list/types.d.ts +77 -0
  34. package/lib/typescript/module/list/types.d.ts.map +1 -0
  35. package/lib/typescript/module/theme/color-scope/index.d.ts.map +1 -1
  36. package/lib/typescript/module/theme/color-scope/index.web.d.ts.map +1 -1
  37. package/package.json +20 -1
  38. package/src/__tests__/BloomColorScope.test.tsx +66 -0
  39. package/src/__tests__/VirtualList.native.test.tsx +67 -0
  40. package/src/__tests__/VirtualList.web.test.tsx +127 -0
  41. package/src/list/index.tsx +121 -0
  42. package/src/list/index.web.tsx +261 -0
  43. package/src/list/types.ts +85 -0
  44. package/src/theme/color-scope/index.tsx +26 -15
  45. package/src/theme/color-scope/index.web.tsx +25 -15
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.VirtualList = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ 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); }
11
+ /**
12
+ * `VirtualList` — the canonical cross-platform virtualized list for the Oxy
13
+ * ecosystem. Every app uses this ONE implementation for grouped/stacked row
14
+ * lists (who-to-follow, starter packs, connections, settings rows, …) so the
15
+ * virtualization behaviour is identical everywhere.
16
+ *
17
+ * NATIVE variant: a thin, correctly-typed wrapper over React Native `FlatList`.
18
+ * The consumer lists this component replaces are short and uniform, so the
19
+ * platform's own virtualization is the simplest robust choice — no
20
+ * `@legendapp/list`, no app-specific scroll bridge, nothing for a consumer to
21
+ * wire up. Bloom stays app-agnostic.
22
+ *
23
+ * WEB variant (`index.web.tsx`, selected via the `"browser"` export condition):
24
+ * a document-scroll window virtualizer built on `@tanstack/react-virtual`.
25
+ *
26
+ * This default file has NO platform-only imports, so consumer `tsc` and web
27
+ * bundlers resolve it cleanly (mirrors the `../scroll` / `../content-panel`
28
+ * fork pattern). The public API is shared via `./types`, so both forks expose
29
+ * an identical, generic, strongly-typed surface.
30
+ */
31
+
32
+ function renderSlot(slot) {
33
+ if (!slot) return null;
34
+ return typeof slot === 'function' ? slot() : slot;
35
+ }
36
+ function VirtualListNativeInner(props, ref) {
37
+ const {
38
+ data,
39
+ renderItem,
40
+ keyExtractor,
41
+ ListHeaderComponent,
42
+ ListEmptyComponent,
43
+ ListFooterComponent,
44
+ style,
45
+ contentContainerStyle,
46
+ onEndReached,
47
+ onEndReachedThreshold,
48
+ refreshing,
49
+ onRefresh,
50
+ initialNumToRender,
51
+ maxToRenderPerBatch,
52
+ windowSize,
53
+ removeClippedSubviews,
54
+ testID
55
+ } = props;
56
+ const listRef = React.useRef(null);
57
+ React.useImperativeHandle(ref, () => ({
58
+ scrollToOffset: params => listRef.current?.scrollToOffset({
59
+ offset: params?.offset ?? 0,
60
+ animated: params?.animated ?? true
61
+ }),
62
+ scrollTo: params => listRef.current?.scrollToOffset({
63
+ offset: params?.y ?? 0,
64
+ animated: params?.animated ?? true
65
+ })
66
+ }), []);
67
+ const renderFlatItem = React.useCallback(info => renderItem ? renderItem({
68
+ item: info.item,
69
+ index: info.index
70
+ }) : null, [renderItem]);
71
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
72
+ ref: listRef,
73
+ data: data ?? undefined,
74
+ renderItem: renderFlatItem,
75
+ keyExtractor: keyExtractor,
76
+ ListHeaderComponent: renderSlot(ListHeaderComponent),
77
+ ListEmptyComponent: renderSlot(ListEmptyComponent),
78
+ ListFooterComponent: renderSlot(ListFooterComponent),
79
+ style: style,
80
+ contentContainerStyle: contentContainerStyle,
81
+ onEndReached: onEndReached ? () => onEndReached() : undefined,
82
+ onEndReachedThreshold: onEndReachedThreshold,
83
+ refreshing: refreshing,
84
+ onRefresh: onRefresh,
85
+ initialNumToRender: initialNumToRender,
86
+ maxToRenderPerBatch: maxToRenderPerBatch,
87
+ windowSize: windowSize,
88
+ removeClippedSubviews: removeClippedSubviews,
89
+ testID: testID
90
+ });
91
+ }
92
+ const VirtualList = exports.VirtualList = /*#__PURE__*/React.forwardRef(VirtualListNativeInner);
93
+ var _default = exports.default = VirtualList;
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","renderSlot","slot","VirtualListNativeInner","props","ref","data","renderItem","keyExtractor","ListHeaderComponent","ListEmptyComponent","ListFooterComponent","style","contentContainerStyle","onEndReached","onEndReachedThreshold","refreshing","onRefresh","initialNumToRender","maxToRenderPerBatch","windowSize","removeClippedSubviews","testID","listRef","useRef","useImperativeHandle","scrollToOffset","params","current","offset","animated","scrollTo","y","renderFlatItem","useCallback","info","item","index","jsx","FlatList","undefined","VirtualList","exports","forwardRef","_default"],"sourceRoot":"../../../src","sources":["list/index.tsx"],"mappings":";;;;;;AAoBA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAiE,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AArBjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA,SAASkB,UAAUA,CAACC,IAAqB,EAA6B;EACpE,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;EACtB,OAAO,OAAOA,IAAI,KAAK,UAAU,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI;AACnD;AAEA,SAASC,sBAAsBA,CAC7BC,KAA0B,EAC1BC,GAA0C,EAC1C;EACA,MAAM;IACJC,IAAI;IACJC,UAAU;IACVC,YAAY;IACZC,mBAAmB;IACnBC,kBAAkB;IAClBC,mBAAmB;IACnBC,KAAK;IACLC,qBAAqB;IACrBC,YAAY;IACZC,qBAAqB;IACrBC,UAAU;IACVC,SAAS;IACTC,kBAAkB;IAClBC,mBAAmB;IACnBC,UAAU;IACVC,qBAAqB;IACrBC;EACF,CAAC,GAAGlB,KAAK;EAET,MAAMmB,OAAO,GAAG9C,KAAK,CAAC+C,MAAM,CAAc,IAAI,CAAC;EAE/C/C,KAAK,CAACgD,mBAAmB,CACvBpB,GAAG,EACH,OAAO;IACLqB,cAAc,EAAGC,MAAM,IACrBJ,OAAO,CAACK,OAAO,EAAEF,cAAc,CAAC;MAC9BG,MAAM,EAAEF,MAAM,EAAEE,MAAM,IAAI,CAAC;MAC3BC,QAAQ,EAAEH,MAAM,EAAEG,QAAQ,IAAI;IAChC,CAAC,CAAC;IACJC,QAAQ,EAAGJ,MAAM,IACfJ,OAAO,CAACK,OAAO,EAAEF,cAAc,CAAC;MAC9BG,MAAM,EAAEF,MAAM,EAAEK,CAAC,IAAI,CAAC;MACtBF,QAAQ,EAAEH,MAAM,EAAEG,QAAQ,IAAI;IAChC,CAAC;EACL,CAAC,CAAC,EACF,EACF,CAAC;EAED,MAAMG,cAAc,GAAGxD,KAAK,CAACyD,WAAW,CACrCC,IAA2B,IAC1B5B,UAAU,GAAGA,UAAU,CAAC;IAAE6B,IAAI,EAAED,IAAI,CAACC,IAAI;IAAEC,KAAK,EAAEF,IAAI,CAACE;EAAM,CAAC,CAAC,GAAG,IAAI,EACxE,CAAC9B,UAAU,CACb,CAAC;EAED,oBACE,IAAA1B,WAAA,CAAAyD,GAAA,EAAC1D,YAAA,CAAA2D,QAAQ;IACPlC,GAAG,EAAEkB,OAAQ;IACbjB,IAAI,EAAEA,IAAI,IAAIkC,SAAU;IACxBjC,UAAU,EAAE0B,cAAe;IAC3BzB,YAAY,EAAEA,YAAa;IAC3BC,mBAAmB,EAAER,UAAU,CAACQ,mBAAmB,CAAE;IACrDC,kBAAkB,EAAET,UAAU,CAACS,kBAAkB,CAAE;IACnDC,mBAAmB,EAAEV,UAAU,CAACU,mBAAmB,CAAE;IACrDC,KAAK,EAAEA,KAAM;IACbC,qBAAqB,EAAEA,qBAAsB;IAC7CC,YAAY,EAAEA,YAAY,GAAG,MAAMA,YAAY,CAAC,CAAC,GAAG0B,SAAU;IAC9DzB,qBAAqB,EAAEA,qBAAsB;IAC7CC,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,kBAAkB,EAAEA,kBAAmB;IACvCC,mBAAmB,EAAEA,mBAAoB;IACzCC,UAAU,EAAEA,UAAW;IACvBC,qBAAqB,EAAEA,qBAAsB;IAC7CC,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN;AAEA,MAAMmB,WAAW,GAAAC,OAAA,CAAAD,WAAA,gBAAGhE,KAAK,CAACkE,UAAU,CAACxC,sBAAsB,CAEpC;AAAC,IAAAyC,QAAA,GAAAF,OAAA,CAAAlD,OAAA,GAGTiD,WAAW","ignoreList":[]}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.VirtualList = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _reactVirtual = require("@tanstack/react-virtual");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ 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); }
12
+ /**
13
+ * `VirtualList` — WEB variant. A document-scroll (window) virtualizer built on
14
+ * `@tanstack/react-virtual`'s `useWindowVirtualizer`, mirroring the proven
15
+ * Mention feed virtualizer. The BODY scrolls (so scrolling works from anywhere,
16
+ * including over sticky side columns) and only the rows in the virtual window
17
+ * are mounted, so the DOM stays bounded.
18
+ *
19
+ * Why this exists (the bug it fixes): a previous app-local list used the same
20
+ * hook but rendered ZERO rows in production — the wrapper grew to the right
21
+ * height (`getTotalSize()` was correct) yet `getVirtualItems()` came back empty,
22
+ * so only the header painted. Root cause: `useWindowVirtualizer` can latch an
23
+ * initial frame in which the window rect measured as `0` (or `scrollMargin` was
24
+ * still stale), which leaves the computed range empty; a STATIC, finite list
25
+ * re-renders too few times to self-correct and sticks on that bad frame. (The
26
+ * feed only survived by incidental re-render churn — data/loading updates and
27
+ * scroll/intersection observers — which a plain list does not have.)
28
+ *
29
+ * This implementation is SELF-SUFFICIENT and does not rely on incidental churn:
30
+ *
31
+ * 1. `scrollMargin` (the wrapper's offset from the document top) is measured in
32
+ * a layout effect AND re-synced on window `resize`.
33
+ * 2. An explicit post-mount recompute (`virtualizer.measure()`) forces the
34
+ * range to be recomputed once the real viewport height + offset are known —
35
+ * guaranteeing a short list mounts EVERY row in the first viewport even with
36
+ * zero further re-renders. Re-run on resize.
37
+ * 3. The measured spacer is `Math.max(totalSize, lastItemEnd)`, so it always
38
+ * contains every absolutely-positioned row even when `scrollMargin` is
39
+ * momentarily stale; the document therefore always grows to the full content
40
+ * height (keeping sticky side rails pinned) and the window-scroll geometry
41
+ * the virtualizer reads stays consistent.
42
+ * 4. Per-row `measureElement` refs are STABLE (cached per key), so rows are not
43
+ * detached/re-measured on every render.
44
+ *
45
+ * Native bundlers use `./index.tsx` (a `FlatList` wrapper); web bundlers select
46
+ * this file via the `"browser"` export condition in `package.json`.
47
+ */
48
+
49
+ // Rows in these lists (user rows, pack cards) are short and fairly uniform; a
50
+ // small estimate + per-row measurement keeps the mounted node count bounded.
51
+ const DEFAULT_ESTIMATED_ITEM_SIZE = 72;
52
+ const DEFAULT_OVERSCAN = 8;
53
+
54
+ // Bound the per-key ref-callback cache so a very long scroll session does not
55
+ // accumulate one closure per key forever.
56
+ const ROW_REF_CACHE_CAP = 500;
57
+ function renderSlot(slot) {
58
+ if (!slot) return null;
59
+ return typeof slot === 'function' ? slot() : slot;
60
+ }
61
+ function VirtualListWebInner(props, ref) {
62
+ const {
63
+ data,
64
+ renderItem,
65
+ keyExtractor,
66
+ ListHeaderComponent,
67
+ ListEmptyComponent,
68
+ ListFooterComponent,
69
+ style,
70
+ contentContainerStyle,
71
+ estimatedItemSize,
72
+ overscan,
73
+ testID
74
+ } = props;
75
+ const items = data ?? [];
76
+ const count = items.length;
77
+
78
+ // Wrapper element used as the virtualizer's measurement origin. The window is
79
+ // the scroller; `scrollMargin` is the wrapper's offset from the document top
80
+ // (everything above the rows), so virtual offsets map to page offsets.
81
+ const wrapperRef = React.useRef(null);
82
+ const [scrollMargin, setScrollMargin] = React.useState(0);
83
+ const measureScrollMargin = React.useCallback(() => {
84
+ const node = wrapperRef.current;
85
+ if (!node || typeof window === 'undefined') return;
86
+ const top = node.getBoundingClientRect().top + window.scrollY;
87
+ setScrollMargin(prev => prev !== top ? top : prev);
88
+ }, []);
89
+
90
+ // Read the wrapper's top offset synchronously after layout so the first
91
+ // virtual frame already positions rows correctly. Re-run when the row count
92
+ // changes (content above/below the window shifts the wrapper).
93
+ React.useLayoutEffect(() => {
94
+ measureScrollMargin();
95
+ }, [measureScrollMargin, count]);
96
+ const estimate = estimatedItemSize ?? DEFAULT_ESTIMATED_ITEM_SIZE;
97
+ const virtualizer = (0, _reactVirtual.useWindowVirtualizer)({
98
+ count,
99
+ estimateSize: () => estimate,
100
+ overscan: overscan ?? DEFAULT_OVERSCAN,
101
+ scrollMargin,
102
+ getItemKey: keyExtractor ? index => {
103
+ const item = items[index];
104
+ return item !== undefined ? keyExtractor(item, index) : index;
105
+ } : undefined
106
+ });
107
+
108
+ // Explicit post-mount recompute + resize re-sync. `useWindowVirtualizer` can
109
+ // latch a frame where the window rect read as 0 / `scrollMargin` was stale,
110
+ // leaving `getVirtualItems()` empty even though rows exist. A static list does
111
+ // not re-render enough to self-correct, so we force the range to recompute
112
+ // once the real viewport + offset are known — and again on every resize.
113
+ React.useEffect(() => {
114
+ if (typeof window === 'undefined') return;
115
+ const sync = () => {
116
+ measureScrollMargin();
117
+ virtualizer.measure();
118
+ };
119
+ sync();
120
+ window.addEventListener('resize', sync);
121
+ return () => window.removeEventListener('resize', sync);
122
+ }, [measureScrollMargin, virtualizer]);
123
+ React.useImperativeHandle(ref, () => ({
124
+ scrollToOffset: params => {
125
+ if (typeof window === 'undefined') return;
126
+ window.scrollTo({
127
+ top: params?.offset ?? 0,
128
+ behavior: params?.animated === false ? 'auto' : 'smooth'
129
+ });
130
+ },
131
+ scrollTo: params => {
132
+ if (typeof window === 'undefined') return;
133
+ window.scrollTo({
134
+ top: params?.y ?? 0,
135
+ behavior: params?.animated === false ? 'auto' : 'smooth'
136
+ });
137
+ }
138
+ }), []);
139
+
140
+ // Stable per-key ref factory wiring the virtualizer's measurement ref. A fresh
141
+ // inline arrow each render would make React detach/re-attach (and re-measure)
142
+ // every row on every render; the cached callback is reused for the same key so
143
+ // the ref only fires on real mount/unmount.
144
+ const measureElement = virtualizer.measureElement;
145
+ const rowRefCallbacks = React.useRef(new Map());
146
+ const getRowRef = React.useCallback(key => {
147
+ const cache = rowRefCallbacks.current;
148
+ const existing = cache.get(key);
149
+ if (existing) return existing;
150
+ if (cache.size > ROW_REF_CACHE_CAP) cache.clear();
151
+ const cb = node => measureElement(node);
152
+ cache.set(key, cb);
153
+ return cb;
154
+ }, [measureElement]);
155
+ const flatStyle = _reactNative.StyleSheet.flatten(style);
156
+ const flatContentStyle = _reactNative.StyleSheet.flatten(contentContainerStyle);
157
+ const header = renderSlot(ListHeaderComponent);
158
+ const footer = renderSlot(ListFooterComponent);
159
+ if (count === 0) {
160
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
161
+ style: [{
162
+ minHeight: 0
163
+ }, flatStyle],
164
+ testID: testID,
165
+ children: [header, renderSlot(ListEmptyComponent), footer]
166
+ });
167
+ }
168
+ const virtualItems = virtualizer.getVirtualItems();
169
+ const totalSize = virtualizer.getTotalSize();
170
+
171
+ // The measured spacer MUST contain every absolutely-positioned row; size it to
172
+ // the MAX of `totalSize` and the rows' real extent so the document always
173
+ // grows to full content height even when `scrollMargin` is momentarily stale.
174
+ const lastItem = virtualItems.length > 0 ? virtualItems[virtualItems.length - 1] : undefined;
175
+ const lastItemEnd = lastItem ? lastItem.start + lastItem.size - virtualizer.options.scrollMargin : 0;
176
+ const spacerHeight = Math.max(totalSize, lastItemEnd);
177
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
178
+ style: [{
179
+ minHeight: 0
180
+ }, flatStyle],
181
+ testID: testID,
182
+ children: [header, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
183
+ style: flatContentStyle,
184
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
185
+ ref: wrapperRef,
186
+ style: {
187
+ height: spacerHeight,
188
+ width: '100%',
189
+ position: 'relative'
190
+ },
191
+ children: virtualItems.map(virtualRow => {
192
+ const item = items[virtualRow.index];
193
+ if (item === undefined) return null;
194
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
195
+ ref: getRowRef(String(virtualRow.key)),
196
+ "data-index": virtualRow.index,
197
+ style: {
198
+ position: 'absolute',
199
+ top: 0,
200
+ left: 0,
201
+ width: '100%',
202
+ transform: `translateY(${virtualRow.start - virtualizer.options.scrollMargin}px)`
203
+ },
204
+ children: renderItem ? renderItem({
205
+ item,
206
+ index: virtualRow.index
207
+ }) : null
208
+ }, virtualRow.key);
209
+ })
210
+ })
211
+ }), footer]
212
+ });
213
+ }
214
+ const VirtualList = exports.VirtualList = /*#__PURE__*/React.forwardRef(VirtualListWebInner);
215
+ var _default = exports.default = VirtualList;
216
+ //# sourceMappingURL=index.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_reactVirtual","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_ESTIMATED_ITEM_SIZE","DEFAULT_OVERSCAN","ROW_REF_CACHE_CAP","renderSlot","slot","VirtualListWebInner","props","ref","data","renderItem","keyExtractor","ListHeaderComponent","ListEmptyComponent","ListFooterComponent","style","contentContainerStyle","estimatedItemSize","overscan","testID","items","count","length","wrapperRef","useRef","scrollMargin","setScrollMargin","useState","measureScrollMargin","useCallback","node","current","window","top","getBoundingClientRect","scrollY","prev","useLayoutEffect","estimate","virtualizer","useWindowVirtualizer","estimateSize","getItemKey","index","item","undefined","useEffect","sync","measure","addEventListener","removeEventListener","useImperativeHandle","scrollToOffset","params","scrollTo","offset","behavior","animated","y","measureElement","rowRefCallbacks","Map","getRowRef","key","cache","existing","size","clear","cb","flatStyle","StyleSheet","flatten","flatContentStyle","header","footer","jsxs","View","minHeight","children","virtualItems","getVirtualItems","totalSize","getTotalSize","lastItem","lastItemEnd","start","options","spacerHeight","Math","max","jsx","height","width","position","map","virtualRow","String","left","transform","VirtualList","exports","forwardRef","_default"],"sourceRoot":"../../../src","sources":["list/index.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["list/types.ts"],"mappings":"","ignoreList":[]}
@@ -18,15 +18,15 @@ function BloomColorScope({
18
18
  style,
19
19
  children
20
20
  }) {
21
+ // All hooks are called UNCONDITIONALLY, in the same order on every render —
22
+ // never gate a hook behind an early return (rules of hooks). The conditional
23
+ // no-op/throw behavior is applied AFTER every hook has run, using the values
24
+ // the hooks produced. `resolvedMode` falls back harmlessly when the provider
25
+ // is absent (that render path throws below anyway).
21
26
  const parent = (0, _react.useContext)(_BloomThemeProvider.BloomThemeContext);
22
- if (!parent) {
23
- throw new Error('BloomColorScope must be used within a <BloomThemeProvider>');
24
- }
25
- if (!colorPreset) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
26
- children: children
27
- });
28
- const resolvedMode = parent.theme.mode;
27
+ const resolvedMode = parent?.theme.mode ?? 'light';
29
28
  const contextValue = (0, _react.useMemo)(() => {
29
+ if (!parent || !colorPreset) return null;
30
30
  const theme = (0, _buildTheme.buildTheme)(colorPreset, resolvedMode);
31
31
  return {
32
32
  ...parent,
@@ -39,7 +39,16 @@ function BloomColorScope({
39
39
  // VariableContext (`VariableContextProvider`), NOT via an inline `vars()`
40
40
  // style — under react-native-css@3 inline vars applied to a plain `<View>`
41
41
  // (no matched className rules) are dropped silently. See `style-builder.ts`.
42
- const nativeVars = (0, _react.useMemo)(() => (0, _styleBuilder.buildScopeVars)(colorPreset, resolvedMode), [colorPreset, resolvedMode]);
42
+ const nativeVars = (0, _react.useMemo)(() => colorPreset ? (0, _styleBuilder.buildScopeVars)(colorPreset, resolvedMode) : null, [colorPreset, resolvedMode]);
43
+ if (!parent) {
44
+ throw new Error('BloomColorScope must be used within a <BloomThemeProvider>');
45
+ }
46
+ // `colorPreset` undefined => the scope is a no-op; children inherit the
47
+ // parent scope. With `parent` present, `contextValue`/`nativeVars` are null
48
+ // iff `colorPreset` is absent, so this guard also narrows them to non-null.
49
+ if (!contextValue || !nativeVars) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
50
+ children: children
51
+ });
43
52
  const VariableProvider = (0, _styleBuilder.getVariableContextProvider)();
44
53
  let content;
45
54
  if (asChild) {
@@ -88,11 +97,13 @@ function BloomColorScope({
88
97
  * `<BloomColorScope>`, which wraps children in `VariableContextProvider`.
89
98
  */
90
99
  function useColorScopeStyle(colorPreset) {
100
+ // Hooks first, unconditionally; throw only after they have all run.
91
101
  const parent = (0, _react.useContext)(_BloomThemeProvider.BloomThemeContext);
102
+ const resolvedMode = parent?.theme.mode ?? 'light';
103
+ const scopeStyle = (0, _react.useMemo)(() => (0, _styleBuilder.buildNativePresetStyle)(colorPreset, resolvedMode), [colorPreset, resolvedMode]);
92
104
  if (!parent) {
93
105
  throw new Error('useColorScopeStyle must be used within a <BloomThemeProvider>');
94
106
  }
95
- const resolvedMode = parent.theme.mode;
96
- return (0, _react.useMemo)(() => (0, _styleBuilder.buildNativePresetStyle)(colorPreset, resolvedMode), [colorPreset, resolvedMode]);
107
+ return scopeStyle;
97
108
  }
98
109
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_BloomThemeProvider","_buildTheme","_styleBuilder","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BloomColorScope","colorPreset","asChild","style","children","parent","useContext","BloomThemeContext","Error","jsx","Fragment","resolvedMode","theme","mode","contextValue","useMemo","buildTheme","nativeVars","buildScopeVars","VariableProvider","getVariableContextProvider","content","child","Children","only","isValidElement","childStyle","props","mergedStyle","cloneElement","View","flex","scoped","value","Provider","useColorScopeStyle","buildNativePresetStyle"],"sourceRoot":"../../../../src","sources":["theme/color-scope/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_BloomThemeProvider","_buildTheme","_styleBuilder","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BloomColorScope","colorPreset","asChild","style","children","parent","useContext","BloomThemeContext","resolvedMode","theme","mode","contextValue","useMemo","buildTheme","nativeVars","buildScopeVars","Error","jsx","Fragment","VariableProvider","getVariableContextProvider","content","child","Children","only","isValidElement","childStyle","props","mergedStyle","cloneElement","View","flex","scoped","value","Provider","useColorScopeStyle","scopeStyle","buildNativePresetStyle"],"sourceRoot":"../../../../src","sources":["theme/color-scope/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -36,15 +36,15 @@ function BloomColorScope({
36
36
  style,
37
37
  children
38
38
  }) {
39
+ // All hooks are called UNCONDITIONALLY, in the same order on every render —
40
+ // never gate a hook behind an early return (rules of hooks). The conditional
41
+ // no-op/throw behavior is applied AFTER every hook has run, using the values
42
+ // the hooks produced. `resolvedMode` falls back harmlessly when the provider
43
+ // is absent (that render path throws below anyway).
39
44
  const parent = (0, _react.useContext)(_BloomThemeProvider.BloomThemeContext);
40
- if (!parent) {
41
- throw new Error('BloomColorScope must be used within a <BloomThemeProvider>');
42
- }
43
- if (!colorPreset) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
44
- children: children
45
- });
46
- const resolvedMode = parent.theme.mode;
45
+ const resolvedMode = parent?.theme.mode ?? 'light';
47
46
  const contextValue = (0, _react.useMemo)(() => {
47
+ if (!parent || !colorPreset) return null;
48
48
  const theme = (0, _buildTheme.buildTheme)(colorPreset, resolvedMode);
49
49
  return {
50
50
  ...parent,
@@ -52,7 +52,16 @@ function BloomColorScope({
52
52
  colorPreset
53
53
  };
54
54
  }, [colorPreset, resolvedMode, parent]);
55
- const varsStyle = (0, _react.useMemo)(() => buildWebScopeVars(colorPreset, resolvedMode), [colorPreset, resolvedMode]);
55
+ const varsStyle = (0, _react.useMemo)(() => colorPreset ? buildWebScopeVars(colorPreset, resolvedMode) : null, [colorPreset, resolvedMode]);
56
+ if (!parent) {
57
+ throw new Error('BloomColorScope must be used within a <BloomThemeProvider>');
58
+ }
59
+ // `colorPreset` undefined => the scope is a no-op; children inherit the
60
+ // parent scope. With `parent` present, `contextValue`/`varsStyle` are null
61
+ // iff `colorPreset` is absent, so this guard also narrows them to non-null.
62
+ if (!contextValue || !varsStyle) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
63
+ children: children
64
+ });
56
65
  let content;
57
66
  if (asChild) {
58
67
  const child = _react.Children.only(children);
@@ -92,11 +101,13 @@ function BloomColorScope({
92
101
  * caller. Returns a stable React style object carrying the preset's CSS vars.
93
102
  */
94
103
  function useColorScopeStyle(colorPreset) {
104
+ // Hooks first, unconditionally; throw only after they have all run.
95
105
  const parent = (0, _react.useContext)(_BloomThemeProvider.BloomThemeContext);
106
+ const resolvedMode = parent?.theme.mode ?? 'light';
107
+ const scopeStyle = (0, _react.useMemo)(() => buildWebScopeVars(colorPreset, resolvedMode), [colorPreset, resolvedMode]);
96
108
  if (!parent) {
97
109
  throw new Error('useColorScopeStyle must be used within a <BloomThemeProvider>');
98
110
  }
99
- const resolvedMode = parent.theme.mode;
100
- return (0, _react.useMemo)(() => buildWebScopeVars(colorPreset, resolvedMode), [colorPreset, resolvedMode]);
111
+ return scopeStyle;
101
112
  }
102
113
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_BloomThemeProvider","_buildTheme","_styleBuilder","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","buildWebScopeVars","colorPreset","mode","buildScopeVars","BloomColorScope","asChild","style","children","parent","useContext","BloomThemeContext","Error","jsx","Fragment","resolvedMode","theme","contextValue","useMemo","buildTheme","varsStyle","content","child","Children","only","isValidElement","childStyle","props","mergedStyle","cloneElement","Provider","value","useColorScopeStyle"],"sourceRoot":"../../../../src","sources":["theme/color-scope/index.web.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_BloomThemeProvider","_buildTheme","_styleBuilder","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","buildWebScopeVars","colorPreset","mode","buildScopeVars","BloomColorScope","asChild","style","children","parent","useContext","BloomThemeContext","resolvedMode","theme","contextValue","useMemo","buildTheme","varsStyle","Error","jsx","Fragment","content","child","Children","only","isValidElement","childStyle","props","mergedStyle","cloneElement","Provider","value","useColorScopeStyle","scopeStyle"],"sourceRoot":"../../../../src","sources":["theme/color-scope/index.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * `VirtualList` — the canonical cross-platform virtualized list for the Oxy
5
+ * ecosystem. Every app uses this ONE implementation for grouped/stacked row
6
+ * lists (who-to-follow, starter packs, connections, settings rows, …) so the
7
+ * virtualization behaviour is identical everywhere.
8
+ *
9
+ * NATIVE variant: a thin, correctly-typed wrapper over React Native `FlatList`.
10
+ * The consumer lists this component replaces are short and uniform, so the
11
+ * platform's own virtualization is the simplest robust choice — no
12
+ * `@legendapp/list`, no app-specific scroll bridge, nothing for a consumer to
13
+ * wire up. Bloom stays app-agnostic.
14
+ *
15
+ * WEB variant (`index.web.tsx`, selected via the `"browser"` export condition):
16
+ * a document-scroll window virtualizer built on `@tanstack/react-virtual`.
17
+ *
18
+ * This default file has NO platform-only imports, so consumer `tsc` and web
19
+ * bundlers resolve it cleanly (mirrors the `../scroll` / `../content-panel`
20
+ * fork pattern). The public API is shared via `./types`, so both forks expose
21
+ * an identical, generic, strongly-typed surface.
22
+ */
23
+ import * as React from 'react';
24
+ import { FlatList } from 'react-native';
25
+ import { jsx as _jsx } from "react/jsx-runtime";
26
+ function renderSlot(slot) {
27
+ if (!slot) return null;
28
+ return typeof slot === 'function' ? slot() : slot;
29
+ }
30
+ function VirtualListNativeInner(props, ref) {
31
+ const {
32
+ data,
33
+ renderItem,
34
+ keyExtractor,
35
+ ListHeaderComponent,
36
+ ListEmptyComponent,
37
+ ListFooterComponent,
38
+ style,
39
+ contentContainerStyle,
40
+ onEndReached,
41
+ onEndReachedThreshold,
42
+ refreshing,
43
+ onRefresh,
44
+ initialNumToRender,
45
+ maxToRenderPerBatch,
46
+ windowSize,
47
+ removeClippedSubviews,
48
+ testID
49
+ } = props;
50
+ const listRef = React.useRef(null);
51
+ React.useImperativeHandle(ref, () => ({
52
+ scrollToOffset: params => listRef.current?.scrollToOffset({
53
+ offset: params?.offset ?? 0,
54
+ animated: params?.animated ?? true
55
+ }),
56
+ scrollTo: params => listRef.current?.scrollToOffset({
57
+ offset: params?.y ?? 0,
58
+ animated: params?.animated ?? true
59
+ })
60
+ }), []);
61
+ const renderFlatItem = React.useCallback(info => renderItem ? renderItem({
62
+ item: info.item,
63
+ index: info.index
64
+ }) : null, [renderItem]);
65
+ return /*#__PURE__*/_jsx(FlatList, {
66
+ ref: listRef,
67
+ data: data ?? undefined,
68
+ renderItem: renderFlatItem,
69
+ keyExtractor: keyExtractor,
70
+ ListHeaderComponent: renderSlot(ListHeaderComponent),
71
+ ListEmptyComponent: renderSlot(ListEmptyComponent),
72
+ ListFooterComponent: renderSlot(ListFooterComponent),
73
+ style: style,
74
+ contentContainerStyle: contentContainerStyle,
75
+ onEndReached: onEndReached ? () => onEndReached() : undefined,
76
+ onEndReachedThreshold: onEndReachedThreshold,
77
+ refreshing: refreshing,
78
+ onRefresh: onRefresh,
79
+ initialNumToRender: initialNumToRender,
80
+ maxToRenderPerBatch: maxToRenderPerBatch,
81
+ windowSize: windowSize,
82
+ removeClippedSubviews: removeClippedSubviews,
83
+ testID: testID
84
+ });
85
+ }
86
+ const VirtualList = /*#__PURE__*/React.forwardRef(VirtualListNativeInner);
87
+ export { VirtualList };
88
+ export default VirtualList;
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","FlatList","jsx","_jsx","renderSlot","slot","VirtualListNativeInner","props","ref","data","renderItem","keyExtractor","ListHeaderComponent","ListEmptyComponent","ListFooterComponent","style","contentContainerStyle","onEndReached","onEndReachedThreshold","refreshing","onRefresh","initialNumToRender","maxToRenderPerBatch","windowSize","removeClippedSubviews","testID","listRef","useRef","useImperativeHandle","scrollToOffset","params","current","offset","animated","scrollTo","y","renderFlatItem","useCallback","info","item","index","undefined","VirtualList","forwardRef"],"sourceRoot":"../../../src","sources":["list/index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,QAAQ,QAAiC,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAgBjE,SAASC,UAAUA,CAACC,IAAqB,EAA6B;EACpE,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;EACtB,OAAO,OAAOA,IAAI,KAAK,UAAU,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI;AACnD;AAEA,SAASC,sBAAsBA,CAC7BC,KAA0B,EAC1BC,GAA0C,EAC1C;EACA,MAAM;IACJC,IAAI;IACJC,UAAU;IACVC,YAAY;IACZC,mBAAmB;IACnBC,kBAAkB;IAClBC,mBAAmB;IACnBC,KAAK;IACLC,qBAAqB;IACrBC,YAAY;IACZC,qBAAqB;IACrBC,UAAU;IACVC,SAAS;IACTC,kBAAkB;IAClBC,mBAAmB;IACnBC,UAAU;IACVC,qBAAqB;IACrBC;EACF,CAAC,GAAGlB,KAAK;EAET,MAAMmB,OAAO,GAAG1B,KAAK,CAAC2B,MAAM,CAAc,IAAI,CAAC;EAE/C3B,KAAK,CAAC4B,mBAAmB,CACvBpB,GAAG,EACH,OAAO;IACLqB,cAAc,EAAGC,MAAM,IACrBJ,OAAO,CAACK,OAAO,EAAEF,cAAc,CAAC;MAC9BG,MAAM,EAAEF,MAAM,EAAEE,MAAM,IAAI,CAAC;MAC3BC,QAAQ,EAAEH,MAAM,EAAEG,QAAQ,IAAI;IAChC,CAAC,CAAC;IACJC,QAAQ,EAAGJ,MAAM,IACfJ,OAAO,CAACK,OAAO,EAAEF,cAAc,CAAC;MAC9BG,MAAM,EAAEF,MAAM,EAAEK,CAAC,IAAI,CAAC;MACtBF,QAAQ,EAAEH,MAAM,EAAEG,QAAQ,IAAI;IAChC,CAAC;EACL,CAAC,CAAC,EACF,EACF,CAAC;EAED,MAAMG,cAAc,GAAGpC,KAAK,CAACqC,WAAW,CACrCC,IAA2B,IAC1B5B,UAAU,GAAGA,UAAU,CAAC;IAAE6B,IAAI,EAAED,IAAI,CAACC,IAAI;IAAEC,KAAK,EAAEF,IAAI,CAACE;EAAM,CAAC,CAAC,GAAG,IAAI,EACxE,CAAC9B,UAAU,CACb,CAAC;EAED,oBACEP,IAAA,CAACF,QAAQ;IACPO,GAAG,EAAEkB,OAAQ;IACbjB,IAAI,EAAEA,IAAI,IAAIgC,SAAU;IACxB/B,UAAU,EAAE0B,cAAe;IAC3BzB,YAAY,EAAEA,YAAa;IAC3BC,mBAAmB,EAAER,UAAU,CAACQ,mBAAmB,CAAE;IACrDC,kBAAkB,EAAET,UAAU,CAACS,kBAAkB,CAAE;IACnDC,mBAAmB,EAAEV,UAAU,CAACU,mBAAmB,CAAE;IACrDC,KAAK,EAAEA,KAAM;IACbC,qBAAqB,EAAEA,qBAAsB;IAC7CC,YAAY,EAAEA,YAAY,GAAG,MAAMA,YAAY,CAAC,CAAC,GAAGwB,SAAU;IAC9DvB,qBAAqB,EAAEA,qBAAsB;IAC7CC,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,kBAAkB,EAAEA,kBAAmB;IACvCC,mBAAmB,EAAEA,mBAAoB;IACzCC,UAAU,EAAEA,UAAW;IACvBC,qBAAqB,EAAEA,qBAAsB;IAC7CC,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN;AAEA,MAAMiB,WAAW,gBAAG1C,KAAK,CAAC2C,UAAU,CAACrC,sBAAsB,CAEpC;AAEvB,SAASoC,WAAW;AACpB,eAAeA,WAAW","ignoreList":[]}