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

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 (217) hide show
  1. package/README.md +6 -6
  2. package/dist/client/beacons.js +4 -1
  3. package/dist/client/beacons.js.map +1 -1
  4. package/dist/client/contents.d.ts +9 -1
  5. package/dist/client/contents.js +73 -55
  6. package/dist/client/contents.js.map +1 -1
  7. package/dist/client/discovery.d.ts +6 -2
  8. package/dist/client/discovery.js +1 -1
  9. package/dist/client/discovery.js.map +1 -1
  10. package/dist/client/generated/error-codes.d.ts +1 -1
  11. package/dist/client/generated/error-codes.js +4 -0
  12. package/dist/client/generated/error-codes.js.map +1 -1
  13. package/dist/client/generated/routes.d.ts +43 -30
  14. package/dist/client/generated/routes.js +70 -63
  15. package/dist/client/generated/routes.js.map +1 -1
  16. package/dist/client/generated/wire.d.ts +36 -74
  17. package/dist/client/generated/wire.js.map +1 -1
  18. package/dist/client/index.d.ts +1 -1
  19. package/dist/client/media/windows.d.ts +2 -0
  20. package/dist/client/media/windows.js +4 -1
  21. package/dist/client/media/windows.js.map +1 -1
  22. package/dist/client/stats.d.ts +4 -20
  23. package/dist/client/stats.js +0 -11
  24. package/dist/client/stats.js.map +1 -1
  25. package/dist/client/versions.d.ts +8 -6
  26. package/dist/client/versions.js +15 -10
  27. package/dist/client/versions.js.map +1 -1
  28. package/dist/components/admin/bulk-drafts.d.ts +17 -0
  29. package/dist/components/admin/bulk-drafts.js +41 -0
  30. package/dist/components/admin/bulk-drafts.js.map +1 -0
  31. package/dist/components/admin/content-admin.d.ts +1 -1
  32. package/dist/components/admin/content-admin.js.map +1 -1
  33. package/dist/components/admin/content-manager.d.ts +11 -3
  34. package/dist/components/admin/content-manager.js +739 -380
  35. package/dist/components/admin/content-manager.js.map +1 -1
  36. package/dist/components/admin/group-manager.d.ts +8 -3
  37. package/dist/components/admin/group-manager.js +218 -146
  38. package/dist/components/admin/group-manager.js.map +1 -1
  39. package/dist/components/admin/page-notices.d.ts +16 -0
  40. package/dist/components/admin/page-notices.js +113 -0
  41. package/dist/components/admin/page-notices.js.map +1 -0
  42. package/dist/components/admin/page-picker.d.ts +38 -0
  43. package/dist/components/admin/page-picker.js +159 -0
  44. package/dist/components/admin/page-picker.js.map +1 -0
  45. package/dist/components/admin/reader-content-editor.js +537 -500
  46. package/dist/components/admin/reader-content-editor.js.map +1 -1
  47. package/dist/components/admin/reader-manifest.js +181 -179
  48. package/dist/components/admin/reader-manifest.js.map +1 -1
  49. package/dist/components/admin/shell.d.ts +10 -2
  50. package/dist/components/admin/shell.js +114 -42
  51. package/dist/components/admin/shell.js.map +1 -1
  52. package/dist/components/admin/stats-dashboard.d.ts +4 -9
  53. package/dist/components/admin/stats-dashboard.js +300 -202
  54. package/dist/components/admin/stats-dashboard.js.map +1 -1
  55. package/dist/components/admin/upload-queue.d.ts +14 -0
  56. package/dist/components/admin/upload-queue.js +115 -98
  57. package/dist/components/admin/upload-queue.js.map +1 -1
  58. package/dist/components/content/card.d.ts +31 -3
  59. package/dist/components/content/card.js +324 -158
  60. package/dist/components/content/card.js.map +1 -1
  61. package/dist/components/content/daily-releases.js +14 -12
  62. package/dist/components/content/daily-releases.js.map +1 -1
  63. package/dist/components/content/editor-save.js +27 -25
  64. package/dist/components/content/editor-save.js.map +1 -1
  65. package/dist/components/content/editors.js +274 -253
  66. package/dist/components/content/editors.js.map +1 -1
  67. package/dist/components/content/favorites.d.ts +1 -1
  68. package/dist/components/content/favorites.js +36 -22
  69. package/dist/components/content/favorites.js.map +1 -1
  70. package/dist/components/content/grid.d.ts +11 -4
  71. package/dist/components/content/grid.js +52 -43
  72. package/dist/components/content/grid.js.map +1 -1
  73. package/dist/components/content/history.js +83 -63
  74. package/dist/components/content/history.js.map +1 -1
  75. package/dist/components/content/index.d.ts +5 -3
  76. package/dist/components/content/listing.d.ts +14 -3
  77. package/dist/components/content/listing.js +65 -56
  78. package/dist/components/content/listing.js.map +1 -1
  79. package/dist/components/content/offer-fields.js +6 -6
  80. package/dist/components/content/paged-grid.d.ts +10 -0
  81. package/dist/components/content/paged-grid.js +116 -0
  82. package/dist/components/content/paged-grid.js.map +1 -0
  83. package/dist/components/content/pagination.d.ts +19 -0
  84. package/dist/components/content/pagination.js +97 -0
  85. package/dist/components/content/pagination.js.map +1 -0
  86. package/dist/components/content/paywall.d.ts +9 -0
  87. package/dist/components/content/paywall.js +27 -3
  88. package/dist/components/content/paywall.js.map +1 -1
  89. package/dist/components/content/post-list.d.ts +37 -0
  90. package/dist/components/content/post-list.js +203 -0
  91. package/dist/components/content/post-list.js.map +1 -0
  92. package/dist/components/content/reader-settings.d.ts +2 -0
  93. package/dist/components/content/reader-settings.js +1 -1
  94. package/dist/components/content/reader-settings.js.map +1 -1
  95. package/dist/components/groups/banner.d.ts +6 -2
  96. package/dist/components/groups/banner.js +79 -61
  97. package/dist/components/groups/banner.js.map +1 -1
  98. package/dist/components/groups/directory.d.ts +12 -2
  99. package/dist/components/groups/directory.js +168 -105
  100. package/dist/components/groups/directory.js.map +1 -1
  101. package/dist/components/groups/editor.js +10 -10
  102. package/dist/components/groups/editor.js.map +1 -1
  103. package/dist/components/groups/entity-chips.d.ts +61 -0
  104. package/dist/components/groups/entity-chips.js +382 -0
  105. package/dist/components/groups/entity-chips.js.map +1 -0
  106. package/dist/components/groups/group-members.d.ts +29 -0
  107. package/dist/components/groups/group-members.js +474 -0
  108. package/dist/components/groups/group-members.js.map +1 -0
  109. package/dist/components/groups/header.js +53 -45
  110. package/dist/components/groups/header.js.map +1 -1
  111. package/dist/components/groups/index.d.ts +3 -1
  112. package/dist/components/groups/memberships.d.ts +3 -36
  113. package/dist/components/groups/memberships.js +105 -480
  114. package/dist/components/groups/memberships.js.map +1 -1
  115. package/dist/components/groups/scoped.d.ts +23 -0
  116. package/dist/components/groups/scoped.js +92 -0
  117. package/dist/components/groups/scoped.js.map +1 -0
  118. package/dist/components/media-folder-editor.d.ts +5 -0
  119. package/dist/components/media-folder-editor.js +418 -230
  120. package/dist/components/media-folder-editor.js.map +1 -1
  121. package/dist/components/social/poll.js +57 -48
  122. package/dist/components/social/poll.js.map +1 -1
  123. package/dist/components/sortable-list.d.ts +5 -1
  124. package/dist/components/sortable-list.js +97 -81
  125. package/dist/components/sortable-list.js.map +1 -1
  126. package/dist/index.d.ts +1 -1
  127. package/dist/index.js +41 -37
  128. package/dist/locales/admin/de.js +78 -45
  129. package/dist/locales/admin/de.js.map +1 -1
  130. package/dist/locales/admin/en.d.ts +74 -41
  131. package/dist/locales/admin/en.js +78 -45
  132. package/dist/locales/admin/en.js.map +1 -1
  133. package/dist/locales/admin/es.js +78 -45
  134. package/dist/locales/admin/es.js.map +1 -1
  135. package/dist/locales/admin/ja.js +78 -45
  136. package/dist/locales/admin/ja.js.map +1 -1
  137. package/dist/locales/admin/ko.js +78 -45
  138. package/dist/locales/admin/ko.js.map +1 -1
  139. package/dist/locales/admin/zh.js +78 -45
  140. package/dist/locales/admin/zh.js.map +1 -1
  141. package/dist/locales/de.js +2 -0
  142. package/dist/locales/de.js.map +1 -1
  143. package/dist/locales/discovery/de.js +25 -1
  144. package/dist/locales/discovery/de.js.map +1 -1
  145. package/dist/locales/discovery/en.d.ts +24 -0
  146. package/dist/locales/discovery/en.js +25 -1
  147. package/dist/locales/discovery/en.js.map +1 -1
  148. package/dist/locales/discovery/es.js +25 -1
  149. package/dist/locales/discovery/es.js.map +1 -1
  150. package/dist/locales/discovery/ja.js +25 -1
  151. package/dist/locales/discovery/ja.js.map +1 -1
  152. package/dist/locales/discovery/ko.js +25 -1
  153. package/dist/locales/discovery/ko.js.map +1 -1
  154. package/dist/locales/discovery/zh.js +25 -1
  155. package/dist/locales/discovery/zh.js.map +1 -1
  156. package/dist/locales/en.d.ts +120 -43
  157. package/dist/locales/en.js +2 -0
  158. package/dist/locales/en.js.map +1 -1
  159. package/dist/locales/es.js +2 -0
  160. package/dist/locales/es.js.map +1 -1
  161. package/dist/locales/groups/de.js +22 -4
  162. package/dist/locales/groups/de.js.map +1 -1
  163. package/dist/locales/groups/en.d.ts +20 -2
  164. package/dist/locales/groups/en.js +22 -4
  165. package/dist/locales/groups/en.js.map +1 -1
  166. package/dist/locales/groups/es.js +22 -4
  167. package/dist/locales/groups/es.js.map +1 -1
  168. package/dist/locales/groups/ja.js +22 -4
  169. package/dist/locales/groups/ja.js.map +1 -1
  170. package/dist/locales/groups/ko.js +22 -4
  171. package/dist/locales/groups/ko.js.map +1 -1
  172. package/dist/locales/groups/zh.js +22 -4
  173. package/dist/locales/groups/zh.js.map +1 -1
  174. package/dist/locales/ja.js +2 -0
  175. package/dist/locales/ja.js.map +1 -1
  176. package/dist/locales/ko.js +2 -0
  177. package/dist/locales/ko.js.map +1 -1
  178. package/dist/locales/zh.js +2 -0
  179. package/dist/locales/zh.js.map +1 -1
  180. package/dist/react/contents.js +1 -1
  181. package/dist/react/contents.js.map +1 -1
  182. package/dist/react/discovery.d.ts +16 -0
  183. package/dist/react/discovery.js +69 -37
  184. package/dist/react/discovery.js.map +1 -1
  185. package/dist/react/groups.d.ts +19 -3
  186. package/dist/react/groups.js +49 -22
  187. package/dist/react/groups.js.map +1 -1
  188. package/dist/react/index.d.ts +6 -4
  189. package/dist/react/page-notices.d.ts +13 -0
  190. package/dist/react/page-notices.js +38 -0
  191. package/dist/react/page-notices.js.map +1 -0
  192. package/dist/react/post-reads.d.ts +23 -0
  193. package/dist/react/post-reads.js +90 -0
  194. package/dist/react/post-reads.js.map +1 -0
  195. package/dist/react/remembered-sort.d.ts +5 -0
  196. package/dist/react/remembered-sort.js +29 -0
  197. package/dist/react/remembered-sort.js.map +1 -0
  198. package/dist/react/resources.js +2 -2
  199. package/dist/react/resources.js.map +1 -1
  200. package/dist/react/stats.d.ts +3 -7
  201. package/dist/react/stats.js +2 -6
  202. package/dist/react/stats.js.map +1 -1
  203. package/dist/react/use-engagement.d.ts +2 -0
  204. package/dist/react/use-engagement.js +40 -34
  205. package/dist/react/use-engagement.js.map +1 -1
  206. package/dist/react.js +29 -27
  207. package/dist/styles.css +1 -1
  208. package/dist/urls/index.d.ts +1 -1
  209. package/dist/urls.js +2 -2
  210. package/dist/urls.js.map +1 -1
  211. package/package.json +1 -1
  212. package/dist/components/admin/page-review.d.ts +0 -13
  213. package/dist/components/admin/page-review.js +0 -225
  214. package/dist/components/admin/page-review.js.map +0 -1
  215. package/dist/react/page-review.d.ts +0 -14
  216. package/dist/react/page-review.js +0 -37
  217. package/dist/react/page-review.js.map +0 -1
@@ -6,17 +6,18 @@ import { Input as i } from "../../ui/input.js";
6
6
  import { Label as a } from "../../ui/label.js";
7
7
  import { Select as o, SelectContent as s, SelectItem as c, SelectTrigger as l, SelectValue as u } from "../../ui/select.js";
8
8
  import { ErrorLine as d, useAction as f } from "../social/parts.js";
9
- import { LoadFailed as p, Rows as ee } from "./shell.js";
10
- import { Switch as m } from "../../ui/switch.js";
11
- import { useEditorSaveTask as h } from "../content/editor-save.js";
12
- import { emptyReaderMeta as g, matchAudio as _, readerMetaProblems as v, readerNames as y } from "../../client/reader-meta.js";
9
+ import { LoadFailed as p, Rows as m } from "./shell.js";
10
+ import { Switch as h } from "../../ui/switch.js";
11
+ import { useEditorSaveTask as g } from "../content/editor-save.js";
12
+ import { emptyReaderMeta as _, matchAudio as v, readerMetaProblems as y, readerNames as ee } from "../../client/reader-meta.js";
13
13
  import { useReaderPlan as b } from "../../react/versions.js";
14
- import { useId as x, useMemo as S, useRef as C, useState as w } from "react";
15
- import { jsx as T, jsxs as E } from "react/jsx-runtime";
16
- import { cn as D } from "cn";
14
+ import { AudioPreview as x, PagePicker as S, usePlanMedia as C } from "./page-picker.js";
15
+ import { useId as w, useMemo as T, useRef as te, useState as E } from "react";
16
+ import { jsx as D, jsxs as O } from "react/jsx-runtime";
17
+ import { cn as ne } from "cn";
17
18
  //#region src/components/admin/reader-manifest.tsx
18
- var O = "__none__", k = (e, t) => t === void 0 ? e === void 0 ? O : `page:${e}` : `anchor:${t}`, A = (e) => e.startsWith("anchor:") ? { anchor: e.slice(7) } : e.startsWith("page:") ? { page: e.slice(5) } : {};
19
- function te(e) {
19
+ var k = "__none__", A = (e, t) => t === void 0 ? e === void 0 ? k : e : `anchor:${t}`, j = (e) => e.startsWith("anchor:") ? { anchor: e.slice(7) } : e === k ? {} : { page: e };
20
+ function M(e) {
20
21
  let t = e.defaults?.auto_advance_seconds;
21
22
  return {
22
23
  schema_version: 1,
@@ -37,105 +38,105 @@ function te(e) {
37
38
  foreground: e.foreground ?? []
38
39
  };
39
40
  }
40
- var j = (e) => e.trim() === "" ? NaN : Number(e), M = (e) => e === void 0 || Number.isNaN(e) ? "" : String(e);
41
- function N({ content: i, version: a, client: o, onError: s, className: c, appearance: l }) {
42
- let { t: u } = e(), m = n(o), x = b(i, a, { client: m }), O = S(() => x.plan ? y(x.plan) : {
41
+ var N = (e) => e.trim() === "" ? NaN : Number(e), P = (e) => e === void 0 || Number.isNaN(e) ? "" : String(e);
42
+ function F({ content: i, version: a, client: o, onError: s, className: c, appearance: l }) {
43
+ let { t: u } = e(), h = n(o), x = b(i, a, { client: h }), S = T(() => x.plan ? ee(x.plan) : {
43
44
  pages: [],
44
45
  files: []
45
- }, [x.plan]), [k, A] = w(null), [j, M] = w(null), [N, z] = w(!1), [B, V] = w(!1), [q, J] = w(null), Y = f("reader.save", s);
46
- x.plan && x.plan !== k && !N && (A(x.plan), M(x.plan.reader ? structuredClone(x.plan.reader) : g()));
47
- let X = S(() => j ? v(j, O) : [], [j, O]), Z = (e) => {
48
- M((t) => t && e(t)), z(!0), V(!1);
49
- }, Q = C(j);
46
+ }, [x.plan]), w = C(x.plan, h), [k, A] = E(null), [j, N] = E(null), [P, F] = E(!1), [B, V] = E(!1), [H, J] = E(null), Y = f("reader.save", s);
47
+ x.plan && x.plan !== k && !P && (A(x.plan), N(x.plan.reader ? structuredClone(x.plan.reader) : _()));
48
+ let X = T(() => j ? y(j, S) : [], [j, S]), Z = (e) => {
49
+ N((t) => t && e(t)), F(!0), V(!1);
50
+ }, Q = te(j);
50
51
  Q.current = j;
51
52
  let $ = async () => {
52
53
  if (!j || X.length) return !1;
53
54
  V(!1);
54
55
  let e = j;
55
- return !await Y.run(async () => (await m.versions.setReader(i, a, te(e)), !0)) || Q.current !== e ? !1 : (z(!1), V(!0), !0);
56
+ return !await Y.run(async () => (await h.versions.setReader(i, a, M(e)), !0)) || Q.current !== e ? !1 : (F(!1), V(!0), !0);
56
57
  };
57
- h(`reader-meta:${a}`, {
58
+ g(`reader-meta:${a}`, {
58
59
  label: u("readerManifest.title"),
59
- dirty: N,
60
+ dirty: P,
60
61
  pending: Y.pending,
61
62
  valid: !X.length,
62
63
  save: $,
63
64
  order: 30
64
65
  });
65
- let ne = (() => {
66
- if (x.loading && !x.plan && !x.pending) return /* @__PURE__ */ T(ee, { count: 2 });
67
- if (x.pending) return /* @__PURE__ */ T("p", {
66
+ let ie = (() => {
67
+ if (x.loading && !x.plan && !x.pending) return /* @__PURE__ */ D(m, { count: 2 });
68
+ if (x.pending) return /* @__PURE__ */ D("p", {
68
69
  className: "text-muted-foreground",
69
70
  children: u("readerManifest.pending")
70
71
  });
71
- if (x.error && !x.plan) return /* @__PURE__ */ T(p, {
72
+ if (x.error && !x.plan) return /* @__PURE__ */ D(p, {
72
73
  error: x.error,
73
74
  message: u("readerManifest.loadFailed"),
74
75
  retry: x.reload
75
76
  });
76
77
  if (!j) return null;
77
78
  let e = j.anchors ?? [], t = e.map((e) => e.id).filter(Boolean);
78
- return /* @__PURE__ */ E("form", {
79
+ return /* @__PURE__ */ O("form", {
79
80
  className: "grid gap-4",
80
81
  onSubmit: (e) => {
81
82
  e.preventDefault(), $();
82
83
  },
83
84
  children: [
84
- /* @__PURE__ */ T("p", {
85
+ /* @__PURE__ */ D("p", {
85
86
  className: "text-muted-foreground",
86
87
  children: u("readerManifest.summary", {
87
- pages: O.pages.length,
88
- files: O.files.length
88
+ pages: S.pages.length,
89
+ files: S.files.length
89
90
  })
90
91
  }),
91
- /* @__PURE__ */ T(R, {
92
+ /* @__PURE__ */ D(z, {
92
93
  meta: j,
93
94
  edit: Z
94
95
  }),
95
- /* @__PURE__ */ T(L, {
96
+ /* @__PURE__ */ D(R, {
96
97
  title: u("readerManifest.anchors"),
97
98
  add: u("readerManifest.addAnchor"),
98
- disabled: !O.pages.length,
99
+ disabled: !S.pages.length,
99
100
  onAdd: () => Z((e) => ({
100
101
  ...e,
101
102
  anchors: [...e.anchors ?? [], {
102
- id: P(e.anchors ?? []),
103
- page: O.pages[0],
103
+ id: re(e.anchors ?? []),
104
+ page: S.pages[0],
104
105
  offset_percent: 0
105
106
  }]
106
107
  })),
107
- children: e.map((e, t) => /* @__PURE__ */ T(H, {
108
+ children: e.map((e, t) => /* @__PURE__ */ D(U, {
108
109
  index: t,
109
110
  anchor: e,
110
- pages: O.pages,
111
+ media: w,
111
112
  onChange: (e) => Z((n) => ({
112
113
  ...n,
113
- anchors: F(n.anchors, t, e)
114
+ anchors: I(n.anchors, t, e)
114
115
  })),
115
116
  onRemove: () => Z((e) => ({
116
117
  ...e,
117
- anchors: I(e.anchors, t)
118
+ anchors: L(e.anchors, t)
118
119
  }))
119
120
  }, t))
120
121
  }),
121
- /* @__PURE__ */ E(L, {
122
+ /* @__PURE__ */ O(R, {
122
123
  title: u("readerManifest.foreground"),
123
124
  add: u("readerManifest.addCue"),
124
- disabled: !O.files.length || !O.pages.length,
125
+ disabled: !S.files.length || !S.pages.length,
125
126
  onAdd: () => Z((e) => ({
126
127
  ...e,
127
128
  foreground: [...e.foreground ?? [], {
128
- file: O.files[0],
129
- page: O.pages[0]
129
+ file: S.files[0],
130
+ page: S.pages[0]
130
131
  }]
131
132
  })),
132
- extra: /* @__PURE__ */ T(r, {
133
+ extra: /* @__PURE__ */ D(r, {
133
134
  type: "button",
134
135
  size: "sm",
135
136
  variant: "outline",
136
- disabled: !O.files.length,
137
+ disabled: !S.files.length,
137
138
  onClick: () => {
138
- let e = _(O, t);
139
+ let e = v(S, t);
139
140
  J(e), e.foreground.length && Z((t) => ({
140
141
  ...t,
141
142
  foreground: e.foreground
@@ -143,65 +144,67 @@ function N({ content: i, version: a, client: o, onError: s, className: c, appear
143
144
  },
144
145
  children: u("readerManifest.match")
145
146
  }),
146
- children: [q && /* @__PURE__ */ T(G, { match: q }), (j.foreground ?? []).map((e, n) => /* @__PURE__ */ T(U, {
147
+ children: [H && /* @__PURE__ */ D(K, { match: H }), (j.foreground ?? []).map((e, n) => /* @__PURE__ */ D(W, {
147
148
  index: n,
148
149
  cue: e,
149
- names: O,
150
+ names: S,
151
+ media: w,
150
152
  anchors: t,
151
153
  onChange: (e) => Z((t) => ({
152
154
  ...t,
153
- foreground: F(t.foreground, n, e)
155
+ foreground: I(t.foreground, n, e)
154
156
  })),
155
157
  onRemove: () => Z((e) => ({
156
158
  ...e,
157
- foreground: I(e.foreground, n)
159
+ foreground: L(e.foreground, n)
158
160
  }))
159
161
  }, n))]
160
162
  }),
161
- /* @__PURE__ */ T(L, {
163
+ /* @__PURE__ */ D(R, {
162
164
  title: u("readerManifest.background"),
163
165
  add: u("readerManifest.addTrack"),
164
- disabled: !O.files.length,
166
+ disabled: !S.files.length,
165
167
  onAdd: () => Z((e) => ({
166
168
  ...e,
167
- background: [...e.background ?? [], { file: O.files[0] }]
169
+ background: [...e.background ?? [], { file: S.files[0] }]
168
170
  })),
169
- children: (j.background ?? []).map((e, n) => /* @__PURE__ */ T(W, {
171
+ children: (j.background ?? []).map((e, n) => /* @__PURE__ */ D(G, {
170
172
  index: n,
171
173
  cue: e,
172
- names: O,
174
+ names: S,
175
+ media: w,
173
176
  anchors: t,
174
177
  onChange: (e) => Z((t) => ({
175
178
  ...t,
176
- background: F(t.background, n, e)
179
+ background: I(t.background, n, e)
177
180
  })),
178
181
  onRemove: () => Z((e) => ({
179
182
  ...e,
180
- background: I(e.background, n)
183
+ background: L(e.background, n)
181
184
  }))
182
185
  }, n))
183
186
  }),
184
- X.length > 0 && /* @__PURE__ */ T(K, { problems: X }),
185
- /* @__PURE__ */ T(d, { error: Y.error }),
186
- /* @__PURE__ */ E("div", {
187
+ X.length > 0 && /* @__PURE__ */ D(q, { problems: X }),
188
+ /* @__PURE__ */ D(d, { error: Y.error }),
189
+ /* @__PURE__ */ O("div", {
187
190
  className: "flex flex-wrap items-center gap-3",
188
191
  children: [
189
- /* @__PURE__ */ T(r, {
192
+ /* @__PURE__ */ D(r, {
190
193
  type: "submit",
191
194
  size: "sm",
192
- disabled: Y.pending || !N || X.length > 0,
195
+ disabled: Y.pending || !P || X.length > 0,
193
196
  children: Y.pending ? u("common.saving") : u("common.save")
194
197
  }),
195
- N && /* @__PURE__ */ T(r, {
198
+ P && /* @__PURE__ */ D(r, {
196
199
  type: "button",
197
200
  size: "sm",
198
201
  variant: "ghost",
199
202
  onClick: () => {
200
- z(!1), A(null), J(null);
203
+ F(!1), A(null), J(null);
201
204
  },
202
205
  children: u("readerManifest.revert")
203
206
  }),
204
- B && /* @__PURE__ */ T("span", {
207
+ B && /* @__PURE__ */ D("span", {
205
208
  role: "status",
206
209
  className: "text-muted-foreground",
207
210
  children: u("readerManifest.saved")
@@ -211,34 +214,34 @@ function N({ content: i, version: a, client: o, onError: s, className: c, appear
211
214
  ]
212
215
  });
213
216
  })();
214
- return /* @__PURE__ */ E(t, {
217
+ return /* @__PURE__ */ O(t, {
215
218
  appearance: l,
216
- className: D("grid gap-3 text-sm", c),
219
+ className: ne("grid gap-3 text-sm", c),
217
220
  "data-ckui": "reader-manifest",
218
- children: [/* @__PURE__ */ T("h4", {
221
+ children: [/* @__PURE__ */ D("h4", {
219
222
  className: "font-medium",
220
223
  children: u("readerManifest.title")
221
- }), ne]
224
+ }), ie]
222
225
  });
223
226
  }
224
- function P(e) {
227
+ function re(e) {
225
228
  let t = new Set(e.map((e) => e.id)), n = e.length + 1;
226
229
  for (; t.has(`a${n}`);) n++;
227
230
  return `a${n}`;
228
231
  }
229
- var F = (e, t, n) => (e ?? []).map((e, r) => r === t ? n : e), I = (e, t) => (e ?? []).filter((e, n) => n !== t);
230
- function L({ title: e, add: t, disabled: n, onAdd: i, extra: a, children: o }) {
231
- return /* @__PURE__ */ E("fieldset", {
232
+ var I = (e, t, n) => (e ?? []).map((e, r) => r === t ? n : e), L = (e, t) => (e ?? []).filter((e, n) => n !== t);
233
+ function R({ title: e, add: t, disabled: n, onAdd: i, extra: a, children: o }) {
234
+ return /* @__PURE__ */ O("fieldset", {
232
235
  className: "grid gap-2 rounded-md border border-border p-3",
233
236
  children: [
234
- /* @__PURE__ */ T("legend", {
237
+ /* @__PURE__ */ D("legend", {
235
238
  className: "px-1 font-medium",
236
239
  children: e
237
240
  }),
238
241
  o,
239
- /* @__PURE__ */ E("div", {
242
+ /* @__PURE__ */ O("div", {
240
243
  className: "flex flex-wrap gap-2",
241
- children: [/* @__PURE__ */ T(r, {
244
+ children: [/* @__PURE__ */ D(r, {
242
245
  type: "button",
243
246
  size: "sm",
244
247
  variant: "outline",
@@ -250,69 +253,60 @@ function L({ title: e, add: t, disabled: n, onAdd: i, extra: a, children: o }) {
250
253
  ]
251
254
  });
252
255
  }
253
- function R({ meta: t, edit: n }) {
254
- let { t: r } = e(), o = x(), s = t.defaults?.auto_advance_seconds;
255
- return /* @__PURE__ */ E("div", {
256
+ function z({ meta: t, edit: n }) {
257
+ let { t: r } = e(), o = w(), s = t.defaults?.auto_advance_seconds;
258
+ return /* @__PURE__ */ O("div", {
256
259
  className: "grid max-w-xs gap-1.5",
257
- children: [/* @__PURE__ */ T(a, {
260
+ children: [/* @__PURE__ */ D(a, {
258
261
  htmlFor: `${o}-auto`,
259
262
  children: r("readerManifest.autoAdvance")
260
- }), /* @__PURE__ */ T(i, {
263
+ }), /* @__PURE__ */ D(i, {
261
264
  id: `${o}-auto`,
262
265
  className: "h-8",
263
266
  type: "number",
264
267
  min: 0,
265
268
  step: "any",
266
- value: M(s),
269
+ value: P(s),
267
270
  onChange: (e) => n((t) => ({
268
271
  ...t,
269
- defaults: e.target.value.trim() === "" ? void 0 : { auto_advance_seconds: j(e.target.value) }
272
+ defaults: e.target.value.trim() === "" ? void 0 : { auto_advance_seconds: N(e.target.value) }
270
273
  }))
271
274
  })]
272
275
  });
273
276
  }
274
- function z({ label: e, value: t, names: n, onChange: r }) {
275
- return /* @__PURE__ */ E(o, {
277
+ function B({ label: e, value: t, names: n, onChange: r }) {
278
+ return /* @__PURE__ */ O(o, {
276
279
  value: t,
277
280
  onValueChange: (e) => r(String(e)),
278
- children: [/* @__PURE__ */ T(l, {
281
+ children: [/* @__PURE__ */ D(l, {
279
282
  size: "sm",
280
283
  "aria-label": e,
281
- children: /* @__PURE__ */ T(u, { children: (e) => e })
282
- }), /* @__PURE__ */ T(s, { children: n.map((e) => /* @__PURE__ */ T(c, {
284
+ children: /* @__PURE__ */ D(u, { children: (e) => e })
285
+ }), /* @__PURE__ */ D(s, { children: n.map((e) => /* @__PURE__ */ D(c, {
283
286
  value: e,
284
287
  children: e
285
288
  }, e)) })]
286
289
  });
287
290
  }
288
- function B({ label: t, value: n, pages: r, anchors: i, none: a, onChange: d }) {
289
- let { t: f } = e(), p = (e) => e === O ? a ?? "" : e.startsWith("anchor:") ? f("readerManifest.anchorNamed", { id: e.slice(7) }) : f("readerManifest.pageNamed", { name: e.slice(5) });
290
- return /* @__PURE__ */ E(o, {
291
+ function V({ label: t, value: n, media: r, anchors: i, none: a, onChange: o }) {
292
+ let { t: s } = e(), c = [...a === void 0 ? [] : [{
293
+ value: k,
294
+ label: a
295
+ }], ...i.map((e) => ({
296
+ value: `anchor:${e}`,
297
+ label: s("readerManifest.anchorNamed", { id: e })
298
+ }))];
299
+ return /* @__PURE__ */ D(S, {
300
+ label: t,
301
+ pages: r.pages,
291
302
  value: n,
292
- onValueChange: (e) => d(String(e)),
293
- children: [/* @__PURE__ */ T(l, {
294
- size: "sm",
295
- "aria-label": t,
296
- children: /* @__PURE__ */ T(u, { children: p })
297
- }), /* @__PURE__ */ E(s, { children: [
298
- a !== void 0 && /* @__PURE__ */ T(c, {
299
- value: O,
300
- children: a
301
- }),
302
- i.map((e) => /* @__PURE__ */ T(c, {
303
- value: `anchor:${e}`,
304
- children: p(`anchor:${e}`)
305
- }, `a-${e}`)),
306
- r.map((e) => /* @__PURE__ */ T(c, {
307
- value: `page:${e}`,
308
- children: p(`page:${e}`)
309
- }, `p-${e}`))
310
- ] })]
303
+ extras: c,
304
+ onChange: o
311
305
  });
312
306
  }
313
- function V({ label: t, onRemove: n }) {
307
+ function H({ label: t, onRemove: n }) {
314
308
  let { t: i } = e();
315
- return /* @__PURE__ */ T(r, {
309
+ return /* @__PURE__ */ D(r, {
316
310
  type: "button",
317
311
  size: "sm",
318
312
  variant: "ghost",
@@ -321,13 +315,13 @@ function V({ label: t, onRemove: n }) {
321
315
  children: i("common.remove")
322
316
  });
323
317
  }
324
- function H({ index: t, anchor: n, pages: r, onChange: a, onRemove: o }) {
318
+ function U({ index: t, anchor: n, media: r, onChange: a, onRemove: o }) {
325
319
  let { t: s } = e(), c = t + 1;
326
- return /* @__PURE__ */ E("div", {
320
+ return /* @__PURE__ */ O("div", {
327
321
  className: "flex flex-wrap items-center gap-2",
328
322
  "data-ckui": "reader-anchor",
329
323
  children: [
330
- /* @__PURE__ */ T(i, {
324
+ /* @__PURE__ */ D(i, {
331
325
  className: "h-8 w-28",
332
326
  "aria-label": s("readerManifest.anchorId", { n: c }),
333
327
  value: n.id,
@@ -336,82 +330,86 @@ function H({ index: t, anchor: n, pages: r, onChange: a, onRemove: o }) {
336
330
  id: e.target.value
337
331
  })
338
332
  }),
339
- /* @__PURE__ */ T(z, {
333
+ /* @__PURE__ */ D(S, {
340
334
  label: s("readerManifest.anchorPage", { n: c }),
335
+ pages: r.pages,
341
336
  value: n.page,
342
- names: r,
343
337
  onChange: (e) => a({
344
338
  ...n,
345
339
  page: e
346
340
  })
347
341
  }),
348
- /* @__PURE__ */ T(i, {
342
+ /* @__PURE__ */ D(i, {
349
343
  className: "h-8 w-24",
350
344
  type: "number",
351
345
  min: 0,
352
346
  max: 100,
353
347
  step: "any",
354
348
  "aria-label": s("readerManifest.offset", { n: c }),
355
- value: M(n.offset_percent),
349
+ value: P(n.offset_percent),
356
350
  onChange: (e) => a({
357
351
  ...n,
358
- offset_percent: j(e.target.value)
352
+ offset_percent: N(e.target.value)
359
353
  })
360
354
  }),
361
- /* @__PURE__ */ T(i, {
355
+ /* @__PURE__ */ D(i, {
362
356
  className: "h-8 w-28",
363
357
  type: "number",
364
358
  min: 0,
365
359
  step: "any",
366
360
  "aria-label": s("readerManifest.duration", { n: c }),
367
361
  placeholder: s("readerManifest.durationPlaceholder"),
368
- value: M(n.duration_seconds),
362
+ value: P(n.duration_seconds),
369
363
  onChange: (e) => a({
370
364
  ...n,
371
- duration_seconds: e.target.value.trim() === "" ? void 0 : j(e.target.value)
365
+ duration_seconds: e.target.value.trim() === "" ? void 0 : N(e.target.value)
372
366
  })
373
367
  }),
374
- /* @__PURE__ */ T(V, {
368
+ /* @__PURE__ */ D(H, {
375
369
  label: s("readerManifest.removeAnchor", { n: c }),
376
370
  onRemove: o
377
371
  })
378
372
  ]
379
373
  });
380
374
  }
381
- function U({ index: t, cue: n, names: r, anchors: i, onChange: a, onRemove: o }) {
382
- let { t: s } = e(), c = t + 1;
383
- return /* @__PURE__ */ E("div", {
375
+ function W({ index: t, cue: n, names: r, media: i, anchors: a, onChange: o, onRemove: s }) {
376
+ let { t: c } = e(), l = t + 1;
377
+ return /* @__PURE__ */ O("div", {
384
378
  className: "flex flex-wrap items-center gap-2",
385
379
  "data-ckui": "reader-foreground",
386
380
  children: [
387
- /* @__PURE__ */ T(z, {
388
- label: s("readerManifest.cueFile", { n: c }),
381
+ /* @__PURE__ */ D(B, {
382
+ label: c("readerManifest.cueFile", { n: l }),
389
383
  value: n.file,
390
384
  names: r.files,
391
- onChange: (e) => a({
385
+ onChange: (e) => o({
392
386
  ...n,
393
387
  file: e
394
388
  })
395
389
  }),
396
- /* @__PURE__ */ T(B, {
397
- label: s("readerManifest.cueAt", { n: c }),
398
- value: k(n.page, n.anchor),
399
- pages: r.pages,
400
- anchors: i,
401
- onChange: (e) => a({
390
+ /* @__PURE__ */ D(x, {
391
+ url: i.audio.get(n.file),
392
+ label: n.file
393
+ }),
394
+ /* @__PURE__ */ D(V, {
395
+ label: c("readerManifest.cueAt", { n: l }),
396
+ value: A(n.page, n.anchor),
397
+ media: i,
398
+ anchors: a,
399
+ onChange: (e) => o({
402
400
  file: n.file,
403
- ...A(e)
401
+ ...j(e)
404
402
  })
405
403
  }),
406
- /* @__PURE__ */ T(V, {
407
- label: s("readerManifest.removeCue", { n: c }),
408
- onRemove: o
404
+ /* @__PURE__ */ D(H, {
405
+ label: c("readerManifest.removeCue", { n: l }),
406
+ onRemove: s
409
407
  })
410
408
  ]
411
409
  });
412
410
  }
413
- function W({ index: t, cue: n, names: r, anchors: a, onChange: o, onRemove: s }) {
414
- let { t: c } = e(), l = t + 1, u = A(k(n.from_page, n.from_anchor)), d = A(k(n.to_page, n.to_anchor)), f = (e, t) => o({
411
+ function G({ index: t, cue: n, names: r, media: a, anchors: o, onChange: s, onRemove: c }) {
412
+ let { t: l } = e(), u = t + 1, d = j(A(n.from_page, n.from_anchor)), f = j(A(n.to_page, n.to_anchor)), p = (e, t) => s({
415
413
  file: n.file,
416
414
  loop: n.loop,
417
415
  layer: n.layer,
@@ -420,86 +418,90 @@ function W({ index: t, cue: n, names: r, anchors: a, onChange: o, onRemove: s })
420
418
  to_page: t.page,
421
419
  to_anchor: t.anchor
422
420
  });
423
- return /* @__PURE__ */ E("div", {
421
+ return /* @__PURE__ */ O("div", {
424
422
  className: "flex flex-wrap items-center gap-2",
425
423
  "data-ckui": "reader-background",
426
424
  children: [
427
- /* @__PURE__ */ T(z, {
428
- label: c("readerManifest.trackFile", { n: l }),
425
+ /* @__PURE__ */ D(B, {
426
+ label: l("readerManifest.trackFile", { n: u }),
429
427
  value: n.file,
430
428
  names: r.files,
431
- onChange: (e) => o({
429
+ onChange: (e) => s({
432
430
  ...n,
433
431
  file: e
434
432
  })
435
433
  }),
436
- /* @__PURE__ */ T(B, {
437
- label: c("readerManifest.trackFrom", { n: l }),
438
- none: c("readerManifest.start"),
439
- value: k(n.from_page, n.from_anchor),
440
- pages: r.pages,
441
- anchors: a,
442
- onChange: (e) => f(A(e), d)
434
+ /* @__PURE__ */ D(x, {
435
+ url: a.audio.get(n.file),
436
+ label: n.file
443
437
  }),
444
- /* @__PURE__ */ T(B, {
445
- label: c("readerManifest.trackTo", { n: l }),
446
- none: c("readerManifest.end"),
447
- value: k(n.to_page, n.to_anchor),
448
- pages: r.pages,
449
- anchors: a,
450
- onChange: (e) => f(u, A(e))
438
+ /* @__PURE__ */ D(V, {
439
+ label: l("readerManifest.trackFrom", { n: u }),
440
+ none: l("readerManifest.start"),
441
+ value: A(n.from_page, n.from_anchor),
442
+ media: a,
443
+ anchors: o,
444
+ onChange: (e) => p(j(e), f)
445
+ }),
446
+ /* @__PURE__ */ D(V, {
447
+ label: l("readerManifest.trackTo", { n: u }),
448
+ none: l("readerManifest.end"),
449
+ value: A(n.to_page, n.to_anchor),
450
+ media: a,
451
+ anchors: o,
452
+ onChange: (e) => p(d, j(e))
451
453
  }),
452
- /* @__PURE__ */ E("label", {
454
+ /* @__PURE__ */ O("label", {
453
455
  className: "flex items-center gap-1.5",
454
- children: [/* @__PURE__ */ T(m, {
456
+ children: [/* @__PURE__ */ D(h, {
455
457
  size: "sm",
456
458
  checked: !!n.loop,
457
- onCheckedChange: (e) => o({
459
+ onCheckedChange: (e) => s({
458
460
  ...n,
459
461
  loop: e || void 0
460
462
  }),
461
- "aria-label": c("readerManifest.loopN", { n: l })
462
- }), c("readerManifest.loop")]
463
+ "aria-label": l("readerManifest.loopN", { n: u })
464
+ }), l("readerManifest.loop")]
463
465
  }),
464
- /* @__PURE__ */ T(i, {
466
+ /* @__PURE__ */ D(i, {
465
467
  className: "h-8 w-28",
466
- "aria-label": c("readerManifest.layer", { n: l }),
467
- placeholder: c("readerManifest.layerPlaceholder"),
468
+ "aria-label": l("readerManifest.layer", { n: u }),
469
+ placeholder: l("readerManifest.layerPlaceholder"),
468
470
  value: n.layer ?? "",
469
- onChange: (e) => o({
471
+ onChange: (e) => s({
470
472
  ...n,
471
473
  layer: e.target.value || void 0
472
474
  })
473
475
  }),
474
- /* @__PURE__ */ T(V, {
475
- label: c("readerManifest.removeTrack", { n: l }),
476
- onRemove: s
476
+ /* @__PURE__ */ D(H, {
477
+ label: l("readerManifest.removeTrack", { n: u }),
478
+ onRemove: c
477
479
  })
478
480
  ]
479
481
  });
480
482
  }
481
- function G({ match: t }) {
483
+ function K({ match: t }) {
482
484
  let { t: n } = e();
483
- return /* @__PURE__ */ E("div", {
485
+ return /* @__PURE__ */ O("div", {
484
486
  className: "grid gap-1 rounded-md bg-muted p-2 text-xs",
485
487
  role: "status",
486
488
  children: [
487
- /* @__PURE__ */ T("p", { children: t.foreground.length ? n("readerManifest.matched", { count: t.foreground.length }) : n("readerManifest.matchedNone") }),
488
- t.unmatchedPages.length > 0 && /* @__PURE__ */ T("p", { children: n("readerManifest.pagesWithoutAudio", { names: t.unmatchedPages.join(", ") }) }),
489
- t.unmatchedFiles.length > 0 && /* @__PURE__ */ T("p", { children: n("readerManifest.audioWithoutPlace", { names: t.unmatchedFiles.join(", ") }) })
489
+ /* @__PURE__ */ D("p", { children: t.foreground.length ? n("readerManifest.matched", { count: t.foreground.length }) : n("readerManifest.matchedNone") }),
490
+ t.unmatchedPages.length > 0 && /* @__PURE__ */ D("p", { children: n("readerManifest.pagesWithoutAudio", { names: t.unmatchedPages.join(", ") }) }),
491
+ t.unmatchedFiles.length > 0 && /* @__PURE__ */ D("p", { children: n("readerManifest.audioWithoutPlace", { names: t.unmatchedFiles.join(", ") }) })
490
492
  ]
491
493
  });
492
494
  }
493
- function K({ problems: t }) {
495
+ function q({ problems: t }) {
494
496
  let { t: n } = e(), r = (e) => n(`readerManifest.at_${e.at}`, { n: e.index + 1 });
495
- return /* @__PURE__ */ T("ul", {
497
+ return /* @__PURE__ */ D("ul", {
496
498
  className: "grid gap-0.5 text-destructive",
497
499
  role: "alert",
498
500
  "data-ckui": "reader-problems",
499
- children: t.map((e, t) => /* @__PURE__ */ T("li", { children: n(`readerManifest.problem_${e.problem}`, { where: r(e) }) }, t))
501
+ children: t.map((e, t) => /* @__PURE__ */ D("li", { children: n(`readerManifest.problem_${e.problem}`, { where: r(e) }) }, t))
500
502
  });
501
503
  }
502
504
  //#endregion
503
- export { N as ReaderManifestEditor };
505
+ export { F as ReaderManifestEditor };
504
506
 
505
507
  //# sourceMappingURL=reader-manifest.js.map