@wyxos/vibe 4.5.5 → 4.5.6

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/lib/index.js CHANGED
@@ -59,7 +59,8 @@ var L = {
59
59
  hasError: { type: Boolean },
60
60
  hasNext: { type: Boolean },
61
61
  isLoading: { type: Boolean },
62
- loadMoreLocked: { type: Boolean }
62
+ loadMoreLocked: { type: Boolean },
63
+ showLoadMore: { type: Boolean }
63
64
  },
64
65
  emits: ["loadMore", "retryEnd"],
65
66
  setup(e, { emit: t }) {
@@ -67,7 +68,7 @@ var L = {
67
68
  function i() {
68
69
  n.loadMoreLocked || (n.hasNext ? r("loadMore") : r("retryEnd"));
69
70
  }
70
- return (t, n) => e.hasNext || e.isLoading || e.hasError || e.canRetryEnd ? (b(), s("footer", L, [e.isLoading ? (b(), s("p", R, " Loading more… ")) : e.hasError || e.hasNext ? (b(), s("button", {
71
+ return (t, n) => e.isLoading || e.hasError || e.hasNext && e.showLoadMore || !e.hasNext && e.canRetryEnd ? (b(), s("footer", L, [e.isLoading ? (b(), s("p", R, " Loading more… ")) : e.hasError || e.hasNext && e.showLoadMore ? (b(), s("button", {
71
72
  key: 1,
72
73
  "data-test": "load-more",
73
74
  class: "load-more-button",
@@ -95,6 +96,7 @@ var L = {
95
96
  hasNext: { type: Boolean },
96
97
  isLoading: { type: Boolean },
97
98
  loadMoreLocked: { type: Boolean },
99
+ showLoadMore: { type: Boolean },
98
100
  state: {}
99
101
  },
100
102
  emits: ["loadMore", "retryEnd"],
@@ -110,6 +112,7 @@ var L = {
110
112
  key: 0,
111
113
  actions: e.actions,
112
114
  "can-retry-end": e.canRetryEnd,
115
+ "show-load-more": e.showLoadMore,
113
116
  state: e.state,
114
117
  onAutofillCancel: i,
115
118
  onLoadMore: n[0] ||= (e) => r("loadMore"),
@@ -118,6 +121,7 @@ var L = {
118
121
  }, null, 40, [
119
122
  "actions",
120
123
  "can-retry-end",
124
+ "show-load-more",
121
125
  "state"
122
126
  ])) : (b(), a(H, {
123
127
  key: 1,
@@ -126,6 +130,7 @@ var L = {
126
130
  "has-next": e.hasNext,
127
131
  "is-loading": e.isLoading,
128
132
  "load-more-locked": e.loadMoreLocked,
133
+ "show-load-more": e.showLoadMore,
129
134
  onLoadMore: n[2] ||= (e) => r("loadMore"),
130
135
  onRetryEnd: n[3] ||= (e) => r("retryEnd")
131
136
  }, null, 8, [
@@ -133,7 +138,8 @@ var L = {
133
138
  "has-error",
134
139
  "has-next",
135
140
  "is-loading",
136
- "load-more-locked"
141
+ "load-more-locked",
142
+ "show-load-more"
137
143
  ]));
138
144
  }
139
145
  }), W = ["role"], G = { class: "gallery-status" }, ee = /* @__PURE__ */ d({
@@ -159,6 +165,7 @@ var L = {
159
165
  "has-next": t.state.next !== null,
160
166
  "is-loading": t.state.isLoadingMore,
161
167
  "load-more-locked": t.state.loadMoreLocked,
168
+ "show-load-more": "",
162
169
  state: t.state,
163
170
  onLoadMore: u[0] ||= (e) => i("loadMore"),
164
171
  onRetryEnd: u[1] ||= (e) => i("retryEnd")
@@ -189,11 +196,11 @@ function ne(e) {
189
196
  function re(e) {
190
197
  return Math.max(0, e.containerHeight) + Math.max(0, e.gap);
191
198
  }
192
- function q(e, t) {
199
+ function ie(e, t) {
193
200
  let n = Math.max(0, t.overscan), r = t.scrollTop - n, i = t.scrollTop + Math.max(0, t.viewportHeight) + n;
194
201
  return e.reduce((e, t, n) => (t.y + t.height >= r && t.y <= i && e.push(n), e), []);
195
202
  }
196
- function J(e, t, n) {
203
+ function ae(e, t, n) {
197
204
  if (t <= 0 || e.length === 0) return {
198
205
  columns: 0,
199
206
  height: 0,
@@ -216,10 +223,10 @@ function J(e, t, n) {
216
223
  }
217
224
  //#endregion
218
225
  //#region src/core/scrollbar.ts
219
- function ie(e, t, n) {
226
+ function q(e, t, n) {
220
227
  return Math.min(n, Math.max(t, e));
221
228
  }
222
- function Y({ contentSize: e, minimumThumbSize: t, scrollPosition: n, trackSize: r, viewportSize: i }) {
229
+ function oe({ contentSize: e, minimumThumbSize: t, scrollPosition: n, trackSize: r, viewportSize: i }) {
223
230
  let a = Math.max(0, e), o = Math.max(0, r), s = Math.max(0, i), c = Math.max(0, a - s);
224
231
  if (!(c > 0 && o > 0)) return {
225
232
  maximumScrollPosition: c,
@@ -228,23 +235,23 @@ function Y({ contentSize: e, minimumThumbSize: t, scrollPosition: n, trackSize:
228
235
  thumbSize: o,
229
236
  thumbTravel: 0
230
237
  };
231
- let l = ie(s / a * o, Math.min(Math.max(0, t), o), o), u = Math.max(0, o - l);
238
+ let l = q(s / a * o, Math.min(Math.max(0, t), o), o), u = Math.max(0, o - l);
232
239
  return {
233
240
  maximumScrollPosition: c,
234
241
  scrollable: !0,
235
- thumbOffset: u * (ie(n, 0, c) / c),
242
+ thumbOffset: u * (q(n, 0, c) / c),
236
243
  thumbSize: l,
237
244
  thumbTravel: u
238
245
  };
239
246
  }
240
247
  //#endregion
241
248
  //#region src/components/GalleryScrollbar.vue?vue&type=script&setup=true&lang.ts
242
- var X = ["aria-hidden"], ae = [
249
+ var J = ["aria-hidden"], se = [
243
250
  "aria-controls",
244
251
  "aria-valuemax",
245
252
  "aria-valuenow",
246
253
  "tabindex"
247
- ], oe = 32, se = 40, ce = 120, le = /* @__PURE__ */ d({
254
+ ], ce = 32, Y = 40, le = 120, X = /* @__PURE__ */ d({
248
255
  __name: "GalleryScrollbar",
249
256
  props: {
250
257
  contentSize: {},
@@ -266,16 +273,16 @@ var X = ["aria-hidden"], ae = [
266
273
  function k() {
267
274
  g !== null && clearTimeout(g), g = setTimeout(() => {
268
275
  g = null, o.value || (l.value = !1);
269
- }, ce);
276
+ }, le);
270
277
  }
271
278
  function A() {
272
279
  l.value = !0, k();
273
280
  }
274
281
  function j() {
275
282
  let e = t.scrollElement, r = i.value;
276
- return !e || !r ? n : Y({
283
+ return !e || !r ? n : oe({
277
284
  contentSize: e.scrollHeight,
278
- minimumThumbSize: oe,
285
+ minimumThumbSize: ce,
279
286
  scrollPosition: e.scrollTop,
280
287
  trackSize: r.clientHeight,
281
288
  viewportSize: e.clientHeight
@@ -328,7 +335,7 @@ var X = ["aria-hidden"], ae = [
328
335
  }
329
336
  function z(e) {
330
337
  if (!E.value) return;
331
- let n = t.scrollElement?.clientHeight ?? 0, r = t.scrollElement?.scrollTop ?? 0, i = e.key === "ArrowUp" ? r - se : e.key === "ArrowDown" ? r + se : e.key === "PageUp" ? r - n : e.key === "PageDown" ? r + n : e.key === "Home" ? 0 : e.key === "End" ? a.value.maximumScrollPosition : null;
338
+ let n = t.scrollElement?.clientHeight ?? 0, r = t.scrollElement?.scrollTop ?? 0, i = e.key === "ArrowUp" ? r - Y : e.key === "ArrowDown" ? r + Y : e.key === "PageUp" ? r - n : e.key === "PageDown" ? r + n : e.key === "Home" ? 0 : e.key === "End" ? a.value.maximumScrollPosition : null;
332
339
  i !== null && (e.preventDefault(), A(), P(i));
333
340
  }
334
341
  function B(e) {
@@ -374,7 +381,7 @@ var X = ["aria-hidden"], ae = [
374
381
  onPointerdown: I,
375
382
  onPointermove: L,
376
383
  onPointerup: R
377
- }, null, 44, ae)], 42, X));
384
+ }, null, 44, se)], 42, J));
378
385
  }
379
386
  }), Z = (e) => {
380
387
  for (let t in e) if (t.startsWith("aria-") || t === "role" || t === "title") return !0;
@@ -713,28 +720,28 @@ var ke = /* @__PURE__ */ d({
713
720
  function re() {
714
721
  d !== null && clearTimeout(d), d = setTimeout(ne, Ze);
715
722
  }
716
- function q(e) {
723
+ function ie(e) {
717
724
  if (C.value.length <= 1) return;
718
725
  let t = e.currentTarget?.clientWidth || 1, n = te(e.deltaX, e.deltaMode, t);
719
726
  if (n === 0 || (e.preventDefault(), re(), p) || (f += n, Math.abs(f) < Qe)) return;
720
727
  let r = Math.sign(f);
721
728
  f = 0, p = !0, K(D.value + r);
722
729
  }
723
- function J(e) {
730
+ function ae(e) {
724
731
  let t = e.touches[0];
725
732
  l.layout !== "reel" || !t || (m = t.clientX, g = t.clientY);
726
733
  }
727
- function ie(e) {
734
+ function q(e) {
728
735
  let t = e.changedTouches[0];
729
736
  if (m === null || g === null || !t) return;
730
737
  let n = m - t.clientX, r = g - t.clientY;
731
738
  m = null, g = null, !(Math.abs(n) <= Math.abs(r)) && (Math.abs(n) < Xe || K(D.value + Math.sign(n)));
732
739
  }
733
- let Y = r(() => Oe(F.value)), X = r(() => l.layout === "reel" && l.stationaryReelControls === !0), ae = r(() => Y.value && l.previewState === "ready" && (!X.value || !!(l.active && l.reelControlsTarget))), oe = r(() => `${l.item.postId}:${D.value}:${F.value}`);
734
- function se(e) {
735
- l.layout === "reel" && (e.stopPropagation(), ce());
740
+ let oe = r(() => Oe(F.value)), J = r(() => l.layout === "reel" && l.stationaryReelControls === !0), se = r(() => oe.value && l.previewState === "ready" && (!J.value || !!(l.active && l.reelControlsTarget))), ce = r(() => `${l.item.postId}:${D.value}:${F.value}`);
741
+ function Y(e) {
742
+ l.layout === "reel" && (e.stopPropagation(), le());
736
743
  }
737
- async function ce() {
744
+ async function le() {
738
745
  if (R.value) {
739
746
  if (H.value) {
740
747
  R.value.pause();
@@ -747,12 +754,12 @@ var ke = /* @__PURE__ */ d({
747
754
  }
748
755
  }
749
756
  }
750
- function le(e) {
757
+ function X(e) {
751
758
  return Number.isFinite(e) ? Math.max(0, e) : 0;
752
759
  }
753
760
  function Z(e) {
754
761
  let t = e?.currentTarget ?? R.value;
755
- t && (z.value = le(t.currentTime), B.value = le(t.duration), V.value = t.muted, U.value = t.volume, t.volume > 0 && (W = t.volume));
762
+ t && (z.value = X(t.currentTime), B.value = X(t.duration), V.value = t.muted, U.value = t.volume, t.volume > 0 && (W = t.volume));
756
763
  }
757
764
  function ue(e) {
758
765
  Z(e), x("ready", D.value);
@@ -762,7 +769,7 @@ var ke = /* @__PURE__ */ d({
762
769
  }
763
770
  function fe(e) {
764
771
  let t = R.value;
765
- !t || !Number.isFinite(e) || (t.currentTime = Math.min(le(t.duration), Math.max(0, e)), z.value = t.currentTime);
772
+ !t || !Number.isFinite(e) || (t.currentTime = Math.min(X(t.duration), Math.max(0, e)), z.value = t.currentTime);
766
773
  }
767
774
  function pe(e) {
768
775
  let t = R.value;
@@ -820,9 +827,9 @@ var ke = /* @__PURE__ */ d({
820
827
  c("div", {
821
828
  class: h(["media-card-media", { "media-card-media--carousel": e.layout === "reel" && C.value.length > 1 }]),
822
829
  "data-media-direction": y.value,
823
- onWheel: q,
824
- onTouchstartPassive: J,
825
- onTouchendPassive: ie
830
+ onWheel: ie,
831
+ onTouchstartPassive: ae,
832
+ onTouchendPassive: q
826
833
  }, [
827
834
  u(n, { name: `media-slide-${y.value}` }, {
828
835
  default: k(() => [(b(), s("div", {
@@ -835,7 +842,7 @@ var ke = /* @__PURE__ */ d({
835
842
  class: "media-error",
836
843
  role: "img",
837
844
  "aria-label": `${E(Te)(F.value)} ${E(Ee)(F.value)}`
838
- }, [c("strong", We, T(E(Te)(F.value)), 1), c("span", null, T(E(Ee)(F.value)), 1)], 8, Ue)) : o("", !0), Y.value ? (b(), s("video", {
845
+ }, [c("strong", We, T(E(Te)(F.value)), 1), c("span", null, T(E(Ee)(F.value)), 1)], 8, Ue)) : o("", !0), oe.value ? (b(), s("video", {
839
846
  key: 2,
840
847
  ref_key: "videoElement",
841
848
  ref: R,
@@ -858,7 +865,7 @@ var ke = /* @__PURE__ */ d({
858
865
  onPlaying: i[0] ||= (e) => H.value = !0,
859
866
  onPause: i[1] ||= (e) => H.value = !1,
860
867
  onEnded: de,
861
- onClick: se,
868
+ onClick: Y,
862
869
  onError: i[2] ||= (e) => r.$emit("error", D.value)
863
870
  }, null, 42, Ge)) : (b(), s("img", {
864
871
  key: 3,
@@ -876,16 +883,16 @@ var ke = /* @__PURE__ */ d({
876
883
  _: 1
877
884
  }, 8, ["name"]),
878
885
  (b(), a(t, {
879
- disabled: !X.value || !e.reelControlsTarget,
886
+ disabled: !J.value || !e.reelControlsTarget,
880
887
  to: e.reelControlsTarget ?? "body"
881
888
  }, [u(n, {
882
889
  name: "vibe-reel-media-controls",
883
- css: X.value
890
+ css: J.value
884
891
  }, {
885
- default: k(() => [ae.value ? (b(), a(Le, {
886
- key: oe.value,
892
+ default: k(() => [se.value ? (b(), a(Le, {
893
+ key: ce.value,
887
894
  "current-time": z.value,
888
- "data-control-post-id": X.value ? e.item.postId : void 0,
895
+ "data-control-post-id": J.value ? e.item.postId : void 0,
889
896
  duration: B.value,
890
897
  layout: e.layout,
891
898
  muted: V.value,
@@ -893,7 +900,7 @@ var ke = /* @__PURE__ */ d({
893
900
  volume: U.value,
894
901
  onSeek: fe,
895
902
  onToggleMute: me,
896
- onTogglePlayback: ce,
903
+ onTogglePlayback: le,
897
904
  onVolumeChange: pe
898
905
  }, null, 8, [
899
906
  "current-time",
@@ -991,14 +998,14 @@ var ke = /* @__PURE__ */ d({
991
998
  "retryEnd"
992
999
  ],
993
1000
  setup(t, { expose: n, emit: i }) {
994
- let o = t, l = i, d = w(null), f = `vibe-masonry-${D()}`, p = w(null), m = w(0), g = w(rt), y = w(0), x = w(0), C = w(0), T = null, k = null, A = null, j = r(() => J(o.items, m.value, {
1001
+ let o = t, l = i, d = w(null), f = `vibe-masonry-${D()}`, p = w(null), m = w(0), g = w(rt), y = w(0), x = w(0), C = w(0), T = null, k = null, A = null, j = r(() => ae(o.items, m.value, {
995
1002
  additionalHeight: (o.cardHeader?.height ?? 0) + (o.cardFooter?.height ?? 0),
996
1003
  gap: g.value,
997
1004
  minColumnWidth: nt
998
1005
  })), M = r(() => {
999
1006
  let e = j.value;
1000
1007
  if (o.leavingPostIds.size === 0) return e;
1001
- let t = o.items.filter((e) => !o.leavingPostIds.has(e.postId)), n = J(t, m.value, {
1008
+ let t = o.items.filter((e) => !o.leavingPostIds.has(e.postId)), n = ae(t, m.value, {
1002
1009
  additionalHeight: (o.cardHeader?.height ?? 0) + (o.cardFooter?.height ?? 0),
1003
1010
  gap: g.value,
1004
1011
  minColumnWidth: nt
@@ -1007,20 +1014,20 @@ var ke = /* @__PURE__ */ d({
1007
1014
  ...n,
1008
1015
  items: o.items.map((t, n) => o.leavingPostIds.has(t.postId) ? e.items[n] : r.get(t.postId) ?? e.items[n])
1009
1016
  };
1010
- }), N = r(() => ({ height: `${o.leavingPostIds.size === 0 ? M.value.height : j.value.height}px` })), P = r(() => {
1017
+ }), N = r(() => ({ height: `${o.leavingPostIds.size === 0 ? M.value.height : j.value.height}px` })), P = r(() => !o.infiniteScroll || x.value > 0 && C.value + M.value.height <= x.value + 1), I = r(() => {
1011
1018
  let e = Math.max(at, x.value * ot), t = {
1012
1019
  scrollTop: y.value - C.value,
1013
1020
  viewportHeight: x.value
1014
- }, n = q(M.value.items, {
1021
+ }, n = ie(M.value.items, {
1015
1022
  ...t,
1016
1023
  overscan: e
1017
- }), r = o.leavingPostIds.size === 0 ? [] : q(j.value.items, {
1024
+ }), r = o.leavingPostIds.size === 0 ? [] : ie(j.value.items, {
1018
1025
  ...t,
1019
1026
  overscan: e
1020
- }), i = [...new Set([...n, ...r])].sort((e, t) => e - t), a = q(M.value.items, {
1027
+ }), i = [...new Set([...n, ...r])].sort((e, t) => e - t), a = ie(M.value.items, {
1021
1028
  ...t,
1022
1029
  overscan: 0
1023
- }), s = o.leavingPostIds.size === 0 ? [] : q(j.value.items, {
1030
+ }), s = o.leavingPostIds.size === 0 ? [] : ie(j.value.items, {
1024
1031
  ...t,
1025
1032
  overscan: 0
1026
1033
  }), c = new Set([...a, ...s]);
@@ -1033,7 +1040,7 @@ var ke = /* @__PURE__ */ d({
1033
1040
  }] : [];
1034
1041
  });
1035
1042
  });
1036
- function I(e) {
1043
+ function L(e) {
1037
1044
  let t = M.value.items[e], n = o.items[e]?.postId;
1038
1045
  if (!t) return {};
1039
1046
  let r = n !== void 0 && o.enteringPostIds.has(n), i = n !== void 0 && o.leavingPostIds.has(n), a = r || i ? re({
@@ -1047,42 +1054,42 @@ var ke = /* @__PURE__ */ d({
1047
1054
  transform: `translate3d(${t.x}px, ${t.y + a}px, 0)`
1048
1055
  };
1049
1056
  }
1050
- function L() {
1057
+ function R() {
1051
1058
  let e = d.value;
1052
1059
  if (!e) return;
1053
1060
  y.value = e.scrollTop, x.value = e.clientHeight;
1054
1061
  let t = p.value;
1055
1062
  t && (C.value = t.getBoundingClientRect().top - e.getBoundingClientRect().top + e.scrollTop);
1056
1063
  }
1057
- function R(e) {
1064
+ function z(e) {
1058
1065
  let t = e.ownerDocument.documentElement.clientWidth;
1059
- m.value = e.clientWidth, g.value = Math.min(it, Math.max(rt, t * .0075)), L();
1066
+ m.value = e.clientWidth, g.value = Math.min(it, Math.max(rt, t * .0075)), R();
1060
1067
  }
1061
- function z(e) {
1068
+ function B(e) {
1062
1069
  let t = e.currentTarget;
1063
1070
  t && (y.value = t.scrollTop, !o.loadMoreLocked && o.infiniteScroll && K(t) && l("loadMore"));
1064
1071
  }
1065
- function B() {
1072
+ function V() {
1066
1073
  let e = d.value;
1067
1074
  !o.loadMoreLocked && e && K(e) && l("loadMore");
1068
1075
  }
1069
- function V() {
1076
+ function H() {
1070
1077
  return d.value;
1071
1078
  }
1072
1079
  return O(p, (e) => {
1073
- T?.disconnect(), T = null, A !== null && cancelAnimationFrame(A), e && (R(e), !(typeof ResizeObserver > "u") && (T = new ResizeObserver(([t]) => {
1080
+ T?.disconnect(), T = null, A !== null && cancelAnimationFrame(A), e && (z(e), !(typeof ResizeObserver > "u") && (T = new ResizeObserver(([t]) => {
1074
1081
  let n = t?.contentRect.width ?? e.clientWidth;
1075
1082
  Math.abs(n - m.value) < .5 || (A = requestAnimationFrame(() => {
1076
- A = null, R(e);
1083
+ A = null, z(e);
1077
1084
  }));
1078
1085
  }), T.observe(e)));
1079
1086
  }), O(d, (e) => {
1080
- k?.disconnect(), k = null, e && (L(), !(typeof ResizeObserver > "u") && (k = new ResizeObserver(L), k.observe(e)));
1087
+ k?.disconnect(), k = null, e && (R(), !(typeof ResizeObserver > "u") && (k = new ResizeObserver(R), k.observe(e)));
1081
1088
  }), v(() => {
1082
1089
  T?.disconnect(), k?.disconnect(), A !== null && cancelAnimationFrame(A);
1083
1090
  }), n({
1084
- getScrollElement: V,
1085
- loadIfNearBottom: B
1091
+ getScrollElement: H,
1092
+ loadIfNearBottom: V
1086
1093
  }), (n, r) => (b(), s("div", et, [c("main", {
1087
1094
  id: f,
1088
1095
  ref_key: "galleryElement",
@@ -1091,14 +1098,14 @@ var ke = /* @__PURE__ */ d({
1091
1098
  "data-layout-mode": "masonry",
1092
1099
  "aria-hidden": t.suspended || void 0,
1093
1100
  inert: t.suspended || void 0,
1094
- onScrollPassive: z
1101
+ onScrollPassive: B
1095
1102
  }, [c("section", {
1096
1103
  ref_key: "masonryElement",
1097
1104
  ref: p,
1098
1105
  class: h(["masonry", { "masonry--ready": m.value > 0 }]),
1099
1106
  style: _(N.value),
1100
1107
  "aria-label": "Media gallery"
1101
- }, [(b(!0), s(e, null, S(P.value, ({ fetchPriority: e, item: n, index: r }) => (b(), a($e, {
1108
+ }, [(b(!0), s(e, null, S(I.value, ({ fetchPriority: e, item: n, index: r }) => (b(), a($e, {
1102
1109
  key: n.postId,
1103
1110
  class: "masonry-item",
1104
1111
  entering: t.enteringPostIds.has(n.postId),
@@ -1109,7 +1116,7 @@ var ke = /* @__PURE__ */ d({
1109
1116
  "media-card": t.mediaCard,
1110
1117
  index: r,
1111
1118
  item: n,
1112
- "item-style": I(r),
1119
+ "item-style": L(r),
1113
1120
  interactive: "",
1114
1121
  layout: "masonry",
1115
1122
  "loaded-count": t.items.length,
@@ -1146,6 +1153,7 @@ var ke = /* @__PURE__ */ d({
1146
1153
  "has-next": t.hasNext,
1147
1154
  "is-loading": t.isLoadingMore,
1148
1155
  "load-more-locked": t.loadMoreLocked,
1156
+ "show-load-more": P.value,
1149
1157
  state: t.state,
1150
1158
  onLoadMore: r[0] ||= (e) => l("loadMore"),
1151
1159
  onRetryEnd: r[1] ||= (e) => l("retryEnd")
@@ -1157,8 +1165,9 @@ var ke = /* @__PURE__ */ d({
1157
1165
  "has-next",
1158
1166
  "is-loading",
1159
1167
  "load-more-locked",
1168
+ "show-load-more",
1160
1169
  "state"
1161
- ])], 42, tt), u(le, {
1170
+ ])], 42, tt), u(X, {
1162
1171
  "content-size": M.value.height,
1163
1172
  "controls-id": f,
1164
1173
  "scroll-element": d.value,
@@ -1276,46 +1285,46 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1276
1285
  ].join(":")), G = r(() => {
1277
1286
  let e = R.value, t = !!(e && l.reelAutoAdvance.includePostItems && z.value < M(e).length - 1), n = l.reelAutoAdvance.intervalMs / 1e3;
1278
1287
  return `Auto advance to the next ${t ? "post item" : "post"} in ${n}s`;
1279
- }), ee = r(() => l.reelAutoAdvance.enabled && l.reelForward.status === "idle" && R.value !== void 0 && B.value !== "loading" && !H.value), te = r(() => l.reelForward.status === "loading" ? "Loading the next media…" : l.reelForward.status === "error" ? "Unable to load the next media." : "You reached the end of this feed.");
1280
- function ne(e) {
1288
+ }), ee = r(() => l.reelAutoAdvance.enabled && l.reelForward.status === "idle" && R.value !== void 0 && B.value !== "loading" && !H.value), te = r(() => !l.infiniteScroll || l.items.length <= 1), ne = r(() => l.reelForward.status === "loading" ? "Loading the next media…" : l.reelForward.status === "error" ? "Unable to load the next media." : "You reached the end of this feed.");
1289
+ function re(e) {
1281
1290
  return { gridRow: `${e + 1}` };
1282
1291
  }
1283
- function re(e) {
1292
+ function ie(e) {
1284
1293
  let t = D || e.clientHeight;
1285
1294
  return t <= 0 || l.items.length === 0 ? 0 : Math.min(l.items.length - 1, Math.max(0, Math.round(e.scrollTop / t)));
1286
1295
  }
1287
- function q(e) {
1296
+ function ae(e) {
1288
1297
  let t = e.currentTarget;
1289
1298
  if (!t) return;
1290
1299
  let n = D || t.clientHeight, r = Math.max(0, l.items.length - 1) * n;
1291
- x.value = l.items.length > 0 && t.scrollTop > r + 1, C.value || (g.value = re(t)), !l.loadMoreLocked && l.infiniteScroll && K(t) && u("loadMore");
1300
+ x.value = l.items.length > 0 && t.scrollTop > r + 1, C.value || (g.value = ie(t)), !l.loadMoreLocked && l.infiniteScroll && K(t) && u("loadMore");
1292
1301
  }
1293
- function J() {
1302
+ function q() {
1294
1303
  let e = d.value;
1295
- e && (x.value = !1, X(!0), D = e.clientHeight, e.scrollTop = g.value * D, A !== null && cancelAnimationFrame(A), A = requestAnimationFrame(() => {
1304
+ e && (x.value = !1, se(!0), D = e.clientHeight, e.scrollTop = g.value * D, A !== null && cancelAnimationFrame(A), A = requestAnimationFrame(() => {
1296
1305
  e.scrollTop = g.value * e.clientHeight, D = e.clientHeight, A = null;
1297
- }), ie());
1306
+ }), oe());
1298
1307
  }
1299
- function ie() {
1308
+ function oe() {
1300
1309
  j !== null && clearTimeout(j), j = setTimeout(() => {
1301
1310
  j = null;
1302
1311
  let e = d.value;
1303
- e && (D = e.clientHeight, e.scrollTop = g.value * D), X(!1);
1312
+ e && (D = e.clientHeight, e.scrollTop = g.value * D), se(!1);
1304
1313
  }, 120);
1305
1314
  }
1306
- function Y() {
1307
- X(!0);
1315
+ function J() {
1316
+ se(!0);
1308
1317
  let e = d.value;
1309
- e && (D = e.clientHeight, e.scrollTop = g.value * D), ie();
1318
+ e && (D = e.clientHeight, e.scrollTop = g.value * D), oe();
1310
1319
  }
1311
- function X(e) {
1320
+ function se(e) {
1312
1321
  C.value = e, d.value?.toggleAttribute("data-resizing", e);
1313
1322
  }
1314
- function ae() {
1323
+ function ce() {
1315
1324
  let e = d.value;
1316
1325
  !l.loadMoreLocked && e && K(e) && u("loadMore");
1317
1326
  }
1318
- function oe(e) {
1327
+ function Y(e) {
1319
1328
  let t = R.value;
1320
1329
  if (!t) return !1;
1321
1330
  let n = M(t).length;
@@ -1323,30 +1332,30 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1323
1332
  let r = (z.value + e + n) % n;
1324
1333
  return u("mediaChange", t.postId, r), !0;
1325
1334
  }
1326
- function se(e) {
1335
+ function le(e) {
1327
1336
  let t = g.value + e;
1328
- return !d.value || t < 0 || t >= l.items.length ? !1 : (Z(t), !0);
1337
+ return !d.value || t < 0 || t >= l.items.length ? !1 : (ue(t), !0);
1329
1338
  }
1330
- function ce() {
1339
+ function X() {
1331
1340
  return typeof window.matchMedia == "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
1332
1341
  }
1333
- function le(e) {
1342
+ function Z(e) {
1334
1343
  let t = d.value;
1335
1344
  if (!t) return Promise.resolve();
1336
1345
  let n = e * (D || t.clientHeight);
1337
- return g.value = e, lt(t, n, ce());
1346
+ return g.value = e, lt(t, n, X());
1338
1347
  }
1339
- function Z(e) {
1340
- le(e);
1348
+ function ue(e) {
1349
+ Z(e);
1341
1350
  }
1342
- async function ue(e) {
1351
+ async function de(e) {
1343
1352
  let t = l.items.findIndex((t) => t.postId === e);
1344
- return t < 0 || t === g.value ? !1 : (await le(t), !0);
1353
+ return t < 0 || t === g.value ? !1 : (await Z(t), !0);
1345
1354
  }
1346
- async function de(e) {
1347
- return oe(e) ? (ce() || await new Promise((e) => setTimeout(e, gt)), !0) : !1;
1355
+ async function fe(e) {
1356
+ return Y(e) ? (X() || await new Promise((e) => setTimeout(e, gt)), !0) : !1;
1348
1357
  }
1349
- function fe() {
1358
+ function pe() {
1350
1359
  if (!l.reelAutoAdvance.enabled) return;
1351
1360
  let e = R.value;
1352
1361
  if (!e) return;
@@ -1359,30 +1368,30 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1359
1368
  l.hasNext && !l.loadMoreLocked && u("loadMore");
1360
1369
  return;
1361
1370
  }
1362
- l.reelAutoAdvance.includePostItems && (l.mediaIndices.get(n.postId) ?? 0) !== 0 && u("mediaChange", n.postId, 0), Z(t);
1371
+ l.reelAutoAdvance.includePostItems && (l.mediaIndices.get(n.postId) ?? 0) !== 0 && u("mediaChange", n.postId, 0), ue(t);
1363
1372
  }
1364
- function pe(e, t) {
1365
- !l.reelAutoAdvance.enabled || e !== L.value || t !== z.value || !H.value || fe();
1373
+ function me(e, t) {
1374
+ !l.reelAutoAdvance.enabled || e !== L.value || t !== z.value || !H.value || pe();
1366
1375
  }
1367
1376
  return O(d, (e) => {
1368
- k?.disconnect(), k = null, e && (D = e.clientHeight, !(typeof ResizeObserver > "u") && (k = new ResizeObserver(J), k.observe(e)));
1377
+ k?.disconnect(), k = null, e && (D = e.clientHeight, !(typeof ResizeObserver > "u") && (k = new ResizeObserver(q), k.observe(e)));
1369
1378
  }), O(() => l.items.length, async (e) => {
1370
1379
  let t = l.initialPostId, n = t == null ? -1 : l.items.findIndex(({ postId: e }) => e === t);
1371
- g.value = n >= 0 ? n : Math.min(g.value, Math.max(0, e - 1)), await m(), J();
1380
+ g.value = n >= 0 ? n : Math.min(g.value, Math.max(0, e - 1)), await m(), q();
1372
1381
  }), O(L, (e) => {
1373
1382
  e !== void 0 && u("activeChange", e);
1374
1383
  }, { immediate: !0 }), y(() => {
1375
- window.addEventListener("resize", Y), window.addEventListener("orientationchange", Y), p >= 0 && m(J);
1384
+ window.addEventListener("resize", J), window.addEventListener("orientationchange", J), p >= 0 && m(q);
1376
1385
  }), v(() => {
1377
- window.removeEventListener("resize", Y), window.removeEventListener("orientationchange", Y), k?.disconnect(), A !== null && cancelAnimationFrame(A), j !== null && clearTimeout(j);
1386
+ window.removeEventListener("resize", J), window.removeEventListener("orientationchange", J), k?.disconnect(), A !== null && cancelAnimationFrame(A), j !== null && clearTimeout(j);
1378
1387
  }), n({
1379
1388
  activeIndex: g,
1380
1389
  activePostId: L,
1381
- changeActiveMedia: oe,
1382
- loadIfNearBottom: ae,
1383
- moveActivePost: se,
1384
- transitionActiveMedia: de,
1385
- transitionActivePost: ue
1390
+ changeActiveMedia: Y,
1391
+ loadIfNearBottom: ce,
1392
+ moveActivePost: le,
1393
+ transitionActiveMedia: fe,
1394
+ transitionActivePost: de
1386
1395
  }), (n, r) => (b(), s("main", {
1387
1396
  class: h(["reel-shell", {
1388
1397
  "reel-shell--has-footer": !!t.cardFooter,
@@ -1418,7 +1427,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1418
1427
  class: "gallery-shell reel-feed",
1419
1428
  "data-active-post-id": L.value,
1420
1429
  "data-active-media-index": z.value,
1421
- onScrollPassive: q
1430
+ onScrollPassive: ae
1422
1431
  }, [t.reelForward.status === "idle" ? (b(), s("section", {
1423
1432
  key: 1,
1424
1433
  class: "reel-track",
@@ -1433,7 +1442,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1433
1442
  "fetch-priority": e,
1434
1443
  index: r,
1435
1444
  item: n,
1436
- "item-style": ne(r),
1445
+ "item-style": re(r),
1437
1446
  "media-card": t.mediaCard,
1438
1447
  layout: "reel",
1439
1448
  "loaded-count": t.items.length,
@@ -1444,7 +1453,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1444
1453
  "stationary-reel-controls": "",
1445
1454
  total: t.total,
1446
1455
  onMediaChange: (e) => u("mediaChange", n.postId, e),
1447
- onEnded: (e) => pe(n.postId, e),
1456
+ onEnded: (e) => me(n.postId, e),
1448
1457
  onReady: (e) => u("ready", n.postId, e),
1449
1458
  onError: (e) => u("error", n.postId, e)
1450
1459
  }, null, 8, [
@@ -1470,7 +1479,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1470
1479
  class: "reel-forward-status",
1471
1480
  role: t.reelForward.status === "error" ? "alert" : "status",
1472
1481
  "data-status": t.reelForward.status
1473
- }, [c("p", null, T(te.value), 1), t.reelForward.status === "error" || t.reelForward.status === "end" ? (b(), s("button", {
1482
+ }, [c("p", null, T(ne.value), 1), t.reelForward.status === "error" || t.reelForward.status === "end" ? (b(), s("button", {
1474
1483
  key: 0,
1475
1484
  class: "reel-forward-retry",
1476
1485
  type: "button",
@@ -1484,6 +1493,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1484
1493
  "has-next": t.hasNext,
1485
1494
  "is-loading": t.isLoadingMore,
1486
1495
  "load-more-locked": t.loadMoreLocked,
1496
+ "show-load-more": te.value,
1487
1497
  state: t.state,
1488
1498
  onLoadMore: r[1] ||= (e) => u("loadMore"),
1489
1499
  onRetryEnd: r[2] ||= (e) => u("retryEnd")
@@ -1495,6 +1505,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1495
1505
  "has-next",
1496
1506
  "is-loading",
1497
1507
  "load-more-locked",
1508
+ "show-load-more",
1498
1509
  "state"
1499
1510
  ])) : o("", !0)], 40, pt), c("div", {
1500
1511
  ref_key: "reelControlsElement",
@@ -1528,7 +1539,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1528
1539
  key: W.value,
1529
1540
  "duration-ms": t.reelAutoAdvance.intervalMs,
1530
1541
  label: G.value,
1531
- onComplete: fe
1542
+ onComplete: pe
1532
1543
  }, null, 8, ["duration-ms", "label"])) : o("", !0)
1533
1544
  ], 2));
1534
1545
  }
@@ -1787,55 +1798,55 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1787
1798
  }
1788
1799
  G(e, t);
1789
1800
  }
1790
- function q(e, t) {
1801
+ function ie(e, t) {
1791
1802
  if (l.state.reelMediaSource === "original") {
1792
1803
  ne(e, t);
1793
1804
  return;
1794
1805
  }
1795
1806
  K(e, t);
1796
1807
  }
1797
- function J(e, t) {
1808
+ function ae(e, t) {
1798
1809
  let n = l.state.items.find((t) => t.postId === e);
1799
1810
  if (!n) return;
1800
1811
  let r = N(n, t);
1801
1812
  (l.state.mediaIndices.get(e) ?? 0) !== r && (l.state.mediaIndices = new Map(l.state.mediaIndices).set(e, r));
1802
1813
  }
1803
- async function ie() {
1814
+ async function q() {
1804
1815
  await m(), (l.state.layout === "reel" || l.state.reelOrigin === "masonry" ? p.value : f.value)?.loadIfNearBottom();
1805
1816
  }
1806
- function Y(e) {
1817
+ function oe(e) {
1807
1818
  return l.state.isLoading || l.state.items.length === 0 || l.state.layout !== "reel" && l.state.reelOrigin !== "masonry" ? !1 : p.value?.changeActiveMedia?.(e) ?? !1;
1808
1819
  }
1809
- function X(e) {
1820
+ function J(e) {
1810
1821
  return l.state.isLoading || l.state.items.length === 0 || l.state.layout !== "reel" && l.state.reelOrigin !== "masonry" ? !1 : p.value?.moveActivePost?.(e) ?? !1;
1811
1822
  }
1812
- function ae() {
1823
+ function se() {
1813
1824
  return l.state.layout !== "masonry" || l.state.reelOrigin === "masonry" ? null : f.value?.getScrollElement?.() ?? null;
1814
1825
  }
1815
- function oe(e, t) {
1826
+ function ce(e, t) {
1816
1827
  z = e, B = t === "keyboard", x.value = Z(e), d("openReel", e), m(() => h.value?.focus());
1817
1828
  }
1818
- function se(e) {
1829
+ function Y(e) {
1819
1830
  let t = g.value?.querySelectorAll(".masonry-feed [data-post-id]") ?? [];
1820
1831
  return Array.from(t).find((t) => t.dataset.postId === String(e)) ?? null;
1821
1832
  }
1822
- function ce(e) {
1833
+ function le(e) {
1823
1834
  if (l.state.layout !== "masonry" || l.state.reelOrigin !== null || V()) return 0;
1824
- let t = [...new Set(e)], n = t.filter(se);
1835
+ let t = [...new Set(e)], n = t.filter(Y);
1825
1836
  if (n.length === 0) return 0;
1826
1837
  let r = new Map(D.value);
1827
1838
  return n.forEach((e, t) => {
1828
1839
  r.set(e, t * Ct);
1829
1840
  }), C.value = new Set([...C.value].filter((e) => !n.includes(e))), E.value = new Set([...E.value, ...t]), D.value = r, wt + (n.length - 1) * Ct;
1830
1841
  }
1831
- function le(e, t) {
1832
- let n = se(e), r = n?.querySelector(".media-card-activator") ?? n;
1842
+ function X(e, t) {
1843
+ let n = Y(e), r = n?.querySelector(".media-card-activator") ?? n;
1833
1844
  r && (r.classList.toggle("media-card-focus-silent", !t), t || r.addEventListener("blur", () => {
1834
1845
  r.classList.remove("media-card-focus-silent");
1835
1846
  }, { once: !0 }), r?.focus({ preventScroll: !0 }));
1836
1847
  }
1837
1848
  function Z(e) {
1838
- let t = g.value, n = se(e);
1849
+ let t = g.value, n = Y(e);
1839
1850
  if (t === null || n === null) return {};
1840
1851
  let r = t.getBoundingClientRect(), i = n.getBoundingClientRect();
1841
1852
  return {
@@ -1851,7 +1862,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1851
1862
  function de() {
1852
1863
  let e = z, t = B;
1853
1864
  S.value = !1, z = null, B = !1, x.value = {}, m(() => {
1854
- e !== null && le(e, t);
1865
+ e !== null && X(e, t);
1855
1866
  });
1856
1867
  }
1857
1868
  function fe(e) {
@@ -1887,11 +1898,11 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1887
1898
  }, { flush: "sync" }), y(() => window.addEventListener("keydown", fe)), v(() => {
1888
1899
  window.removeEventListener("keydown", fe), R !== null && cancelAnimationFrame(R);
1889
1900
  }), i({
1890
- changeActiveReelMedia: Y,
1891
- getAutoScrollElement: ae,
1892
- loadIfNearBottom: ie,
1893
- moveActiveReelPost: X,
1894
- startItemRemoval: ce,
1901
+ changeActiveReelMedia: oe,
1902
+ getAutoScrollElement: se,
1903
+ loadIfNearBottom: q,
1904
+ moveActiveReelPost: J,
1905
+ startItemRemoval: le,
1895
1906
  transitionActiveReelMedia: (e) => p.value?.transitionActiveMedia?.(e) ?? Promise.resolve(!1),
1896
1907
  transitionActiveReelPost: (e) => p.value?.transitionActivePost?.(e) ?? Promise.resolve(!1)
1897
1908
  }), (r, i) => (b(), s("div", {
@@ -1932,8 +1943,8 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1932
1943
  onCloseInfoSheet: i[1] ||= (e) => d("reelInfoSheetChange", !1),
1933
1944
  onError: re,
1934
1945
  onLoadMore: i[2] ||= (e) => d("loadMore"),
1935
- onMediaChange: J,
1936
- onReady: q,
1946
+ onMediaChange: ae,
1947
+ onReady: ie,
1937
1948
  onRetryEnd: i[3] ||= (e) => d("retryEnd"),
1938
1949
  onRetryForward: i[4] ||= (e) => d("retryForward")
1939
1950
  }, null, 8, [
@@ -1999,10 +2010,10 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
1999
2010
  suspended: t.state.reelOrigin === "masonry" || S.value,
2000
2011
  state: M.value,
2001
2012
  total: t.state.total,
2002
- onActivate: oe,
2013
+ onActivate: ce,
2003
2014
  onError: G,
2004
2015
  onLoadMore: i[7] ||= (e) => d("loadMore"),
2005
- onMediaChange: J,
2016
+ onMediaChange: ae,
2006
2017
  onReady: K,
2007
2018
  onRetryEnd: i[8] ||= (e) => d("retryEnd")
2008
2019
  }, null, 8, [
@@ -2074,7 +2085,7 @@ var ut = ["aria-label"], dt = /* @__PURE__ */ d({
2074
2085
  onCloseInfoSheet: i[10] ||= (e) => d("reelInfoSheetChange", !1),
2075
2086
  onError: te,
2076
2087
  onLoadMore: i[11] ||= (e) => d("loadMore"),
2077
- onMediaChange: J,
2088
+ onMediaChange: ae,
2078
2089
  onReady: ne,
2079
2090
  onRetryEnd: i[12] ||= (e) => d("retryEnd"),
2080
2091
  onRetryForward: i[13] ||= (e) => d("retryForward")