@flemo/react 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +0 -4
  2. package/dist/index.mjs +323 -318
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -16,10 +16,6 @@ flemo is a router whose unit of routing is a **screen**, not a page. Push, pop,
16
16
  animations and gestures between them belong to the router, so an app does not have to wire a
17
17
  routing library and an animation library together and then keep their timing in agreement.
18
18
 
19
- Transitions compile to CSS `@keyframes` and run on the compositor. Shared-element morphs,
20
- swipe back, and the screen lifecycle are parts of that one engine rather than separate
21
- integrations.
22
-
23
19
  ## Install
24
20
 
25
21
  ```bash
package/dist/index.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import e, { Activity as t, Children as n, createContext as r, createElement as i, isValidElement as a, useCallback as o, useContext as s, useEffect as c, useId as l, useImperativeHandle as u, useInsertionEffect as d, useLayoutEffect as f, useReducer as ee, useRef as p, useState as m, useSyncExternalStore as te } from "react";
2
- import { ACTIVE_ATTR as ne, ANIM_HOLD as h, ANIM_HOLD_ATTR as g, LAYER_HOST_ATTR as re, LAYER_OWNER_ATTR as ie, LAYER_SLOT_ATTR as ae, OVERLAY_LEVEL as oe, STATUS_ATTR as _, TRANSITION_ATTR as v, animHoldKey as se, appendParamsQuery as y, attachMorph as ce, beginMorphSwipe as le, buildRoutePath as ue, computeBarRiding as de, computeScreenFreeze as fe, computeScreenFreezeMode as pe, consumeSelfInducedPop as b, createAnimHoldCoordinator as x, createBrowserHistoryDriver as S, createBrowserHistoryDriver as me, createDecorator as C, createHistoryStore as w, createMorphTransition as T, createNavigateStore as he, createNavigationController as E, createPartTransition as D, createRawDecorator as O, createRawMorphTransition as k, createRawPartTransition as ge, createRawTransition as _e, createRouterScope as A, createScreenSelector as ve, createScreenStore as ye, createStepController as be, createSwipeController as xe, createTransition as Se, createTransitionEngine as Ce, createTransitionStore as j, decoratorMap as we, eagerlyDecodeImages as Te, ensureScopeHistorySync as Ee, enteringInitialStyle as De, getMatchedPathPattern as M, isDesktopBlink as Oe, isOpaqueColor as ke, isServer as Ae, markSelfInducedPop as je, matchesPathname as Me, morphTransitionMap as Ne, observeBarHeight as Pe, observeViewportScrollHeight as Fe, partTransitionMap as Ie, readStepParams as Le, registerMorphLayer as Re, registerTransitionDefinitions as ze, releaseScopeHistorySync as Be, resolvePlatformProfile as Ve, resolveTransition as He, restLayerPromotionEnabled as Ue, seedRouterEntry as We, sharedBarsMatch as Ge, startFlemoRuntime as Ke, subscribeStepParamsRestore as qe } from "@flemo/core";
3
- import { Fragment as Je, jsx as N, jsxs as Ye } from "react/jsx-runtime";
2
+ import { ACTIVE_ATTR as ne, ANIM_HOLD as h, ANIM_HOLD_ATTR as g, LAYER_HOST_ATTR as re, LAYER_OWNER_ATTR as ie, LAYER_SLOT_ATTR as ae, OVERLAY_LEVEL as oe, STATUS_ATTR as _, TRANSITION_ATTR as v, animHoldKey as se, appendParamsQuery as ce, attachMorph as le, beginMorphSwipe as y, buildRoutePath as ue, computeBarRiding as de, computeScreenFreeze as fe, computeScreenFreezeMode as pe, consumeSelfInducedPop as b, createAnimHoldCoordinator as x, createBrowserHistoryDriver as S, createBrowserHistoryDriver as me, createDecorator as C, createHistoryStore as w, createMorphTransition as T, createNavigateStore as E, createNavigationController as D, createPartTransition as O, createRawDecorator as k, createRawMorphTransition as A, createRawPartTransition as he, createRawTransition as ge, createRouterScope as j, createScreenSelector as _e, createScreenStore as ve, createStepController as ye, createSwipeController as be, createTransition as xe, createTransitionEngine as Se, createTransitionStore as M, decoratorMap as Ce, eagerlyDecodeImages as we, ensureScopeHistorySync as Te, enteringInitialStyle as Ee, getMatchedPathPattern as N, isDesktopBlink as De, isOpaqueColor as Oe, isServer as ke, markSelfInducedPop as Ae, matchesPathname as je, morphTransitionMap as Me, observeBarHeight as Ne, observeViewportScrollHeight as Pe, partTransitionMap as Fe, publishRideBox as Ie, readStepParams as Le, registerMorphLayer as Re, registerTransitionDefinitions as ze, releaseScopeHistorySync as Be, resolvePlatformProfile as Ve, resolveTransition as He, restLayerPromotionEnabled as Ue, seedRouterEntry as We, sharedBarsMatch as Ge, startFlemoRuntime as Ke, subscribeStepParamsRestore as qe } from "@flemo/core";
3
+ import { Fragment as Je, jsx as P, jsxs as Ye } from "react/jsx-runtime";
4
4
  import { createPortal as Xe, flushSync as Ze } from "react-dom";
5
5
  //#region src/stores/StoreContext.ts
6
6
  var Qe = r(null);
7
7
  //#endregion
8
8
  //#region src/stores/useStores.ts
9
- function P() {
9
+ function F() {
10
10
  let e = s(Qe);
11
11
  if (!e) throw Error("flemo stores are missing. Render inside a <Router>.");
12
12
  return e;
@@ -14,12 +14,12 @@ function P() {
14
14
  //#endregion
15
15
  //#region src/history/HistoryListener.tsx
16
16
  function $e() {
17
- let e = P();
18
- return c(() => (Ee(e), () => Be(e)), [e]), null;
17
+ let e = F();
18
+ return c(() => (Te(e), () => Be(e)), [e]), null;
19
19
  }
20
20
  //#endregion
21
21
  //#region src/screen/ScreenContext.ts
22
- var et = r({
22
+ var I = r({
23
23
  id: "",
24
24
  isActive: !1,
25
25
  isRoot: !0,
@@ -33,15 +33,15 @@ var et = r({
33
33
  });
34
34
  //#endregion
35
35
  //#region src/screen/useScreen.ts
36
- function F() {
37
- return s(et);
36
+ function L() {
37
+ return s(I);
38
38
  }
39
39
  //#endregion
40
40
  //#region src/screen/ParamsProvider/ParamsContext.ts
41
- var tt = r({}), I = r(() => {});
41
+ var et = r({}), R = r(() => {});
42
42
  //#endregion
43
43
  //#region src/screen/ParamsProvider/ParamsReducer.ts
44
- function L(e, t) {
44
+ function z(e, t) {
45
45
  switch (t.type) {
46
46
  case "SET": return t.params;
47
47
  default: return e;
@@ -49,8 +49,8 @@ function L(e, t) {
49
49
  }
50
50
  //#endregion
51
51
  //#region src/screen/ParamsProvider/ParamsProvider.tsx
52
- function R({ children: e }) {
53
- let { isActive: t, params: n } = F(), { driver: r } = P(), [i, a] = ee(L, n);
52
+ function B({ children: e }) {
53
+ let { isActive: t, params: n } = L(), { driver: r } = F(), [i, a] = ee(z, n);
54
54
  return c(() => {
55
55
  if (t) return qe(r, (e) => a({
56
56
  type: "SET",
@@ -60,9 +60,9 @@ function R({ children: e }) {
60
60
  t,
61
61
  a,
62
62
  r
63
- ]), /* @__PURE__ */ N(I.Provider, {
63
+ ]), /* @__PURE__ */ P(R.Provider, {
64
64
  value: a,
65
- children: /* @__PURE__ */ N(tt.Provider, {
65
+ children: /* @__PURE__ */ P(et.Provider, {
66
66
  value: i,
67
67
  children: e
68
68
  })
@@ -70,42 +70,42 @@ function R({ children: e }) {
70
70
  }
71
71
  //#endregion
72
72
  //#region ../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.2.18_react@19.2.8/node_modules/zustand/esm/react.mjs
73
- var z = (e) => e;
74
- function B(t, n = z) {
73
+ var V = (e) => e;
74
+ function H(t, n = V) {
75
75
  let r = e.useSyncExternalStore(t.subscribe, e.useCallback(() => n(t.getState()), [t, n]), e.useCallback(() => n(t.getInitialState()), [t, n]));
76
76
  return e.useDebugValue(r), r;
77
77
  }
78
78
  //#endregion
79
79
  //#region src/stores/useHistoryStore.ts
80
- function V(e) {
81
- return B(P().history, e);
80
+ function U(e) {
81
+ return H(F().history, e);
82
82
  }
83
83
  //#endregion
84
84
  //#region src/RouterIdContext.ts
85
- var nt = r(null);
85
+ var tt = r(null);
86
86
  //#endregion
87
87
  //#region src/renderer/Renderer.tsx
88
- function rt({ children: e }) {
89
- let t = V((e) => e.index), r = V((e) => e.histories), i = P(), a = s(et), o = s(nt);
90
- return ve(r, t).map((t) => {
91
- let [r] = n.toArray(e).filter((e) => Me(e.props.path, t.pathname));
92
- return r ? /* @__PURE__ */ N(et.Provider, {
88
+ function nt({ children: e }) {
89
+ let t = U((e) => e.index), r = U((e) => e.histories), i = F(), a = s(I), o = s(tt);
90
+ return _e(r, t).map((t) => {
91
+ let [r] = n.toArray(e).filter((e) => je(e.props.path, t.pathname));
92
+ return r ? /* @__PURE__ */ P(I.Provider, {
93
93
  value: {
94
94
  ...t,
95
95
  isPrev: t.isPrev || a.isPrev,
96
96
  navigateStore: i.navigate,
97
97
  routerId: o ?? void 0,
98
- routePath: M(r.props.path, t.pathname)
98
+ routePath: N(r.props.path, t.pathname)
99
99
  },
100
- children: /* @__PURE__ */ N(R, { children: r })
100
+ children: /* @__PURE__ */ P(B, { children: r })
101
101
  }, t.id) : null;
102
102
  });
103
103
  }
104
104
  //#endregion
105
105
  //#region src/screen/MorphLayer/MorphLayer.tsx
106
- function it({ stores: e }) {
106
+ function rt({ stores: e }) {
107
107
  let t = p(null);
108
- return f(() => (Re(e.navigate, t.current), () => Re(e.navigate, null)), [e.navigate]), /* @__PURE__ */ N("div", {
108
+ return f(() => (Re(e.navigate, t.current), () => Re(e.navigate, null)), [e.navigate]), /* @__PURE__ */ P("div", {
109
109
  ref: t,
110
110
  "data-flemo-morph-layer": "",
111
111
  "aria-hidden": "true",
@@ -118,13 +118,13 @@ function it({ stores: e }) {
118
118
  }
119
119
  //#endregion
120
120
  //#region src/screen/ScreenViewportContext.ts
121
- var at = r({ contained: !1 });
122
- function ot() {
123
- return s(at);
121
+ var it = r({ contained: !1 });
122
+ function at() {
123
+ return s(it);
124
124
  }
125
125
  //#endregion
126
126
  //#region src/transition/styles.ts
127
- function st(e, t, n = [], r = []) {
127
+ function ot(e, t, n = [], r = []) {
128
128
  d(() => ze(e, t, n, r), [
129
129
  e,
130
130
  t,
@@ -134,50 +134,50 @@ function st(e, t, n = [], r = []) {
134
134
  }
135
135
  //#endregion
136
136
  //#region src/utils/devDiagnostics.ts
137
- function ct() {
137
+ function st() {
138
138
  return typeof process < "u" && process.env.NODE_ENV !== "production";
139
139
  }
140
- function lt(e) {
141
- !ct() || typeof console > "u" || console.error(`[flemo] ${e}`);
140
+ function ct(e) {
141
+ !st() || typeof console > "u" || console.error(`[flemo] ${e}`);
142
142
  }
143
- function ut(e) {
144
- if (ct()) throw Error(`[flemo] ${e}`);
143
+ function lt(e) {
144
+ if (st()) throw Error(`[flemo] ${e}`);
145
145
  }
146
146
  //#endregion
147
147
  //#region src/RouterDepthContext.ts
148
- var dt = r(0), ft = r(null), pt = [
148
+ var ut = r(0), dt = r(null), ft = [
149
149
  "current",
150
150
  "parent",
151
151
  "root",
152
152
  "nearest-owner"
153
- ], mt = (e) => pt.includes(e), H = (e) => {
153
+ ], pt = (e) => ft.includes(e), W = (e) => {
154
154
  let t = [];
155
155
  for (let n = e; n; n = n.parent) t.push(n);
156
156
  return t;
157
157
  };
158
- function U(e, t, n) {
159
- return e.routePaths.length === 0 || e.routePaths.some((e) => e === t) ? !0 : n ? Me(e.routePaths, n) : !1;
158
+ function G(e, t, n) {
159
+ return e.routePaths.length === 0 || e.routePaths.some((e) => e === t) ? !0 : n ? je(e.routePaths, n) : !1;
160
160
  }
161
- function W(e) {
162
- return H(e).map((e, t) => {
161
+ function K(e) {
162
+ return W(e).map((e, t) => {
163
163
  let n = t === 0 ? "current" : `${t} level(s) up`;
164
164
  return e.name ? `"${e.name}" (${n})` : `<unnamed> (${n})`;
165
165
  }).join(", ");
166
166
  }
167
- function ht({ from: e, target: t, path: n, pathname: r }) {
167
+ function mt({ from: e, target: t, path: n, pathname: r }) {
168
168
  if (t === void 0) return {
169
169
  node: e,
170
170
  message: null
171
171
  };
172
172
  let i = null, a = null;
173
- if (typeof t == "string" ? mt(t) ? i = t : a = t : "scope" in t ? i = t.scope : a = t.name, a !== null) {
174
- let t = H(e).find((e) => e.name === a);
173
+ if (typeof t == "string" ? pt(t) ? i = t : a = t : "scope" in t ? i = t.scope : a = t.name, a !== null) {
174
+ let t = W(e).find((e) => e.name === a);
175
175
  return t ? {
176
176
  node: t,
177
177
  message: null
178
178
  } : {
179
179
  node: null,
180
- message: `no <Router name="${a}"> encloses this call. Routers in scope: ${W(e)}.`
180
+ message: `no <Router name="${a}"> encloses this call. Routers in scope: ${K(e)}.`
181
181
  };
182
182
  }
183
183
  switch (i) {
@@ -189,7 +189,7 @@ function ht({ from: e, target: t, path: n, pathname: r }) {
189
189
  message: "router: \"parent\" was requested, but the enclosing <Router> is the outermost one (it has no parent Router)."
190
190
  };
191
191
  case "root": {
192
- let t = H(e);
192
+ let t = W(e);
193
193
  return {
194
194
  node: t[t.length - 1],
195
195
  message: null
@@ -200,13 +200,13 @@ function ht({ from: e, target: t, path: n, pathname: r }) {
200
200
  node: e,
201
201
  message: "router: \"nearest-owner\" needs a route to search for, and pop() carries none. Falling back to \"current\" — name the Router explicitly for a cross-Router pop."
202
202
  };
203
- let t = H(e).find((e) => U(e, n, r));
203
+ let t = W(e).find((e) => G(e, n, r));
204
204
  return t ? {
205
205
  node: t,
206
206
  message: null
207
207
  } : {
208
208
  node: null,
209
- message: `no <Router> in scope declares a <Route path="${n}">. Routers in scope: ${W(e)}.`
209
+ message: `no <Router> in scope declares a <Route path="${n}">. Routers in scope: ${K(e)}.`
210
210
  };
211
211
  }
212
212
  default: return {
@@ -215,109 +215,109 @@ function ht({ from: e, target: t, path: n, pathname: r }) {
215
215
  };
216
216
  }
217
217
  }
218
- function gt(e) {
218
+ function ht(e) {
219
219
  if (!e.name) return null;
220
220
  for (let t = e.parent; t; t = t.parent) if (t.name === e.name) return t;
221
221
  return null;
222
222
  }
223
223
  //#endregion
224
224
  //#region src/Slot.tsx
225
- var G = { contained: !0 };
226
- function K({ children: e, className: t, style: n }) {
227
- return /* @__PURE__ */ N("div", {
225
+ var q = { contained: !0 };
226
+ function J({ children: e, className: t, style: n }) {
227
+ return /* @__PURE__ */ P("div", {
228
228
  className: t,
229
229
  style: {
230
230
  position: "relative",
231
231
  overflow: "hidden",
232
232
  ...n
233
233
  },
234
- children: /* @__PURE__ */ N(at.Provider, {
235
- value: G,
236
- children: /* @__PURE__ */ N(rt, { children: e })
234
+ children: /* @__PURE__ */ P(it.Provider, {
235
+ value: q,
236
+ children: /* @__PURE__ */ P(nt, { children: e })
237
237
  })
238
238
  });
239
239
  }
240
240
  //#endregion
241
241
  //#region src/Router.tsx
242
- function q(e) {
242
+ function gt(e) {
243
243
  let t = null;
244
244
  return n.forEach(e, (e) => {
245
245
  if (t || !a(e)) return;
246
- if (e.type === K) {
246
+ if (e.type === J) {
247
247
  t = n.toArray(e.props.children).filter(a);
248
248
  return;
249
249
  }
250
250
  let r = e.props.children;
251
251
  if (r) {
252
- let e = q(r);
252
+ let e = gt(r);
253
253
  e && (t = e);
254
254
  }
255
255
  }), t;
256
256
  }
257
- var _t = typeof window > "u" ? c : f, vt = typeof window > "u" ? c : d, yt = [], J = [], bt = [], xt = [], Y = { contained: !0 };
258
- function St({ children: e, name: t, strictRoutes: r = !1, initPath: i = "/", defaultTransitionName: o = "cupertino", transitions: u = yt, decorators: d = J, partTransitions: f = bt, morphTransitions: ee = xt, history: p = "browser", createDriver: te, className: ne, style: h }) {
259
- let g = s(dt), re = l(), [ie, ae] = m(!1);
257
+ var _t = typeof window > "u" ? c : f, vt = typeof window > "u" ? c : d, yt = [], Y = [], bt = [], xt = [], X = { contained: !0 };
258
+ function St({ children: e, name: t, strictRoutes: r = !1, initPath: i = "/", defaultTransitionName: o = "cupertino", transitions: u = yt, decorators: d = Y, partTransitions: f = bt, morphTransitions: ee = xt, history: p = "browser", createDriver: te, className: ne, style: h }) {
259
+ let g = s(ut), re = l(), [ie, ae] = m(!1);
260
260
  c(() => ae(!0), []);
261
- let oe = ie ? re : null, _ = g > 0, v = p === "memory", se = l(), y = s(et), ce = s(Qe), le = _ && y.id ? `_F_${ce?.routerKey ?? ""}${y.id}_` : se, ue = q(e), de = ue !== null, fe = (ue ?? n.toArray(e).filter(a)).flatMap((e) => e.props?.path ? [e.props.path].flat() : []), pe = _ ? null : ce, b = pe !== null, x = te ?? me, [S] = m(() => v ? null : x(b ? void 0 : le)), C = !_ && !v && !Ae(), w = C && S ? S.readPathname() : i || "/", T = w.indexOf("?"), he = (T >= 0 ? w.slice(0, T) : w) || "/", E = C ? window.location.search : T >= 0 ? w.slice(T) : "", [D] = m(() => A({
261
+ let oe = ie ? re : null, _ = g > 0, v = p === "memory", se = l(), ce = s(I), le = s(Qe), y = _ && ce.id ? `_F_${le?.routerKey ?? ""}${ce.id}_` : se, ue = gt(e), de = ue !== null, fe = (ue ?? n.toArray(e).filter(a)).flatMap((e) => e.props?.path ? [e.props.path].flat() : []), pe = _ ? null : le, b = pe !== null, x = te ?? me, [S] = m(() => v ? null : x(b ? void 0 : y)), C = !_ && !v && !ke(), w = C && S ? S.readPathname() : i || "/", T = w.indexOf("?"), E = (T >= 0 ? w.slice(0, T) : w) || "/", D = C ? window.location.search : T >= 0 ? w.slice(T) : "", [O] = m(() => j({
262
262
  routePaths: fe,
263
- pathname: he,
264
- search: E,
263
+ pathname: E,
264
+ search: D,
265
265
  defaultTransitionName: o,
266
266
  memory: v,
267
267
  browserDriver: S,
268
268
  hostedScope: pe,
269
- routerKey: b ? void 0 : le,
270
- zoneEntryId: _ && !b && y.id || void 0,
271
- persistKey: _ && !v && !b ? le : void 0
269
+ routerKey: b ? void 0 : y,
270
+ zoneEntryId: _ && !b && ce.id || void 0,
271
+ persistKey: _ && !v && !b ? y : void 0
272
272
  }));
273
273
  _t(() => {
274
- D.transition.getState().defaultTransitionName !== o && D.transition.setState({ defaultTransitionName: o });
274
+ O.transition.getState().defaultTransitionName !== o && O.transition.setState({ defaultTransitionName: o });
275
275
  });
276
- let O = s(ft), [k] = m(() => ({
276
+ let k = s(dt), [A] = m(() => ({
277
277
  name: t,
278
- stores: D,
278
+ stores: O,
279
279
  routePaths: fe,
280
280
  strictRoutes: r,
281
- parent: O,
281
+ parent: k,
282
282
  depth: g
283
283
  }));
284
284
  vt(() => {
285
- k.name = t, k.stores = D, k.routePaths = fe, k.strictRoutes = r, k.parent = O;
285
+ A.name = t, A.stores = O, A.routePaths = fe, A.strictRoutes = r, A.parent = k;
286
286
  }), c(() => {
287
- gt(k) && lt(`duplicate <Router name="${k.name}">: an enclosing <Router> already uses that name, so \`router\` targets resolve to the nearer one. Give each nested Router a unique name.`);
288
- }, [k, t]), _t(() => (D.life.alive = !0, () => {
289
- D.life.alive = !1;
290
- }), [D]), st(u, d, f, ee), c(() => Ke(), []), c(() => {
287
+ ht(A) && ct(`duplicate <Router name="${A.name}">: an enclosing <Router> already uses that name, so \`router\` targets resolve to the nearer one. Give each nested Router a unique name.`);
288
+ }, [A, t]), _t(() => (O.life.alive = !0, () => {
289
+ O.life.alive = !1;
290
+ }), [O]), ot(u, d, f, ee), c(() => Ke(), []), c(() => {
291
291
  v || !S || We({
292
292
  driver: S,
293
- routerKey: b ? null : le,
293
+ routerKey: b ? null : y,
294
294
  nested: _ && !b,
295
- seedPathname: he,
295
+ seedPathname: E,
296
296
  defaultTransitionName: o,
297
- rootParams: D.history.getState().histories[0]?.params ?? {}
297
+ rootParams: O.history.getState().histories[0]?.params ?? {}
298
298
  });
299
299
  }, [
300
300
  v,
301
301
  b,
302
302
  _,
303
- le,
304
- he,
303
+ y,
304
+ E,
305
305
  o,
306
- D.history,
306
+ O.history,
307
307
  S
308
308
  ]);
309
- let ge = de ? e : /* @__PURE__ */ N(rt, { children: e }), _e = /* @__PURE__ */ N(nt.Provider, {
309
+ let he = de ? e : /* @__PURE__ */ P(nt, { children: e }), ge = /* @__PURE__ */ P(tt.Provider, {
310
310
  value: oe,
311
- children: /* @__PURE__ */ N(dt.Provider, {
311
+ children: /* @__PURE__ */ P(ut.Provider, {
312
312
  value: g + 1,
313
- children: /* @__PURE__ */ N(ft.Provider, {
314
- value: k,
313
+ children: /* @__PURE__ */ P(dt.Provider, {
314
+ value: A,
315
315
  children: /* @__PURE__ */ Ye(Qe.Provider, {
316
- value: D,
317
- children: [!v && /* @__PURE__ */ N($e, {}), _ ? /* @__PURE__ */ N(at.Provider, {
318
- value: Y,
319
- children: ge
320
- }) : ge]
316
+ value: O,
317
+ children: [/* @__PURE__ */ P($e, {}), _ ? /* @__PURE__ */ P(it.Provider, {
318
+ value: X,
319
+ children: he
320
+ }) : he]
321
321
  })
322
322
  })
323
323
  })
@@ -329,8 +329,8 @@ function St({ children: e, name: t, strictRoutes: r = !1, initPath: i = "/", def
329
329
  overflow: "hidden",
330
330
  ...h
331
331
  },
332
- children: [_e, /* @__PURE__ */ N(it, { stores: D })]
333
- }) : /* @__PURE__ */ Ye(Je, { children: [_e, /* @__PURE__ */ N(it, { stores: D })] });
332
+ children: [ge, /* @__PURE__ */ P(rt, { stores: O })]
333
+ }) : /* @__PURE__ */ Ye(Je, { children: [ge, /* @__PURE__ */ P(rt, { stores: O })] });
334
334
  }
335
335
  //#endregion
336
336
  //#region src/Route.tsx
@@ -345,7 +345,7 @@ function wt(e, t) {
345
345
  //#endregion
346
346
  //#region src/navigate/useNavigate.ts
347
347
  function Tt(e) {
348
- let t = P(), n = s(ft) ?? {
348
+ let t = F(), n = s(dt) ?? {
349
349
  stores: t,
350
350
  routePaths: [],
351
351
  strictRoutes: !1,
@@ -358,18 +358,18 @@ function Tt(e) {
358
358
  } catch {
359
359
  o = void 0;
360
360
  }
361
- let { node: s, message: c } = ht({
361
+ let { node: s, message: c } = mt({
362
362
  from: n,
363
363
  target: a,
364
364
  path: r,
365
365
  pathname: o
366
366
  });
367
- if (!s) return ut(c ?? "the requested Router could not be resolved."), null;
368
- if (c && lt(c), r && !U(s, r, o)) {
367
+ if (!s) return lt(c ?? "the requested Router could not be resolved."), null;
368
+ if (c && ct(c), r && !G(s, r, o)) {
369
369
  let e = `"${r}" is not declared by ${s.name ? `<Router name="${s.name}">` : "the target <Router>"}, so the navigation cannot mount a screen there. Declare a matching <Route>, target the Router that owns it, or use \`router: "nearest-owner"\`.`;
370
- a !== void 0 || s.strictRoutes ? ut(e) : lt(e);
370
+ a !== void 0 || s.strictRoutes ? lt(e) : ct(e);
371
371
  }
372
- return E({
372
+ return D({
373
373
  stores: s.stores,
374
374
  buildPathname: (e, t) => wt(e, t),
375
375
  driver: s.stores.driver,
@@ -394,20 +394,20 @@ function Tt(e) {
394
394
  //#endregion
395
395
  //#region src/navigate/usePathname.ts
396
396
  function Et() {
397
- return V((e) => e.histories[e.pendingIndex]?.pathname ?? "/");
397
+ return U((e) => e.histories[e.pendingIndex]?.pathname ?? "/");
398
398
  }
399
399
  //#endregion
400
400
  //#region src/navigate/useStep.ts
401
401
  function Dt() {
402
- let { routePath: e } = F(), t = P(), n = s(I), { driver: r, markSelfInduced: i } = t, [a, o] = m(null);
402
+ let { routePath: e } = L(), t = F(), n = s(R), { driver: r, markSelfInduced: i } = t, [a, o] = m(null);
403
403
  c(() => {
404
404
  if (!e) return o(Le(r.readState())), r.subscribe((e) => o(Le(e.state)));
405
405
  }, [e, r]);
406
- let l = be({
406
+ let l = ye({
407
407
  stores: t,
408
408
  driver: r,
409
409
  markSelfInduced: i,
410
- buildStepPathname: (t) => e ? wt(e, t).pathname : y(r.readPathname(), t),
410
+ buildStepPathname: (t) => e ? wt(e, t).pathname : ce(r.readPathname(), t),
411
411
  applyParams: (t) => {
412
412
  n({
413
413
  type: "SET",
@@ -425,7 +425,7 @@ function Dt() {
425
425
  //#endregion
426
426
  //#region src/screen/ParamsProvider/useParams.ts
427
427
  function Ot() {
428
- return s(tt);
428
+ return s(et);
429
429
  }
430
430
  //#endregion
431
431
  //#region src/screen/ScreenFreeze.tsx
@@ -434,7 +434,7 @@ function At({ freeze: e, mode: n = "deferred", children: r }) {
434
434
  let [i, a] = m(e), o = p(null);
435
435
  return !e && i && a(!1), c(() => {
436
436
  if (!(!e || i)) {
437
- if (n === "immediate" || !Oe()) {
437
+ if (n === "immediate" || !De()) {
438
438
  a(!0);
439
439
  return;
440
440
  }
@@ -448,7 +448,7 @@ function At({ freeze: e, mode: n = "deferred", children: r }) {
448
448
  e,
449
449
  i,
450
450
  n
451
- ]), /* @__PURE__ */ N(t, {
451
+ ]), /* @__PURE__ */ P(t, {
452
452
  mode: e && i ? "hidden" : "visible",
453
453
  children: r
454
454
  });
@@ -460,7 +460,7 @@ function Mt() {
460
460
  return s(jt);
461
461
  }
462
462
  var Nt = r(null);
463
- function X() {
463
+ function Z() {
464
464
  return s(Nt);
465
465
  }
466
466
  //#endregion
@@ -473,18 +473,19 @@ function Ft(e) {
473
473
  //#endregion
474
474
  //#region src/stores/useNavigateStore.ts
475
475
  function It(e) {
476
- return B(P().navigate, e);
476
+ return H(F().navigate, e);
477
477
  }
478
478
  //#endregion
479
479
  //#region src/screen/ScreenDecorator.tsx
480
480
  function Lt({ ref: e, style: t, ...n }) {
481
- let { isActive: r, isPrev: i, transitionName: a } = F(), o = p(null);
481
+ let { isActive: r, isPrev: i, transitionName: a } = L(), o = p(null);
482
482
  u(e, () => o.current);
483
- let s = It((e) => i ? "COMPLETED" : e.status), { decoratorName: c } = He(a), l = we.get(c);
484
- return l ? /* @__PURE__ */ N("div", {
483
+ let s = It((e) => i ? "COMPLETED" : e.status), c = He(a), { decoratorName: l } = c, d = Ce.get(l);
484
+ return d ? /* @__PURE__ */ P("div", {
485
485
  ref: o,
486
486
  "data-flemo-decorator": !0,
487
- "data-flemo-decorator-name": l.name,
487
+ "data-flemo-decorator-name": d.name,
488
+ "data-flemo-transition": c.name,
488
489
  "data-flemo-status": s,
489
490
  "data-flemo-active": r ? "true" : "false",
490
491
  style: {
@@ -503,7 +504,7 @@ function Lt({ ref: e, style: t, ...n }) {
503
504
  //#region src/screen/useViewportScrollHeight.ts
504
505
  function Rt() {
505
506
  let [e, t] = m(0), [n, r] = m(0);
506
- return c(() => Fe((e, n) => {
507
+ return c(() => Pe((e, n) => {
507
508
  r(n), t(e);
508
509
  }), []), {
509
510
  viewportScrollHeight: e,
@@ -518,59 +519,59 @@ function Vt(e) {
518
519
  }
519
520
  //#endregion
520
521
  //#region src/stores/useScreenStore.ts
521
- function Z(e) {
522
- return B(P().screen, e);
522
+ function Q(e) {
523
+ return H(F().screen, e);
523
524
  }
524
525
  //#endregion
525
526
  //#region src/screen/ScreenMotion.tsx
526
- function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigationBarHeight: r, systemNavigationBarColor: i, sharedTopBar: a, sharedTopBarId: l, sharedBottomBar: u, sharedBottomBarId: d, topBar: ee, bottomBar: te, hideStatusBar: ie, hideSystemNavigationBar: ae, backgroundColor: y = "white", contentScrollable: ce = !0, paintHidden: ue = !1, ...pe }) {
527
- let { id: b, isActive: x, isRoot: S, isPrev: me, zIndex: C, transitionName: w, prevTransitionName: T } = F(), { contained: he } = ot(), E = he ? "absolute" : "fixed", D = P(), O = s(nt), k = V((e) => e.index), ge = V((e) => e.histories), _e = x || C === k - 1, A = It((e) => _e ? e.status : "COMPLETED"), ve = Z((e) => e.dragStatus), ye = Z((e) => e.replaceTransitionStatus), be = D.screen.getState().setDragStatus, Se = D.screen.getState().setReplaceTransitionStatus, j = x ? ge[k - 1]?.id : ge[k]?.id, Ee = Z((e) => j ? e.sharedBars[j] : void 0), M = Z((e) => j ? e.sharedBarMetadata[j] : void 0), Oe = Z((e) => j ? e.screenSurfaces[j] : void 0), Ae = p(null);
528
- Ae.current ||= Ce({
529
- getTransitionTaskId: () => D.navigate.getState().transitionTaskId,
530
- setDragStatus: be,
531
- setReplaceTransitionStatus: Se
527
+ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigationBarHeight: r, systemNavigationBarColor: i, sharedTopBar: a, sharedTopBarId: l, sharedBottomBar: u, sharedBottomBarId: d, topBar: ee, bottomBar: te, hideStatusBar: ie, hideSystemNavigationBar: ae, backgroundColor: ce = "white", contentScrollable: le = !0, paintHidden: ue = !1, ...pe }) {
528
+ let { id: b, isActive: x, isRoot: S, isPrev: me, zIndex: C, transitionName: w, prevTransitionName: T } = L(), { contained: E } = at(), D = E ? "absolute" : "fixed", O = F(), k = s(tt), A = U((e) => e.index), he = U((e) => e.histories), ge = x || C === A - 1, j = It((e) => ge ? e.status : "COMPLETED"), _e = Q((e) => e.dragStatus), ve = Q((e) => e.replaceTransitionStatus), ye = O.screen.getState().setDragStatus, xe = O.screen.getState().setReplaceTransitionStatus, M = x ? he[A - 1]?.id : he[A]?.id, Te = Q((e) => M ? e.sharedBars[M] : void 0), N = Q((e) => M ? e.sharedBarMetadata[M] : void 0), De = Q((e) => M ? e.screenSurfaces[M] : void 0), ke = p(null);
529
+ ke.current ||= Se({
530
+ getTransitionTaskId: () => O.navigate.getState().transitionTaskId,
531
+ setDragStatus: ye,
532
+ setReplaceTransitionStatus: xe
532
533
  });
533
- let je = Ae.current, Me = p(null);
534
- Me.current ||= Ft(D.navigate);
535
- let Ne = He(w), { initial: Fe, swipeDirection: Ie, decoratorName: Le } = Ne, Re = we.get(Le), { viewportScrollHeight: ze } = Rt(), Be = ze > 0, [We, Ke] = m(null), qe = Mt(), Je = qe ?? We, Qe = p(/* @__PURE__ */ new Set()), [$e, et] = m(!1), tt = o((e) => {
534
+ let Ae = ke.current, je = p(null);
535
+ je.current ||= Ft(O.navigate);
536
+ let Me = He(w), { initial: Pe, swipeDirection: Fe, decoratorName: Le } = Me, Re = Ce.get(Le), { viewportScrollHeight: ze } = Rt(), Be = ze > 0, [We, Ke] = m(null), qe = Mt(), Je = qe ?? We, Qe = p(/* @__PURE__ */ new Set()), [$e, I] = m(!1), et = o((e) => {
536
537
  let t = Qe.current;
537
- e ? t.add(e) : t.clear(), et(t.size > 0);
538
- }, []), I = !!a, L = !!u, R = I ? `${typeof l}:${String(l)}` : null, z = L ? `${typeof d}:${String(d)}` : null, [B, rt] = m({
539
- key: R,
538
+ e ? t.add(e) : t.clear(), I(t.size > 0);
539
+ }, []), R = !!a, z = !!u, B = R ? `${typeof l}:${String(l)}` : null, V = z ? `${typeof d}:${String(d)}` : null, [H, nt] = m({
540
+ key: B,
540
541
  height: 0
541
- }), [it, at] = m({
542
- key: z,
542
+ }), [rt, it] = m({
543
+ key: V,
543
544
  height: 0
544
- }), st = p(B), ct = p(it), lt = B.key === R ? B.height : 0, ut = it.key === z ? it.height : 0, dt = Ge(I ? { id: l } : void 0, M?.topBar) ? M?.topBar?.height ?? 0 : 0, ft = Ge(L ? { id: d } : void 0, M?.bottomBar) ? M?.bottomBar?.height ?? 0 : 0, pt = lt || dt, mt = ut || ft, H = p(null), U = p(null), W = p(null), ht = p(null), gt = p(null), G = p(null), K = p(null), q = o((e) => {
545
- e <= 0 || R === null || (ht.current && (ht.current.style.minHeight = `${e}px`), st.current = {
546
- key: R,
545
+ }), ot = p(H), st = p(rt), ct = H.key === B ? H.height : 0, lt = rt.key === V ? rt.height : 0, ut = Ge(R ? { id: l } : void 0, N?.topBar) ? N?.topBar?.height ?? 0 : 0, dt = Ge(z ? { id: d } : void 0, N?.bottomBar) ? N?.bottomBar?.height ?? 0 : 0, ft = ct || ut, pt = lt || dt, W = p(null), G = p(null), K = p(null), mt = p(null), ht = p(null), q = p(null), J = p(null), gt = o((e) => {
546
+ e <= 0 || B === null || (mt.current && (mt.current.style.minHeight = `${e}px`), ot.current = {
547
+ key: B,
547
548
  height: e
548
- }, rt((t) => t.key === R && t.height === e ? t : {
549
- key: R,
549
+ }, nt((t) => t.key === B && t.height === e ? t : {
550
+ key: B,
550
551
  height: e
551
- }), D.screen.getState().updateSharedBarHeight(b, "topBar", e));
552
+ }), O.screen.getState().updateSharedBarHeight(b, "topBar", e));
552
553
  }, [
553
554
  b,
554
- D.screen,
555
- R
555
+ O.screen,
556
+ B
556
557
  ]), _t = o((e) => {
557
- e <= 0 || z === null || (gt.current && (gt.current.style.minHeight = `${e}px`), ct.current = {
558
- key: z,
558
+ e <= 0 || V === null || (ht.current && (ht.current.style.minHeight = `${e}px`), st.current = {
559
+ key: V,
559
560
  height: e
560
- }, at((t) => t.key === z && t.height === e ? t : {
561
- key: z,
561
+ }, it((t) => t.key === V && t.height === e ? t : {
562
+ key: V,
562
563
  height: e
563
- }), D.screen.getState().updateSharedBarHeight(b, "bottomBar", e));
564
+ }), O.screen.getState().updateSharedBarHeight(b, "bottomBar", e));
564
565
  }, [
565
- z,
566
+ V,
566
567
  b,
567
- D.screen
568
+ O.screen
568
569
  ]), vt = o((e) => {
569
- G.current = e, e?.offsetHeight && q(e.offsetHeight);
570
- }, [q]), yt = o((e) => {
571
- K.current = e, e?.offsetHeight && _t(e.offsetHeight);
572
- }, [_t]), J = p({
573
- transition: Ne,
570
+ q.current = e, e?.offsetHeight && gt(e.offsetHeight);
571
+ }, [gt]), yt = o((e) => {
572
+ J.current = e, e?.offsetHeight && _t(e.offsetHeight);
573
+ }, [_t]), Y = p({
574
+ transition: Me,
574
575
  decorator: Re,
575
576
  hasSharedTopBar: !!a,
576
577
  hasSharedBottomBar: !!u,
@@ -579,12 +580,12 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
579
580
  viewportScrollHeight: ze,
580
581
  isRoot: S,
581
582
  isActive: x,
582
- status: A,
583
- dragStatus: ve,
584
- index: k
583
+ status: j,
584
+ dragStatus: _e,
585
+ index: A
585
586
  });
586
- J.current = {
587
- transition: Ne,
587
+ Y.current = {
588
+ transition: Me,
588
589
  decorator: Re,
589
590
  hasSharedTopBar: !!a,
590
591
  hasSharedBottomBar: !!u,
@@ -593,42 +594,42 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
593
594
  viewportScrollHeight: ze,
594
595
  isRoot: S,
595
596
  isActive: x,
596
- status: A,
597
- dragStatus: ve,
598
- index: k
597
+ status: j,
598
+ dragStatus: _e,
599
+ index: A
599
600
  };
600
601
  let bt = p(null), xt = p(null);
601
- bt.current ||= xe({
602
- getTransition: () => J.current.transition,
603
- getDecorator: () => J.current.decorator,
602
+ bt.current ||= be({
603
+ getTransition: () => Y.current.transition,
604
+ getDecorator: () => Y.current.decorator,
604
605
  getElements: () => ({
605
- scope: U.current,
606
- screenContainer: H.current,
607
- decorator: W.current,
608
- sharedTopBar: G.current,
609
- sharedBottomBar: K.current
606
+ scope: G.current,
607
+ screenContainer: W.current,
608
+ decorator: K.current,
609
+ sharedTopBar: q.current,
610
+ sharedBottomBar: J.current
610
611
  }),
611
- hasSharedTopBar: () => J.current.hasSharedTopBar,
612
- hasSharedBottomBar: () => J.current.hasSharedBottomBar,
613
- getSharedTopBarId: () => J.current.sharedTopBarId,
614
- getSharedBottomBarId: () => J.current.sharedBottomBarId,
615
- getViewportScrollHeight: () => J.current.viewportScrollHeight,
612
+ hasSharedTopBar: () => Y.current.hasSharedTopBar,
613
+ hasSharedBottomBar: () => Y.current.hasSharedBottomBar,
614
+ getSharedTopBarId: () => Y.current.sharedTopBarId,
615
+ getSharedBottomBarId: () => Y.current.sharedBottomBarId,
616
+ getViewportScrollHeight: () => Y.current.viewportScrollHeight,
616
617
  isReadyForDrag: () => {
617
- let e = J.current;
618
+ let e = Y.current;
618
619
  return !e.isRoot && e.isActive && e.status === "COMPLETED" && e.dragStatus === "IDLE" && !!e.transition.swipeDirection && e.viewportScrollHeight < 10;
619
620
  },
620
621
  getPartnerBars: () => {
621
- let e = J.current, t = D.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
622
- return n ? D.screen.getState().sharedBars[n] : void 0;
622
+ let e = Y.current, t = O.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
623
+ return n ? O.screen.getState().sharedBars[n] : void 0;
623
624
  },
624
625
  getPartnerBarMetadata: () => {
625
- let e = J.current, t = D.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
626
- return n ? D.screen.getState().sharedBarMetadata[n] : void 0;
626
+ let e = Y.current, t = O.history.getState().histories, n = e.isActive ? t[e.index - 1]?.id : t[e.index]?.id;
627
+ return n ? O.screen.getState().sharedBarMetadata[n] : void 0;
627
628
  },
628
- setDragStatus: be,
629
- back: () => D.driver.back(),
629
+ setDragStatus: ye,
630
+ back: () => O.driver.back(),
630
631
  onDragStart: () => {
631
- xt.current = le(D.navigate, "POPPING");
632
+ xt.current = y(O.navigate, "POPPING");
632
633
  },
633
634
  onDragProgress: (e) => {
634
635
  xt.current?.scrub(e);
@@ -637,133 +638,136 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
637
638
  xt.current?.settle(e, t), xt.current = null;
638
639
  }
639
640
  });
640
- let Y = bt.current, St = (e) => Y.pointerDown(e.nativeEvent), Ct = (e) => Y.pointerMove(e.nativeEvent), wt = (e) => Y.pointerUp(e.nativeEvent), Tt = (e) => Y.pointerCancel(e.nativeEvent), Et = (e) => Y.lostPointerCapture(e.nativeEvent), Dt = (e) => {
641
- (A === "PUSHING" || A === "REPLACING") && (e.preventDefault(), e.stopPropagation());
641
+ let X = bt.current, St = (e) => X.pointerDown(e.nativeEvent), Ct = (e) => X.pointerMove(e.nativeEvent), wt = (e) => X.pointerUp(e.nativeEvent), Tt = (e) => X.pointerCancel(e.nativeEvent), Et = (e) => X.lostPointerCapture(e.nativeEvent), Dt = (e) => {
642
+ (j === "PUSHING" || j === "REPLACING") && (e.preventDefault(), e.stopPropagation());
642
643
  };
643
644
  c(() => {
644
- Te(U.current);
645
+ we(G.current);
645
646
  }, []), c(() => {
646
- let e = U.current;
647
+ let e = G.current;
647
648
  if (!e) return;
648
649
  let t = (e) => {
649
- Y.shouldPreventTouch() && e.preventDefault();
650
+ X.shouldPreventTouch() && e.preventDefault();
650
651
  };
651
652
  return e.addEventListener("touchmove", t, { passive: !1 }), () => {
652
- e.removeEventListener("touchmove", t), Y.abandon();
653
+ e.removeEventListener("touchmove", t), X.abandon();
653
654
  };
654
- }, [Y]), f(() => {
655
- let { registerSharedBars: e, unregisterSharedBars: t } = D.screen.getState(), n = st.current, r = ct.current;
655
+ }, [X]), f(() => {
656
+ let { registerSharedBars: e, unregisterSharedBars: t } = O.screen.getState(), n = ot.current, r = st.current;
656
657
  return e(b, {
657
- topBar: I,
658
- bottomBar: L
658
+ topBar: R,
659
+ bottomBar: z
659
660
  }, {
660
- topBar: I ? {
661
+ topBar: R ? {
661
662
  id: l,
662
- height: n.key === R ? n.height : void 0
663
+ height: n.key === B ? n.height : void 0
663
664
  } : void 0,
664
- bottomBar: L ? {
665
+ bottomBar: z ? {
665
666
  id: d,
666
- height: r.key === z ? r.height : void 0
667
+ height: r.key === V ? r.height : void 0
667
668
  } : void 0
668
669
  }), () => t(b);
669
670
  }, [
671
+ V,
670
672
  z,
671
- L,
672
- I,
673
+ R,
673
674
  b,
674
675
  d,
675
676
  l,
676
- D.screen,
677
- R
677
+ O.screen,
678
+ B
678
679
  ]), f(() => {
680
+ let e = q.current;
681
+ if (e) return Ne(e, gt);
682
+ }, [gt, R]), f(() => {
683
+ let e = J.current;
684
+ if (e) return Ne(e, _t);
685
+ }, [_t, z]), f(() => {
686
+ let e = W.current;
687
+ if (e && !(!R && !z)) return Ie(e);
688
+ }, [z, R]), f(() => {
679
689
  let e = G.current;
680
- if (e) return Pe(e, q);
681
- }, [q, I]), f(() => {
682
- let e = K.current;
683
- if (e) return Pe(e, _t);
684
- }, [_t, L]), f(() => {
685
- let e = U.current;
686
690
  if (!e) return;
687
- let { registerScreenSurface: t, unregisterScreenSurface: n } = D.screen.getState();
688
- return t(b, { opaqueBackground: ke(getComputedStyle(e).backgroundColor) }), () => n(b);
691
+ let { registerScreenSurface: t, unregisterScreenSurface: n } = O.screen.getState();
692
+ return t(b, { opaqueBackground: Oe(getComputedStyle(e).backgroundColor) }), () => n(b);
689
693
  }, [
690
694
  b,
691
- y,
692
- A,
693
- D.screen
695
+ ce,
696
+ j,
697
+ O.screen
694
698
  ]);
695
- let Ot = _e, { app: kt, nav: At } = de({
696
- status: A,
699
+ let Ot = ge, { app: kt, nav: At } = de({
700
+ status: j,
697
701
  isTopOrTopPrev: Ot,
698
- hasTopBar: I,
699
- hasNavBar: L,
702
+ hasTopBar: R,
703
+ hasNavBar: z,
700
704
  topBarId: l,
701
705
  bottomBarId: d,
702
- partnerBars: Ee,
703
- partnerMetadata: M
704
- }), X = se({
705
- status: A,
706
+ partnerBars: Te,
707
+ partnerMetadata: N
708
+ }), Z = se({
709
+ status: j,
706
710
  isTopOrTopPrev: Ot,
707
711
  transitionName: w
708
712
  }), Pt = fe({
709
713
  isActive: x,
710
714
  isPrev: me,
711
715
  zIndex: C,
712
- index: k,
713
- status: A,
714
- dragStatus: ve,
715
- replaceTransitionStatus: ye
716
- }), zt = p(Pt), Bt = p(X !== null && Pt), Ht = p(null), [Ut, Wt] = m({
717
- key: X,
718
- released: X === null
716
+ index: A,
717
+ status: j,
718
+ dragStatus: _e,
719
+ replaceTransitionStatus: ve
720
+ }), zt = p(Pt), Bt = p(Z !== null && Pt), Ht = p(null), [Ut, Wt] = m({
721
+ key: Z,
722
+ released: Z === null
719
723
  });
720
- Ut.key !== X && (Wt({
721
- key: X,
722
- released: X === null
723
- }), Ht.current = null, Bt.current = X !== null && zt.current), zt.current = Pt;
724
- let Q = X !== null && Ut.key === X && !Ut.released && Ht.current !== X, $ = Q ? !x && Oe?.opaqueBackground ? h.PARK : x && (A === "PUSHING" || A === "REPLACING") && Oe?.opaqueBackground ? Ve().parkOver ? h.PARK_OVER : h.PARK_UNDER : h.HELD : h.RELEASED, Gt = {
724
+ Ut.key !== Z && (Wt({
725
+ key: Z,
726
+ released: Z === null
727
+ }), Ht.current = null, Bt.current = Z !== null && zt.current), zt.current = Pt;
728
+ let Gt = Z !== null && Ut.key === Z && !Ut.released && Ht.current !== Z, $ = Gt ? !x && De?.opaqueBackground ? h.PARK : x && (j === "PUSHING" || j === "REPLACING") && De?.opaqueBackground ? Ve().parkOver ? h.PARK_OVER : h.PARK_UNDER : h.HELD : h.RELEASED, Kt = {
725
729
  zIndex: C,
726
730
  paintHidden: ue,
727
731
  transitionName: w,
728
- status: A,
732
+ status: j,
729
733
  isActive: x,
730
734
  animHold: $,
731
735
  rendersHost: !qe,
732
736
  screenId: b,
733
- registerSlot: tt
734
- }, Kt = Vt(Ue);
735
- f(() => je.driveScreenLifecycle({
737
+ registerSlot: et
738
+ }, qt = Vt(Ue);
739
+ f(() => Ae.driveScreenLifecycle({
736
740
  getElements: () => ({
737
- scope: U.current,
738
- decorator: W.current,
739
- bars: [G.current, K.current],
740
- screenContainer: H.current
741
+ scope: G.current,
742
+ decorator: K.current,
743
+ bars: [q.current, J.current],
744
+ screenContainer: W.current
741
745
  }),
742
746
  transitionName: w,
743
747
  prevTransitionName: T,
744
- status: A,
748
+ status: j,
745
749
  isActive: x,
746
- animHoldReleased: !Q
750
+ animHoldReleased: !Gt
747
751
  }), [
748
- je,
749
- A,
752
+ Ae,
753
+ j,
750
754
  x,
751
755
  T,
752
756
  w,
753
- Q
757
+ Gt
754
758
  ]), c(() => {
755
- if (!Q || X === null) return;
756
- let e = X, t = D.navigate.getState().transitionTaskId, n = t === null ? e : `${e}#${t}`;
757
- return Me.current.join(n, () => {
758
- let t = J.current.transition.driver === "native", n = Ve({ authoredNativeDriver: t }).atomicReleaseFlip;
759
+ if (!Gt || Z === null) return;
760
+ let e = Z, t = O.navigate.getState().transitionTaskId, n = t === null ? e : `${e}#${t}`;
761
+ return je.current.join(n, () => {
762
+ let t = Y.current.transition.driver === "native", n = Ve({ authoredNativeDriver: t }).atomicReleaseFlip;
759
763
  if (n) {
760
764
  for (let e of [
761
- U.current,
762
765
  G.current,
763
- K.current,
764
- W.current
766
+ q.current,
767
+ J.current,
768
+ K.current
765
769
  ]) e?.isConnected && e.getAttribute(g) !== null && e.setAttribute(g, h.RELEASED);
766
- H.current && (H.current.style.zIndex = String(C + 1)), Ht.current = e;
770
+ W.current && (W.current.style.zIndex = String(C + 1)), Ht.current = e;
767
771
  }
768
772
  {
769
773
  let t = () => Wt((t) => t.key === e && !t.released ? {
@@ -773,9 +777,9 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
773
777
  n && Ve().deferReleaseCommit && typeof requestAnimationFrame == "function" ? requestAnimationFrame(() => t()) : Ze(t);
774
778
  }
775
779
  }, {
776
- scope: U.current,
780
+ scope: G.current,
777
781
  decodeWait: Bt.current,
778
- contentSettle: Ve().renderSettleGate && (x && A === "PUSHING" || A === "POPPING") ? {
782
+ contentSettle: Ve().renderSettleGate && (x && j === "PUSHING" || j === "POPPING") ? {
779
783
  firstWaitMs: 120,
780
784
  capMs: 700,
781
785
  graceMs: 60,
@@ -784,24 +788,24 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
784
788
  } : void 0
785
789
  });
786
790
  }, [
787
- Q,
788
- X,
791
+ Gt,
792
+ Z,
789
793
  $,
790
794
  x,
791
- A,
792
- D.navigate,
795
+ j,
796
+ O.navigate,
793
797
  C
794
798
  ]);
795
- let qt = $ === h.PARK_UNDER || $ === h.PARK_OVER ? {} : De({
796
- initial: Fe,
799
+ let Jt = $ === h.PARK_UNDER || $ === h.PARK_OVER ? {} : Ee({
800
+ initial: Pe,
797
801
  isActive: x,
798
- status: A
802
+ status: j
799
803
  });
800
804
  return /* @__PURE__ */ Ye("div", {
801
- ref: H,
805
+ ref: W,
802
806
  onClickCapture: Dt,
803
807
  style: {
804
- position: E,
808
+ position: D,
805
809
  top: 0,
806
810
  left: 0,
807
811
  width: "100%",
@@ -817,7 +821,7 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
817
821
  },
818
822
  children: [
819
823
  /* @__PURE__ */ Ye("div", {
820
- ref: U,
824
+ ref: G,
821
825
  ...pe,
822
826
  onPointerDown: St,
823
827
  onPointerMove: Ct,
@@ -825,74 +829,74 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
825
829
  onPointerCancel: Tt,
826
830
  onLostPointerCapture: Et,
827
831
  "data-flemo-screen": b,
828
- "data-flemo-router": O ?? void 0,
832
+ "data-flemo-router": k ?? void 0,
829
833
  "data-flemo-transition": w,
830
- "data-flemo-status": A,
834
+ "data-flemo-status": j,
831
835
  "data-flemo-active": x ? "true" : "false",
832
836
  "data-flemo-anim-hold": $,
833
837
  style: {
834
838
  display: "flex",
835
839
  flexDirection: "column",
836
840
  height: "100%",
837
- backgroundColor: y,
838
- overflowY: ce ? void 0 : "auto",
839
- touchAction: Ie === "x" ? "pan-y" : Ie === "y" ? "pan-x" : "auto",
840
- ...Kt && C === k && !he ? { willChange: "transform" } : {},
841
- ...qt,
841
+ backgroundColor: ce,
842
+ overflowY: le ? void 0 : "auto",
843
+ touchAction: Fe === "x" ? "pan-y" : Fe === "y" ? "pan-x" : "auto",
844
+ ...qt && C === A && !E ? { willChange: "transform" } : {},
845
+ ...Jt,
842
846
  ...pe.style
843
847
  },
844
848
  children: [
845
- !ie && t && /* @__PURE__ */ N("div", {
849
+ !ie && t && /* @__PURE__ */ P("div", {
846
850
  style: { minHeight: t },
847
- children: /* @__PURE__ */ N("div", { style: {
848
- position: E,
851
+ children: /* @__PURE__ */ P("div", { style: {
852
+ position: D,
849
853
  top: 0,
850
854
  width: "100%",
851
855
  minHeight: t,
852
856
  backgroundColor: n
853
857
  } })
854
858
  }),
855
- a && /* @__PURE__ */ N("div", {
856
- ref: ht,
859
+ a && /* @__PURE__ */ P("div", {
860
+ ref: mt,
857
861
  "data-flemo-bar-spacer": "app",
858
862
  style: {
859
863
  width: "100%",
860
- minHeight: pt
864
+ minHeight: ft
861
865
  }
862
866
  }),
863
867
  ee,
864
- /* @__PURE__ */ N("div", {
868
+ /* @__PURE__ */ P("div", {
865
869
  style: {
866
870
  display: "flex",
867
871
  flexDirection: "column",
868
872
  flexGrow: 1,
869
- overflowY: ce ? "auto" : void 0
873
+ overflowY: le ? "auto" : void 0
870
874
  },
871
- children: /* @__PURE__ */ N(jt.Provider, {
875
+ children: /* @__PURE__ */ P(jt.Provider, {
872
876
  value: Je,
873
- children: /* @__PURE__ */ N(Nt.Provider, {
874
- value: Gt,
877
+ children: /* @__PURE__ */ P(Nt.Provider, {
878
+ value: Kt,
875
879
  children: e
876
880
  })
877
881
  })
878
882
  }),
879
883
  te,
880
- u && /* @__PURE__ */ N("div", {
881
- ref: gt,
884
+ u && /* @__PURE__ */ P("div", {
885
+ ref: ht,
882
886
  "data-flemo-bar-spacer": "nav",
883
887
  style: {
884
888
  display: Be ? "none" : void 0,
885
889
  width: "100%",
886
- minHeight: mt
890
+ minHeight: pt
887
891
  }
888
892
  }),
889
- !ae && r && /* @__PURE__ */ N("div", {
893
+ !ae && r && /* @__PURE__ */ P("div", {
890
894
  style: {
891
895
  display: Be ? "none" : void 0,
892
896
  minHeight: r
893
897
  },
894
- children: /* @__PURE__ */ N("div", { style: {
895
- position: E,
898
+ children: /* @__PURE__ */ P("div", { style: {
899
+ position: D,
896
900
  bottom: 0,
897
901
  width: "100%",
898
902
  minHeight: r,
@@ -901,58 +905,58 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
901
905
  })
902
906
  ]
903
907
  }),
904
- a && /* @__PURE__ */ N("div", {
908
+ a && /* @__PURE__ */ P("div", {
905
909
  ref: vt,
906
910
  "data-flemo-bar": "app",
907
911
  "data-flemo-bar-id": l,
908
912
  "data-flemo-bar-id-type": l === void 0 ? void 0 : typeof l,
909
- "data-flemo-router": O ?? void 0,
913
+ "data-flemo-router": k ?? void 0,
910
914
  "data-flemo-bar-transition": w,
911
- "data-flemo-bar-status": A,
915
+ "data-flemo-bar-status": j,
912
916
  "data-flemo-bar-active": x ? "true" : "false",
913
917
  "data-flemo-bar-riding": kt ? "true" : "false",
914
918
  "data-flemo-anim-hold": $,
915
919
  style: {
916
- position: E,
920
+ position: D,
917
921
  top: ie ? 0 : t,
918
922
  left: 0,
919
923
  width: "100%"
920
924
  },
921
925
  children: a
922
926
  }),
923
- u && /* @__PURE__ */ N("div", {
927
+ u && /* @__PURE__ */ P("div", {
924
928
  ref: yt,
925
929
  "data-flemo-bar": "nav",
926
930
  "data-flemo-bar-id": d,
927
931
  "data-flemo-bar-id-type": d === void 0 ? void 0 : typeof d,
928
- "data-flemo-router": O ?? void 0,
932
+ "data-flemo-router": k ?? void 0,
929
933
  "data-flemo-bar-transition": w,
930
- "data-flemo-bar-status": A,
934
+ "data-flemo-bar-status": j,
931
935
  "data-flemo-bar-active": x ? "true" : "false",
932
936
  "data-flemo-bar-riding": At ? "true" : "false",
933
937
  "data-flemo-anim-hold": $,
934
938
  style: {
935
939
  display: Be ? "none" : void 0,
936
- position: E,
940
+ position: D,
937
941
  bottom: ae ? 0 : r,
938
942
  left: 0,
939
943
  width: "100%"
940
944
  },
941
945
  children: u
942
946
  }),
943
- Re && /* @__PURE__ */ N(Lt, {
944
- ref: W,
947
+ Re && /* @__PURE__ */ P(Lt, {
948
+ ref: K,
945
949
  "data-flemo-anim-hold": $
946
950
  }),
947
- Re && $e && Je ? Xe(/* @__PURE__ */ N(Lt, {
951
+ Re && $e && Je ? Xe(/* @__PURE__ */ P(Lt, {
948
952
  "data-flemo-anim-hold": $,
949
953
  style: { zIndex: C * 2 + 1 }
950
954
  }), Je) : null,
951
- !qe && /* @__PURE__ */ N("div", {
955
+ !qe && /* @__PURE__ */ P("div", {
952
956
  ref: Ke,
953
957
  [re]: "",
954
958
  [v]: w,
955
- [_]: A,
959
+ [_]: j,
956
960
  [ne]: x ? "true" : "false",
957
961
  [g]: $,
958
962
  style: {
@@ -968,7 +972,7 @@ function Ht({ children: e, statusBarHeight: t, statusBarColor: n, systemNavigati
968
972
  //#endregion
969
973
  //#region src/screen/Screen.tsx
970
974
  function Ut({ children: e, ...t }) {
971
- let { isActive: n, isPrev: r, zIndex: i } = F(), a = V((e) => e.index), o = It((e) => e.status), s = Z((e) => e.dragStatus), l = Z((e) => e.replaceTransitionStatus), u = pe({
975
+ let { isActive: n, isPrev: r, zIndex: i } = L(), a = U((e) => e.index), o = It((e) => e.status), s = Q((e) => e.dragStatus), l = Q((e) => e.replaceTransitionStatus), u = pe({
972
976
  isActive: n,
973
977
  isPrev: r,
974
978
  zIndex: i,
@@ -981,10 +985,10 @@ function Ut({ children: e, ...t }) {
981
985
  if (u !== "deferred" || d) return;
982
986
  let e = setTimeout(() => f(!0), Wt);
983
987
  return () => clearTimeout(e);
984
- }, [u, d]), /* @__PURE__ */ N(At, {
988
+ }, [u, d]), /* @__PURE__ */ P(At, {
985
989
  freeze: d,
986
990
  mode: u,
987
- children: /* @__PURE__ */ N(Ht, {
991
+ children: /* @__PURE__ */ P(Ht, {
988
992
  paintHidden: d,
989
993
  ...t,
990
994
  children: e
@@ -994,9 +998,9 @@ function Ut({ children: e, ...t }) {
994
998
  var Wt = 600;
995
999
  //#endregion
996
1000
  //#region src/screen/Part.tsx
997
- function Q({ ref: e, name: t, style: n, children: r, ...i }) {
998
- let { isActive: a, isPrev: o, navigateStore: c, routerId: l } = F(), u = s(nt), d = l ?? u ?? void 0, f = P(), ee = B(c ?? f.navigate, (e) => o ? "COMPLETED" : e.status);
999
- return /* @__PURE__ */ N("div", {
1001
+ function Gt({ ref: e, name: t, style: n, children: r, ...i }) {
1002
+ let { isActive: a, isPrev: o, navigateStore: c, routerId: l } = L(), u = s(tt), d = l ?? u ?? void 0, f = F(), ee = H(c ?? f.navigate, (e) => o ? "COMPLETED" : e.status);
1003
+ return /* @__PURE__ */ P("div", {
1000
1004
  ref: e,
1001
1005
  "data-flemo-part-name": t,
1002
1006
  "data-flemo-router": d,
@@ -1010,8 +1014,8 @@ function Q({ ref: e, name: t, style: n, children: r, ...i }) {
1010
1014
  //#endregion
1011
1015
  //#region src/screen/Layer.tsx
1012
1016
  function $({ children: e }) {
1013
- let t = Mt(), n = X();
1014
- return !t || !n ? null : Xe(/* @__PURE__ */ N("div", {
1017
+ let t = Mt(), n = Z();
1018
+ return !t || !n ? null : Xe(/* @__PURE__ */ P("div", {
1015
1019
  ref: n.registerSlot,
1016
1020
  [ae]: "",
1017
1021
  [ie]: n.screenId,
@@ -1028,7 +1032,7 @@ function $({ children: e }) {
1028
1032
  zIndex: n.zIndex * 2,
1029
1033
  visibility: n.paintHidden ? "hidden" : void 0
1030
1034
  },
1031
- children: /* @__PURE__ */ N("div", {
1035
+ children: /* @__PURE__ */ P("div", {
1032
1036
  style: {
1033
1037
  display: "contents",
1034
1038
  pointerEvents: "auto"
@@ -1039,13 +1043,13 @@ function $({ children: e }) {
1039
1043
  }
1040
1044
  //#endregion
1041
1045
  //#region src/screen/Morph.tsx
1042
- function Gt({ ref: e, layoutId: t, name: n, as: r = "div", style: a, children: s, ...c }) {
1043
- let { isActive: l, isPrev: u, navigateStore: d } = F(), ee = P(), m = d ?? ee.navigate, te = B(m, (e) => u ? "COMPLETED" : e.status), ne = p(null), h = o((t) => {
1046
+ function Kt({ ref: e, layoutId: t, name: n, as: r = "div", style: a, children: s, ...c }) {
1047
+ let { isActive: l, isPrev: u, navigateStore: d } = L(), ee = F(), m = d ?? ee.navigate, te = H(m, (e) => u ? "COMPLETED" : e.status), ne = p(null), h = o((t) => {
1044
1048
  ne.current = t, typeof e == "function" ? e(t) : e && (e.current = t);
1045
1049
  }, [e]);
1046
1050
  return f(() => {
1047
1051
  let e = ne.current;
1048
- if (e) return ce(e, {
1052
+ if (e) return le(e, {
1049
1053
  layoutId: t,
1050
1054
  name: n,
1051
1055
  navigateStore: m
@@ -1069,21 +1073,22 @@ function Gt({ ref: e, layoutId: t, name: n, as: r = "div", style: a, children: s
1069
1073
  }
1070
1074
  //#endregion
1071
1075
  //#region src/stores/RouterScopeProvider.tsx
1072
- function Kt({ children: e }) {
1076
+ function qt({ children: e }) {
1073
1077
  let [t] = m(() => ({
1074
1078
  history: w(),
1075
- navigate: he(),
1076
- transition: j(),
1077
- screen: ye(),
1079
+ navigate: E(),
1080
+ transition: M(),
1081
+ screen: ve(),
1078
1082
  driver: me(),
1079
- markSelfInduced: je,
1083
+ memory: !1,
1084
+ markSelfInduced: Ae,
1080
1085
  consume: b,
1081
1086
  life: { alive: !0 }
1082
1087
  }));
1083
- return /* @__PURE__ */ N(Qe.Provider, {
1088
+ return /* @__PURE__ */ P(Qe.Provider, {
1084
1089
  value: t,
1085
1090
  children: e
1086
1091
  });
1087
1092
  }
1088
1093
  //#endregion
1089
- export { $ as Layer, Gt as Morph, Q as Part, Ct as Route, St as Router, Kt as RouterScopeProvider, Ut as Screen, et as ScreenContext, Lt as ScreenDecorator, At as ScreenFreeze, Ht as ScreenMotion, K as Slot, S as createBrowserHistoryDriver, C as createDecorator, T as createMorphTransition, D as createPartTransition, O as createRawDecorator, k as createRawMorphTransition, ge as createRawPartTransition, _e as createRawTransition, Se as createTransition, Ne as morphTransitionMap, Ie as partTransitionMap, V as useHistoryStore, Tt as useNavigate, It as useNavigateStore, Ot as useParams, Et as usePathname, F as useScreen, Z as useScreenStore, Dt as useStep, P as useStores, Rt as useViewportScrollHeight };
1094
+ export { $ as Layer, Kt as Morph, Gt as Part, Ct as Route, St as Router, qt as RouterScopeProvider, Ut as Screen, I as ScreenContext, Lt as ScreenDecorator, At as ScreenFreeze, Ht as ScreenMotion, J as Slot, S as createBrowserHistoryDriver, C as createDecorator, T as createMorphTransition, O as createPartTransition, k as createRawDecorator, A as createRawMorphTransition, he as createRawPartTransition, ge as createRawTransition, xe as createTransition, Me as morphTransitionMap, Fe as partTransitionMap, U as useHistoryStore, Tt as useNavigate, It as useNavigateStore, Ot as useParams, Et as usePathname, L as useScreen, Q as useScreenStore, Dt as useStep, F as useStores, Rt as useViewportScrollHeight };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flemo/react",
3
- "version": "2.0.0",
3
+ "version": "2.1.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",
@@ -34,7 +34,7 @@
34
34
  "homepage": "https://flemo.dev",
35
35
  "license": "MIT",
36
36
  "dependencies": {
37
- "@flemo/core": "2.0.0",
37
+ "@flemo/core": "2.1.0",
38
38
  "path-to-regexp": "^8.4.2",
39
39
  "zustand": "^5.0.15"
40
40
  },