@openrails/contentkit-ui 0.103.1 → 0.104.0-rc.1

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 (145) hide show
  1. package/README.md +105 -43
  2. package/dist/client/beacons.d.ts +3 -13
  3. package/dist/client/beacons.js +4 -45
  4. package/dist/client/beacons.js.map +1 -1
  5. package/dist/client/client.d.ts +3 -0
  6. package/dist/client/client.js +45 -43
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/client/content/favorites.d.ts +2 -0
  9. package/dist/client/content/favorites.js.map +1 -1
  10. package/dist/client/content/types.d.ts +3 -0
  11. package/dist/client/content/types.js.map +1 -1
  12. package/dist/client/discovery.d.ts +28 -3
  13. package/dist/client/discovery.js +22 -1
  14. package/dist/client/discovery.js.map +1 -1
  15. package/dist/client/engagement.d.ts +70 -0
  16. package/dist/client/engagement.js +191 -0
  17. package/dist/client/engagement.js.map +1 -0
  18. package/dist/client/generated/routes.d.ts +35 -9
  19. package/dist/client/generated/routes.js +59 -2
  20. package/dist/client/generated/routes.js.map +1 -1
  21. package/dist/client/generated/wire.d.ts +53 -12
  22. package/dist/client/generated/wire.js.map +1 -1
  23. package/dist/client/guest-reading-history.d.ts +40 -0
  24. package/dist/client/guest-reading-history.js +144 -0
  25. package/dist/client/guest-reading-history.js.map +1 -0
  26. package/dist/client/index.d.ts +4 -2
  27. package/dist/client/stats.d.ts +5 -5
  28. package/dist/client/stats.js.map +1 -1
  29. package/dist/client.js +24 -22
  30. package/dist/components/admin/content-manager.d.ts +1 -1
  31. package/dist/components/admin/content-manager.js +342 -302
  32. package/dist/components/admin/content-manager.js.map +1 -1
  33. package/dist/components/admin/page-review.js +106 -97
  34. package/dist/components/admin/page-review.js.map +1 -1
  35. package/dist/components/admin/quick-search.d.ts +14 -0
  36. package/dist/components/admin/quick-search.js +60 -0
  37. package/dist/components/admin/quick-search.js.map +1 -0
  38. package/dist/components/admin/reader-content-editor.d.ts +6 -0
  39. package/dist/components/admin/reader-content-editor.js +733 -0
  40. package/dist/components/admin/reader-content-editor.js.map +1 -0
  41. package/dist/components/admin/reader-manifest.js +120 -105
  42. package/dist/components/admin/reader-manifest.js.map +1 -1
  43. package/dist/components/admin/stats-dashboard.d.ts +4 -4
  44. package/dist/components/admin/stats-dashboard.js +132 -134
  45. package/dist/components/admin/stats-dashboard.js.map +1 -1
  46. package/dist/components/content/daily-releases.js +143 -191
  47. package/dist/components/content/daily-releases.js.map +1 -1
  48. package/dist/components/content/editor-save.d.ts +32 -0
  49. package/dist/components/content/editor-save.js +51 -0
  50. package/dist/components/content/editor-save.js.map +1 -0
  51. package/dist/components/content/editors.d.ts +17 -2
  52. package/dist/components/content/editors.js +359 -328
  53. package/dist/components/content/editors.js.map +1 -1
  54. package/dist/components/content/favorites.d.ts +6 -0
  55. package/dist/components/content/favorites.js +33 -0
  56. package/dist/components/content/favorites.js.map +1 -0
  57. package/dist/components/content/filter-dialog.js +19 -15
  58. package/dist/components/content/filter-dialog.js.map +1 -1
  59. package/dist/components/content/filters.d.ts +2 -0
  60. package/dist/components/content/filters.js +5 -1
  61. package/dist/components/content/filters.js.map +1 -1
  62. package/dist/components/content/grid.d.ts +34 -13
  63. package/dist/components/content/grid.js +300 -271
  64. package/dist/components/content/grid.js.map +1 -1
  65. package/dist/components/content/history.d.ts +6 -0
  66. package/dist/components/content/history.js +91 -0
  67. package/dist/components/content/history.js.map +1 -0
  68. package/dist/components/content/index.d.ts +1 -0
  69. package/dist/components/content/offer-fields.d.ts +1 -1
  70. package/dist/components/content/offer-fields.js +86 -64
  71. package/dist/components/content/offer-fields.js.map +1 -1
  72. package/dist/components/content/search.d.ts +11 -4
  73. package/dist/components/content/search.js +22 -11
  74. package/dist/components/content/search.js.map +1 -1
  75. package/dist/components/content/summary-tile.d.ts +14 -0
  76. package/dist/components/content/summary-tile.js +63 -0
  77. package/dist/components/content/summary-tile.js.map +1 -0
  78. package/dist/components/groups/memberships.d.ts +11 -1
  79. package/dist/components/groups/memberships.js +1 -1
  80. package/dist/components/groups/memberships.js.map +1 -1
  81. package/dist/components/media-folder-editor.d.ts +4 -0
  82. package/dist/components/media-folder-editor.js +178 -168
  83. package/dist/components/media-folder-editor.js.map +1 -1
  84. package/dist/components/video-mini-player.d.ts +4 -1
  85. package/dist/components/video-mini-player.js +77 -71
  86. package/dist/components/video-mini-player.js.map +1 -1
  87. package/dist/components/video-player.d.ts +4 -1
  88. package/dist/components/video-player.js +280 -276
  89. package/dist/components/video-player.js.map +1 -1
  90. package/dist/index.d.ts +1 -0
  91. package/dist/index.js +17 -14
  92. package/dist/locales/admin/de.js +33 -8
  93. package/dist/locales/admin/de.js.map +1 -1
  94. package/dist/locales/admin/en.d.ts +29 -4
  95. package/dist/locales/admin/en.js +33 -8
  96. package/dist/locales/admin/en.js.map +1 -1
  97. package/dist/locales/admin/es.js +33 -8
  98. package/dist/locales/admin/es.js.map +1 -1
  99. package/dist/locales/admin/ja.js +33 -8
  100. package/dist/locales/admin/ja.js.map +1 -1
  101. package/dist/locales/admin/ko.js +33 -8
  102. package/dist/locales/admin/ko.js.map +1 -1
  103. package/dist/locales/admin/zh.js +33 -8
  104. package/dist/locales/admin/zh.js.map +1 -1
  105. package/dist/locales/discovery/de.js +0 -1
  106. package/dist/locales/discovery/de.js.map +1 -1
  107. package/dist/locales/discovery/en.d.ts +0 -1
  108. package/dist/locales/discovery/en.js +0 -1
  109. package/dist/locales/discovery/en.js.map +1 -1
  110. package/dist/locales/discovery/es.js +0 -1
  111. package/dist/locales/discovery/es.js.map +1 -1
  112. package/dist/locales/discovery/ja.js +0 -1
  113. package/dist/locales/discovery/ja.js.map +1 -1
  114. package/dist/locales/discovery/ko.js +0 -1
  115. package/dist/locales/discovery/ko.js.map +1 -1
  116. package/dist/locales/discovery/zh.js +0 -1
  117. package/dist/locales/discovery/zh.js.map +1 -1
  118. package/dist/locales/en.d.ts +29 -5
  119. package/dist/react/discovery.d.ts +20 -17
  120. package/dist/react/discovery.js +273 -221
  121. package/dist/react/discovery.js.map +1 -1
  122. package/dist/react/index.d.ts +2 -1
  123. package/dist/react/page-review.d.ts +1 -1
  124. package/dist/react/page-review.js +6 -5
  125. package/dist/react/page-review.js.map +1 -1
  126. package/dist/react/resources.d.ts +3 -1
  127. package/dist/react/resources.js +4 -0
  128. package/dist/react/resources.js.map +1 -1
  129. package/dist/react/stats.d.ts +2 -2
  130. package/dist/react/stats.js.map +1 -1
  131. package/dist/react/use-draft.d.ts +8 -0
  132. package/dist/react/use-draft.js +35 -0
  133. package/dist/react/use-draft.js.map +1 -0
  134. package/dist/react/use-engagement.d.ts +26 -0
  135. package/dist/react/use-engagement.js +221 -0
  136. package/dist/react/use-engagement.js.map +1 -0
  137. package/dist/react/use-resource.d.ts +4 -3
  138. package/dist/react/use-resource.js +2 -1
  139. package/dist/react/use-resource.js.map +1 -1
  140. package/dist/react.js +12 -11
  141. package/dist/styles.css +1 -1
  142. package/dist/ui/dialog.d.ts +2 -1
  143. package/dist/ui/dialog.js +23 -20
  144. package/dist/ui/dialog.js.map +1 -1
  145. package/package.json +1 -1
@@ -1,86 +1,94 @@
1
1
  import { ContentKitError as e, toContentKitError as t } from "../client/errors.js";
2
2
  import { ContentKitContext as n, useGuarded as r } from "./context.js";
3
3
  import { keyOf as i, useContentScope as a, useList as o, useResource as s } from "./use-resource.js";
4
- import { recentSearchLimit as c } from "../client/browser-search-history.js";
5
- import { Beacons as l, eventId as u } from "../client/beacons.js";
6
- import { useCallback as d, useContext as f, useEffect as p, useLayoutEffect as m, useMemo as h, useRef as g, useState as _, useSyncExternalStore as v } from "react";
4
+ import { guestStanding as c } from "../client/guest-reading-history.js";
5
+ import { recentSearchLimit as l } from "../client/browser-search-history.js";
6
+ import { Beacons as u, eventId as d } from "../client/beacons.js";
7
+ import { useCallback as f, useContext as p, useEffect as m, useLayoutEffect as h, useMemo as g, useRef as _, useState as v, useSyncExternalStore as y } from "react";
7
8
  //#region src/react/discovery.ts
8
- var y = (e) => ({
9
+ var b = (e) => ({
9
10
  items: e.contents,
10
- next: e.next_cursor ?? null
11
- }), b = [];
12
- function x(e, t) {
13
- let n = h(() => ({
11
+ next: e.next_cursor ?? null,
12
+ metadata: e.summary
13
+ }), x = [], S = Object.freeze([]);
14
+ function C(e, t) {
15
+ let n = g(() => ({
14
16
  client: e,
15
17
  scope: t
16
- }), [e, t]), r = g(n);
17
- return m(() => (r.current = n, () => {
18
+ }), [e, t]), r = _(n);
19
+ return h(() => (r.current = n, () => {
18
20
  r.current = null;
19
- }), [n]), d(() => r.current === n, [n]);
21
+ }), [n]), f(() => r.current === n, [n]);
20
22
  }
21
- function S(e) {
22
- let t = f(n)?.language;
23
- return h(() => e && !e.display_language && t ? {
23
+ function w(e) {
24
+ let t = p(n)?.language;
25
+ return g(() => e && !e.display_language && t ? {
24
26
  ...e,
25
27
  display_language: t
26
28
  } : e, [e, t]);
27
29
  }
28
- function C(e, t = {}) {
29
- let { client: n, store: r, scope: s } = a(t.client), c = S(e);
30
- return o(r, c ? i("cards", s, "list", c) : null, { type: "cards" }, async (e, t) => y(await n.discovery.list({
30
+ function T(e, t = {}) {
31
+ let { client: n, store: r, scope: s } = a(t.client), c = w(e), l = o(r, c ? i("cards", s, "list", c) : null, { type: "cards" }, async (e, t) => b(await n.discovery.list({
31
32
  ...c,
32
- cursor: e
33
+ cursor: e,
34
+ summary: e ? void 0 : c?.summary
33
35
  }, t)));
36
+ return {
37
+ ...l,
38
+ summary: l.metadata
39
+ };
34
40
  }
35
- function w(e, t = {}) {
36
- let { client: n, store: r, scope: o } = a(t.client), c = S(h(() => {
41
+ function E(e, t = {}) {
42
+ let { client: n, store: r, scope: o } = a(t.client), c = w(g(() => {
37
43
  if (!e) return null;
38
- let { sort: t, cursor: n, limit: r, card_entities: i, mode: a, ...o } = e;
39
- return o;
40
- }, [e])), l = s(r, c ? i("release-dates", o, "locked", c) : null, { type: "release-dates" }, async (e) => {
41
- let t = async (t) => (await n.discovery.releaseDates({
42
- ...c,
43
- mode: t,
44
- by: "month",
45
- limit: 1e3
46
- }, e)).dates.reduce((e, t) => e + t.count, 0), [r, i] = await Promise.all([t("lock"), t("hide")]);
47
- return Math.max(0, r - i);
48
- });
44
+ let { cursor: t, ...n } = e;
45
+ return {
46
+ ...n,
47
+ mode: "lock",
48
+ limit: 1,
49
+ summary: !0
50
+ };
51
+ }, [e])), l = s(r, c ? i("cards", o, "locked-summary", c) : null, { type: "cards" }, async (e) => (await n.discovery.list(c, e)).summary?.locked_count ?? 0);
49
52
  return {
50
53
  count: l.data,
51
54
  loading: l.loading
52
55
  };
53
56
  }
54
- function T(e, t = {}) {
55
- let { client: n, store: r, scope: s, viewer: c } = a(t.client), l = S(e?.q.trim() ? e : null), u = x(n, s);
56
- return o(r, l ? i("cards", s, "search", l) : null, { type: "cards" }, async (e, t) => {
57
+ function D(e, t = {}) {
58
+ let { client: n, store: r, scope: s, viewer: c } = a(t.client), l = w(e?.q.trim() ? e : null), u = C(n, s), d = o(r, l ? i("cards", s, "search", l) : null, { type: "cards" }, async (e, t) => {
57
59
  let r = await n.discovery.search({
58
60
  ...l,
59
- cursor: e
61
+ cursor: e,
62
+ summary: e ? void 0 : l?.summary
60
63
  }, t);
61
- return !e && c === null && !t.aborted && u() && n.discovery.browserSearches.record(l.q, r.contents.length), y(r);
64
+ return !e && c === null && !t.aborted && u() && n.discovery.browserSearches.record(l.q, r.contents.length), b(r);
62
65
  });
66
+ return {
67
+ ...d,
68
+ summary: d.metadata
69
+ };
63
70
  }
64
- function E(e, t, n) {
65
- let { store: r } = a(n.client), i = s(r, e, { type: "cards" }, async (e) => (await t(e)).contents), o = i.error?.code === "not_configured";
71
+ function O(e, t, n) {
72
+ let { store: r } = a(n.client), i = s(r, e, { type: "cards" }, t), o = i.error?.code === "not_configured";
66
73
  return {
67
- items: i.data ?? [],
74
+ items: i.data?.contents ?? [],
75
+ summary: i.data?.summary,
68
76
  loading: !!e && (i.loading || !i.loaded),
69
77
  error: o ? void 0 : i.error,
70
78
  unavailable: o,
71
79
  reload: i.reload
72
80
  };
73
81
  }
74
- function D(e, t = {}, n = {}) {
75
- let { client: r, scope: o } = a(n.client), s = S(t);
76
- return E(e ? i("cards", o, "similar", e, s) : null, (t) => r.discovery.similar(e, s, t), n);
82
+ function k(e, t = {}, n = {}) {
83
+ let { client: r, scope: o } = a(n.client), s = w(t);
84
+ return O(e ? i("cards", o, "similar", e, s) : null, (t) => r.discovery.similar(e, s, t), n);
77
85
  }
78
- function O(e = {}, t = {}) {
79
- let { client: n, scope: r, viewer: o } = a(t.client), s = S(e);
80
- return E(o === null || !s ? null : i("cards", r, "recommended", s), (e) => n.discovery.recommendations(s, e), t);
86
+ function A(e = {}, t = {}) {
87
+ let { client: n, scope: r, viewer: o } = a(t.client), s = w(e);
88
+ return O(o === null || !s ? null : i("cards", r, "recommended", s), (e) => n.discovery.recommendations(s, e), t);
81
89
  }
82
- function k(e = {}, t = {}) {
83
- let { client: n, store: r, scope: s } = a(t.client), c = S(e);
90
+ function j(e = {}, t = {}) {
91
+ let { client: n, store: r, scope: s } = a(t.client), c = w(e);
84
92
  return o(r, i("release-dates", s, c), { type: "release-dates" }, async (e, t) => {
85
93
  let r = await n.discovery.releaseDates({
86
94
  ...c,
@@ -95,8 +103,8 @@ function k(e = {}, t = {}) {
95
103
  };
96
104
  });
97
105
  }
98
- function A(e = {}, t = {}) {
99
- let { client: n, store: r, scope: o } = a(t.client), c = S(e), l = s(r, c ? i("daily-releases", o, c) : null, { type: "daily-releases" }, (e) => n.discovery.releases(c, e));
106
+ function M(e = {}, t = {}) {
107
+ let { client: n, store: r, scope: o } = a(t.client), c = w(e), l = s(r, c ? i("daily-releases", o, c) : null, { type: "daily-releases" }, (e) => n.discovery.releases(c, e));
100
108
  return {
101
109
  data: l.data,
102
110
  loading: !!c && (l.loading || !l.loaded),
@@ -104,27 +112,82 @@ function A(e = {}, t = {}) {
104
112
  reload: l.reload
105
113
  };
106
114
  }
107
- function j(e = {}, t = {}) {
108
- let { client: n, store: s, scope: c, viewer: l } = a(t.client), u = S(e), f = r(), p = o(s, l === null || !u ? null : i("history", c, u), { type: "history" }, async (e, t) => y(await n.discovery.history({
109
- ...u,
110
- cursor: e
111
- }, t))), m = d((e = {}) => f(() => n.discovery.forgetHistory(e)), [n, f]);
115
+ function N(e = {}, t = {}) {
116
+ let { client: n, store: s, scope: l, viewer: u } = a(t.client), d = w(e), p = r(), m = u === null, h = C(n, l), _ = n.guestHistory, v = d !== null, x = f((e) => m && v ? _.subscribe(e) : () => {}, [
117
+ _,
118
+ m,
119
+ v
120
+ ]), T = f(() => m && v ? _.snapshot() : S, [
121
+ _,
122
+ m,
123
+ v
124
+ ]), E = y(x, T, () => S), D = g(() => E.filter((e) => !d?.kind || e.kind === d.kind).slice(0, 100), [E, d?.kind]), O = m ? D.map((e) => [
125
+ e.id,
126
+ e.at,
127
+ e.checkpoints.map((e) => [
128
+ e.visit_id,
129
+ e.segment_id,
130
+ e.revision
131
+ ])
132
+ ]) : void 0, k = o(s, !d || u === void 0 ? null : i("history", l, d, O), { type: "history" }, async (e, t) => {
133
+ if (!m) return b(await n.discovery.history({
134
+ ...d,
135
+ cursor: e,
136
+ summary: e ? void 0 : d?.summary
137
+ }, t));
138
+ let r = typeof e == "number" ? e : 0, i = Math.max(1, Math.min(100, d?.limit ?? 50)), a = D.slice(r, r + i);
139
+ if (!a.length) return {
140
+ items: [],
141
+ next: null
142
+ };
143
+ let o = await n.discovery.list({
144
+ ids: (d?.summary && !e ? D : a).map((e) => e.id),
145
+ summary: e ? void 0 : d?.summary,
146
+ kind: d?.kind,
147
+ language: d?.language,
148
+ display_language: d?.display_language,
149
+ mode: d?.mode,
150
+ card_entities: d?.card_entities,
151
+ limit: 100
152
+ }, t), s = new Map(o.contents.map((e) => [e.id, e]));
153
+ return {
154
+ items: a.flatMap((e) => {
155
+ let t = s.get(e.id);
156
+ if (!t) return [];
157
+ let n = c(t, e);
158
+ return d?.status === "seen" && !n.seen || d?.status === "in_progress" && (!n.seen || n.completed) || d?.status === "completed" && !n.completed ? [] : [{
159
+ ...t,
160
+ viewer: n
161
+ }];
162
+ }),
163
+ next: r + a.length < D.length ? r + a.length : null,
164
+ metadata: o.summary
165
+ };
166
+ }), A = f((e = {}) => h() ? m ? (_.clear(e), Promise.resolve()) : p(() => n.discovery.forgetHistory(e)) : Promise.resolve(), [
167
+ _,
168
+ n,
169
+ m,
170
+ p,
171
+ h
172
+ ]), j = m && !!d?.status;
112
173
  return {
113
- ...p,
114
- forget: m
174
+ ...k,
175
+ summary: j ? void 0 : k.metadata,
176
+ filterSummaryUnknown: j && (k.metadata?.filtered_count ?? 0) > 0,
177
+ forget: A
115
178
  };
116
179
  }
117
- function M(e = {}) {
118
- let { client: t, store: n, scope: o, viewer: l } = a(e.client), u = r(), f = x(t, o), m = l === null, g = e.enabled !== !1, _ = t.discovery.browserSearches, y = d((e) => m && g ? _.subscribe(e) : () => {}, [
180
+ function P(e = {}) {
181
+ let { client: t, store: n, scope: o, viewer: c } = a(e.client), u = r(), d = C(t, o), p = c === null, h = e.enabled !== !1, _ = t.discovery.browserSearches, v = f((e) => p && h ? _.subscribe(e) : () => {}, [
119
182
  _,
120
- m,
121
- g
122
- ]), S = d(() => m && g ? _.snapshot() : b, [
183
+ p,
184
+ h
185
+ ]), b = f(() => p && h ? _.snapshot() : x, [
123
186
  _,
124
- m,
125
- g
126
- ]), C = v(y, S, () => b), w = h(() => C.slice(0, c(e.limit)), [C, e.limit]), T = !g || m ? null : i("searches", o, e.limit ?? 10), E = s(n, T, { type: "searches" }, async (n) => (await t.discovery.recentSearches({ limit: e.limit }, n)).searches);
127
- p(() => {
187
+ p,
188
+ h
189
+ ]), S = y(v, b, () => x), w = g(() => S.slice(0, l(e.limit)), [S, e.limit]), T = !h || p ? null : i("searches", o, e.limit ?? 10), E = s(n, T, { type: "searches" }, async (n) => (await t.discovery.recentSearches({ limit: e.limit }, n)).searches);
190
+ m(() => {
128
191
  if (!T) return;
129
192
  let e = () => {
130
193
  n.snapshot(T).loading || n.load(T, !0);
@@ -137,62 +200,71 @@ function M(e = {}) {
137
200
  typeof window < "u" && window.removeEventListener("focus", e), typeof document < "u" && document.removeEventListener("visibilitychange", t);
138
201
  };
139
202
  }, [T, n]);
140
- let D = d(async (e) => {
141
- if (f()) {
142
- if (m) {
203
+ let D = f(async (e) => {
204
+ if (d()) {
205
+ if (p) {
143
206
  _.clear(e);
144
207
  return;
145
208
  }
146
- await u(() => f() ? t.discovery.clearSearches(e ? { query: e } : {}) : Promise.resolve());
209
+ await u(() => d() ? t.discovery.clearSearches(e ? { query: e } : {}) : Promise.resolve());
147
210
  }
148
211
  }, [
149
212
  _,
150
213
  t,
151
- m,
214
+ p,
152
215
  u,
153
- f
216
+ d
154
217
  ]);
155
- return m ? {
156
- searches: g ? w : b,
218
+ return p ? {
219
+ searches: h ? w : x,
157
220
  loading: !1,
158
221
  clear: D
159
222
  } : {
160
- searches: E.data ?? b,
223
+ searches: E.data ?? x,
161
224
  loading: !!T && (E.loading || !E.loaded),
162
225
  error: E.error,
163
226
  clear: D
164
227
  };
165
228
  }
166
- var N = (e) => ({
229
+ var F = (e) => ({
167
230
  items: e.items.map((e) => ({
168
231
  ...e,
169
232
  id: e.content?.id ?? e.entity?.id ?? ""
170
233
  })),
171
- next: e.next_cursor ?? null
234
+ next: e.next_cursor ?? null,
235
+ metadata: e.summary
172
236
  });
173
- function P(e = {}, t = {}) {
174
- let { client: n, store: r, scope: s, viewer: c } = a(t.client), l = S(e);
175
- return o(r, c === null ? null : i("favorites", s, l), { type: "favorites" }, async (e, t) => N(await n.favorites.mine({
237
+ function I(e = {}, t = {}) {
238
+ let { client: n, store: r, scope: s, viewer: c } = a(t.client), l = w(e), u = o(r, c === null ? null : i("favorites", s, l), { type: "favorites" }, async (e, t) => F(await n.favorites.mine({
176
239
  ...l,
177
- cursor: e
240
+ cursor: e,
241
+ summary: e ? void 0 : l.summary
178
242
  }, t)));
243
+ return {
244
+ ...u,
245
+ summary: u.metadata
246
+ };
179
247
  }
180
- function F(e = {}, t = {}) {
181
- let { client: n, store: r, scope: s, viewer: c } = a(t.client), l = S(e);
182
- return o(r, c === null ? null : i("reactions", s, l), { type: "reactions" }, async (e, t) => N(await n.reactions.mine({
248
+ function L(e = {}, t = {}) {
249
+ let { client: n, store: r, scope: s, viewer: c } = a(t.client), l = w(e), u = o(r, c === null ? null : i("reactions", s, l), { type: "reactions" }, async (e, t) => F(await n.reactions.mine({
183
250
  ...l,
184
- cursor: e
251
+ cursor: e,
252
+ summary: e ? void 0 : l.summary
185
253
  }, t)));
254
+ return {
255
+ ...u,
256
+ summary: u.metadata
257
+ };
186
258
  }
187
- function I(t = {}) {
188
- let { client: n, store: o, scope: c, viewer: l, language: u } = a(t.client), f = t.language ?? u, m = l === null, y = n.preferences.browser, b = v(y.subscribe, y.snapshot, y.snapshot), S = i("content-filters", c, f), C = g(null), w = m && C.current?.guest && C.current.client === n && C.current.language === f ? C.current.data : void 0, T = s(o, S, { type: "content-filters" }, (e) => n.discovery.contentFilters(f, e), { initial: w });
189
- C.current = {
259
+ function R(t = {}) {
260
+ let { client: n, store: o, scope: c, viewer: l, language: u } = a(t.client), d = t.language ?? u, p = l === null, h = n.preferences.browser, b = y(h.subscribe, h.snapshot, h.snapshot), x = i("content-filters", c, d), S = _(null), w = p && S.current?.guest && S.current.client === n && S.current.language === d ? S.current.data : void 0, T = s(o, x, { type: "content-filters" }, (e) => n.discovery.contentFilters(d, e), { initial: w });
261
+ S.current = {
190
262
  client: n,
191
- language: f,
192
- guest: m,
263
+ language: d,
264
+ guest: p,
193
265
  data: T.data
194
266
  };
195
- let E = d((e, t = b) => {
267
+ let E = f((e, t = b) => {
196
268
  let n = new Map(t.filters.map((e) => [e.entity_id, e]));
197
269
  return {
198
270
  ...e,
@@ -206,17 +278,17 @@ function I(t = {}) {
206
278
  };
207
279
  })
208
280
  };
209
- }, [b]), D = h(() => T.data && m ? E(T.data) : T.data, [
281
+ }, [b]), D = g(() => T.data && p ? E(T.data) : T.data, [
210
282
  T.data,
211
- m,
283
+ p,
212
284
  E
213
- ]), O = r(), k = x(n, c), [A, j] = _(0), M = g(D);
214
- M.current = D, p(() => {
285
+ ]), O = r(), k = C(n, c), [A, j] = v(0), M = _(D);
286
+ M.current = D, m(() => {
215
287
  j(0);
216
288
  }, [n, c]);
217
- let N = d(async (t) => {
289
+ let N = f(async (t) => {
218
290
  if (!k()) throw new e("aborted", "The account changed.");
219
- if (m) {
291
+ if (p) {
220
292
  let r = M.current;
221
293
  if (!r) throw new e("invalid_request", "Content filters have not loaded.");
222
294
  let i = new Set(r.filters.map((e) => e.entity.id)), a = [], o = /* @__PURE__ */ new Set();
@@ -232,18 +304,18 @@ function I(t = {}) {
232
304
  });
233
305
  else throw new e("invalid_request", "A content filter needs visible or default:true.");
234
306
  }
235
- return n.preferences.setGuestFilters(a), E(r, y.snapshot());
307
+ return n.preferences.setGuestFilters(a), E(r, h.snapshot());
236
308
  }
237
309
  let r = new Set((t.filters ?? []).map((e) => e.entity_id)), i = typeof t.include_deleted == "boolean";
238
310
  j((e) => e + 1);
239
311
  try {
240
312
  let a = await O(() => {
241
313
  if (!k()) throw new e("aborted", "The account changed.");
242
- return n.discovery.setContentFilters(t, f);
314
+ return n.discovery.setContentFilters(t, d);
243
315
  });
244
316
  if (k()) {
245
317
  let e = new Map(a.filters.map((e) => [e.entity.id, e]));
246
- o.set(S, (t) => t ? {
318
+ o.set(x, (t) => t ? {
247
319
  ...t,
248
320
  filters: t.filters.flatMap((t) => {
249
321
  if (!r.has(t.entity.id)) return [t];
@@ -260,17 +332,17 @@ function I(t = {}) {
260
332
  }, [
261
333
  n,
262
334
  O,
263
- f,
264
- S,
335
+ d,
336
+ x,
265
337
  o,
266
338
  k,
267
- m,
268
- y,
339
+ p,
340
+ h,
269
341
  E
270
- ]), P = d((e, t) => N({ filters: [{
342
+ ]), P = f((e, t) => N({ filters: [{
271
343
  entity_id: e,
272
344
  visible: t
273
- }] }), [N]), F = d((e) => N({ include_deleted: e }), [N]);
345
+ }] }), [N]), F = f((e) => N({ include_deleted: e }), [N]);
274
346
  return {
275
347
  filters: D ?? null,
276
348
  loading: T.loading || !T.loaded,
@@ -281,68 +353,76 @@ function I(t = {}) {
281
353
  setIncludeDeleted: F
282
354
  };
283
355
  }
284
- var L = {
356
+ var z = {
285
357
  contents: [],
286
358
  entities: []
287
359
  };
288
- function R(e, n = {}) {
289
- let { client: r, language: i, scope: o } = a(n.client), { debounce: s = 150, minLength: c = 1, client: l, management: u = !1, ...d } = n, f = JSON.stringify([o, u]), m = e.trim(), g = h(() => ({
360
+ function B(e, n = {}) {
361
+ let { client: r, language: i, scope: o } = a(n.client), { debounce: s = 150, minLength: c = 1, client: l, management: u = !1, request: d, ...f } = n, p = g(() => ({
362
+ viewerScope: o,
363
+ management: u,
364
+ request: d
365
+ }), [
366
+ o,
367
+ u,
368
+ d
369
+ ]), h = e.trim(), _ = g(() => ({
290
370
  display_language: i,
291
- ...d,
292
- q: m
371
+ ...f,
372
+ q: h
293
373
  }), [
294
374
  i,
295
- m,
296
- JSON.stringify(d)
297
- ]), [v, y] = _({
298
- ...L,
375
+ h,
376
+ JSON.stringify(f)
377
+ ]), [y, b] = v({
378
+ ...z,
299
379
  query: "",
300
380
  loading: !1,
301
- scope: f
381
+ scope: p
302
382
  });
303
- return p(() => {
304
- if (m.length < c) {
305
- y({
306
- ...L,
383
+ return m(() => {
384
+ if (h.length < c) {
385
+ b({
386
+ ...z,
307
387
  query: "",
308
388
  loading: !1,
309
- scope: f
389
+ scope: p
310
390
  });
311
391
  return;
312
392
  }
313
- y((e) => ({
314
- ...e.scope === f ? e : {
315
- ...L,
393
+ b((e) => ({
394
+ ...e.scope === p ? e : {
395
+ ...z,
316
396
  query: ""
317
397
  },
318
398
  loading: !0,
319
- scope: f
399
+ scope: p
320
400
  }));
321
401
  let e = new AbortController(), n = setTimeout(() => {
322
- (u ? r.entities.manage({
323
- q: m,
324
- kind: g.entity_kinds?.[0],
325
- language: g.display_language,
326
- limit: g.limit ?? 10
402
+ (d ? d(_, e.signal) : u ? r.entities.manage({
403
+ q: h,
404
+ kind: _.entity_kinds?.[0],
405
+ language: _.display_language,
406
+ limit: _.limit ?? 10
327
407
  }, e.signal).then((e) => ({
328
408
  contents: [],
329
409
  entities: e.entities
330
- })) : r.discovery.typeahead(g, e.signal)).then((t) => {
331
- e.signal.aborted || y({
410
+ })) : r.discovery.typeahead(_, e.signal)).then((t) => {
411
+ e.signal.aborted || b({
332
412
  contents: t.contents,
333
413
  entities: t.entities,
334
- query: m,
414
+ query: h,
335
415
  loading: !1,
336
- scope: f
416
+ scope: p
337
417
  });
338
418
  }, (n) => {
339
419
  let r = t(n);
340
- !e.signal.aborted && r.code !== "aborted" && y({
341
- ...L,
342
- query: m,
420
+ !e.signal.aborted && r.code !== "aborted" && b({
421
+ ...z,
422
+ query: h,
343
423
  loading: !1,
344
424
  error: r,
345
- scope: f
425
+ scope: p
346
426
  });
347
427
  });
348
428
  }, s);
@@ -351,58 +431,30 @@ function R(e, n = {}) {
351
431
  };
352
432
  }, [
353
433
  r,
354
- g,
355
- m,
434
+ _,
435
+ h,
356
436
  s,
357
437
  c,
358
438
  u,
359
- f
360
- ]), v.scope === f ? v : {
361
- ...L,
439
+ d,
440
+ p
441
+ ]), y.scope === p ? y : {
442
+ ...z,
362
443
  query: "",
363
- loading: m.length >= c
444
+ loading: h.length >= c
364
445
  };
365
446
  }
366
- var z = /* @__PURE__ */ new WeakMap();
367
- function B(e, t) {
368
- let n = z.get(e);
369
- return n || z.set(e, n = new l(e, t)), n;
447
+ var V = /* @__PURE__ */ new WeakMap();
448
+ function H(e, t) {
449
+ let n = V.get(e);
450
+ return n || V.set(e, n = new u(e, t)), n;
370
451
  }
371
- function V(e = {}) {
452
+ function U(e = {}) {
372
453
  let { client: t } = a(e.client);
373
- return B(t);
374
- }
375
- function H(e, t, n = {}) {
376
- let { client: r, scope: i, viewer: o, language: s } = a(n.client), c = B(r), l = x(r, i), u = h(() => ({ session: void 0 }), [
377
- c,
378
- e,
379
- t,
380
- i
381
- ]);
382
- return d((i) => {
383
- e && l() && (o === void 0 || r.preferences.identity() === o) && (u.session ??= c.view(e, t, {
384
- render_id: n.render_id,
385
- surface: n.surface,
386
- position: n.position,
387
- language: n.language ?? s
388
- }), u.session.update(i));
389
- }, [
390
- c,
391
- r,
392
- e,
393
- t,
394
- o,
395
- s,
396
- n.language,
397
- n.render_id,
398
- n.surface,
399
- n.position,
400
- u,
401
- l
402
- ]);
454
+ return H(t);
403
455
  }
404
- function U(e, t) {
405
- let { client: n, scope: r, language: i } = a(t.client), o = B(n), s = x(n, r), c = h(() => u(), [t.render, r]), l = h(() => ({
456
+ function W(e, t) {
457
+ let { client: n, scope: r, language: i } = a(t.client), o = H(n), s = C(n, r), c = g(() => d(), [t.render, r]), l = g(() => ({
406
458
  surface: t.surface,
407
459
  ranker: t.ranker,
408
460
  query_id: t.query_id,
@@ -413,35 +465,35 @@ function U(e, t) {
413
465
  t.query_id,
414
466
  t.language,
415
467
  i
416
- ]), f = h(() => ({
468
+ ]), u = g(() => ({
417
469
  segments: /* @__PURE__ */ new Map(),
418
470
  pending: /* @__PURE__ */ new Set(),
419
471
  timer: void 0
420
- }), [c]), m = d((e) => e === 0 ? c : `${c}-${e}`, [c]), g = d((e) => {
421
- let t = f.segments.get(e);
472
+ }), [c]), p = f((e) => e === 0 ? c : `${c}-${e}`, [c]), h = f((e) => {
473
+ let t = u.segments.get(e);
422
474
  return t || (t = {
423
475
  rendered: /* @__PURE__ */ new Map(),
424
476
  visible: /* @__PURE__ */ new Map(),
425
477
  renderedRevision: 0,
426
478
  visibleRevision: 0
427
- }, f.segments.set(e, t)), t;
428
- }, [f]);
429
- p(() => {
479
+ }, u.segments.set(e, t)), t;
480
+ }, [u]);
481
+ m(() => {
430
482
  if (!s()) return;
431
483
  let t = /* @__PURE__ */ new Set();
432
484
  for (let [n, r] of e.entries()) {
433
- let e = Math.floor(n / W), i = g(e);
434
- i.rendered.has(r.id) || (i.rendered.set(r.id, {
485
+ let e = r.position, i = e !== void 0 && Number.isSafeInteger(e) && e > 0 ? e : n + 1, a = Math.floor((i - 1) / G), o = h(a);
486
+ o.rendered.has(r.id) || (o.rendered.set(r.id, {
435
487
  content_id: r.id,
436
488
  version_id: r.version_id ?? r.version?.id,
437
- position: n + 1
438
- }), t.add(e));
489
+ position: i
490
+ }), t.add(a));
439
491
  }
440
492
  for (let e of t) {
441
- let t = g(e);
493
+ let t = h(e);
442
494
  o.exposure({
443
495
  ...l,
444
- render_id: m(e),
496
+ render_id: p(e),
445
497
  stage: "rendered",
446
498
  revision: ++t.renderedRevision,
447
499
  occurred_at: t.renderedAt ??= (/* @__PURE__ */ new Date()).toISOString(),
@@ -452,67 +504,67 @@ function U(e, t) {
452
504
  o,
453
505
  l,
454
506
  e,
455
- f,
456
- g,
457
- m,
507
+ u,
508
+ h,
509
+ p,
458
510
  s
459
511
  ]);
460
- let _ = h(() => typeof IntersectionObserver == "function" ? new IntersectionObserver((e) => {
512
+ let _ = g(() => typeof IntersectionObserver == "function" ? new IntersectionObserver((e) => {
461
513
  if (s()) {
462
514
  for (let t of e) {
463
515
  if (!t.isIntersecting) continue;
464
- let e = t.target, n = e.dataset.exposureContent, r = Number(e.dataset.exposurePosition), i = Math.floor((r - 1) / W), a = g(i);
516
+ let e = t.target, n = e.dataset.exposureContent, r = Number(e.dataset.exposurePosition), i = Math.floor((r - 1) / G), a = h(i);
465
517
  a.visible.has(n) || (a.visible.set(n, a.rendered.get(n) ?? {
466
518
  content_id: n,
467
519
  position: r
468
- }), f.pending.add(i));
520
+ }), u.pending.add(i));
469
521
  }
470
- f.pending.size && (f.timer ??= setTimeout(() => {
471
- if (f.timer = void 0, s()) {
472
- for (let e of f.pending) {
473
- let t = g(e);
522
+ u.pending.size && (u.timer ??= setTimeout(() => {
523
+ if (u.timer = void 0, s()) {
524
+ for (let e of u.pending) {
525
+ let t = h(e);
474
526
  o.exposure({
475
527
  ...l,
476
- render_id: m(e),
528
+ render_id: p(e),
477
529
  stage: "visible",
478
530
  revision: ++t.visibleRevision,
479
531
  occurred_at: t.visibleAt ??= (/* @__PURE__ */ new Date()).toISOString(),
480
532
  shown: [...t.visible.values()]
481
533
  });
482
534
  }
483
- f.pending.clear();
535
+ u.pending.clear();
484
536
  }
485
537
  }, 300));
486
538
  }
487
539
  }, { threshold: .5 }) : null, [
488
540
  o,
489
541
  l,
490
- f,
491
- g,
492
- m,
542
+ u,
543
+ h,
544
+ p,
493
545
  s
494
546
  ]);
495
- return p(() => () => {
496
- _?.disconnect(), clearTimeout(f.timer);
497
- }, [_, f]), p(() => {
498
- for (let e of f.segments.keys()) o.beginExposure(m(e));
547
+ return m(() => () => {
548
+ _?.disconnect(), clearTimeout(u.timer);
549
+ }, [_, u]), m(() => {
550
+ for (let e of u.segments.keys()) o.beginExposure(p(e));
499
551
  return () => {
500
- for (let e of f.segments.keys()) o.endExposure(m(e));
552
+ for (let e of u.segments.keys()) o.endExposure(p(e));
501
553
  };
502
554
  }, [
503
555
  o,
504
- f,
505
- m
556
+ u,
557
+ p
506
558
  ]), {
507
559
  render_id: c,
508
- track: d((e, t) => (n) => {
560
+ track: f((e, t) => (n) => {
509
561
  n && _ && (n.dataset.exposureContent = e, n.dataset.exposurePosition = String(t), _.observe(n));
510
562
  }, [_]),
511
- click: d((n, r) => {
563
+ click: f((n, r) => {
512
564
  if (!s()) return;
513
- let i = Math.floor((r - 1) / W), a = e.find((e) => e.id === n), c = a?.version_id ?? a?.version?.id;
565
+ let i = Math.floor((r - 1) / G), a = e.find((e) => e.id === n), c = a?.version_id ?? a?.version?.id;
514
566
  o.click(n, {
515
- render_id: m(i),
567
+ render_id: p(i),
516
568
  surface: t.surface,
517
569
  position: r,
518
570
  version_id: c,
@@ -521,15 +573,15 @@ function U(e, t) {
521
573
  }, [
522
574
  o,
523
575
  e,
524
- m,
576
+ p,
525
577
  t.surface,
526
578
  l.language,
527
579
  s
528
580
  ])
529
581
  };
530
582
  }
531
- var W = 32;
583
+ var G = 32;
532
584
  //#endregion
533
- export { B as beaconsFor, V as useBeacons, I as useContentFilters, C as useContents, A as useDailyReleases, U as useExposure, j as useHistory, w as useLockedCount, P as useMyFavorites, F as useMyReactions, M as useRecentSearches, O as useRecommendations, k as useReleaseDates, T as useSearch, D as useSimilar, R as useTypeahead, H as useViewSignal };
585
+ export { H as beaconsFor, U as useBeacons, R as useContentFilters, T as useContents, M as useDailyReleases, W as useExposure, N as useHistory, E as useLockedCount, I as useMyFavorites, L as useMyReactions, P as useRecentSearches, A as useRecommendations, j as useReleaseDates, D as useSearch, k as useSimilar, B as useTypeahead };
534
586
 
535
587
  //# sourceMappingURL=discovery.js.map