@flemo/core 1.16.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -40,7 +40,7 @@ export { SKIP_ANIMATION_ATTR, type TransitionEngine, type TransitionEngineDeps,
40
40
  export { default as createSwipeController } from './core/engine/createSwipeController';
41
41
  export { type SwipeController, type SwipeControllerConfig, type SwipeControllerElements, type SharedBarPresenceLike } from './core/engine/createSwipeController';
42
42
  export { default as computeBarRiding, type BarRidingInput } from './screen/computeBarRiding';
43
- export { animHoldKey, scheduleAnimHoldRelease, eagerlyDecodeImages, ANIM_HOLD_RELEASE_BACKSTOP_MS, type AnimHoldInput } from './screen/animStartAnchor';
43
+ export { animHoldKey, scheduleAnimHoldRelease, createAnimHoldCoordinator, eagerlyDecodeImages, ANIM_HOLD_RELEASE_BACKSTOP_MS, type AnimHoldInput, type AnimHoldCoordinator } from './screen/animStartAnchor';
44
44
  export { default as observeBarHeight } from './screen/observeBarHeight';
45
45
  export { default as observeViewportScrollHeight } from './screen/observeViewportScrollHeight';
46
46
  export type { RegisterTransition, TransitionName, TransitionVariant, TransitionVariantValue, TransitionOptions, BaseTransition, Transition, SwipeInfo, SwipeAnimate } from './transition/typing';
package/dist/index.mjs CHANGED
@@ -552,7 +552,7 @@ var O = (e, t, n) => {
552
552
  let { regexp: r } = i(e);
553
553
  for (let e = t - 1; e >= 0; e--) if (r.test(n[e].pathname)) return t - e;
554
554
  return -1;
555
- }, k = (e, t) => typeof e == "number" && Number.isFinite(e) ? Math.max(0, Math.trunc(e)) : t, A = async (e, t, n, r) => {
555
+ }, k = (e, t) => typeof e == "number" && Number.isFinite(e) ? Math.max(0, Math.trunc(e)) : t, ie = async (e, t, n, r) => {
556
556
  let i, a = new Promise((t) => {
557
557
  i = e.subscribe(() => t(!0));
558
558
  }), o = new Promise((e) => setTimeout(() => e(!1), 200));
@@ -560,7 +560,7 @@ var O = (e, t, n) => {
560
560
  let s = await Promise.race([a, o]);
561
561
  i(), s && r();
562
562
  };
563
- function ie(e) {
563
+ function ae(e) {
564
564
  let { stores: t, buildPathname: n, driver: r = h(), markSelfInduced: i = v } = e, s = () => t.history.getState().bumpTruncationEpoch(), c = () => {
565
565
  let e = r.readState();
566
566
  if (!e?.id) return null;
@@ -616,7 +616,7 @@ function ie(e) {
616
616
  return g({
617
617
  ...C,
618
618
  frameIndex: T + 1
619
- }), await A(r, i, v, () => {
619
+ }), await ie(r, i, v, () => {
620
620
  s(), r.pushState({
621
621
  id: h,
622
622
  index: T + 1,
@@ -681,7 +681,7 @@ function ie(e) {
681
681
  return v(y - 1), g({
682
682
  ...w,
683
683
  frameIndex: E
684
- }), y <= d ? await A(r, i, y, () => {
684
+ }), y <= d ? await ie(r, i, y, () => {
685
685
  s(), r.pushState({
686
686
  id: h,
687
687
  index: E,
@@ -690,7 +690,7 @@ function ie(e) {
690
690
  transitionName: p,
691
691
  layoutId: m
692
692
  }, S);
693
- }) : await A(r, i, d, () => {
693
+ }) : await ie(r, i, d, () => {
694
694
  s(), r.replaceState({
695
695
  id: h,
696
696
  index: E,
@@ -757,14 +757,14 @@ function ie(e) {
757
757
  }
758
758
  //#endregion
759
759
  //#region src/navigate/createStepController.ts
760
- var ae = (e) => {
760
+ var oe = (e) => {
761
761
  let t = e;
762
762
  return t?.step ? t.params ?? {} : null;
763
- }, oe = (e, t) => {
763
+ }, se = (e, t) => {
764
764
  let n = new URLSearchParams(Object.fromEntries(Object.entries(t).map(([e, t]) => [e, String(t)]))).toString();
765
765
  return n ? `${e}?${n}` : e;
766
766
  };
767
- function se(e) {
767
+ function ce(e) {
768
768
  let { stores: t, driver: n, markSelfInduced: r, buildStepPathname: i, applyParams: s } = e;
769
769
  return {
770
770
  pushStep: async (e) => {
@@ -822,7 +822,7 @@ function se(e) {
822
822
  }
823
823
  };
824
824
  }
825
- function ce(e, t) {
825
+ function le(e, t) {
826
826
  return e.subscribe((e) => {
827
827
  let n = e.state;
828
828
  n?.step && o.addTask(async () => {
@@ -832,7 +832,7 @@ function ce(e, t) {
832
832
  }
833
833
  //#endregion
834
834
  //#region src/transition/store.ts
835
- function le(t = "cupertino") {
835
+ function ue(t = "cupertino") {
836
836
  return e((e) => ({
837
837
  defaultTransitionName: t,
838
838
  setDefaultTransitionName: (t) => e({ defaultTransitionName: t })
@@ -840,12 +840,12 @@ function le(t = "cupertino") {
840
840
  }
841
841
  //#endregion
842
842
  //#region src/utils/matchesPathname.ts
843
- function ue(e, t) {
843
+ function de(e, t) {
844
844
  return i(e).regexp.test(t);
845
845
  }
846
846
  //#endregion
847
847
  //#region src/screen/store.ts
848
- function de() {
848
+ function fe() {
849
849
  return e((e) => ({
850
850
  dragStatus: "IDLE",
851
851
  replaceTransitionStatus: "IDLE",
@@ -876,14 +876,14 @@ function de() {
876
876
  }
877
877
  //#endregion
878
878
  //#region src/core/createRouterScope.ts
879
- var fe = {
879
+ var pe = {
880
880
  mark: () => {},
881
881
  consume: () => !1
882
- }, pe = /* @__PURE__ */ new Map();
883
- function me(e) {
882
+ }, me = /* @__PURE__ */ new Map();
883
+ function he(e) {
884
884
  let { routePaths: t, pathname: n, search: r, defaultTransitionName: i, memory: a, browserDriver: o } = e, c = d() ? void 0 : e.persistKey;
885
885
  if (c) {
886
- let e = pe.get(c);
886
+ let e = me.get(c);
887
887
  if (e) {
888
888
  e.life.alive = !0, e.navigate.getState().setStatus("IDLE"), e.navigate.getState().setTransitionTaskId(null);
889
889
  let t = e.history.getState();
@@ -913,25 +913,25 @@ function me(e) {
913
913
  layoutId: p.layoutId
914
914
  },
915
915
  url: p.pathname
916
- }) : o, h = a ? fe : g(), _ = {
916
+ }) : o, h = a ? pe : g(), _ = {
917
917
  history: s([p], 0),
918
918
  navigate: re(),
919
- transition: le(i),
920
- screen: de(),
919
+ transition: ue(i),
920
+ screen: fe(),
921
921
  driver: m,
922
922
  markSelfInduced: h.mark,
923
923
  consume: h.consume,
924
924
  routerKey: e.routerKey,
925
925
  zoneEntryId: e.zoneEntryId,
926
- ownsPathname: (e) => ue(t, e),
926
+ ownsPathname: (e) => de(t, e),
927
927
  persistent: !!c,
928
928
  life: { alive: !0 }
929
929
  };
930
- return c && pe.set(c, _), _;
930
+ return c && me.set(c, _), _;
931
931
  }
932
932
  //#endregion
933
933
  //#region src/screen/createScreenSelector.ts
934
- function he(e, t) {
934
+ function ge(e, t) {
935
935
  return e.map((n, r) => ({
936
936
  ...n,
937
937
  isActive: r === t,
@@ -944,13 +944,13 @@ function he(e, t) {
944
944
  }
945
945
  //#endregion
946
946
  //#region src/screen/computeScreenFreeze.ts
947
- function ge(e) {
947
+ function _e(e) {
948
948
  let t = e.status === "COMPLETED" && e.dragStatus === "IDLE";
949
949
  return !e.isActive && t || e.isPrev && e.index - 2 <= e.zIndex && e.replaceTransitionStatus === "IDLE" || e.isPrev && e.index - 2 > e.zIndex;
950
950
  }
951
951
  //#endregion
952
952
  //#region src/transition/createTransition.ts
953
- function j({ name: e, initial: t, idle: n, enter: r, enterBack: i, exit: a, exitBack: o, options: s }) {
953
+ function A({ name: e, initial: t, idle: n, enter: r, enterBack: i, exit: a, exitBack: o, options: s }) {
954
954
  return {
955
955
  name: e,
956
956
  initial: t,
@@ -971,7 +971,7 @@ function j({ name: e, initial: t, idle: n, enter: r, enterBack: i, exit: a, exit
971
971
  }
972
972
  //#endregion
973
973
  //#region src/transition/createRawTransition.ts
974
- function _e({ name: e, initial: t, idle: n, pushOnEnter: r, pushOnExit: i, replaceOnEnter: a, replaceOnExit: o, popOnEnter: s, popOnExit: c, completedOnExit: l, completedOnEnter: u, options: d }) {
974
+ function ve({ name: e, initial: t, idle: n, pushOnEnter: r, pushOnExit: i, replaceOnEnter: a, replaceOnExit: o, popOnEnter: s, popOnExit: c, completedOnExit: l, completedOnEnter: u, options: d }) {
975
975
  return {
976
976
  name: e,
977
977
  initial: t,
@@ -992,10 +992,10 @@ function _e({ name: e, initial: t, idle: n, pushOnEnter: r, pushOnExit: i, repla
992
992
  }
993
993
  //#endregion
994
994
  //#region src/transition/cupertino.ts
995
- var ve = (e, t, n) => {
995
+ var ye = (e, t, n) => {
996
996
  let [r, i] = t, [a, o] = n;
997
997
  return i === r ? a : a + (e - r) / (i - r) * (o - a);
998
- }, ye = j({
998
+ }, be = A({
999
999
  name: "cupertino",
1000
1000
  initial: { x: "100%" },
1001
1001
  idle: {
@@ -1055,7 +1055,7 @@ var ve = (e, t, n) => {
1055
1055
  swipeDirection: "x",
1056
1056
  onSwipeStart: async () => !0,
1057
1057
  onSwipe: (e, t, { animate: n, currentScreen: r, prevScreen: i, onProgress: a }) => {
1058
- let { offset: o } = t, s = o.x, c = ve(s, [0, window.innerWidth], [0, 100]);
1058
+ let { offset: o } = t, s = o.x, c = ye(s, [0, window.innerWidth], [0, 100]);
1059
1059
  return a?.(!0, c), n(r, { x: Math.max(0, s) }, { duration: 0 }), n(i, { x: `${-35 + c * .35}%` }, { duration: 0 }), c;
1060
1060
  },
1061
1061
  onSwipeEnd: async (e, t, { animate: n, currentScreen: r, prevScreen: i, onStart: a }) => {
@@ -1079,10 +1079,10 @@ var ve = (e, t, n) => {
1079
1079
  })]), c;
1080
1080
  }
1081
1081
  }
1082
- }), be = (e, t, n) => {
1082
+ }), xe = (e, t, n) => {
1083
1083
  let [r, i] = t, [a, o] = n;
1084
1084
  return i === r ? a : a + (e - r) / (i - r) * (o - a);
1085
- }, xe = j({
1085
+ }, Se = A({
1086
1086
  name: "layout",
1087
1087
  initial: { opacity: .97 },
1088
1088
  idle: {
@@ -1110,7 +1110,7 @@ var ve = (e, t, n) => {
1110
1110
  swipeDirection: "y",
1111
1111
  onSwipeStart: async () => !0,
1112
1112
  onSwipe: (e, t, { animate: n, currentScreen: r, onProgress: i }) => {
1113
- let { offset: a } = t, o = a.y, s = Math.max(0, Math.min(56, o)), c = be(s, [0, 56], [1, .96]), l = Math.max(0, o - 56), u = Math.min(1, l / 160), d = Math.sqrt(u) * 12, f = Math.max(0, s + d), p = Math.min(56, f);
1113
+ let { offset: a } = t, o = a.y, s = Math.max(0, Math.min(56, o)), c = xe(s, [0, 56], [1, .96]), l = Math.max(0, o - 56), u = Math.min(1, l / 160), d = Math.sqrt(u) * 12, f = Math.max(0, s + d), p = Math.min(56, f);
1114
1114
  return i?.(!0, 100), n(r, {
1115
1115
  y: f,
1116
1116
  opacity: c
@@ -1127,7 +1127,7 @@ var ve = (e, t, n) => {
1127
1127
  }, { duration: .3 })]), c;
1128
1128
  }
1129
1129
  }
1130
- }), Se = j({
1130
+ }), Ce = A({
1131
1131
  name: "material",
1132
1132
  initial: { y: "100%" },
1133
1133
  idle: {
@@ -1235,7 +1235,7 @@ var ve = (e, t, n) => {
1235
1235
  })]), c;
1236
1236
  }
1237
1237
  }
1238
- }), Ce = j({
1238
+ }), we = A({
1239
1239
  name: "none",
1240
1240
  initial: {},
1241
1241
  idle: {
@@ -1258,16 +1258,16 @@ var ve = (e, t, n) => {
1258
1258
  value: {},
1259
1259
  options: { duration: 0 }
1260
1260
  }
1261
- }), M = new Map([
1262
- ["none", Ce],
1263
- ["cupertino", ye],
1264
- ["material", Se],
1265
- ["layout", xe]
1261
+ }), j = new Map([
1262
+ ["none", we],
1263
+ ["cupertino", be],
1264
+ ["material", Ce],
1265
+ ["layout", Se]
1266
1266
  ]);
1267
1267
  //#endregion
1268
1268
  //#region src/transition/resolveTransition.ts
1269
- function we(e) {
1270
- return M.get(e) ?? M.get("none");
1269
+ function M(e) {
1270
+ return j.get(e) ?? j.get("none");
1271
1271
  }
1272
1272
  //#endregion
1273
1273
  //#region src/transition/decorator/createDecorator.ts
@@ -1405,13 +1405,13 @@ var F = /* @__PURE__ */ new Map(), I = {
1405
1405
  if (!e) return 0;
1406
1406
  let t = e.duration;
1407
1407
  return typeof t == "number" && t >= 0 ? t : 0;
1408
- }, R = (e) => e && typeof e.delay == "number" && e.delay > 0 ? e.delay : 0, je = (e, t) => {
1408
+ }, je = (e) => e && typeof e.delay == "number" && e.delay > 0 ? e.delay : 0, Me = (e, t) => {
1409
1409
  let n = I[t];
1410
1410
  return n === "self" ? null : n === "initial" ? e.initial : e.variants[n].value;
1411
- }, z = (e, t) => {
1412
- let n = je(e, t);
1411
+ }, R = (e, t) => {
1412
+ let n = Me(e, t);
1413
1413
  if (n === null) return null;
1414
- let r = e.variants[t], i = L(r.options), a = R(r.options);
1414
+ let r = e.variants[t], i = L(r.options), a = je(r.options);
1415
1415
  return i <= 0 && a <= 0 ? null : {
1416
1416
  from: n,
1417
1417
  to: r.value,
@@ -1419,7 +1419,7 @@ var F = /* @__PURE__ */ new Map(), I = {
1419
1419
  delay: a,
1420
1420
  ease: r.options?.ease
1421
1421
  };
1422
- }, Me = Ae, Ne = (e) => e.replace(/[^a-zA-Z0-9_-]/g, "_"), Pe = (e) => typeof e == "object" && !!e && !Array.isArray(e), Fe = new Set(/* @__PURE__ */ "opacity.scale.scaleX.scaleY.scaleZ.aspectRatio.columnCount.columns.flex.flexGrow.flexShrink.fontWeight.gridArea.gridColumn.gridColumnEnd.gridColumnStart.gridRow.gridRowEnd.gridRowStart.lineHeight.lineClamp.order.orphans.tabSize.widows.zIndex.zoom.fillOpacity.floodOpacity.stopOpacity.strokeOpacity.strokeDasharray.strokeDashoffset.strokeMiterlimit.strokeWidth".split(".")), Ie = (e, t) => t.startsWith("--") || Fe.has(t) ? `${e}` : t === "rotate" || t === "rotateX" || t === "rotateY" || t === "rotateZ" ? `${e}deg` : `${e}px`, Le = (e, t) => typeof t == "number" ? Ie(t, e) : typeof t == "string" ? t : "", Re = (e) => e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), ze = new Set([
1422
+ }, Ne = Ae, Pe = (e) => e.replace(/[^a-zA-Z0-9_-]/g, "_"), Fe = (e) => typeof e == "object" && !!e && !Array.isArray(e), Ie = new Set(/* @__PURE__ */ "opacity.scale.scaleX.scaleY.scaleZ.aspectRatio.columnCount.columns.flex.flexGrow.flexShrink.fontWeight.gridArea.gridColumn.gridColumnEnd.gridColumnStart.gridRow.gridRowEnd.gridRowStart.lineHeight.lineClamp.order.orphans.tabSize.widows.zIndex.zoom.fillOpacity.floodOpacity.stopOpacity.strokeOpacity.strokeDasharray.strokeDashoffset.strokeMiterlimit.strokeWidth".split(".")), Le = (e, t) => t.startsWith("--") || Ie.has(t) ? `${e}` : t === "rotate" || t === "rotateX" || t === "rotateY" || t === "rotateZ" ? `${e}deg` : `${e}px`, Re = (e, t) => typeof t == "number" ? Le(t, e) : typeof t == "string" ? t : "", ze = (e) => e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), Be = new Set([
1423
1423
  "x",
1424
1424
  "y",
1425
1425
  "z",
@@ -1430,7 +1430,7 @@ var F = /* @__PURE__ */ new Map(), I = {
1430
1430
  "rotateX",
1431
1431
  "rotateY",
1432
1432
  "rotateZ"
1433
- ]), Be = /^-?0(\.0+)?(px|%|em|rem|vh|vw|vmin|vmax)?$/, Ve = /^-?0(\.0+)?(deg|rad|grad|turn)?$/, He = /^1(\.0+)?$/, Ue = (e, t) => e === "scale" || e === "scaleX" || e === "scaleY" ? t === 1 ? !0 : typeof t == "string" ? He.test(t.trim()) : !1 : e === "rotate" || e === "rotateX" || e === "rotateY" || e === "rotateZ" ? t === 0 ? !0 : typeof t == "string" ? Ve.test(t.trim()) : !1 : t === 0 ? !0 : typeof t == "string" ? Be.test(t.trim()) : !1, We = (e, t) => {
1433
+ ]), Ve = /^-?0(\.0+)?(px|%|em|rem|vh|vw|vmin|vmax)?$/, He = /^-?0(\.0+)?(deg|rad|grad|turn)?$/, Ue = /^1(\.0+)?$/, We = (e, t) => e === "scale" || e === "scaleX" || e === "scaleY" ? t === 1 ? !0 : typeof t == "string" ? Ue.test(t.trim()) : !1 : e === "rotate" || e === "rotateX" || e === "rotateY" || e === "rotateZ" ? t === 0 ? !0 : typeof t == "string" ? He.test(t.trim()) : !1 : t === 0 ? !0 : typeof t == "string" ? Ve.test(t.trim()) : !1, Ge = (e, t) => {
1434
1434
  switch (e) {
1435
1435
  case "x": return `translate3d(${t}, 0, 0)`;
1436
1436
  case "y": return `translate3d(0, ${t}, 0)`;
@@ -1444,16 +1444,16 @@ var F = /* @__PURE__ */ new Map(), I = {
1444
1444
  case "rotateY": return `rotateY(${t})`;
1445
1445
  default: return "";
1446
1446
  }
1447
- }, Ge = (e) => {
1447
+ }, Ke = (e) => {
1448
1448
  let t = /* @__PURE__ */ new Map(), n = !1, r = /* @__PURE__ */ new Set(), i = (e) => {
1449
- if (!Pe(e)) return;
1449
+ if (!Fe(e)) return;
1450
1450
  let n = [];
1451
1451
  for (let r of Object.keys(e)) {
1452
- let i = e[r], a = Le(r, i);
1453
- if (a !== "") if (ze.has(r)) n.push(`${r}:${a}`);
1452
+ let i = e[r], a = Re(r, i);
1453
+ if (a !== "") if (Be.has(r)) n.push(`${r}:${a}`);
1454
1454
  else {
1455
- let e = t.get(Re(r)) ?? /* @__PURE__ */ new Set();
1456
- e.add(a), t.set(Re(r), e);
1455
+ let e = t.get(ze(r)) ?? /* @__PURE__ */ new Set();
1456
+ e.add(a), t.set(ze(r), e);
1457
1457
  }
1458
1458
  }
1459
1459
  r.add(n.sort().join("|"));
@@ -1463,13 +1463,13 @@ var F = /* @__PURE__ */ new Map(), I = {
1463
1463
  n = r.size > 1;
1464
1464
  let a = Array.from(t.entries()).filter(([, e]) => e.size > 1).map(([e]) => e);
1465
1465
  return n && a.push("transform"), a;
1466
- }, B = (e) => {
1467
- if (!Pe(e)) return [];
1466
+ }, z = (e) => {
1467
+ if (!Fe(e)) return [];
1468
1468
  let t = [], n = !0, r = [];
1469
1469
  for (let i of Object.keys(e)) {
1470
- let a = e[i], o = Le(i, a);
1471
- o !== "" && (ze.has(i) ? (t.push(We(i, o)), Ue(i, a) || (n = !1)) : r.push({
1472
- property: Re(i),
1470
+ let a = e[i], o = Re(i, a);
1471
+ o !== "" && (Be.has(i) ? (t.push(Ge(i, o)), We(i, a) || (n = !1)) : r.push({
1472
+ property: ze(i),
1473
1473
  value: o
1474
1474
  }));
1475
1475
  }
@@ -1477,7 +1477,7 @@ var F = /* @__PURE__ */ new Map(), I = {
1477
1477
  property: "transform",
1478
1478
  value: n ? "none" : t.join(" ")
1479
1479
  }), r;
1480
- }, V = (e) => e.map((e) => ` ${e.property}: ${e.value};`).join("\n"), H = (e) => Array.isArray(e) ? e.length === 4 && e.every((e) => typeof e == "number") ? `cubic-bezier(${e.join(", ")})` : "linear" : typeof e == "string" ? {
1480
+ }, B = (e) => e.map((e) => ` ${e.property}: ${e.value};`).join("\n"), V = (e) => Array.isArray(e) ? e.length === 4 && e.every((e) => typeof e == "number") ? `cubic-bezier(${e.join(", ")})` : "linear" : typeof e == "string" ? {
1481
1481
  linear: "linear",
1482
1482
  easeIn: "ease-in",
1483
1483
  easeOut: "ease-out",
@@ -1487,29 +1487,29 @@ var F = /* @__PURE__ */ new Map(), I = {
1487
1487
  backIn: "cubic-bezier(0.31, 0.01, 0.66, -0.59)",
1488
1488
  backOut: "cubic-bezier(0.33, 1.53, 0.69, 0.99)",
1489
1489
  anticipate: "cubic-bezier(0.36, 0, 0.66, -0.56)"
1490
- }[e] ?? "ease" : "ease", Ke = (e, t) => {
1490
+ }[e] ?? "ease" : "ease", qe = (e, t) => {
1491
1491
  let [n, r] = t.split("-");
1492
1492
  return `[data-flemo-screen][data-flemo-transition="${e}"][data-flemo-status="${n}"][data-flemo-active="${r}"]`;
1493
- }, qe = (e, t) => {
1493
+ }, Je = (e, t) => {
1494
1494
  let [n, r] = t.split("-");
1495
1495
  return `[data-flemo-decorator][data-flemo-decorator-name="${e}"][data-flemo-status="${n}"][data-flemo-active="${r}"]`;
1496
- }, Je = (e, t) => {
1496
+ }, Ye = (e, t) => {
1497
1497
  let [n, r] = t.split("-");
1498
1498
  return `[data-flemo-bar][data-flemo-bar-transition="${e}"][data-flemo-bar-status="${n}"][data-flemo-bar-active="${r}"][data-flemo-bar-riding="true"]`;
1499
- }, Ye = (e, t) => {
1499
+ }, Xe = (e, t) => {
1500
1500
  let [n, r] = t.split("-");
1501
1501
  return `[data-flemo-part-name="${e}"][data-flemo-status="${n}"][data-flemo-active="${r}"]`;
1502
- }, Xe = (e, t, n) => `flemo-${e}-${Ne(t)}-${n}`, Ze = (e, t, n, r, i, a) => {
1503
- let o = B(r), s = B(i.value), c = L(i.options), l = R(i.options), u = H(i.options?.ease), d = a(t, n), f = e === "screen" ? `${d},\n${Je(t, n)}` : d;
1502
+ }, Ze = (e, t, n) => `flemo-${e}-${Pe(t)}-${n}`, Qe = (e, t, n, r, i, a) => {
1503
+ let o = z(r), s = z(i.value), c = L(i.options), l = je(i.options), u = V(i.options?.ease), d = a(t, n), f = e === "screen" ? `${d},\n${Ye(t, n)}` : d;
1504
1504
  if (s.length === 0 && o.length === 0) return "";
1505
- if (c <= 0 && l <= 0) return s.length === 0 ? "" : `${f} {\n${V(s)}\n animation: none;\n}`;
1506
- let p = Xe(e, t, n), m = [
1505
+ if (c <= 0 && l <= 0) return s.length === 0 ? "" : `${f} {\n${B(s)}\n animation: none;\n}`;
1506
+ let p = Ze(e, t, n), m = [
1507
1507
  `@keyframes ${p} {`,
1508
1508
  " from {",
1509
- V(o).replace(/^/gm, " "),
1509
+ B(o).replace(/^/gm, " "),
1510
1510
  " }",
1511
1511
  " to {",
1512
- V(s).replace(/^/gm, " "),
1512
+ B(s).replace(/^/gm, " "),
1513
1513
  " }",
1514
1514
  "}"
1515
1515
  ].join("\n"), h = [
@@ -1519,15 +1519,15 @@ var F = /* @__PURE__ */ new Map(), I = {
1519
1519
  l > 0 ? `${l}s` : null,
1520
1520
  "both"
1521
1521
  ].filter(Boolean).join(" "), g = new Map(o.map((e) => [e.property, e.value])), _ = new Map(s.map((e) => [e.property, e.value])), v = Array.from(new Set([...g.keys(), ..._.keys()])).filter((e) => g.get(e) !== _.get(e)), y = v.length > 0 ? ` will-change: ${v.join(", ")};\n` : "", b = n.split("-")[0];
1522
- return `${m}\n${`${f} {\n animation: ${h};\n${y}${b === "PUSHING" || b === "REPLACING" ? " contain: layout;\n pointer-events: none;\n" : ""}}`}${e === "screen" && n.endsWith("-false") && Qe(r) && s.length > 0 ? `\n${d}[data-flemo-anim-hold="park"] {\n animation: none;\n${V(s)}\n}` : ""}${e === "screen" && n.endsWith("-true") && (n.startsWith("PUSHING") || n.startsWith("REPLACING")) && Qe(r) && s.length > 0 ? `\n${d}[data-flemo-anim-hold="park-under"] {\n animation: none;\n${V(s)}\n}` : ""}`;
1523
- }, Qe = (e) => {
1522
+ return `${m}\n${`${f} {\n animation: ${h};\n${y}${b === "PUSHING" || b === "REPLACING" ? " contain: layout;\n pointer-events: none;\n" : ""}}`}${e === "screen" && n.endsWith("-false") && $e(r) && s.length > 0 ? `\n${d}[data-flemo-anim-hold="park"] {\n animation: none;\n${B(s)}\n}` : ""}${e === "screen" && n.endsWith("-true") && (n.startsWith("PUSHING") || n.startsWith("REPLACING")) && $e(r) && s.length > 0 ? `\n${d}[data-flemo-anim-hold="park-under"] {\n animation: none;\n${B(s)}\n}` : ""}`;
1523
+ }, $e = (e) => {
1524
1524
  if (!e) return !1;
1525
1525
  if (e.opacity === 0) return !0;
1526
1526
  let t = (e) => typeof e == "string" && e.trim().endsWith("%") && Math.abs(parseFloat(e)) >= 100;
1527
1527
  return t(e.x) || t(e.y);
1528
- }, $e = (e, t, n, r) => {
1529
- let i = B(r.value);
1530
- return i.length === 0 ? "" : `${e(t, n)} {\n${V(i)}\n}`;
1528
+ }, H = (e, t, n, r) => {
1529
+ let i = z(r.value);
1530
+ return i.length === 0 ? "" : `${e(t, n)} {\n${B(i)}\n}`;
1531
1531
  }, et = (e, t, n = []) => {
1532
1532
  let r = [];
1533
1533
  for (let t of e) {
@@ -1535,35 +1535,35 @@ var F = /* @__PURE__ */ new Map(), I = {
1535
1535
  for (let n of Ae) {
1536
1536
  let i = t.variants[n], a = I[n];
1537
1537
  if (a === "self") {
1538
- r.push($e(Ke, e, n, i));
1538
+ r.push(H(qe, e, n, i));
1539
1539
  continue;
1540
1540
  }
1541
1541
  let o = a === "initial" ? t.initial : t.variants[a].value;
1542
- r.push(Ze("screen", e, n, o, i, Ke));
1542
+ r.push(Qe("screen", e, n, o, i, qe));
1543
1543
  }
1544
1544
  }
1545
1545
  for (let e of t) {
1546
1546
  let t = e.name;
1547
- for (let n of Me) {
1547
+ for (let n of Ne) {
1548
1548
  let i = e.variants[n], a = I[n];
1549
1549
  if (a === "self") {
1550
- r.push($e(qe, t, n, i));
1550
+ r.push(H(Je, t, n, i));
1551
1551
  continue;
1552
1552
  }
1553
1553
  let o = a === "initial" ? e.initial : e.variants[a].value;
1554
- r.push(Ze("decorator", t, n, o, i, qe));
1554
+ r.push(Qe("decorator", t, n, o, i, Je));
1555
1555
  }
1556
1556
  }
1557
1557
  for (let e of n) {
1558
1558
  let t = e.name;
1559
- for (let n of Me) {
1559
+ for (let n of Ne) {
1560
1560
  let i = e.variants[n], a = I[n];
1561
1561
  if (a === "self") {
1562
- r.push($e(Ye, t, n, i));
1562
+ r.push(H(Xe, t, n, i));
1563
1563
  continue;
1564
1564
  }
1565
1565
  let o = a === "initial" ? e.initial : e.variants[a].value;
1566
- r.push(Ze("part", t, n, o, i, Ye));
1566
+ r.push(Qe("part", t, n, o, i, Xe));
1567
1567
  }
1568
1568
  }
1569
1569
  return [...r.filter((e) => e.length > 0), tt].join("\n\n");
@@ -1579,14 +1579,14 @@ var F = /* @__PURE__ */ new Map(), I = {
1579
1579
  ].join("\n"), nt = (e, t) => {
1580
1580
  let n = I[t];
1581
1581
  if (n === "self") return !1;
1582
- let r = e.variants[t], i = L(r.options), a = R(r.options);
1582
+ let r = e.variants[t], i = L(r.options), a = je(r.options);
1583
1583
  if (i <= 0 && a <= 0) return !1;
1584
- let o = B(n === "initial" ? e.initial : e.variants[n].value), s = B(r.value);
1584
+ let o = z(n === "initial" ? e.initial : e.variants[n].value), s = z(r.value);
1585
1585
  return o.length > 0 || s.length > 0;
1586
1586
  }, rt = "data-flemo";
1587
1587
  function it() {
1588
1588
  if (d()) return;
1589
- let e = et(M.values(), P.values(), F.values()), t = document.head.querySelector(`style[${rt}]`);
1589
+ let e = et(j.values(), P.values(), F.values()), t = document.head.querySelector(`style[${rt}]`);
1590
1590
  t || (t = document.createElement("style"), t.setAttribute(rt, ""), document.head.appendChild(t)), t.textContent !== e && (t.textContent = e);
1591
1591
  }
1592
1592
  //#endregion
@@ -1598,11 +1598,11 @@ var at = /* @__PURE__ */ new Map(), ot = /* @__PURE__ */ new Map(), st = /* @__P
1598
1598
  return n <= 0 ? (e.delete(t), !0) : (e.set(t, n), !1);
1599
1599
  };
1600
1600
  function ut(e, t, n = []) {
1601
- for (let t of e) M.set(t.name, t), ct(at, t.name);
1601
+ for (let t of e) j.set(t.name, t), ct(at, t.name);
1602
1602
  for (let e of t) P.set(e.name, e), ct(ot, e.name);
1603
1603
  for (let e of n) F.set(e.name, e), ct(st, e.name);
1604
1604
  return it(), () => {
1605
- for (let t of e) lt(at, t.name) && M.delete(t.name);
1605
+ for (let t of e) lt(at, t.name) && j.delete(t.name);
1606
1606
  for (let e of t) lt(ot, e.name) && P.delete(e.name);
1607
1607
  for (let e of n) lt(st, e.name) && F.delete(e.name);
1608
1608
  it();
@@ -1752,9 +1752,9 @@ var ft = () => ({
1752
1752
  e.style.removeProperty("transform"), e.style.removeProperty("opacity");
1753
1753
  }, q = (e, t, n = {}) => {
1754
1754
  if (!wt(e)) return Promise.resolve();
1755
- let r = e, i = B(t);
1755
+ let r = e, i = z(t);
1756
1756
  if (i.length === 0) return Promise.resolve();
1757
- let a = typeof n.duration == "number" ? n.duration : 0, o = typeof n.delay == "number" && n.delay > 0 ? n.delay : 0, s = H(n.ease);
1757
+ let a = typeof n.duration == "number" ? n.duration : 0, o = typeof n.delay == "number" && n.delay > 0 ? n.delay : 0, s = V(n.ease);
1758
1758
  if (a <= 0 && o <= 0) {
1759
1759
  mt.takeover(r), r.style.transition = "none";
1760
1760
  for (let e of i) r.style.setProperty(e.property, e.value), G(r, e.property);
@@ -1981,7 +1981,7 @@ var ft = () => ({
1981
1981
  return !o && s.length === 0 ? "" : c ? "none" : [...o ? [`translate3d(${i}px, ${a}px, 0)`] : [], ...s].join(" ");
1982
1982
  }, Vt = (e) => e.replace(/-([a-z])/g, (e, t) => t.toUpperCase()), Ht = (e) => {
1983
1983
  let t = {};
1984
- for (let n of B(e)) t[Vt(n.property)] = n.value;
1984
+ for (let n of z(e)) t[Vt(n.property)] = n.value;
1985
1985
  return t;
1986
1986
  }, Ut = (e, t) => {
1987
1987
  if (typeof e.animate != "function") return null;
@@ -1989,7 +1989,7 @@ var ft = () => ({
1989
1989
  let n = e.animate([Ht(t.from), Ht(t.to)], {
1990
1990
  duration: Math.max(0, t.duration * 1e3),
1991
1991
  delay: Math.max(0, t.delay * 1e3),
1992
- easing: H(t.ease),
1992
+ easing: V(t.ease),
1993
1993
  fill: "both"
1994
1994
  });
1995
1995
  return n.pause(), n.currentTime = 0, n;
@@ -2115,7 +2115,7 @@ function Jt(e) {
2115
2115
  if (!s || o.pendingTaskIds.some((e) => e !== s) || !U.playerAllowed()) return null;
2116
2116
  let { scope: c, decorator: l, bars: u } = n();
2117
2117
  if (!c) return null;
2118
- let d = we(r), f = z(d, t);
2118
+ let d = M(r), f = R(d, t);
2119
2119
  if (!f) return null;
2120
2120
  let p = [], m = Y.join(s, {
2121
2121
  element: c,
@@ -2135,7 +2135,7 @@ function Jt(e) {
2135
2135
  t && p.push(t);
2136
2136
  }
2137
2137
  if (l && d.decoratorName) {
2138
- let e = P.get(d.decoratorName), n = e ? z(e, t) : null;
2138
+ let e = P.get(d.decoratorName), n = e ? R(e, t) : null;
2139
2139
  if (n) {
2140
2140
  let e = Y.join(s, {
2141
2141
  element: l,
@@ -2146,7 +2146,7 @@ function Jt(e) {
2146
2146
  }
2147
2147
  }
2148
2148
  for (let e of qt(c, t)) {
2149
- let n = F.get(e.getAttribute(Gt)), r = n ? z(n, t) : null;
2149
+ let n = F.get(e.getAttribute(Gt)), r = n ? R(n, t) : null;
2150
2150
  if (!r) continue;
2151
2151
  let i = Y.join(s, {
2152
2152
  element: e,
@@ -2191,9 +2191,9 @@ function Jt(e) {
2191
2191
  let f = () => {
2192
2192
  let t = e.getTransitionTaskId();
2193
2193
  t && o.resolveTask(t);
2194
- }, p = we(r), m = `${a}-true`, h = d.getAttribute(X) === "true";
2194
+ }, p = M(r), m = `${a}-true`, h = d.getAttribute(X) === "true";
2195
2195
  if (!(!h && nt(p, m))) return queueMicrotask(f), Z;
2196
- let g = z(p, m), _ = !h && !!g, v = Xe("screen", r, m), y = (e) => {
2196
+ let g = R(p, m), _ = !h && !!g, v = Ze("screen", r, m), y = (e) => {
2197
2197
  e.target === d && e.animationName === v && (d.removeEventListener("animationend", y), f());
2198
2198
  };
2199
2199
  d.addEventListener("animationend", y);
@@ -2310,7 +2310,7 @@ function Qt(e) {
2310
2310
  current: i,
2311
2311
  prev: s
2312
2312
  };
2313
- let c = Ge(e.getTransition()).join(", ");
2313
+ let c = Ke(e.getTransition()).join(", ");
2314
2314
  for (let e of i) e.style.willChange = c;
2315
2315
  for (let e of s) e.style.willChange = c;
2316
2316
  }, b = () => {
@@ -2504,14 +2504,56 @@ function on(e, t = {}) {
2504
2504
  i.push(requestAnimationFrame(() => o(e - 1)));
2505
2505
  }, s = requestAnimationFrame(() => {
2506
2506
  r = requestAnimationFrame(() => o(t.extraFrames ?? 0));
2507
- }), c = setTimeout(e, 300);
2507
+ });
2508
2508
  return () => {
2509
- n = !0, cancelAnimationFrame(s), r && cancelAnimationFrame(r), i.forEach((e) => cancelAnimationFrame(e)), clearTimeout(c);
2509
+ n = !0, cancelAnimationFrame(s), r && cancelAnimationFrame(r), i.forEach((e) => cancelAnimationFrame(e));
2510
2510
  };
2511
2511
  }
2512
+ function sn(e, t = {}) {
2513
+ let n = on(e, t), r = setTimeout(e, 300);
2514
+ return () => {
2515
+ n(), clearTimeout(r);
2516
+ };
2517
+ }
2518
+ var cn = "POPPING";
2519
+ function ln() {
2520
+ let e = /* @__PURE__ */ new Map(), t = (t, n) => {
2521
+ clearTimeout(n.backstop), e.delete(t);
2522
+ let r = [...n.members];
2523
+ n.members.clear();
2524
+ for (let e of r) e.cancelReadiness(), e.release();
2525
+ }, n = (e) => [...e.members].every((e) => e.ready);
2526
+ return { join: (r, i, a) => {
2527
+ if (!r.startsWith(cn)) return sn(i, a);
2528
+ let o = e.get(r);
2529
+ if (!o) {
2530
+ let n = {
2531
+ members: /* @__PURE__ */ new Set(),
2532
+ backstop: setTimeout(() => t(r, n), 300)
2533
+ };
2534
+ e.set(r, n), o = n;
2535
+ }
2536
+ let s = o, c = {
2537
+ release: i,
2538
+ ready: !1,
2539
+ cancelReadiness: on(() => {
2540
+ c.ready = !0, n(s) && t(r, s);
2541
+ }, a)
2542
+ };
2543
+ return s.members.add(c), () => {
2544
+ if (s.members.has(c)) {
2545
+ if (c.cancelReadiness(), s.members.delete(c), s.members.size === 0) {
2546
+ clearTimeout(s.backstop), e.delete(r);
2547
+ return;
2548
+ }
2549
+ n(s) && t(r, s);
2550
+ }
2551
+ };
2552
+ } };
2553
+ }
2512
2554
  //#endregion
2513
2555
  //#region src/screen/observeBarHeight.ts
2514
- function sn(e, t) {
2556
+ function un(e, t) {
2515
2557
  e.offsetHeight > 0 && t(e.offsetHeight);
2516
2558
  let n = new ResizeObserver(([e]) => {
2517
2559
  e.contentRect.height > 0 && t(e.contentRect.height);
@@ -2522,14 +2564,14 @@ function sn(e, t) {
2522
2564
  }
2523
2565
  //#endregion
2524
2566
  //#region src/screen/observeViewportScrollHeight.ts
2525
- var cn = 0;
2526
- function ln(e) {
2567
+ var dn = 0;
2568
+ function fn(e) {
2527
2569
  let t = 0, n = () => {
2528
2570
  cancelAnimationFrame(t), t = requestAnimationFrame(() => {
2529
2571
  let t = document.documentElement.scrollHeight - (window.visualViewport?.height || 0);
2530
2572
  t = t < 0 ? 0 : t;
2531
- let n = t - cn;
2532
- n = n < 0 ? 0 : n, cn ||= t, e(t, n);
2573
+ let n = t - dn;
2574
+ n = n < 0 ? 0 : n, dn ||= t, e(t, n);
2533
2575
  });
2534
2576
  };
2535
2577
  return window.visualViewport?.addEventListener("resize", n), window.visualViewport?.addEventListener("scroll", n), () => {
@@ -2538,7 +2580,7 @@ function ln(e) {
2538
2580
  }
2539
2581
  //#endregion
2540
2582
  //#region src/utils/isOpaqueColor.ts
2541
- function un(e) {
2583
+ function pn(e) {
2542
2584
  let t = e.trim().toLowerCase();
2543
2585
  if (t === "transparent" || t === "") return !1;
2544
2586
  if (t.match(/^rgb\(\s*\d+[\s,]+\d+[\s,]+\d+\s*\)$/)) return !0;
@@ -2549,7 +2591,7 @@ function un(e) {
2549
2591
  }
2550
2592
  //#endregion
2551
2593
  //#region src/utils/buildRoutePath.ts
2552
- function dn(e, n) {
2594
+ function mn(e, n) {
2553
2595
  let i = n ?? {}, a = t(e)(Object.fromEntries(Object.entries(i).map(([e, t]) => [e, String(t)]))), o = (typeof e == "string" ? r(e) : e).tokens.filter((e) => e.type === "param").map((e) => e.name), s = Object.fromEntries(Object.entries(i).filter(([e]) => !o.includes(e))), c = new URLSearchParams(s).toString();
2554
2596
  return {
2555
2597
  pathname: `${a}${c ? `?${c}` : ""}`,
@@ -2557,4 +2599,4 @@ function dn(e, n) {
2557
2599
  };
2558
2600
  }
2559
2601
  //#endregion
2560
- export { tn as ANIM_HOLD_RELEASE_BACKSTOP_MS, X as SKIP_ANIMATION_ATTR, o as TaskManger, en as animHoldKey, q as animateInline, Xe as animationName, oe as appendParamsQuery, it as applyTransitionStyles, dn as buildRoutePath, $ as canProgrammaticallyScroll, K as clearInlineAnimation, Ge as collectAnimatedProperties, et as compileTransitionStyles, $t as computeBarRiding, ge as computeScreenFreeze, y as consumeSelfInducedPop, h as createBrowserHistoryDriver, Te as createDecorator, s as createHistoryStore, b as createHistorySync, ne as createMemoryHistoryDriver, re as createNavigateStore, ie as createNavigationController, Oe as createPartTransition, Ee as createRawDecorator, ke as createRawPartTransition, _e as createRawTransition, me as createRouterScope, he as createScreenSelector, de as createScreenStore, g as createSelfPopGuard, se as createStepController, Qt as createSwipeController, j as createTransition, Jt as createTransitionEngine, le as createTransitionStore, ye as cupertino, P as decoratorMap, an as eagerlyDecodeImages, H as easingToCss, ee as ensureScopeHistorySync, f as ensureWindowHistoryState, dt as enteringInitialStyle, Yt as findScrollable, c as getMatchedPathPattern, l as getParams, un as isOpaqueColor, d as isServer, xe as layout, v as markSelfInducedPop, ue as matchesPathname, Se as material, Ce as none, sn as observeBarHeight, ln as observeViewportScrollHeight, Q as overflowsAxis, De as overlay, F as partTransitionMap, ae as readStepParams, ut as registerTransitionDefinitions, te as releaseScopeHistorySync, we as resolveTransition, on as scheduleAnimHoldRelease, u as seedInitialHistory, p as seedRouterEntry, ce as subscribeStepParamsRestore, B as targetToDecls, M as transitionMap, nt as variantHasAnimation };
2602
+ export { tn as ANIM_HOLD_RELEASE_BACKSTOP_MS, X as SKIP_ANIMATION_ATTR, o as TaskManger, en as animHoldKey, q as animateInline, Ze as animationName, se as appendParamsQuery, it as applyTransitionStyles, mn as buildRoutePath, $ as canProgrammaticallyScroll, K as clearInlineAnimation, Ke as collectAnimatedProperties, et as compileTransitionStyles, $t as computeBarRiding, _e as computeScreenFreeze, y as consumeSelfInducedPop, ln as createAnimHoldCoordinator, h as createBrowserHistoryDriver, Te as createDecorator, s as createHistoryStore, b as createHistorySync, ne as createMemoryHistoryDriver, re as createNavigateStore, ae as createNavigationController, Oe as createPartTransition, Ee as createRawDecorator, ke as createRawPartTransition, ve as createRawTransition, he as createRouterScope, ge as createScreenSelector, fe as createScreenStore, g as createSelfPopGuard, ce as createStepController, Qt as createSwipeController, A as createTransition, Jt as createTransitionEngine, ue as createTransitionStore, be as cupertino, P as decoratorMap, an as eagerlyDecodeImages, V as easingToCss, ee as ensureScopeHistorySync, f as ensureWindowHistoryState, dt as enteringInitialStyle, Yt as findScrollable, c as getMatchedPathPattern, l as getParams, pn as isOpaqueColor, d as isServer, Se as layout, v as markSelfInducedPop, de as matchesPathname, Ce as material, we as none, un as observeBarHeight, fn as observeViewportScrollHeight, Q as overflowsAxis, De as overlay, F as partTransitionMap, oe as readStepParams, ut as registerTransitionDefinitions, te as releaseScopeHistorySync, M as resolveTransition, sn as scheduleAnimHoldRelease, u as seedInitialHistory, p as seedRouterEntry, le as subscribeStepParamsRestore, z as targetToDecls, j as transitionMap, nt as variantHasAnimation };
@@ -13,4 +13,9 @@ export interface AnimHoldReleaseOptions {
13
13
  extraFrames?: number;
14
14
  scope?: HTMLElement | null;
15
15
  }
16
+ export declare function scheduleAnimHoldReadiness(onReady: () => void, options?: AnimHoldReleaseOptions): () => void;
16
17
  export declare function scheduleAnimHoldRelease(release: () => void, options?: AnimHoldReleaseOptions): () => void;
18
+ export interface AnimHoldCoordinator {
19
+ join(key: string, release: () => void, options?: AnimHoldReleaseOptions): () => void;
20
+ }
21
+ export declare function createAnimHoldCoordinator(): AnimHoldCoordinator;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flemo/core",
3
- "version": "1.16.1",
3
+ "version": "1.17.0",
4
4
  "description": "Framework-agnostic primitives for flemo: history, navigation, transitions, task manager.",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",