@flemo/react 1.9.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ declare const RouterIdContext: import('react').Context<string | null>;
2
+ export default RouterIdContext;
package/dist/index.d.ts CHANGED
@@ -18,7 +18,7 @@ export { default as useScreenStore } from './stores/useScreenStore';
18
18
  export { default as useStores } from './stores/useStores';
19
19
  export { default as RouterScopeProvider } from './stores/RouterScopeProvider';
20
20
  export { type FlemoStores } from './stores/StoreContext';
21
- export { type SharedBarPresence } from './screen/store';
21
+ export { type SharedBarId, type SharedBarMetadata, type SharedBarPresence, type SharedBarsMetadata } from './screen/store';
22
22
  export { default as useViewportScrollHeight } from './screen/useViewportScrollHeight';
23
23
  export { createTransition, createRawTransition, createDecorator, createRawDecorator, createPartTransition, createRawPartTransition, partTransitionMap, createBrowserHistoryDriver } from '@flemo/core';
24
24
  export type { TransitionName, RegisterTransition, DecoratorName, RegisterDecorator, PartTransitionName, RegisterPartTransition, PartTransitionOptions, HistoryDriver, HistoryNavEvent } from '@flemo/core';
package/dist/index.mjs CHANGED
@@ -1,24 +1,25 @@
1
- import e, { Activity as t, Children as n, createContext as r, isValidElement as i, useContext as a, useEffect as o, useId as s, useImperativeHandle as c, useInsertionEffect as l, useLayoutEffect as u, useReducer as d, useRef as f, useState as p } from "react";
2
- import { animHoldKey as ee, appendParamsQuery as m, buildRoutePath as h, computeBarRiding as g, computeScreenFreeze as te, computeScreenFreezeMode as _, consumeSelfInducedPop as v, createAnimHoldCoordinator as y, createBrowserHistoryDriver as b, createBrowserHistoryDriver as ne, createDecorator as re, createHistoryStore as x, createNavigateStore as S, createNavigationController as C, createPartTransition as w, createRawDecorator as T, createRawPartTransition as E, createRawTransition as D, createRouterScope as ie, createScreenSelector as O, createScreenStore as k, createStepController as A, createSwipeController as ae, createTransition as oe, createTransitionEngine as se, createTransitionStore as ce, decoratorMap as le, eagerlyDecodeImages as ue, ensureImageDecodeOffloader as de, ensureScopeHistorySync as j, enteringInitialStyle as fe, getMatchedPathPattern as pe, holdCompositorWarm as me, isOpaqueColor as he, isServer as ge, markSelfInducedPop as _e, matchesPathname as ve, observeBarHeight as ye, observeViewportScrollHeight as M, partTransitionMap as be, readStepParams as N, registerTransitionDefinitions as xe, releaseScopeHistorySync as P, resolveTransition as Se, seedRouterEntry as F, subscribeStepParamsRestore as I } from "@flemo/core";
3
- import { jsx as L, jsxs as Ce } from "react/jsx-runtime";
1
+ import e, { Activity as t, Children as n, createContext as r, isValidElement as i, useCallback as a, useContext as o, useEffect as s, useId as c, useImperativeHandle as l, useInsertionEffect as u, useLayoutEffect as d, useReducer as f, useRef as p, useState as m } from "react";
2
+ import { animHoldKey as ee, appendParamsQuery as te, buildRoutePath as ne, computeBarRiding as re, computeScreenFreeze as ie, computeScreenFreezeMode as h, consumeSelfInducedPop as g, createAnimHoldCoordinator as ae, createBrowserHistoryDriver as _, createBrowserHistoryDriver as oe, createDecorator as v, createHistoryStore as y, createNavigateStore as b, createNavigationController as se, createPartTransition as x, createRawDecorator as S, createRawPartTransition as ce, createRawTransition as C, createRouterScope as w, createScreenSelector as T, createScreenStore as E, createStepController as D, createSwipeController as le, createTransition as ue, createTransitionEngine as O, createTransitionStore as de, decoratorMap as fe, detectBlinkEngine as pe, eagerlyDecodeImages as me, ensureGpuPipelinePrewarm as k, ensureImageDecodeOffloader as he, ensureScopeHistorySync as ge, enteringInitialStyle as _e, getMatchedPathPattern as ve, governedCompiledActive as ye, holdCompositorWarm as be, isLegacyAndroidBlink as A, isOpaqueColor as xe, isServer as Se, markSelfInducedPop as j, matchesPathname as Ce, observeBarHeight as we, observeViewportScrollHeight as Te, partTransitionMap as Ee, readImageOffloadOverride as De, readPrerasterFlag as Oe, readSettleGateFlag as ke, readStepParams as M, registerTransitionDefinitions as Ae, releaseScopeHistorySync as je, resolveTransition as Me, seedRouterEntry as Ne, sharedBarsMatch as Pe, steadySixtyPlayerEligible as Fe, subscribeStepParamsRestore as Ie } from "@flemo/core";
3
+ import { jsx as N, jsxs as Le } from "react/jsx-runtime";
4
+ import { flushSync as Re } from "react-dom";
4
5
  //#region src/stores/StoreContext.ts
5
- var R = r(null);
6
+ var P = r(null);
6
7
  //#endregion
7
8
  //#region src/stores/useStores.ts
8
- function z() {
9
- let e = a(R);
9
+ function F() {
10
+ let e = o(P);
10
11
  if (!e) throw Error("flemo stores are missing. Render inside a <Router>.");
11
12
  return e;
12
13
  }
13
14
  //#endregion
14
15
  //#region src/history/HistoryListener.tsx
15
- function we() {
16
- let e = z();
17
- return o(() => (j(e), () => P(e)), [e]), null;
16
+ function ze() {
17
+ let e = F();
18
+ return s(() => (ge(e), () => je(e)), [e]), null;
18
19
  }
19
20
  //#endregion
20
21
  //#region src/screen/ScreenContext.ts
21
- var B = r({
22
+ var I = r({
22
23
  id: "",
23
24
  isActive: !1,
24
25
  isRoot: !0,
@@ -33,15 +34,15 @@ var B = r({
33
34
  });
34
35
  //#endregion
35
36
  //#region src/screen/useScreen.ts
36
- function V() {
37
- return a(B);
37
+ function L() {
38
+ return o(I);
38
39
  }
39
40
  //#endregion
40
41
  //#region src/screen/ParamsProvider/ParamsContext.ts
41
- var Te = r({}), Ee = r(() => {});
42
+ var R = r({}), z = r(() => {});
42
43
  //#endregion
43
44
  //#region src/screen/ParamsProvider/ParamsReducer.ts
44
- function H(e, t) {
45
+ function B(e, t) {
45
46
  switch (t.type) {
46
47
  case "SET": return t.params;
47
48
  default: return e;
@@ -49,10 +50,10 @@ function H(e, t) {
49
50
  }
50
51
  //#endregion
51
52
  //#region src/screen/ParamsProvider/ParamsProvider.tsx
52
- function De({ children: e }) {
53
- let { isActive: t, params: n } = V(), { driver: r } = z(), [i, a] = d(H, n);
54
- return o(() => {
55
- if (t) return I(r, (e) => a({
53
+ function Be({ children: e }) {
54
+ let { isActive: t, params: n } = L(), { driver: r } = F(), [i, a] = f(B, n);
55
+ return s(() => {
56
+ if (t) return Ie(r, (e) => a({
56
57
  type: "SET",
57
58
  params: e
58
59
  }));
@@ -60,53 +61,57 @@ function De({ children: e }) {
60
61
  t,
61
62
  a,
62
63
  r
63
- ]), /* @__PURE__ */ L(Ee.Provider, {
64
+ ]), /* @__PURE__ */ N(z.Provider, {
64
65
  value: a,
65
- children: /* @__PURE__ */ L(Te.Provider, {
66
+ children: /* @__PURE__ */ N(R.Provider, {
66
67
  value: i,
67
68
  children: e
68
69
  })
69
70
  });
70
71
  }
71
72
  //#endregion
72
- //#region ../../node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.17_react@19.2.7/node_modules/zustand/esm/react.mjs
73
- var U = (e) => e;
74
- function W(t, n = U) {
73
+ //#region ../../node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.18_react@19.2.8/node_modules/zustand/esm/react.mjs
74
+ var Ve = (e) => e;
75
+ function V(t, n = Ve) {
75
76
  let r = e.useSyncExternalStore(t.subscribe, e.useCallback(() => n(t.getState()), [t, n]), e.useCallback(() => n(t.getInitialState()), [t, n]));
76
77
  return e.useDebugValue(r), r;
77
78
  }
78
79
  //#endregion
79
80
  //#region src/stores/useHistoryStore.ts
80
- function G(e) {
81
- return W(z().history, e);
81
+ function H(e) {
82
+ return V(F().history, e);
82
83
  }
83
84
  //#endregion
85
+ //#region src/RouterIdContext.ts
86
+ var He = r(null);
87
+ //#endregion
84
88
  //#region src/renderer/Renderer.tsx
85
- function K({ children: e }) {
86
- let t = G((e) => e.index), r = G((e) => e.histories), i = z(), o = a(B);
87
- return O(r, t).map((t) => {
88
- let [r] = n.toArray(e).filter((e) => ve(e.props.path, t.pathname));
89
- return r ? /* @__PURE__ */ L(B.Provider, {
89
+ function Ue({ children: e }) {
90
+ let t = H((e) => e.index), r = H((e) => e.histories), i = F(), a = o(I), s = o(He);
91
+ return T(r, t).map((t) => {
92
+ let [r] = n.toArray(e).filter((e) => Ce(e.props.path, t.pathname));
93
+ return r ? /* @__PURE__ */ N(I.Provider, {
90
94
  value: {
91
95
  ...t,
92
- isPrev: t.isPrev || o.isPrev,
96
+ isPrev: t.isPrev || a.isPrev,
93
97
  navigateStore: i.navigate,
94
- routePath: pe(r.props.path, t.pathname)
98
+ routerId: s ?? void 0,
99
+ routePath: ve(r.props.path, t.pathname)
95
100
  },
96
- children: /* @__PURE__ */ L(De, { children: r })
101
+ children: /* @__PURE__ */ N(Be, { children: r })
97
102
  }, t.id) : null;
98
103
  });
99
104
  }
100
105
  //#endregion
101
106
  //#region src/screen/ScreenViewportContext.ts
102
- var q = r({ contained: !1 });
103
- function Oe() {
104
- return a(q);
107
+ var U = r({ contained: !1 });
108
+ function We() {
109
+ return o(U);
105
110
  }
106
111
  //#endregion
107
112
  //#region src/transition/styles.ts
108
- function J(e, t, n = []) {
109
- l(() => xe(e, t, n), [
113
+ function Ge(e, t, n = []) {
114
+ u(() => Ae(e, t, n), [
110
115
  e,
111
116
  t,
112
117
  n
@@ -114,64 +119,72 @@ function J(e, t, n = []) {
114
119
  }
115
120
  //#endregion
116
121
  //#region src/RouterDepthContext.ts
117
- var ke = r(0), Ae = { contained: !0 };
118
- function je({ children: e, className: t, style: n }) {
119
- return /* @__PURE__ */ L("div", {
122
+ var Ke = r(0), qe = { contained: !0 };
123
+ function Je({ children: e, className: t, style: n }) {
124
+ return /* @__PURE__ */ N("div", {
120
125
  className: t,
121
126
  style: {
122
127
  position: "relative",
123
128
  overflow: "hidden",
124
129
  ...n
125
130
  },
126
- children: /* @__PURE__ */ L(q.Provider, {
127
- value: Ae,
128
- children: /* @__PURE__ */ L(K, { children: e })
131
+ children: /* @__PURE__ */ N(U.Provider, {
132
+ value: qe,
133
+ children: /* @__PURE__ */ N(Ue, { children: e })
129
134
  })
130
135
  });
131
136
  }
132
137
  //#endregion
133
138
  //#region src/Router.tsx
134
- function Me(e) {
139
+ function Ye(e) {
135
140
  let t = null;
136
141
  return n.forEach(e, (e) => {
137
142
  if (t || !i(e)) return;
138
- if (e.type === je) {
143
+ if (e.type === Je) {
139
144
  t = n.toArray(e.props.children).filter(i);
140
145
  return;
141
146
  }
142
147
  let r = e.props.children;
143
148
  if (r) {
144
- let e = Me(r);
149
+ let e = Ye(r);
145
150
  e && (t = e);
146
151
  }
147
152
  }), t;
148
153
  }
149
- var Ne = typeof window > "u" ? o : u, Pe = [], Y = [], Fe = [], Ie = { contained: !0 }, Le = 500, Re = 3e3;
150
- function ze({ children: e, initPath: t = "/", defaultTransitionName: r = "cupertino", transitions: i = Pe, decorators: c = Y, partTransitions: l = Fe, history: u = "browser", createDriver: d, className: f, style: ee }) {
151
- let m = a(ke), h = m > 0, g = u === "memory", te = s(), _ = a(B), v = a(R), y = h && _.id ? `_F_${v?.routerKey ?? ""}${_.id}_` : te, b = Me(e), re = b !== null, x = h ? null : v, S = x !== null, C = d ?? ne, [w] = p(() => g ? null : C(S ? void 0 : y)), T = !h && !g && !ge(), E = T && w ? w.readPathname() : t || "/", D = E.indexOf("?"), O = (D >= 0 ? E.slice(0, D) : E) || "/", k = T ? window.location.search : D >= 0 ? E.slice(D) : "", [A] = p(() => ie({
152
- routePaths: (b ?? n.toArray(e)).map((e) => e.props.path).flat(),
153
- pathname: O,
154
- search: k,
155
- defaultTransitionName: r,
156
- memory: g,
157
- browserDriver: w,
158
- hostedScope: x,
159
- routerKey: S ? void 0 : y,
160
- zoneEntryId: h && !S && _.id || void 0,
161
- persistKey: h && !g && !S ? y : void 0
162
- }));
163
- A.transition.setState({ defaultTransitionName: r }), Ne(() => (A.life.alive = !0, () => {
164
- A.life.alive = !1;
165
- }), [A]), J(i, c, l), o(() => de(), []), o(() => {
154
+ var Xe = typeof window > "u" ? s : d, Ze = [], Qe = [], W = [], $e = { contained: !0 }, et = 500, tt = 3e3;
155
+ function G({ children: e, initPath: t = "/", defaultTransitionName: r = "cupertino", transitions: i = Ze, decorators: a = Qe, partTransitions: l = W, history: u = "browser", createDriver: d, className: f, style: p }) {
156
+ let ee = o(Ke), te = c(), [ne, re] = m(!1);
157
+ s(() => re(!0), []);
158
+ let ie = ne ? te : null, h = ee > 0, g = u === "memory", ae = c(), _ = o(I), v = o(P), y = h && _.id ? `_F_${v?.routerKey ?? ""}${_.id}_` : ae, b = Ye(e), se = b !== null, x = h ? null : v, S = x !== null, ce = d ?? oe, [C] = m(() => g ? null : ce(S ? void 0 : y)), T = !h && !g && !Se(), E = T && C ? C.readPathname() : t || "/", D = E.indexOf("?"), le = (D >= 0 ? E.slice(0, D) : E) || "/", ue = T ? window.location.search : D >= 0 ? E.slice(D) : "", [O] = m(() => {
159
+ let t = (b ?? n.toArray(e)).map((e) => e.props.path).flat();
160
+ return w({
161
+ routePaths: t,
162
+ pathname: le,
163
+ search: ue,
164
+ defaultTransitionName: r,
165
+ memory: g,
166
+ browserDriver: C,
167
+ hostedScope: x,
168
+ routerKey: S ? void 0 : y,
169
+ zoneEntryId: h && !S && _.id || void 0,
170
+ persistKey: h && !g && !S ? y : void 0
171
+ });
172
+ });
173
+ O.transition.setState({ defaultTransitionName: r }), Xe(() => (O.life.alive = !0, () => {
174
+ O.life.alive = !1;
175
+ }), [O]), Ge(i, a, l), s(() => {
176
+ let e = De();
177
+ if (e !== "off") return e === "on" || A() ? he() : void 0;
178
+ }, []), s(() => k(), []), s(() => {
166
179
  if (typeof document > "u") return;
167
180
  let e = null, t = null, n = 0, r = () => {
168
181
  let r = Date.now();
169
- if (r - n < Le) return;
182
+ if (r - n < et) return;
170
183
  n = r, t && clearTimeout(t);
171
184
  let i = e;
172
- e = me(), i?.(), t = setTimeout(() => {
185
+ e = be(), i?.(), t = setTimeout(() => {
173
186
  t = null, e?.(), e = null;
174
- }, Re);
187
+ }, tt);
175
188
  }, i = [
176
189
  "pointerdown",
177
190
  "pointermove",
@@ -184,61 +197,64 @@ function ze({ children: e, initPath: t = "/", defaultTransitionName: r = "cupert
184
197
  for (let e of i) document.removeEventListener(e, r);
185
198
  t && clearTimeout(t), e?.();
186
199
  };
187
- }, []), o(() => {
188
- g || !w || F({
189
- driver: w,
200
+ }, []), s(() => {
201
+ g || !C || Ne({
202
+ driver: C,
190
203
  routerKey: S ? null : y,
191
204
  nested: h && !S,
192
- seedPathname: O,
205
+ seedPathname: le,
193
206
  defaultTransitionName: r,
194
- rootParams: A.history.getState().histories[0]?.params ?? {}
207
+ rootParams: O.history.getState().histories[0]?.params ?? {}
195
208
  });
196
209
  }, [
197
210
  g,
198
211
  S,
199
212
  h,
200
213
  y,
201
- O,
214
+ le,
202
215
  r,
203
- A.history,
204
- w
216
+ O.history,
217
+ C
205
218
  ]);
206
- let ae = re ? e : /* @__PURE__ */ L(K, { children: e }), oe = /* @__PURE__ */ L(ke.Provider, {
207
- value: m + 1,
208
- children: /* @__PURE__ */ Ce(R.Provider, {
209
- value: A,
210
- children: [!g && /* @__PURE__ */ L(we, {}), h ? /* @__PURE__ */ L(q.Provider, {
211
- value: Ie,
212
- children: ae
213
- }) : ae]
219
+ let de = se ? e : /* @__PURE__ */ N(Ue, { children: e }), fe = /* @__PURE__ */ N(He.Provider, {
220
+ value: ie,
221
+ children: /* @__PURE__ */ N(Ke.Provider, {
222
+ value: ee + 1,
223
+ children: /* @__PURE__ */ Le(P.Provider, {
224
+ value: O,
225
+ children: [!g && /* @__PURE__ */ N(ze, {}), h ? /* @__PURE__ */ N(U.Provider, {
226
+ value: $e,
227
+ children: de
228
+ }) : de]
229
+ })
214
230
  })
215
231
  });
216
- return h ? /* @__PURE__ */ L("div", {
232
+ return h ? /* @__PURE__ */ N("div", {
217
233
  className: f,
218
234
  style: {
219
235
  position: "relative",
220
236
  overflow: "hidden",
221
- ...ee
237
+ ...p
222
238
  },
223
- children: oe
224
- }) : oe;
239
+ children: fe
240
+ }) : fe;
225
241
  }
226
242
  //#endregion
227
243
  //#region src/Route.tsx
228
- function X({ element: e }) {
244
+ function K({ element: e }) {
229
245
  return e;
230
246
  }
231
247
  //#endregion
232
248
  //#region src/utils/buildRoutePath.ts
233
- function Z(e, t) {
234
- return h(e, t);
249
+ function q(e, t) {
250
+ return ne(e, t);
235
251
  }
236
252
  //#endregion
237
253
  //#region src/navigate/useNavigate.ts
238
- function Be() {
239
- let e = z(), t = C({
254
+ function nt() {
255
+ let e = F(), t = se({
240
256
  stores: e,
241
- buildPathname: (e, t) => Z(e, t),
257
+ buildPathname: (e, t) => q(e, t),
242
258
  driver: e.driver,
243
259
  markSelfInduced: e.markSelfInduced
244
260
  });
@@ -250,21 +266,21 @@ function Be() {
250
266
  }
251
267
  //#endregion
252
268
  //#region src/navigate/usePathname.ts
253
- function Ve() {
254
- return G((e) => e.histories[e.pendingIndex]?.pathname ?? "/");
269
+ function rt() {
270
+ return H((e) => e.histories[e.pendingIndex]?.pathname ?? "/");
255
271
  }
256
272
  //#endregion
257
273
  //#region src/navigate/useStep.ts
258
- function He() {
259
- let { routePath: e } = V(), t = z(), n = a(Ee), { driver: r, markSelfInduced: i } = t, [s, c] = p(null);
260
- o(() => {
261
- if (!e) return c(N(r.readState())), r.subscribe((e) => c(N(e.state)));
274
+ function it() {
275
+ let { routePath: e } = L(), t = F(), n = o(z), { driver: r, markSelfInduced: i } = t, [a, c] = m(null);
276
+ s(() => {
277
+ if (!e) return c(M(r.readState())), r.subscribe((e) => c(M(e.state)));
262
278
  }, [e, r]);
263
- let l = A({
279
+ let l = D({
264
280
  stores: t,
265
281
  driver: r,
266
282
  markSelfInduced: i,
267
- buildStepPathname: (t) => e ? Z(e, t).pathname : m(r.readPathname(), t),
283
+ buildStepPathname: (t) => e ? q(e, t).pathname : te(r.readPathname(), t),
268
284
  applyParams: (t) => {
269
285
  n({
270
286
  type: "SET",
@@ -273,7 +289,7 @@ function He() {
273
289
  }
274
290
  });
275
291
  return {
276
- step: s,
292
+ step: a,
277
293
  pushStep: (e) => l.pushStep(e),
278
294
  replaceStep: (e) => l.replaceStep(e),
279
295
  popStep: l.popStep
@@ -281,36 +297,50 @@ function He() {
281
297
  }
282
298
  //#endregion
283
299
  //#region src/screen/ParamsProvider/useParams.ts
284
- function Ue() {
285
- return a(Te);
300
+ function J() {
301
+ return o(R);
286
302
  }
287
303
  //#endregion
288
304
  //#region src/screen/ScreenFreeze.tsx
289
- function We({ freeze: e, children: n }) {
290
- return /* @__PURE__ */ L(t, {
291
- mode: e ? "hidden" : "visible",
305
+ var at = 3e3;
306
+ function Y({ freeze: e, children: n }) {
307
+ let [r, i] = m(e), a = p(null);
308
+ return !e && r && i(!1), s(() => {
309
+ if (!(!e || r)) {
310
+ if (!Fe()) {
311
+ i(!0);
312
+ return;
313
+ }
314
+ return a.current = setTimeout(() => {
315
+ a.current = null, i(!0);
316
+ }, at), () => {
317
+ a.current !== null && (clearTimeout(a.current), a.current = null);
318
+ };
319
+ }
320
+ }, [e, r]), /* @__PURE__ */ N(t, {
321
+ mode: e && r ? "hidden" : "visible",
292
322
  children: n
293
323
  });
294
324
  }
295
325
  //#endregion
296
326
  //#region src/screen/scopeAnimHoldCoordinator.ts
297
- var Ge = /* @__PURE__ */ new WeakMap();
298
- function Ke(e) {
299
- let t = Ge.get(e);
300
- return t || (t = y(), Ge.set(e, t)), t;
327
+ var ot = /* @__PURE__ */ new WeakMap();
328
+ function st(e) {
329
+ let t = ot.get(e);
330
+ return t || (t = ae(), ot.set(e, t)), t;
301
331
  }
302
332
  //#endregion
303
333
  //#region src/stores/useNavigateStore.ts
304
- function Q(e) {
305
- return W(z().navigate, e);
334
+ function ct(e) {
335
+ return V(F().navigate, e);
306
336
  }
307
337
  //#endregion
308
338
  //#region src/screen/ScreenDecorator.tsx
309
- function qe({ ref: e, style: t, ...n }) {
310
- let { isActive: r, isPrev: i, transitionName: a } = V(), o = f(null);
311
- c(e, () => o.current);
312
- let s = Q((e) => i ? "COMPLETED" : e.status), { decoratorName: l } = Se(a), u = le.get(l);
313
- return u ? /* @__PURE__ */ L("div", {
339
+ function lt({ ref: e, style: t, ...n }) {
340
+ let { isActive: r, isPrev: i, transitionName: a } = L(), o = p(null);
341
+ l(e, () => o.current);
342
+ let s = ct((e) => i ? "COMPLETED" : e.status), { decoratorName: c } = Me(a), u = fe.get(c);
343
+ return u ? /* @__PURE__ */ N("div", {
314
344
  ref: o,
315
345
  "data-flemo-decorator": !0,
316
346
  "data-flemo-decorator-name": u.name,
@@ -331,9 +361,9 @@ function qe({ ref: e, style: t, ...n }) {
331
361
  }
332
362
  //#endregion
333
363
  //#region src/screen/useViewportScrollHeight.ts
334
- function Je() {
335
- let [e, t] = p(0), [n, r] = p(0);
336
- return o(() => M((e, n) => {
364
+ function ut() {
365
+ let [e, t] = m(0), [n, r] = m(0);
366
+ return s(() => Te((e, n) => {
337
367
  r(n), t(e);
338
368
  }), []), {
339
369
  viewportScrollHeight: e,
@@ -342,251 +372,319 @@ function Je() {
342
372
  }
343
373
  //#endregion
344
374
  //#region src/stores/useScreenStore.ts
345
- function $(e) {
346
- return W(z().screen, e);
375
+ function X(e) {
376
+ return V(F().screen, e);
347
377
  }
348
378
  //#endregion
349
379
  //#region src/screen/ScreenMotion.tsx
350
- function Ye({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigationBarHeight: r, systemNavigationBarColor: i, sharedTopBar: a, sharedBottomBar: s, topBar: c, bottomBar: l, hideStatusBar: d, hideSystemNavigationBar: m, backgroundColor: h = "white", contentScrollable: _ = !0, ...v }) {
351
- let { id: y, isActive: b, isRoot: ne, isPrev: re, zIndex: x, transitionName: S, prevTransitionName: C } = V(), { contained: w } = Oe(), T = w ? "absolute" : "fixed", E = z(), D = G((e) => e.index), ie = G((e) => e.histories), O = b || x === D - 1, k = Q((e) => O ? e.status : "COMPLETED"), A = $((e) => e.dragStatus), oe = $((e) => e.replaceTransitionStatus), ce = E.screen.getState().setDragStatus, de = E.screen.getState().setReplaceTransitionStatus, j = b ? ie[D - 1]?.id : ie[D]?.id, pe = $((e) => j ? e.sharedBars[j] : void 0), me = $((e) => j ? e.screenSurfaces[j] : void 0), ge = f(null);
352
- ge.current ||= se({
353
- getTransitionTaskId: () => E.navigate.getState().transitionTaskId,
354
- setDragStatus: ce,
355
- setReplaceTransitionStatus: de
380
+ function dt({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigationBarHeight: r, systemNavigationBarColor: i, sharedTopBar: c, sharedTopBarId: l, sharedBottomBar: u, sharedBottomBarId: f, topBar: te, bottomBar: ne, hideStatusBar: h, hideSystemNavigationBar: g, backgroundColor: ae = "white", contentScrollable: _ = !0, ...oe }) {
381
+ let { id: v, isActive: y, isRoot: b, isPrev: se, zIndex: x, transitionName: S, prevTransitionName: ce } = L(), { contained: C } = We(), w = C ? "absolute" : "fixed", T = F(), E = o(He), D = H((e) => e.index), ue = H((e) => e.histories), de = y || x === D - 1, k = ct((e) => de ? e.status : "COMPLETED"), he = X((e) => e.dragStatus), ge = X((e) => e.replaceTransitionStatus), ve = T.screen.getState().setDragStatus, be = T.screen.getState().setReplaceTransitionStatus, A = y ? ue[D - 1]?.id : ue[D]?.id, Se = X((e) => A ? e.sharedBars[A] : void 0), j = X((e) => A ? e.sharedBarMetadata[A] : void 0), Ce = X((e) => A ? e.screenSurfaces[A] : void 0), Te = p(null);
382
+ Te.current ||= O({
383
+ getTransitionTaskId: () => T.navigate.getState().transitionTaskId,
384
+ setDragStatus: ve,
385
+ setReplaceTransitionStatus: be
356
386
  });
357
- let _e = ge.current, ve = f(null);
358
- ve.current ||= Ke(E.navigate);
359
- let M = Se(S), { initial: be, swipeDirection: N, decoratorName: xe } = M, P = le.get(xe), { viewportScrollHeight: F } = Je(), I = F > 0, [R, we] = p(0), [B, Te] = p(0), Ee = f(null), H = f(null), De = f(null), U = f(null), W = f(null), K = f({
387
+ let Ee = Te.current, De = p(null);
388
+ De.current ||= st(T.navigate);
389
+ let M = Me(S), { initial: Ae, swipeDirection: je, decoratorName: Ne } = M, Ie = fe.get(Ne), { viewportScrollHeight: P } = ut(), ze = P > 0, I = !!c, R = !!u, z = I ? `${typeof l}:${String(l)}` : null, B = R ? `${typeof f}:${String(f)}` : null, [Be, Ve] = m({
390
+ key: z,
391
+ height: 0
392
+ }), [V, Ue] = m({
393
+ key: B,
394
+ height: 0
395
+ }), U = p(Be), Ge = p(V), Ke = Be.key === z ? Be.height : 0, qe = V.key === B ? V.height : 0, Je = Pe(I ? { id: l } : void 0, j?.topBar) ? j?.topBar?.height ?? 0 : 0, Ye = Pe(R ? { id: f } : void 0, j?.bottomBar) ? j?.bottomBar?.height ?? 0 : 0, Xe = Ke || Je, Ze = qe || Ye, Qe = p(null), W = p(null), $e = p(null), et = p(null), tt = p(null), G = p(null), K = p(null), q = a((e) => {
396
+ e <= 0 || z === null || (et.current && (et.current.style.minHeight = `${e}px`), U.current = {
397
+ key: z,
398
+ height: e
399
+ }, Ve((t) => t.key === z && t.height === e ? t : {
400
+ key: z,
401
+ height: e
402
+ }), T.screen.getState().updateSharedBarHeight(v, "topBar", e));
403
+ }, [
404
+ v,
405
+ T.screen,
406
+ z
407
+ ]), nt = a((e) => {
408
+ e <= 0 || B === null || (tt.current && (tt.current.style.minHeight = `${e}px`), Ge.current = {
409
+ key: B,
410
+ height: e
411
+ }, Ue((t) => t.key === B && t.height === e ? t : {
412
+ key: B,
413
+ height: e
414
+ }), T.screen.getState().updateSharedBarHeight(v, "bottomBar", e));
415
+ }, [
416
+ B,
417
+ v,
418
+ T.screen
419
+ ]), rt = a((e) => {
420
+ G.current = e, e?.offsetHeight && q(e.offsetHeight);
421
+ }, [q]), it = a((e) => {
422
+ K.current = e, e?.offsetHeight && nt(e.offsetHeight);
423
+ }, [nt]), J = p({
360
424
  transition: M,
361
- decorator: P,
362
- hasSharedTopBar: !!a,
363
- hasSharedBottomBar: !!s,
364
- viewportScrollHeight: F,
365
- isRoot: ne,
366
- isActive: b,
425
+ decorator: Ie,
426
+ hasSharedTopBar: !!c,
427
+ hasSharedBottomBar: !!u,
428
+ sharedTopBarId: l,
429
+ sharedBottomBarId: f,
430
+ viewportScrollHeight: P,
431
+ isRoot: b,
432
+ isActive: y,
367
433
  status: k,
368
- dragStatus: A,
434
+ dragStatus: he,
369
435
  index: D
370
436
  });
371
- K.current = {
437
+ J.current = {
372
438
  transition: M,
373
- decorator: P,
374
- hasSharedTopBar: !!a,
375
- hasSharedBottomBar: !!s,
376
- viewportScrollHeight: F,
377
- isRoot: ne,
378
- isActive: b,
439
+ decorator: Ie,
440
+ hasSharedTopBar: !!c,
441
+ hasSharedBottomBar: !!u,
442
+ sharedTopBarId: l,
443
+ sharedBottomBarId: f,
444
+ viewportScrollHeight: P,
445
+ isRoot: b,
446
+ isActive: y,
379
447
  status: k,
380
- dragStatus: A,
448
+ dragStatus: he,
381
449
  index: D
382
450
  };
383
- let q = f(null);
384
- q.current ||= ae({
385
- getTransition: () => K.current.transition,
386
- getDecorator: () => K.current.decorator,
451
+ let at = p(null);
452
+ at.current ||= le({
453
+ getTransition: () => J.current.transition,
454
+ getDecorator: () => J.current.decorator,
387
455
  getElements: () => ({
388
- scope: H.current,
389
- screenContainer: Ee.current,
390
- decorator: De.current,
391
- sharedTopBar: U.current,
392
- sharedBottomBar: W.current
456
+ scope: W.current,
457
+ screenContainer: Qe.current,
458
+ decorator: $e.current,
459
+ sharedTopBar: G.current,
460
+ sharedBottomBar: K.current
393
461
  }),
394
- hasSharedTopBar: () => K.current.hasSharedTopBar,
395
- hasSharedBottomBar: () => K.current.hasSharedBottomBar,
396
- getViewportScrollHeight: () => K.current.viewportScrollHeight,
462
+ hasSharedTopBar: () => J.current.hasSharedTopBar,
463
+ hasSharedBottomBar: () => J.current.hasSharedBottomBar,
464
+ getSharedTopBarId: () => J.current.sharedTopBarId,
465
+ getSharedBottomBarId: () => J.current.sharedBottomBarId,
466
+ getViewportScrollHeight: () => J.current.viewportScrollHeight,
397
467
  isReadyForDrag: () => {
398
- let e = K.current;
468
+ let e = J.current;
399
469
  return !e.isRoot && e.isActive && e.status === "COMPLETED" && e.dragStatus === "IDLE" && !!e.transition.swipeDirection && e.viewportScrollHeight < 10;
400
470
  },
401
471
  getPartnerBars: () => {
402
- let e = K.current, t = E.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
403
- return n ? E.screen.getState().sharedBars[n] : void 0;
472
+ let e = J.current, t = T.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
473
+ return n ? T.screen.getState().sharedBars[n] : void 0;
404
474
  },
405
- setDragStatus: ce,
475
+ getPartnerBarMetadata: () => {
476
+ let e = J.current, t = T.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
477
+ return n ? T.screen.getState().sharedBarMetadata[n] : void 0;
478
+ },
479
+ setDragStatus: ve,
406
480
  back: () => window.history.back()
407
481
  });
408
- let J = q.current, ke = (e) => J.pointerDown(e.nativeEvent), Ae = (e) => J.pointerMove(e.nativeEvent), je = (e) => J.pointerUp(e.nativeEvent);
409
- o(() => {
410
- ue(H.current);
411
- }, []), o(() => {
412
- let e = H.current;
482
+ let Y = at.current, ot = (e) => Y.pointerDown(e.nativeEvent), dt = (e) => Y.pointerMove(e.nativeEvent), ft = (e) => Y.pointerUp(e.nativeEvent), pt = (e) => Y.pointerCancel(e.nativeEvent), mt = (e) => {
483
+ (k === "PUSHING" || k === "REPLACING") && (e.preventDefault(), e.stopPropagation());
484
+ };
485
+ s(() => {
486
+ me(W.current);
487
+ }, []), s(() => {
488
+ let e = W.current;
413
489
  if (!e) return;
414
490
  let t = (e) => {
415
- J.shouldPreventTouch() && e.preventDefault(), e.target?.dataset.swipeAtEdgeBar === "true" && e.preventDefault();
491
+ Y.shouldPreventTouch() && e.preventDefault();
416
492
  };
417
493
  return e.addEventListener("touchmove", t, { passive: !1 }), () => {
418
494
  e.removeEventListener("touchmove", t);
419
495
  };
420
- }, [J]), u(() => {
421
- let e = U.current;
422
- if (!e) {
423
- we(0);
424
- return;
425
- }
426
- return ye(e, we);
427
- }, [a]), u(() => {
428
- let e = W.current;
429
- if (!e) {
430
- Te(0);
431
- return;
432
- }
433
- return ye(e, Te);
434
- }, [s]), u(() => {
435
- let { registerSharedBars: e, unregisterSharedBars: t } = E.screen.getState();
436
- return e(y, {
437
- topBar: !!a,
438
- bottomBar: !!s
439
- }), () => t(y);
496
+ }, [Y]), d(() => {
497
+ let { registerSharedBars: e, unregisterSharedBars: t } = T.screen.getState(), n = U.current, r = Ge.current;
498
+ return e(v, {
499
+ topBar: I,
500
+ bottomBar: R
501
+ }, {
502
+ topBar: I ? {
503
+ id: l,
504
+ height: n.key === z ? n.height : void 0
505
+ } : void 0,
506
+ bottomBar: R ? {
507
+ id: f,
508
+ height: r.key === B ? r.height : void 0
509
+ } : void 0
510
+ }), () => t(v);
440
511
  }, [
441
- y,
442
- a,
443
- s,
444
- E.screen
445
- ]), u(() => {
446
- let e = H.current;
512
+ B,
513
+ R,
514
+ I,
515
+ v,
516
+ f,
517
+ l,
518
+ T.screen,
519
+ z
520
+ ]), d(() => {
521
+ let e = G.current;
522
+ if (e) return we(e, q);
523
+ }, [q, c]), d(() => {
524
+ let e = K.current;
525
+ if (e) return we(e, nt);
526
+ }, [nt, u]), d(() => {
527
+ let e = W.current;
447
528
  if (!e) return;
448
- let { registerScreenSurface: t, unregisterScreenSurface: n } = E.screen.getState();
449
- return t(y, { opaqueBackground: he(getComputedStyle(e).backgroundColor) }), () => n(y);
529
+ let { registerScreenSurface: t, unregisterScreenSurface: n } = T.screen.getState();
530
+ return t(v, { opaqueBackground: xe(getComputedStyle(e).backgroundColor) }), () => n(v);
450
531
  }, [
451
- y,
452
- h,
532
+ v,
533
+ ae,
453
534
  k,
454
- E.screen
535
+ T.screen
455
536
  ]);
456
- let Me = O, { app: Ne, nav: Pe } = g({
537
+ let ht = de, { app: gt, nav: _t } = re({
457
538
  status: k,
458
- isTopOrTopPrev: Me,
459
- hasTopBar: !!a,
460
- hasNavBar: !!s,
461
- partnerBars: pe
462
- }), Y = ee({
539
+ isTopOrTopPrev: ht,
540
+ hasTopBar: I,
541
+ hasNavBar: R,
542
+ topBarId: l,
543
+ bottomBarId: f,
544
+ partnerBars: Se,
545
+ partnerMetadata: j
546
+ }), Z = ee({
463
547
  status: k,
464
- isTopOrTopPrev: Me,
548
+ isTopOrTopPrev: ht,
465
549
  transitionName: S
466
- }), Fe = te({
467
- isActive: b,
468
- isPrev: re,
550
+ }), vt = ie({
551
+ isActive: y,
552
+ isPrev: se,
469
553
  zIndex: x,
470
554
  index: D,
471
555
  status: k,
472
- dragStatus: A,
473
- replaceTransitionStatus: oe
474
- }), Ie = f(Fe), Le = f(Y !== null && Fe), [Re, ze] = p({
475
- key: Y,
476
- released: Y === null
556
+ dragStatus: he,
557
+ replaceTransitionStatus: ge
558
+ }), yt = p(vt), bt = p(Z !== null && vt), [xt, St] = m({
559
+ key: Z,
560
+ released: Z === null
477
561
  });
478
- Re.key !== Y && (ze({
479
- key: Y,
480
- released: Y === null
481
- }), Le.current = Y !== null && Ie.current), Ie.current = Fe;
482
- let X = Y !== null && Re.key === Y && !Re.released, Z = X ? !b && me?.opaqueBackground ? "park" : b && (k === "PUSHING" || k === "REPLACING") && me?.opaqueBackground ? "park-under" : "true" : "false";
483
- u(() => _e.driveScreenLifecycle({
562
+ xt.key !== Z && (St({
563
+ key: Z,
564
+ released: Z === null
565
+ }), bt.current = Z !== null && yt.current), yt.current = vt;
566
+ let Q = Z !== null && xt.key === Z && !xt.released, $ = Q ? !y && Ce?.opaqueBackground ? "park" : y && (k === "PUSHING" || k === "REPLACING") && Ce?.opaqueBackground ? Oe() ? "park-over" : "park-under" : "true" : "false";
567
+ d(() => Ee.driveScreenLifecycle({
484
568
  getElements: () => ({
485
- scope: H.current,
486
- decorator: De.current,
487
- bars: [U.current, W.current]
569
+ scope: W.current,
570
+ decorator: $e.current,
571
+ bars: [G.current, K.current]
488
572
  }),
489
573
  transitionName: S,
490
- prevTransitionName: C,
574
+ prevTransitionName: ce,
491
575
  status: k,
492
- isActive: b,
493
- animHoldReleased: !X
576
+ isActive: y,
577
+ animHoldReleased: !Q
494
578
  }), [
495
- _e,
579
+ Ee,
496
580
  k,
497
- b,
498
- C,
581
+ y,
582
+ ce,
499
583
  S,
500
- X
501
- ]), o(() => {
502
- if (!X || Y === null) return;
503
- let e = Y, t = E.navigate.getState().transitionTaskId, n = t === null ? e : `${e}#${t}`;
504
- return ve.current.join(n, () => ze((t) => t.key === e && !t.released ? {
505
- key: e,
506
- released: !0
507
- } : t), {
508
- scope: H.current,
509
- decodeWait: Le.current
584
+ Q
585
+ ]), s(() => {
586
+ if (!Q || Z === null) return;
587
+ let e = Z, t = T.navigate.getState().transitionTaskId, n = t === null ? e : `${e}#${t}`;
588
+ return De.current.join(n, () => {
589
+ if ((J.current.transition.driver === "native" || ye()) && !pe()) {
590
+ for (let e of [
591
+ W.current,
592
+ G.current,
593
+ K.current,
594
+ $e.current
595
+ ]) e?.isConnected && e.getAttribute("data-flemo-anim-hold") !== null && e.setAttribute("data-flemo-anim-hold", "false");
596
+ Qe.current && (Qe.current.style.zIndex = "");
597
+ }
598
+ Re(() => St((t) => t.key === e && !t.released ? {
599
+ key: e,
600
+ released: !0
601
+ } : t));
602
+ }, {
603
+ scope: W.current,
604
+ decodeWait: bt.current,
605
+ contentSettle: ke() && (y && k === "PUSHING" || k === "POPPING") ? {
606
+ firstWaitMs: 120,
607
+ capMs: 700,
608
+ graceMs: 60,
609
+ minNodes: y ? 30 : 1,
610
+ renderSettleOnly: !0
611
+ } : void 0
510
612
  });
511
613
  }, [
512
- X,
513
- Y,
614
+ Q,
514
615
  Z,
515
- b,
616
+ $,
617
+ y,
516
618
  k,
517
- E.navigate
619
+ T.navigate
518
620
  ]);
519
- let Be = Z === "park-under" ? {} : fe({
520
- initial: be,
521
- isActive: b,
621
+ let Ct = $ === "park-under" || $ === "park-over" ? {} : _e({
622
+ initial: Ae,
623
+ isActive: y,
522
624
  status: k
523
625
  });
524
- return /* @__PURE__ */ Ce("div", {
525
- ref: Ee,
626
+ return /* @__PURE__ */ Le("div", {
627
+ ref: Qe,
628
+ onClickCapture: mt,
526
629
  style: {
527
- position: T,
630
+ position: w,
528
631
  top: 0,
529
632
  left: 0,
530
633
  width: "100%",
531
634
  height: "100%",
532
635
  display: "flex",
533
- zIndex: Z === "park-under" ? -1 : void 0,
636
+ zIndex: $ === "park-under" ? -1 : void 0,
534
637
  contain: "layout style",
535
638
  flexDirection: "column",
536
639
  boxSizing: "border-box",
537
640
  overscrollBehavior: "contain"
538
641
  },
539
642
  children: [
540
- /* @__PURE__ */ L("div", {
541
- "data-swipe-at-edge-bar": !0,
542
- style: {
543
- position: T,
544
- top: 0,
545
- left: 0,
546
- width: 8,
547
- height: "100%",
548
- zIndex: 1
549
- }
550
- }),
551
- /* @__PURE__ */ Ce("div", {
552
- ref: H,
553
- ...v,
554
- onPointerDown: ke,
555
- onPointerMove: Ae,
556
- onPointerUp: je,
557
- onPointerCancel: je,
643
+ /* @__PURE__ */ Le("div", {
644
+ ref: W,
645
+ ...oe,
646
+ onPointerDown: ot,
647
+ onPointerMove: dt,
648
+ onPointerUp: ft,
649
+ onPointerCancel: pt,
558
650
  "data-flemo-screen": !0,
651
+ "data-flemo-router": E ?? void 0,
559
652
  "data-flemo-transition": S,
560
653
  "data-flemo-status": k,
561
- "data-flemo-active": b ? "true" : "false",
562
- "data-flemo-anim-hold": Z,
654
+ "data-flemo-active": y ? "true" : "false",
655
+ "data-flemo-anim-hold": $,
563
656
  style: {
564
657
  display: "flex",
565
658
  flexDirection: "column",
566
659
  height: "100%",
567
- backgroundColor: h,
660
+ backgroundColor: ae,
568
661
  overflowY: _ ? void 0 : "auto",
569
- touchAction: N === "x" ? "pan-y" : N === "y" ? "pan-x" : "auto",
570
- ...Be,
571
- ...v.style
662
+ touchAction: je === "x" ? "pan-y" : je === "y" ? "pan-x" : "auto",
663
+ ...(Oe() || Fe()) && ($ !== "false" || x === D && !C) ? { willChange: "transform" } : {},
664
+ ...Ct,
665
+ ...oe.style
572
666
  },
573
667
  children: [
574
- !d && t && /* @__PURE__ */ L("div", {
668
+ !h && t && /* @__PURE__ */ N("div", {
575
669
  style: { minHeight: t },
576
- children: /* @__PURE__ */ L("div", { style: {
577
- position: T,
670
+ children: /* @__PURE__ */ N("div", { style: {
671
+ position: w,
578
672
  top: 0,
579
673
  width: "100%",
580
674
  minHeight: t,
581
675
  backgroundColor: n
582
676
  } })
583
677
  }),
584
- a && /* @__PURE__ */ L("div", { style: {
585
- width: "100%",
586
- minHeight: R
587
- } }),
588
- c,
589
- /* @__PURE__ */ L("div", {
678
+ c && /* @__PURE__ */ N("div", {
679
+ ref: et,
680
+ "data-flemo-bar-spacer": "app",
681
+ style: {
682
+ width: "100%",
683
+ minHeight: Xe
684
+ }
685
+ }),
686
+ te,
687
+ /* @__PURE__ */ N("div", {
590
688
  style: {
591
689
  display: "flex",
592
690
  flexDirection: "column",
@@ -595,19 +693,23 @@ function Ye({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
595
693
  },
596
694
  children: e
597
695
  }),
598
- l,
599
- s && /* @__PURE__ */ L("div", { style: {
600
- display: I ? "none" : void 0,
601
- width: "100%",
602
- minHeight: B
603
- } }),
604
- !m && r && /* @__PURE__ */ L("div", {
696
+ ne,
697
+ u && /* @__PURE__ */ N("div", {
698
+ ref: tt,
699
+ "data-flemo-bar-spacer": "nav",
700
+ style: {
701
+ display: ze ? "none" : void 0,
702
+ width: "100%",
703
+ minHeight: Ze
704
+ }
705
+ }),
706
+ !g && r && /* @__PURE__ */ N("div", {
605
707
  style: {
606
- display: I ? "none" : void 0,
708
+ display: ze ? "none" : void 0,
607
709
  minHeight: r
608
710
  },
609
- children: /* @__PURE__ */ L("div", { style: {
610
- position: T,
711
+ children: /* @__PURE__ */ N("div", { style: {
712
+ position: w,
611
713
  bottom: 0,
612
714
  width: "100%",
613
715
  minHeight: r,
@@ -616,92 +718,88 @@ function Ye({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
616
718
  })
617
719
  ]
618
720
  }),
619
- a && /* @__PURE__ */ L("div", {
620
- ref: U,
721
+ c && /* @__PURE__ */ N("div", {
722
+ ref: rt,
621
723
  "data-flemo-bar": "app",
724
+ "data-flemo-bar-id": l,
725
+ "data-flemo-bar-id-type": l === void 0 ? void 0 : typeof l,
726
+ "data-flemo-router": E ?? void 0,
622
727
  "data-flemo-bar-transition": S,
623
728
  "data-flemo-bar-status": k,
624
- "data-flemo-bar-active": b ? "true" : "false",
625
- "data-flemo-bar-riding": Ne ? "true" : "false",
626
- "data-flemo-anim-hold": Z,
729
+ "data-flemo-bar-active": y ? "true" : "false",
730
+ "data-flemo-bar-riding": gt ? "true" : "false",
731
+ "data-flemo-anim-hold": $,
627
732
  style: {
628
- position: T,
629
- top: d ? 0 : t,
733
+ position: w,
734
+ top: h ? 0 : t,
630
735
  left: 0,
631
736
  width: "100%",
632
737
  zIndex: 1
633
738
  },
634
- children: a
739
+ children: c
635
740
  }),
636
- s && /* @__PURE__ */ L("div", {
637
- ref: W,
741
+ u && /* @__PURE__ */ N("div", {
742
+ ref: it,
638
743
  "data-flemo-bar": "nav",
744
+ "data-flemo-bar-id": f,
745
+ "data-flemo-bar-id-type": f === void 0 ? void 0 : typeof f,
746
+ "data-flemo-router": E ?? void 0,
639
747
  "data-flemo-bar-transition": S,
640
748
  "data-flemo-bar-status": k,
641
- "data-flemo-bar-active": b ? "true" : "false",
642
- "data-flemo-bar-riding": Pe ? "true" : "false",
643
- "data-flemo-anim-hold": Z,
749
+ "data-flemo-bar-active": y ? "true" : "false",
750
+ "data-flemo-bar-riding": _t ? "true" : "false",
751
+ "data-flemo-anim-hold": $,
644
752
  style: {
645
- display: I ? "none" : void 0,
646
- position: T,
647
- bottom: m ? 0 : r,
753
+ display: ze ? "none" : void 0,
754
+ position: w,
755
+ bottom: g ? 0 : r,
648
756
  left: 0,
649
757
  width: "100%",
650
758
  zIndex: 1
651
759
  },
652
- children: s
653
- }),
654
- P && /* @__PURE__ */ L(qe, {
655
- ref: De,
656
- "data-flemo-anim-hold": Z
760
+ children: u
657
761
  }),
658
- /* @__PURE__ */ L("div", {
659
- "data-swipe-at-edge-bar": !0,
660
- style: {
661
- position: T,
662
- top: 0,
663
- right: 0,
664
- width: 8,
665
- height: "100%",
666
- zIndex: 1
667
- }
762
+ Ie && /* @__PURE__ */ N(lt, {
763
+ ref: $e,
764
+ "data-flemo-anim-hold": $
668
765
  })
669
766
  ]
670
767
  });
671
768
  }
672
769
  //#endregion
673
770
  //#region src/screen/Screen.tsx
674
- function Xe({ children: e, ...t }) {
675
- let { isActive: n, isPrev: r, zIndex: i } = V(), a = _({
771
+ function ft({ children: e, ...t }) {
772
+ let { isActive: n, isPrev: r, zIndex: i } = L(), a = H((e) => e.index), o = ct((e) => e.status), c = X((e) => e.dragStatus), l = X((e) => e.replaceTransitionStatus), u = h({
676
773
  isActive: n,
677
774
  isPrev: r,
678
775
  zIndex: i,
679
- index: G((e) => e.index),
680
- status: Q((e) => e.status),
681
- dragStatus: $((e) => e.dragStatus),
682
- replaceTransitionStatus: $((e) => e.replaceTransitionStatus)
683
- }), [s, c] = p(a !== "live");
684
- return a === "live" && s && c(!1), a === "immediate" && !s && c(!0), o(() => {
685
- if (a !== "deferred" || s) return;
686
- let e = setTimeout(() => c(!0), Ze);
776
+ index: a,
777
+ status: o,
778
+ dragStatus: c,
779
+ replaceTransitionStatus: l
780
+ }), [d, f] = m(u !== "live");
781
+ return u === "live" && d && f(!1), u === "immediate" && !d && f(!0), s(() => {
782
+ if (u !== "deferred" || d) return;
783
+ let e = setTimeout(() => f(!0), pt);
687
784
  return () => clearTimeout(e);
688
- }, [a, s]), /* @__PURE__ */ L(We, {
689
- freeze: s,
690
- children: /* @__PURE__ */ L(Ye, {
785
+ }, [u, d]), /* @__PURE__ */ N(Y, {
786
+ freeze: d,
787
+ children: /* @__PURE__ */ N(dt, {
691
788
  ...t,
692
789
  children: e
693
790
  })
694
791
  });
695
792
  }
696
- var Ze = 600;
793
+ var pt = 600;
697
794
  //#endregion
698
795
  //#region src/screen/Part.tsx
699
- function Qe({ ref: e, name: t, style: n, children: r, ...i }) {
700
- let { isActive: a, isPrev: o, navigateStore: s } = V(), c = z();
701
- return /* @__PURE__ */ L("div", {
796
+ function mt({ ref: e, name: t, style: n, children: r, ...i }) {
797
+ let { isActive: a, isPrev: s, navigateStore: c, routerId: l } = L(), u = o(He), d = l ?? u ?? void 0, f = F(), p = V(c ?? f.navigate, (e) => s ? "COMPLETED" : e.status);
798
+ return /* @__PURE__ */ N("div", {
702
799
  ref: e,
703
800
  "data-flemo-part-name": t,
704
- "data-flemo-status": W(s ?? c.navigate, (e) => o ? "COMPLETED" : e.status),
801
+ "data-flemo-router": d,
802
+ "data-flemo-status": p,
705
803
  "data-flemo-active": a ? "true" : "false",
706
804
  style: n,
707
805
  ...i,
@@ -710,21 +808,21 @@ function Qe({ ref: e, name: t, style: n, children: r, ...i }) {
710
808
  }
711
809
  //#endregion
712
810
  //#region src/stores/RouterScopeProvider.tsx
713
- function $e({ children: e }) {
714
- let [t] = p(() => ({
715
- history: x(),
716
- navigate: S(),
717
- transition: ce(),
718
- screen: k(),
719
- driver: ne(),
720
- markSelfInduced: _e,
721
- consume: v,
811
+ function ht({ children: e }) {
812
+ let [t] = m(() => ({
813
+ history: y(),
814
+ navigate: b(),
815
+ transition: de(),
816
+ screen: E(),
817
+ driver: oe(),
818
+ markSelfInduced: j,
819
+ consume: g,
722
820
  life: { alive: !0 }
723
821
  }));
724
- return /* @__PURE__ */ L(R.Provider, {
822
+ return /* @__PURE__ */ N(P.Provider, {
725
823
  value: t,
726
824
  children: e
727
825
  });
728
826
  }
729
827
  //#endregion
730
- export { Qe as Part, X as Route, ze as Router, $e as RouterScopeProvider, Xe as Screen, B as ScreenContext, qe as ScreenDecorator, We as ScreenFreeze, Ye as ScreenMotion, je as Slot, b as createBrowserHistoryDriver, re as createDecorator, w as createPartTransition, T as createRawDecorator, E as createRawPartTransition, D as createRawTransition, oe as createTransition, be as partTransitionMap, G as useHistoryStore, Be as useNavigate, Q as useNavigateStore, Ue as useParams, Ve as usePathname, V as useScreen, $ as useScreenStore, He as useStep, z as useStores, Je as useViewportScrollHeight };
828
+ export { mt as Part, K as Route, G as Router, ht as RouterScopeProvider, ft as Screen, I as ScreenContext, lt as ScreenDecorator, Y as ScreenFreeze, dt as ScreenMotion, Je as Slot, _ as createBrowserHistoryDriver, v as createDecorator, x as createPartTransition, S as createRawDecorator, ce as createRawPartTransition, C as createRawTransition, ue as createTransition, Ee as partTransitionMap, H as useHistoryStore, nt as useNavigate, ct as useNavigateStore, J as useParams, rt as usePathname, L as useScreen, X as useScreenStore, it as useStep, F as useStores, ut as useViewportScrollHeight };
@@ -1,4 +1,5 @@
1
1
  import { ComponentPropsWithoutRef, PropsWithChildren, ReactNode } from 'react';
2
+ import { SharedBarId } from '@flemo/core';
2
3
  export interface ScreenProps extends PropsWithChildren<Omit<ComponentPropsWithoutRef<"div">, "onPointerDown" | "onPointerMove" | "onPointerUp" | "onPointerCancel">> {
3
4
  statusBarHeight?: string;
4
5
  statusBarColor?: string;
@@ -6,7 +7,9 @@ export interface ScreenProps extends PropsWithChildren<Omit<ComponentPropsWithou
6
7
  systemNavigationBarColor?: string;
7
8
  backgroundColor?: string;
8
9
  sharedTopBar?: ReactNode;
10
+ sharedTopBarId?: SharedBarId;
9
11
  sharedBottomBar?: ReactNode;
12
+ sharedBottomBarId?: SharedBarId;
10
13
  topBar?: ReactNode;
11
14
  bottomBar?: ReactNode;
12
15
  hideStatusBar?: boolean;
@@ -9,6 +9,7 @@ export interface ScreenContextProps extends History {
9
9
  prevTransitionName: TransitionName;
10
10
  routePath: Path;
11
11
  navigateStore?: FlemoStores["navigate"];
12
+ routerId?: string;
12
13
  }
13
14
  declare const ScreenContext: import('react').Context<ScreenContextProps>;
14
15
  export default ScreenContext;
@@ -1,3 +1,3 @@
1
1
  import { ScreenProps } from './Screen';
2
- declare function ScreenMotion({ children, statusBarHeight, statusBarColor, systemNavigationBarHeight, systemNavigationBarColor, sharedTopBar, sharedBottomBar, topBar, bottomBar, hideStatusBar, hideSystemNavigationBar, backgroundColor, contentScrollable, ...props }: ScreenProps): import("react").JSX.Element;
2
+ declare function ScreenMotion({ children, statusBarHeight, statusBarColor, systemNavigationBarHeight, systemNavigationBarColor, sharedTopBar, sharedTopBarId, sharedBottomBar, sharedBottomBarId, topBar, bottomBar, hideStatusBar, hideSystemNavigationBar, backgroundColor, contentScrollable, ...props }: ScreenProps): import("react").JSX.Element;
3
3
  export default ScreenMotion;
@@ -1,2 +1,2 @@
1
1
  export { createScreenStore as default } from '@flemo/core';
2
- export type { ScreenStore, ScreenStoreApi, SharedBarPresence } from '@flemo/core';
2
+ export type { ScreenStore, ScreenStoreApi, SharedBarId, SharedBarMetadata, SharedBarPresence, SharedBarsMetadata } from '@flemo/core';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flemo/react",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "description": "React bindings for flemo: Router, Route, Screen, and the screen-transition runtime.",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -36,30 +36,30 @@
36
36
  "dependencies": {
37
37
  "path-to-regexp": "^8.4.2",
38
38
  "zustand": "^5.0.14",
39
- "@flemo/core": "1.22.1"
39
+ "@flemo/core": "1.24.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@testing-library/jest-dom": "^6.9.1",
43
43
  "@testing-library/react": "^16.3.2",
44
44
  "@types/node": "^24.13.1",
45
- "@types/react": "^19.2.17",
46
- "@types/react-dom": "^19.2.3",
47
- "@vitejs/plugin-react-swc": "^4.3.2",
45
+ "@types/react": "^19.2.18",
46
+ "@types/react-dom": "^19.2.4",
47
+ "@vitejs/plugin-react-swc": "^4.3.3",
48
48
  "@vitest/coverage-v8": "^4.1.10",
49
- "eslint": "^9.39.4",
49
+ "eslint": "^9.39.5",
50
50
  "jsdom": "^29.1.1",
51
- "react": "^19.2.7",
52
- "react-dom": "^19.2.7",
51
+ "react": "^19.2.8",
52
+ "react-dom": "^19.2.8",
53
53
  "typescript": "^6.0.3",
54
- "vite": "^8.1.5",
54
+ "vite": "^8.2.1",
55
55
  "vite-plugin-dts": "^5.0.3",
56
56
  "vitest": "^4.1.10",
57
57
  "@flemo/eslint-config": "0.0.0",
58
58
  "@flemo/tsconfig": "0.0.0"
59
59
  },
60
60
  "peerDependencies": {
61
- "react": "^19.2.7",
62
- "react-dom": "^19.2.7"
61
+ "react": "^19.2.8",
62
+ "react-dom": "^19.2.8"
63
63
  },
64
64
  "publishConfig": {
65
65
  "access": "public"