@oxyhq/bloom 0.79.0 → 0.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/lib/commonjs/provider/index.js +11 -7
- package/lib/commonjs/provider/index.js.map +1 -1
- package/lib/commonjs/scroll/context.js +96 -0
- package/lib/commonjs/scroll/context.js.map +1 -0
- package/lib/commonjs/scroll/expo-router/index.js +133 -0
- package/lib/commonjs/scroll/expo-router/index.js.map +1 -0
- package/lib/commonjs/scroll/index.js +85 -21
- package/lib/commonjs/scroll/index.js.map +1 -1
- package/lib/commonjs/scroll/index.web.js +221 -121
- package/lib/commonjs/scroll/index.web.js.map +1 -1
- package/lib/commonjs/scroll/scrollable.native.js +58 -0
- package/lib/commonjs/scroll/scrollable.native.js.map +1 -0
- package/lib/commonjs/scroll/scrollable.web.js +9 -3
- package/lib/commonjs/scroll/scrollable.web.js.map +1 -1
- package/lib/commonjs/scroll/store.js +47 -25
- package/lib/commonjs/scroll/store.js.map +1 -1
- package/lib/commonjs/tabs/Tabs.js +263 -63
- package/lib/commonjs/tabs/Tabs.js.map +1 -1
- package/lib/commonjs/tabs/expo-router/RouterTabs.js +215 -0
- package/lib/commonjs/tabs/expo-router/RouterTabs.js.map +1 -0
- package/lib/commonjs/tabs/expo-router/index.js +13 -0
- package/lib/commonjs/tabs/expo-router/index.js.map +1 -0
- package/lib/commonjs/theme/color-policy.js +11 -10
- package/lib/commonjs/theme/color-policy.js.map +1 -1
- package/lib/module/provider/index.js +10 -6
- package/lib/module/provider/index.js.map +1 -1
- package/lib/module/scroll/context.js +90 -0
- package/lib/module/scroll/context.js.map +1 -0
- package/lib/module/scroll/expo-router/index.js +128 -0
- package/lib/module/scroll/expo-router/index.js.map +1 -0
- package/lib/module/scroll/index.js +80 -21
- package/lib/module/scroll/index.js.map +1 -1
- package/lib/module/scroll/index.web.js +218 -122
- package/lib/module/scroll/index.web.js.map +1 -1
- package/lib/module/scroll/scrollable.native.js +54 -0
- package/lib/module/scroll/scrollable.native.js.map +1 -0
- package/lib/module/scroll/scrollable.web.js +9 -3
- package/lib/module/scroll/scrollable.web.js.map +1 -1
- package/lib/module/scroll/store.js +47 -25
- package/lib/module/scroll/store.js.map +1 -1
- package/lib/module/tabs/Tabs.js +271 -65
- package/lib/module/tabs/Tabs.js.map +1 -1
- package/lib/module/tabs/expo-router/RouterTabs.js +210 -0
- package/lib/module/tabs/expo-router/RouterTabs.js.map +1 -0
- package/lib/module/tabs/expo-router/index.js +10 -0
- package/lib/module/tabs/expo-router/index.js.map +1 -0
- package/lib/module/theme/color-policy.js +11 -10
- package/lib/module/theme/color-policy.js.map +1 -1
- package/lib/typescript/commonjs/provider/index.d.ts +7 -5
- package/lib/typescript/commonjs/provider/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/context.d.ts +14 -0
- package/lib/typescript/commonjs/scroll/context.d.ts.map +1 -0
- package/lib/typescript/commonjs/scroll/expo-router/index.d.ts +7 -0
- package/lib/typescript/commonjs/scroll/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/scroll/index.d.ts +14 -23
- package/lib/typescript/commonjs/scroll/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/index.web.d.ts +17 -19
- package/lib/typescript/commonjs/scroll/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/scrollable.native.d.ts +23 -0
- package/lib/typescript/commonjs/scroll/scrollable.native.d.ts.map +1 -0
- package/lib/typescript/commonjs/scroll/scrollable.web.d.ts +18 -5
- package/lib/typescript/commonjs/scroll/scrollable.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/store.d.ts +41 -22
- package/lib/typescript/commonjs/scroll/store.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/types.d.ts +82 -12
- package/lib/typescript/commonjs/scroll/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/tabs/Tabs.d.ts +41 -1
- package/lib/typescript/commonjs/tabs/Tabs.d.ts.map +1 -1
- package/lib/typescript/commonjs/tabs/expo-router/RouterTabs.d.ts +80 -0
- package/lib/typescript/commonjs/tabs/expo-router/RouterTabs.d.ts.map +1 -0
- package/lib/typescript/commonjs/tabs/expo-router/index.d.ts +9 -0
- package/lib/typescript/commonjs/tabs/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/tabs/types.d.ts +48 -4
- package/lib/typescript/commonjs/tabs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/module/provider/index.d.ts +7 -5
- package/lib/typescript/module/provider/index.d.ts.map +1 -1
- package/lib/typescript/module/scroll/context.d.ts +14 -0
- package/lib/typescript/module/scroll/context.d.ts.map +1 -0
- package/lib/typescript/module/scroll/expo-router/index.d.ts +7 -0
- package/lib/typescript/module/scroll/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/module/scroll/index.d.ts +14 -23
- package/lib/typescript/module/scroll/index.d.ts.map +1 -1
- package/lib/typescript/module/scroll/index.web.d.ts +17 -19
- package/lib/typescript/module/scroll/index.web.d.ts.map +1 -1
- package/lib/typescript/module/scroll/scrollable.native.d.ts +23 -0
- package/lib/typescript/module/scroll/scrollable.native.d.ts.map +1 -0
- package/lib/typescript/module/scroll/scrollable.web.d.ts +18 -5
- package/lib/typescript/module/scroll/scrollable.web.d.ts.map +1 -1
- package/lib/typescript/module/scroll/store.d.ts +41 -22
- package/lib/typescript/module/scroll/store.d.ts.map +1 -1
- package/lib/typescript/module/scroll/types.d.ts +82 -12
- package/lib/typescript/module/scroll/types.d.ts.map +1 -1
- package/lib/typescript/module/tabs/Tabs.d.ts +41 -1
- package/lib/typescript/module/tabs/Tabs.d.ts.map +1 -1
- package/lib/typescript/module/tabs/expo-router/RouterTabs.d.ts +80 -0
- package/lib/typescript/module/tabs/expo-router/RouterTabs.d.ts.map +1 -0
- package/lib/typescript/module/tabs/expo-router/index.d.ts +9 -0
- package/lib/typescript/module/tabs/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/module/tabs/types.d.ts +48 -4
- package/lib/typescript/module/tabs/types.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
- package/package.json +29 -1
- package/src/__tests__/BloomProvider.web.test.tsx +8 -15
- package/src/__tests__/Tabs.test.tsx +187 -0
- package/src/__tests__/optional-peer-imports.test.ts +7 -2
- package/src/__tests__/scroll-expo-router-adapter.test.tsx +164 -0
- package/src/__tests__/scroll-native.test.tsx +465 -0
- package/src/__tests__/scroll-store.test.ts +41 -17
- package/src/__tests__/scroll-web.test.tsx +797 -108
- package/src/provider/index.tsx +10 -7
- package/src/scroll/context.tsx +107 -0
- package/src/scroll/expo-router/index.ts +140 -0
- package/src/scroll/index.ts +92 -25
- package/src/scroll/index.web.tsx +255 -162
- package/src/scroll/scrollable.native.ts +64 -0
- package/src/scroll/scrollable.web.ts +30 -8
- package/src/scroll/store.ts +47 -25
- package/src/scroll/types.ts +82 -12
- package/src/tabs/Tabs.tsx +352 -77
- package/src/tabs/expo-router/RouterTabs.tsx +268 -0
- package/src/tabs/expo-router/index.ts +8 -0
- package/src/tabs/types.ts +48 -4
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +5 -5
- package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +11 -11
- package/src/theme/__tests__/policy-legibility.test.ts +10 -7
- package/src/theme/color-policy.ts +11 -10
- package/lib/commonjs/provider/scroll-provider.js +0 -13
- package/lib/commonjs/provider/scroll-provider.js.map +0 -1
- package/lib/commonjs/provider/scroll-provider.web.js +0 -13
- package/lib/commonjs/provider/scroll-provider.web.js.map +0 -1
- package/lib/module/provider/scroll-provider.js +0 -16
- package/lib/module/provider/scroll-provider.js.map +0 -1
- package/lib/module/provider/scroll-provider.web.js +0 -5
- package/lib/module/provider/scroll-provider.web.js.map +0 -1
- package/lib/typescript/commonjs/provider/scroll-provider.d.ts +0 -14
- package/lib/typescript/commonjs/provider/scroll-provider.d.ts.map +0 -1
- package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts +0 -3
- package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts.map +0 -1
- package/lib/typescript/module/provider/scroll-provider.d.ts +0 -14
- package/lib/typescript/module/provider/scroll-provider.d.ts.map +0 -1
- package/lib/typescript/module/provider/scroll-provider.web.d.ts +0 -3
- package/lib/typescript/module/provider/scroll-provider.web.d.ts.map +0 -1
- package/src/__tests__/scroll-native.test.ts +0 -25
- package/src/provider/scroll-provider.ts +0 -13
- package/src/provider/scroll-provider.web.ts +0 -2
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* expo-router bindings for the in-screen tab strip.
|
|
5
|
+
*
|
|
6
|
+
* This subpath (`@oxyhq/bloom/tabs/expo-router`) is the ONLY place in the tabs
|
|
7
|
+
* feature allowed to import `expo-router`, which is why it is a separate entry:
|
|
8
|
+
* the core `@oxyhq/bloom/tabs` stays usable in an app with a different router,
|
|
9
|
+
* or none, and the optional peer is never pulled into a bundle that does not
|
|
10
|
+
* ask for it. Same split as `tab-bar` / `tab-bar/expo-router` and
|
|
11
|
+
* `scroll` / `scroll/expo-router`.
|
|
12
|
+
*
|
|
13
|
+
* Everything routing-shaped lives here on purpose: which tab the route means,
|
|
14
|
+
* what a committed swipe navigates to, and which links to warm. The strip
|
|
15
|
+
* itself stays presentational and knows only about measured geometry.
|
|
16
|
+
*/
|
|
17
|
+
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
18
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
19
|
+
import { runOnJS } from 'react-native-reanimated';
|
|
20
|
+
import { router, usePathname } from 'expo-router';
|
|
21
|
+
import { Tabs, TabsTrigger } from "../Tabs.js";
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
/**
|
|
24
|
+
* Resolve which item the current route belongs to.
|
|
25
|
+
*
|
|
26
|
+
* LONGEST matching prefix, on a segment boundary — not an exact match. All
|
|
27
|
+
* three properties matter:
|
|
28
|
+
*
|
|
29
|
+
* - A prefix is needed because a tab may own a subtree (`/feeds/1/topics` and
|
|
30
|
+
* anything under it), and an exact match would drop the underline the moment
|
|
31
|
+
* the user goes one level deeper.
|
|
32
|
+
* - LONGEST is needed because the default tab's href is a prefix of every
|
|
33
|
+
* sibling's (`/@ana` vs `/@ana/replies`), so a first-match rule would light
|
|
34
|
+
* up the default tab on every tab.
|
|
35
|
+
* - The segment boundary is what stops `/feeds/12` from matching `/feeds/1`.
|
|
36
|
+
*
|
|
37
|
+
* Returns `undefined` when nothing matches, which is a real state — a strip
|
|
38
|
+
* rendered by a LAYOUT keeps rendering while a child route outside the tab set
|
|
39
|
+
* is showing — and leaves the underline hidden rather than parked on a lie.
|
|
40
|
+
*/
|
|
41
|
+
function matchActiveValue(items, pathname) {
|
|
42
|
+
let best;
|
|
43
|
+
for (const item of items) {
|
|
44
|
+
// `Href` is a string or an object; only a string form can be compared to a
|
|
45
|
+
// pathname, and an object form describes params we cannot resolve here.
|
|
46
|
+
if (typeof item.href !== 'string') continue;
|
|
47
|
+
// Compare paths only: a query string describes what the tab shows, not
|
|
48
|
+
// which tab it is, and a trailing slash is the same route either way.
|
|
49
|
+
const [path = ''] = item.href.split('?');
|
|
50
|
+
const href = path.replace(/\/$/, '');
|
|
51
|
+
const isMatch = pathname === href || pathname.startsWith(`${href}/`);
|
|
52
|
+
if (!isMatch) continue;
|
|
53
|
+
if (!best || href.length > best.length) {
|
|
54
|
+
best = {
|
|
55
|
+
value: item.value,
|
|
56
|
+
length: href.length
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return best?.value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A tab strip whose selection IS the route.
|
|
65
|
+
*
|
|
66
|
+
* Render it in the LAYOUT that owns the tabs, above the `<Slot/>` that renders
|
|
67
|
+
* them — not inside the tab screens themselves. That placement is the whole
|
|
68
|
+
* point, and it is load-bearing twice over: a strip inside the screens is
|
|
69
|
+
* unmounted and rebuilt by every navigation, so its underline has nothing to
|
|
70
|
+
* animate from and the chrome blanks while the incoming route's chunk loads;
|
|
71
|
+
* and a GESTURE inside the screens would be destroyed by the very navigation it
|
|
72
|
+
* commits, mid-release.
|
|
73
|
+
*
|
|
74
|
+
* ```tsx
|
|
75
|
+
* // app/(app)/[username]/_layout.tsx
|
|
76
|
+
* <RouterTabs
|
|
77
|
+
* items={[
|
|
78
|
+
* { value: 'posts', label: 'Posts', href: `/${username}` },
|
|
79
|
+
* { value: 'replies', label: 'Replies', href: `/${username}/replies` },
|
|
80
|
+
* ]}
|
|
81
|
+
* />
|
|
82
|
+
* <Slot />
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export function RouterTabs({
|
|
86
|
+
items,
|
|
87
|
+
onReselect,
|
|
88
|
+
swipeEnabled = true,
|
|
89
|
+
...tabsProps
|
|
90
|
+
}) {
|
|
91
|
+
const pathname = usePathname();
|
|
92
|
+
const activeValue = useMemo(() => matchActiveValue(items, pathname), [items, pathname]);
|
|
93
|
+
const dragRef = useRef(null);
|
|
94
|
+
// What releasing right now would commit. A ref rather than state: it is
|
|
95
|
+
// written on every frame of the drag and read once, and re-rendering the
|
|
96
|
+
// strip mid-gesture would fight the animation the gesture is driving.
|
|
97
|
+
const pendingRef = useRef(null);
|
|
98
|
+
const navigateTo = useCallback(value => {
|
|
99
|
+
const target = items.find(item => item.value === value);
|
|
100
|
+
if (!target) return;
|
|
101
|
+
// PUSH, not replace: a history entry per tab is what makes Back return to
|
|
102
|
+
// the tab the reader came from instead of leaving the screen entirely.
|
|
103
|
+
router.push(target.href);
|
|
104
|
+
}, [items]);
|
|
105
|
+
const handlePress = useCallback(item => {
|
|
106
|
+
if (item.value === activeValue) {
|
|
107
|
+
onReselect?.(item.value);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
navigateTo(item.value);
|
|
111
|
+
}, [activeValue, onReselect, navigateTo]);
|
|
112
|
+
const onDrag = useCallback(translationX => {
|
|
113
|
+
pendingRef.current = dragRef.current?.drag(translationX) ?? null;
|
|
114
|
+
}, []);
|
|
115
|
+
|
|
116
|
+
// `onEnd` does not fire for every terminated gesture, and `onFinalize` fires
|
|
117
|
+
// for all of them — including after `onEnd`. Guarding on the ref being
|
|
118
|
+
// non-null is what makes the second call a no-op instead of a double commit.
|
|
119
|
+
const releasedRef = useRef(true);
|
|
120
|
+
const onRelease = useCallback(() => {
|
|
121
|
+
if (releasedRef.current) return;
|
|
122
|
+
releasedRef.current = true;
|
|
123
|
+
const committed = pendingRef.current;
|
|
124
|
+
pendingRef.current = null;
|
|
125
|
+
// The underline commits first and instantly: it lives in the layout, it
|
|
126
|
+
// survives the swap, and it is the honest signal the gesture was accepted.
|
|
127
|
+
// The content area arrives when its chunk does.
|
|
128
|
+
dragRef.current?.release(committed);
|
|
129
|
+
if (committed !== null) navigateTo(committed);
|
|
130
|
+
}, [navigateTo]);
|
|
131
|
+
const onBegin = useCallback(() => {
|
|
132
|
+
releasedRef.current = false;
|
|
133
|
+
}, []);
|
|
134
|
+
const panGesture = useMemo(() => Gesture.Pan()
|
|
135
|
+
// Horizontal intent only. This is a hint to the gesture system and is
|
|
136
|
+
// NOT what protects vertical scrolling on web — see `touchAction` below.
|
|
137
|
+
.activeOffsetX([-12, 12]).failOffsetY([-12, 12]).onBegin(() => {
|
|
138
|
+
runOnJS(onBegin)();
|
|
139
|
+
}).onUpdate(event => {
|
|
140
|
+
runOnJS(onDrag)(event.translationX);
|
|
141
|
+
}).onFinalize(() => {
|
|
142
|
+
runOnJS(onRelease)();
|
|
143
|
+
}), [onBegin, onDrag, onRelease]);
|
|
144
|
+
|
|
145
|
+
// Warm every OTHER tab's async chunk. That fetch is the ~300ms the content
|
|
146
|
+
// area would otherwise spend empty after a commit, and a swipe offers no
|
|
147
|
+
// hover to warm on, so it is done up front rather than on interaction.
|
|
148
|
+
//
|
|
149
|
+
// `router.prefetch` — the public imperative API (declared in expo-router's
|
|
150
|
+
// `global-state/router.d.ts`) — rather than wrapping each trigger in
|
|
151
|
+
// `<Link prefetch asChild>`. Both reasons are about the WRAPPER, not about
|
|
152
|
+
// prefetching: `asChild` is Radix's `Slot`, which COMPOSES event handlers, so
|
|
153
|
+
// the trigger's own `onPress` and the link's navigation would both run — and
|
|
154
|
+
// the link's push knows nothing about `onReselect`, so re-tapping the active
|
|
155
|
+
// tab would push a duplicate entry and make Back appear to do nothing. It
|
|
156
|
+
// also injects an `href` a `Pressable` ignores. The prefetching itself is
|
|
157
|
+
// identical: `<Link prefetch>` renders `<Prefetch href/>` beside its element
|
|
158
|
+
// and does nothing else.
|
|
159
|
+
//
|
|
160
|
+
// Known trade: a real `<Link>` would render a web anchor, which is what gives
|
|
161
|
+
// middle-click and open-in-new-tab. A tab strip arguably wants that; getting
|
|
162
|
+
// both needs the trigger to render an anchor itself, which is a change to the
|
|
163
|
+
// core rather than to this file.
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
for (const item of items) {
|
|
166
|
+
if (item.value === activeValue || item.disabled) continue;
|
|
167
|
+
router.prefetch(item.href);
|
|
168
|
+
}
|
|
169
|
+
}, [items, activeValue]);
|
|
170
|
+
const strip =
|
|
171
|
+
/*#__PURE__*/
|
|
172
|
+
// `hasSelection` is what stops the underline asserting a tab while a
|
|
173
|
+
// NON-TAB sibling route is showing — the layout that renders this strip
|
|
174
|
+
// renders those too (a profile's `/followers` beside its tab routes).
|
|
175
|
+
_jsx(Tabs, {
|
|
176
|
+
...tabsProps,
|
|
177
|
+
ref: dragRef,
|
|
178
|
+
hasSelection: activeValue !== undefined,
|
|
179
|
+
children: items.map(item => /*#__PURE__*/_jsx(TabsTrigger, {
|
|
180
|
+
value: item.value,
|
|
181
|
+
label: item.label,
|
|
182
|
+
icon: item.icon,
|
|
183
|
+
count: item.count,
|
|
184
|
+
disabled: item.disabled
|
|
185
|
+
// Focus, never a press, is what drives the underline — so a deep
|
|
186
|
+
// link, a browser Back and a back gesture animate exactly like a tap.
|
|
187
|
+
,
|
|
188
|
+
isFocused: item.value === activeValue,
|
|
189
|
+
onPress: () => handlePress(item)
|
|
190
|
+
}, item.value))
|
|
191
|
+
});
|
|
192
|
+
if (!swipeEnabled) return strip;
|
|
193
|
+
return (
|
|
194
|
+
/*#__PURE__*/
|
|
195
|
+
// `touchAction="pan-y"` is MANDATORY and is the landmine of this file.
|
|
196
|
+
// RNGH sets the detector's view to `touch-action: none` on web
|
|
197
|
+
// (`GestureHandlerWebDelegate.js`), which disables browser-native VERTICAL
|
|
198
|
+
// scrolling on that element. `failOffsetY` above does not protect against
|
|
199
|
+
// it: that is a JS decision taken after `touch-action` has already told the
|
|
200
|
+
// browser not to scroll. Removing this prop is silent on native and breaks
|
|
201
|
+
// scrolling on mobile web.
|
|
202
|
+
_jsx(GestureDetector, {
|
|
203
|
+
gesture: panGesture,
|
|
204
|
+
touchAction: "pan-y",
|
|
205
|
+
children: strip
|
|
206
|
+
})
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
RouterTabs.displayName = 'RouterTabs';
|
|
210
|
+
//# sourceMappingURL=RouterTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","Gesture","GestureDetector","runOnJS","router","usePathname","Tabs","TabsTrigger","jsx","_jsx","matchActiveValue","items","pathname","best","item","href","path","split","replace","isMatch","startsWith","length","value","RouterTabs","onReselect","swipeEnabled","tabsProps","activeValue","dragRef","pendingRef","navigateTo","target","find","push","handlePress","onDrag","translationX","current","drag","releasedRef","onRelease","committed","release","onBegin","panGesture","Pan","activeOffsetX","failOffsetY","onUpdate","event","onFinalize","disabled","prefetch","strip","ref","hasSelection","undefined","children","map","label","icon","count","isFocused","onPress","gesture","touchAction","displayName"],"sourceRoot":"../../../../src","sources":["tabs/expo-router/RouterTabs.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Entry for `@oxyhq/bloom/tabs/expo-router`. The component lives in a sibling
|
|
5
|
+
* module because this file is the published entry path and must stay stable;
|
|
6
|
+
* the split also keeps the router binding in one place, which is what the
|
|
7
|
+
* optional-peer allowlist asserts about.
|
|
8
|
+
*/
|
|
9
|
+
export { RouterTabs } from "./RouterTabs.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RouterTabs"],"sourceRoot":"../../../../src","sources":["tabs/expo-router/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,UAAU,QAAQ,iBAAc","ignoreList":[]}
|
|
@@ -207,16 +207,17 @@ function vividHueNear(hue) {
|
|
|
207
207
|
* why 11 of the 13 presets carry white and exactly the two light ones do not.
|
|
208
208
|
*/
|
|
209
209
|
function whiteLabelTone(palette, seedTone, isDark) {
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
|
|
216
|
-
//
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
210
|
+
// LIGHT: every fill comes down, no exemption. On a near-white page a bright
|
|
211
|
+
// colour has nothing to read against — a lime at its own tone 90 is a pale
|
|
212
|
+
// smear there, indistinguishable from the same colour in dark, which is not a
|
|
213
|
+
// theme at all. Coming down is what makes faircoin a deep green in light and a
|
|
214
|
+
// bright lime in dark.
|
|
215
|
+
if (!isDark) return LIGHT_FILL_TONE;
|
|
216
|
+
// DARK: the budget applies. Most brands come down to where white fits, but a
|
|
217
|
+
// seed that is already light cannot without ceasing to be itself, so it keeps
|
|
218
|
+
// its own tone and takes a black label. That is the eleven-and-two pattern.
|
|
219
|
+
const candidate = Math.max(DARK_FILL_TONE, seedTone - TONE_BUDGET);
|
|
220
|
+
return contrastOf(palette.tone(candidate), true) >= AA ? candidate : Math.max(seedTone, DARK_SEED_FLOOR);
|
|
220
221
|
}
|
|
221
222
|
|
|
222
223
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["argbFromHex","Hct","TonalPalette","blueFromArgb","greenFromArgb","redFromArgb","STATUS_SEEDS","success","error","warning","info","AA","rgb","argb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FILL_TONE","TONE_BUDGET","DARK_SEED_FLOOR","DARK_ACCENT_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","fromHueAndChroma","bestTone","bestChroma","tone","chroma","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","whiteLabelTone","seedTone","isDark","target","max","accentTone","peak","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","secondary","tertiary","buildPolicyTokens","seedHex","roles","pinned","seed","brandPalette","primary","tokens","surfaceContainer","surfaceContainerLowest","surfaceContainerHigh","onSurfaceVariant","hues","role","pin","undefined","fillPalette","textPalette","vividPalette","pair","i","hex","Object","entries","status"],"sourceRoot":"../../../src","sources":["theme/color-policy.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["argbFromHex","Hct","TonalPalette","blueFromArgb","greenFromArgb","redFromArgb","STATUS_SEEDS","success","error","warning","info","AA","rgb","argb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FILL_TONE","TONE_BUDGET","DARK_SEED_FLOOR","DARK_ACCENT_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","fromHueAndChroma","bestTone","bestChroma","tone","chroma","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","whiteLabelTone","seedTone","isDark","max","accentTone","peak","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","secondary","tertiary","buildPolicyTokens","seedHex","roles","pinned","seed","brandPalette","primary","tokens","surfaceContainer","surfaceContainerLowest","surfaceContainerHigh","onSurfaceVariant","hues","role","pin","undefined","fillPalette","textPalette","vividPalette","pair","i","hex","Object","entries","status"],"sourceRoot":"../../../src","sources":["theme/color-policy.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,11 +18,13 @@
|
|
|
18
18
|
* Nesting extra contexts costs nothing at runtime — the win is that scope is no
|
|
19
19
|
* longer a per-app decision.
|
|
20
20
|
*
|
|
21
|
-
* EXPO/EXPO-ROUTER APPS ONLY
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* EXPO/EXPO-ROUTER APPS ONLY, and now for one narrow reason: it binds the
|
|
22
|
+
* scroll store to the expo-router ADAPTER, which is the only module in the
|
|
23
|
+
* scroll primitive that imports `expo-router`. The scroll core itself is
|
|
24
|
+
* router-agnostic, so a Vite/SPA consumer can mount
|
|
25
|
+
* `<ScrollRestorationProvider adapter={...}>` from `@oxyhq/bloom/scroll` with
|
|
26
|
+
* an adapter for its own router — alongside `BloomThemeProvider` and whatever
|
|
27
|
+
* else it needs — rather than going without.
|
|
26
28
|
*
|
|
27
29
|
* NOT included, on purpose — these are OUTLETS, not state, and their placement
|
|
28
30
|
* in the tree is a real app decision (z-order, safe areas, and mounting a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/index.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAI5E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC;IACnF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,OAAc,EACd,GAAG,UAAU,EACd,EAAE,kBAAkB,2CAcpB;yBAnBe,aAAa"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ScrollOffsetStore } from './store';
|
|
2
|
+
import type { ScrollRestorationProviderProps, ScrollRouterAdapter } from './types';
|
|
3
|
+
export interface ScrollRestorationContextValue {
|
|
4
|
+
store: ScrollOffsetStore;
|
|
5
|
+
adapter: ScrollRouterAdapter;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Holds the offset map and the router binding for the subtree. One provider
|
|
9
|
+
* near the app root is enough; the store lives as long as the provider, so
|
|
10
|
+
* offsets survive navigating away and back (including browser Back/Forward).
|
|
11
|
+
*/
|
|
12
|
+
export declare function ScrollRestorationProvider({ children, adapter, }: ScrollRestorationProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function useScrollRestorationContext(): ScrollRestorationContextValue;
|
|
14
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/scroll/context.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EACV,8BAA8B,EAC9B,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,OAAO,GACR,EAAE,8BAA8B,2CAWhC;AAED,wBAAgB,2BAA2B,IAAI,6BAA6B,CAQ3E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ScrollRouterAdapter } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* The adapter to hand `<ScrollRestorationProvider adapter={...}>` in an
|
|
4
|
+
* expo-router app. A module-level constant, as the adapter contract requires.
|
|
5
|
+
*/
|
|
6
|
+
export declare const expoRouterScrollAdapter: ScrollRouterAdapter;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/scroll/expo-router/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAkHvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC"}
|
|
@@ -1,27 +1,18 @@
|
|
|
1
|
+
import type { ScrollRestorationBinding, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
|
|
2
|
+
export { ScrollRestorationProvider } from './context';
|
|
3
|
+
export type { ScreenFocusEffect, ScrollableHandle, ScrollRestorationBinding, ScrollRestorationProviderProps, ScrollRestorationTarget, ScrollRouterAdapter, UseScrollRestorationOptions, } from './types';
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
5
|
+
* Preserve and restore the scroll offset of `target` across content changes,
|
|
6
|
+
* keyed by the content its screen is showing plus an optional `options.key`.
|
|
3
7
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* nothing.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* `package.json`; native bundlers fall through to this file.
|
|
13
|
-
*/
|
|
14
|
-
import type { ReactElement } from 'react';
|
|
15
|
-
import type { ScrollRestorationProviderProps, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
|
|
16
|
-
export type { ScrollableHandle, ScrollRestorationProviderProps, ScrollRestorationTarget, UseScrollRestorationOptions, } from './types';
|
|
17
|
-
/**
|
|
18
|
-
* No-op provider. Renders children unchanged — native scroll persistence is
|
|
19
|
-
* handled by the navigator, so no per-route state is kept.
|
|
20
|
-
*/
|
|
21
|
-
export declare function ScrollRestorationProvider({ children, }: ScrollRestorationProviderProps): ReactElement;
|
|
22
|
-
/**
|
|
23
|
-
* No-op hook. Accepts the same arguments as the web implementation so call
|
|
24
|
-
* sites are identical across platforms.
|
|
8
|
+
* Behaviour (native):
|
|
9
|
+
* - Offsets are recorded from the returned `onScroll` binding, which the caller
|
|
10
|
+
* wires onto the list. There is no other way to observe a list's offset.
|
|
11
|
+
* - When the storage key changes — a re-keyed list, a remount, or `enabled`
|
|
12
|
+
* turning on — the saved offset is applied, or 0 when the key was never seen.
|
|
13
|
+
* - A push/pop that re-focuses the same screen scrolls nothing. The navigator
|
|
14
|
+
* already preserved the position, and re-applying it would at best be a
|
|
15
|
+
* no-op and at worst fight a list that has legitimately moved on.
|
|
25
16
|
*/
|
|
26
|
-
export declare function useScrollRestoration(
|
|
17
|
+
export declare function useScrollRestoration(target: ScrollRestorationTarget, options?: UseScrollRestorationOptions): ScrollRestorationBinding;
|
|
27
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,2BAA2B,GACpC,wBAAwB,CAyD1B"}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
* Holds the per-route offset map for the subtree. One provider near the app
|
|
5
|
-
* root is enough; the store lives for the document's lifetime so offsets
|
|
6
|
-
* survive navigating away and back (including browser Back/Forward).
|
|
7
|
-
*/
|
|
8
|
-
export declare function ScrollRestorationProvider({ children, }: ScrollRestorationProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
import type { ScrollRestorationBinding, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
|
|
2
|
+
export { ScrollRestorationProvider } from './context';
|
|
3
|
+
export type { ScreenFocusEffect, ScrollableHandle, ScrollRestorationBinding, ScrollRestorationProviderProps, ScrollRestorationTarget, ScrollRouterAdapter, UseScrollRestorationOptions, } from './types';
|
|
9
4
|
/**
|
|
10
5
|
* Preserve and restore the scroll offset of `target` across navigation, keyed
|
|
11
|
-
* by the
|
|
12
|
-
* multiple scrollables).
|
|
6
|
+
* by the content its screen is showing plus an optional `options.key`.
|
|
13
7
|
*
|
|
14
8
|
* Behaviour (web):
|
|
15
9
|
* - On every scroll while the screen is focused, the current offset is recorded
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* saved
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
10
|
+
* under the key that was live when the listener was attached. This stream of
|
|
11
|
+
* saves is the source of truth.
|
|
12
|
+
* - On focus — and again whenever the key changes while the screen STAYS
|
|
13
|
+
* focused, which is how an in-screen tab or folder swap is seen at all — the
|
|
14
|
+
* offset saved for the new key is re-applied across a bounded run of
|
|
15
|
+
* animation frames, stopping as soon as the write sticks or
|
|
16
|
+
* {@link RESTORE_FRAME_CAP} is reached. Content never seen this session is
|
|
17
|
+
* written to 0 once instead; a write to 0 always sticks, so it needs no loop.
|
|
18
|
+
* - On blur (and on a key change), the LAST OBSERVED offset is persisted under
|
|
19
|
+
* the OUTGOING key as a final safety net — not a fresh `scrollTop` read,
|
|
20
|
+
* which the navigator may already have forced to 0 while collapsing the
|
|
21
|
+
* hidden screen.
|
|
24
22
|
*/
|
|
25
|
-
export declare function useScrollRestoration(target: ScrollRestorationTarget, options?: UseScrollRestorationOptions):
|
|
23
|
+
export declare function useScrollRestoration(target: ScrollRestorationTarget, options?: UseScrollRestorationOptions): ScrollRestorationBinding;
|
|
26
24
|
//# sourceMappingURL=index.web.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.web.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.web.tsx"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AA0DjB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,2BAA2B,GACpC,wBAAwB,CAgM1B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ScrollRestorationTarget } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The write half of a scrollable, on native. There is no read half: native
|
|
4
|
+
* offers no way to sample a list's offset from outside it, so offsets arrive
|
|
5
|
+
* through the `onScroll` binding the hook returns instead.
|
|
6
|
+
*/
|
|
7
|
+
export interface NativeScroller {
|
|
8
|
+
setOffset: (offset: number) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Build a {@link NativeScroller} for a target.
|
|
12
|
+
*
|
|
13
|
+
* `scrollToOffset` (`FlatList`, `FlashList`) is preferred over `scrollTo`
|
|
14
|
+
* (`ScrollView`) because a list exposes both shapes on some versions and only
|
|
15
|
+
* the former accounts for the list's own header. The `'window'` sentinel has no
|
|
16
|
+
* native meaning — there is no document scroller — so it resolves to a no-op
|
|
17
|
+
* rather than an error: a call site shared with web legitimately passes it.
|
|
18
|
+
*
|
|
19
|
+
* The handle is re-resolved on every write; it is never cached, because a ref
|
|
20
|
+
* can be swapped or detached between the schedule and the write.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createScroller(target: ScrollRestorationTarget): NativeScroller;
|
|
23
|
+
//# sourceMappingURL=scrollable.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollable.native.d.ts","sourceRoot":"","sources":["../../../../src/scroll/scrollable.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAsBD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,uBAAuB,GAC9B,cAAc,CAkBhB"}
|
|
@@ -8,17 +8,30 @@ export interface ResolvedScroller {
|
|
|
8
8
|
getOffset: () => number;
|
|
9
9
|
setOffset: (offset: number) => void;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* The largest offset the container can currently hold — `scrollHeight -
|
|
12
|
+
* clientHeight`, clamped at 0. Answers two questions the save path needs:
|
|
13
|
+
* whether a 0 read is real (`maxOffset > 0`) and whether an offset is sitting
|
|
14
|
+
* exactly at the bottom, which is the signature of a browser clamp.
|
|
13
15
|
*
|
|
14
16
|
* React Navigation's web stack collapses a hidden background screen so its
|
|
15
17
|
* content height drops to the viewport height; while collapsed the container
|
|
16
18
|
* cannot be scrolled and its `scrollTop` is forced to 0. The hook uses this
|
|
17
19
|
* to ignore a spurious 0 read coming from a collapsed container rather than
|
|
18
|
-
* persisting it over a previously-saved good offset.
|
|
19
|
-
*
|
|
20
|
+
* persisting it over a previously-saved good offset.
|
|
21
|
+
*
|
|
22
|
+
* The DOCUMENT collapses the same way, so the `'window'` sentinel answers the
|
|
23
|
+
* same question honestly rather than hardcoding `true`. It used to, on the
|
|
24
|
+
* premise that the navigator never collapses the document — false under a
|
|
25
|
+
* tabbed navigator, where every tab stays MOUNTED and non-focused ones are
|
|
26
|
+
* `display: none` (expo-router's `ui/TabSlot`, and react-native-screens' web
|
|
27
|
+
* `Screen` at `activityState === 0`). Measured in Chrome 150: switching from
|
|
28
|
+
* a tall tab to a short one drops `documentElement.scrollHeight` from 8040 to
|
|
29
|
+
* the 800px viewport, forces `scrollY` to 0 and dispatches two `scroll`
|
|
30
|
+
* events — which the outgoing tab's still-attached listener would otherwise
|
|
31
|
+
* persist as 0 over its real offset, because blur is emitted from an effect
|
|
32
|
+
* that has not run yet.
|
|
20
33
|
*/
|
|
21
|
-
|
|
34
|
+
getMaxOffset: () => number;
|
|
22
35
|
}
|
|
23
36
|
/**
|
|
24
37
|
* Build a {@link ResolvedScroller} for a target. The window sentinel reads and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollable.web.d.ts","sourceRoot":"","sources":["../../../../src/scroll/scrollable.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC
|
|
1
|
+
{"version":3,"file":"scrollable.web.d.ts","sourceRoot":"","sources":["../../../../src/scroll/scrollable.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B;AAuCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,gBAAgB,CAkChF"}
|