@openrails/contentkit-ui 0.98.5 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +26 -0
  2. package/dist/client/content/comments.d.ts +4 -2
  3. package/dist/client/content/comments.js +10 -6
  4. package/dist/client/content/comments.js.map +1 -1
  5. package/dist/client/generated/routes.d.ts +28 -2
  6. package/dist/client/generated/routes.js +39 -2
  7. package/dist/client/generated/routes.js.map +1 -1
  8. package/dist/client/generated/wire.d.ts +85 -0
  9. package/dist/client/generated/wire.js.map +1 -1
  10. package/dist/client/media/client.d.ts +4 -0
  11. package/dist/client/media/client.js +8 -4
  12. package/dist/client/media/client.js.map +1 -1
  13. package/dist/client/media/queue.js +42 -26
  14. package/dist/client/media/queue.js.map +1 -1
  15. package/dist/client/media/rules.d.ts +6 -0
  16. package/dist/client/media/rules.js +64 -10
  17. package/dist/client/media/rules.js.map +1 -1
  18. package/dist/client/versions.d.ts +6 -2
  19. package/dist/client/versions.js +26 -0
  20. package/dist/client/versions.js.map +1 -1
  21. package/dist/components/admin/page-review.d.ts +13 -0
  22. package/dist/components/admin/page-review.js +216 -0
  23. package/dist/components/admin/page-review.js.map +1 -0
  24. package/dist/components/content/card.js +98 -103
  25. package/dist/components/content/card.js.map +1 -1
  26. package/dist/components/content/daily-releases.d.ts +8 -1
  27. package/dist/components/content/daily-releases.js +291 -133
  28. package/dist/components/content/daily-releases.js.map +1 -1
  29. package/dist/components/content/editors.js +216 -210
  30. package/dist/components/content/editors.js.map +1 -1
  31. package/dist/components/content/filter-dialog.d.ts +11 -0
  32. package/dist/components/content/filter-dialog.js +29 -0
  33. package/dist/components/content/filter-dialog.js.map +1 -0
  34. package/dist/components/content/filters.d.ts +10 -0
  35. package/dist/components/content/filters.js +5 -2
  36. package/dist/components/content/filters.js.map +1 -1
  37. package/dist/components/content/grid.js +19 -14
  38. package/dist/components/content/grid.js.map +1 -1
  39. package/dist/components/content/index.d.ts +2 -1
  40. package/dist/components/content/release-reveal.d.ts +5 -0
  41. package/dist/components/content/release-reveal.js +62 -0
  42. package/dist/components/content/release-reveal.js.map +1 -0
  43. package/dist/components/content/search.js +95 -107
  44. package/dist/components/content/search.js.map +1 -1
  45. package/dist/components/social/comments.d.ts +1 -1
  46. package/dist/components/social/comments.js +15 -15
  47. package/dist/components/social/comments.js.map +1 -1
  48. package/dist/index.d.ts +1 -0
  49. package/dist/index.js +24 -22
  50. package/dist/locales/admin/de.js +23 -0
  51. package/dist/locales/admin/de.js.map +1 -1
  52. package/dist/locales/admin/en.d.ts +23 -0
  53. package/dist/locales/admin/en.js +23 -0
  54. package/dist/locales/admin/en.js.map +1 -1
  55. package/dist/locales/admin/es.js +23 -0
  56. package/dist/locales/admin/es.js.map +1 -1
  57. package/dist/locales/admin/ja.js +23 -0
  58. package/dist/locales/admin/ja.js.map +1 -1
  59. package/dist/locales/admin/ko.js +23 -0
  60. package/dist/locales/admin/ko.js.map +1 -1
  61. package/dist/locales/admin/zh.js +23 -0
  62. package/dist/locales/admin/zh.js.map +1 -1
  63. package/dist/locales/discovery/de.js +11 -0
  64. package/dist/locales/discovery/de.js.map +1 -1
  65. package/dist/locales/discovery/en.d.ts +11 -0
  66. package/dist/locales/discovery/en.js +11 -0
  67. package/dist/locales/discovery/en.js.map +1 -1
  68. package/dist/locales/discovery/es.js +11 -0
  69. package/dist/locales/discovery/es.js.map +1 -1
  70. package/dist/locales/discovery/ja.js +11 -0
  71. package/dist/locales/discovery/ja.js.map +1 -1
  72. package/dist/locales/discovery/ko.js +11 -0
  73. package/dist/locales/discovery/ko.js.map +1 -1
  74. package/dist/locales/discovery/zh.js +11 -0
  75. package/dist/locales/discovery/zh.js.map +1 -1
  76. package/dist/locales/en.d.ts +34 -0
  77. package/dist/locales/social/en.js +2 -2
  78. package/dist/locales/social/en.js.map +1 -1
  79. package/dist/react/comments.d.ts +2 -1
  80. package/dist/react/comments.js +10 -8
  81. package/dist/react/comments.js.map +1 -1
  82. package/dist/react/folder.js +39 -39
  83. package/dist/react/folder.js.map +1 -1
  84. package/dist/react/index.d.ts +1 -0
  85. package/dist/react/page-review.d.ts +14 -0
  86. package/dist/react/page-review.js +36 -0
  87. package/dist/react/page-review.js.map +1 -0
  88. package/dist/react/public.d.ts +3 -1
  89. package/dist/react/public.js +76 -72
  90. package/dist/react/public.js.map +1 -1
  91. package/dist/react/resources.d.ts +5 -13
  92. package/dist/react/resources.js +58 -49
  93. package/dist/react/resources.js.map +1 -1
  94. package/dist/react/use-resource.d.ts +1 -1
  95. package/dist/react/use-resource.js +23 -13
  96. package/dist/react/use-resource.js.map +1 -1
  97. package/dist/react/versions.js +70 -42
  98. package/dist/react/versions.js.map +1 -1
  99. package/dist/react.js +8 -7
  100. package/dist/styles.css +1 -1
  101. package/package.json +1 -1
@@ -0,0 +1,216 @@
1
+ import { useMessages as e } from "../../i18n/context.js";
2
+ import { ContentKitUiRoot as t } from "../../scope.js";
3
+ import { Button as n } from "../../ui/button.js";
4
+ import { SortableList as r } from "../sortable-list.js";
5
+ import { Badge as i } from "../../ui/badge.js";
6
+ import { Select as a, SelectContent as o, SelectItem as s, SelectTrigger as c, SelectValue as l } from "../../ui/select.js";
7
+ import { ErrorLine as u, useAction as d } from "../social/parts.js";
8
+ import { LoadFailed as f, Rows as p } from "./shell.js";
9
+ import { usePageReview as m } from "../../react/page-review.js";
10
+ import { useState as h } from "react";
11
+ import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
12
+ import { cn as y } from "cn";
13
+ //#region src/components/admin/page-review.tsx
14
+ function b(e) {
15
+ if (e) try {
16
+ let t = new URL(e, globalThis.location?.href ?? "http://localhost/");
17
+ if (t.protocol === "http:" || t.protocol === "https:") return e;
18
+ } catch {}
19
+ }
20
+ var x = (e) => e.replace(/[_-]+/g, " "), S = (e) => e.source_entry || e.source_name;
21
+ function C({ content: C, version: w, client: T, onError: E, className: D, appearance: O }) {
22
+ let { t: k } = e(), A = m(C, w, { client: T }), j = d("reader.save", E), [M, N] = h(!1), P = A.review, F = P?.pages.some((e) => e.flags.includes("segmented_selection_preserved")) ?? !1, I = (e) => {
23
+ !P || F || j.pending || A.loading || (N(!1), j.run(() => A.update({
24
+ ...e,
25
+ revision: P.revision
26
+ })).then((e) => e && N(!0)));
27
+ }, L = (() => {
28
+ if (!P) return A.error ? /* @__PURE__ */ _(f, {
29
+ error: A.error,
30
+ message: k("pageReview.loadFailed"),
31
+ retry: A.reload
32
+ }) : /* @__PURE__ */ _(p, { count: 2 });
33
+ if (!P.pages.length) return /* @__PURE__ */ _("p", {
34
+ className: "text-muted-foreground",
35
+ children: k("pageReview.empty")
36
+ });
37
+ let e = F || j.pending || A.loading;
38
+ return /* @__PURE__ */ v(g, { children: [
39
+ /* @__PURE__ */ _("p", {
40
+ className: "text-muted-foreground",
41
+ children: k("pageReview.summary", {
42
+ selected: P.selected,
43
+ total: P.pages.length,
44
+ flagged: P.flagged
45
+ })
46
+ }),
47
+ F ? /* @__PURE__ */ _("p", {
48
+ role: "status",
49
+ className: "rounded-md border border-border p-2 text-muted-foreground",
50
+ children: k("pageReview.chapterGuard")
51
+ }) : /* @__PURE__ */ _("p", {
52
+ className: "text-xs text-muted-foreground",
53
+ children: k("pageReview.help")
54
+ }),
55
+ /* @__PURE__ */ _("div", {
56
+ className: "max-h-[32rem] overflow-y-auto rounded-md border border-border p-2",
57
+ children: /* @__PURE__ */ _(r, {
58
+ items: P.pages,
59
+ id: (e) => e.id,
60
+ name: S,
61
+ label: k("pageReview.order"),
62
+ disabled: e || P.pages.length < 2,
63
+ onMove: (e, t) => {
64
+ if (e === t) return;
65
+ let n = P.pages.map((e) => e.id), [r] = n.splice(e, 1);
66
+ n.splice(t, 0, r), I({ order: n });
67
+ },
68
+ children: (t, n, r) => {
69
+ let u = b(t.preview_url), d = b(t.source_url);
70
+ return /* @__PURE__ */ v("div", {
71
+ className: "flex gap-2 rounded-md border border-border p-2",
72
+ "data-ckui": "page-review-row",
73
+ "data-included": t.included,
74
+ "data-mode": t.mode,
75
+ children: [/* @__PURE__ */ v("div", {
76
+ className: "flex shrink-0 flex-col items-center gap-1",
77
+ children: [
78
+ /* @__PURE__ */ _("span", {
79
+ className: "text-xs text-muted-foreground",
80
+ children: r + 1
81
+ }),
82
+ n,
83
+ u && /* @__PURE__ */ _("img", {
84
+ src: u,
85
+ alt: "",
86
+ loading: "lazy",
87
+ decoding: "async",
88
+ className: "h-16 w-12 rounded object-contain"
89
+ })
90
+ ]
91
+ }), /* @__PURE__ */ v("div", {
92
+ className: "grid min-w-0 flex-1 gap-1",
93
+ children: [
94
+ /* @__PURE__ */ v("p", {
95
+ className: "break-words",
96
+ children: [/* @__PURE__ */ v("span", {
97
+ className: "text-muted-foreground",
98
+ children: [k("pageReview.original"), " "]
99
+ }), S(t)]
100
+ }),
101
+ /* @__PURE__ */ v("p", {
102
+ className: "break-words",
103
+ children: [/* @__PURE__ */ v("span", {
104
+ className: "text-muted-foreground",
105
+ children: [k("pageReview.canonical"), " "]
106
+ }), t.id]
107
+ }),
108
+ /* @__PURE__ */ v("div", {
109
+ className: "flex flex-wrap items-center gap-2",
110
+ children: [
111
+ /* @__PURE__ */ _(i, {
112
+ variant: t.included ? "outline" : "secondary",
113
+ children: k(t.included ? "pageReview.included" : "pageReview.excluded")
114
+ }),
115
+ !!t.flags.length && /* @__PURE__ */ _(i, {
116
+ variant: "outline",
117
+ children: k("pageReview.flagged")
118
+ }),
119
+ d && /* @__PURE__ */ _("a", {
120
+ href: d,
121
+ target: "_blank",
122
+ rel: "noopener noreferrer",
123
+ className: "text-xs underline",
124
+ children: k("pageReview.source")
125
+ })
126
+ ]
127
+ }),
128
+ /* @__PURE__ */ v("p", {
129
+ className: "text-xs text-muted-foreground",
130
+ children: [
131
+ x(t.decision.reason),
132
+ " · ",
133
+ k("pageReview.confidence", { confidence: x(t.decision.confidence) })
134
+ ]
135
+ }),
136
+ !!t.flags.length && /* @__PURE__ */ _("p", {
137
+ className: "text-xs text-muted-foreground",
138
+ children: t.flags.map(x).join(" · ")
139
+ }),
140
+ /* @__PURE__ */ v(a, {
141
+ value: t.mode,
142
+ onValueChange: (e) => {
143
+ e !== t.mode && (e === "auto" || e === "include" || e === "exclude") && I({ pages: [{
144
+ id: t.id,
145
+ mode: e
146
+ }] });
147
+ },
148
+ children: [/* @__PURE__ */ _(c, {
149
+ size: "sm",
150
+ className: "w-44",
151
+ disabled: e,
152
+ "aria-label": k("pageReview.choice", { name: S(t) }),
153
+ children: /* @__PURE__ */ _(l, { children: (e) => k(e === "include" ? "pageReview.include" : e === "exclude" ? "pageReview.exclude" : "pageReview.automatic") })
154
+ }), /* @__PURE__ */ v(o, { children: [
155
+ /* @__PURE__ */ _(s, {
156
+ value: "auto",
157
+ children: k("pageReview.automatic")
158
+ }),
159
+ /* @__PURE__ */ _(s, {
160
+ value: "include",
161
+ children: k("pageReview.include")
162
+ }),
163
+ /* @__PURE__ */ _(s, {
164
+ value: "exclude",
165
+ children: k("pageReview.exclude")
166
+ })
167
+ ] })]
168
+ })
169
+ ]
170
+ })]
171
+ });
172
+ }
173
+ })
174
+ }),
175
+ j.error?.status === 409 ? /* @__PURE__ */ _("p", {
176
+ role: "alert",
177
+ className: "text-destructive",
178
+ children: k("pageReview.conflict")
179
+ }) : /* @__PURE__ */ _(u, { error: j.error }),
180
+ A.error && /* @__PURE__ */ _(f, {
181
+ error: A.error,
182
+ message: k("pageReview.loadFailed"),
183
+ retry: A.reload
184
+ }),
185
+ M && /* @__PURE__ */ _("span", {
186
+ role: "status",
187
+ className: "text-muted-foreground",
188
+ children: k("pageReview.saved")
189
+ })
190
+ ] });
191
+ })();
192
+ return /* @__PURE__ */ v(t, {
193
+ appearance: O,
194
+ className: y("grid gap-3 text-sm", D),
195
+ "data-ckui": "page-review",
196
+ "aria-busy": j.pending || A.loading,
197
+ children: [/* @__PURE__ */ v("div", {
198
+ className: "flex items-center justify-between gap-2",
199
+ children: [/* @__PURE__ */ _("h4", {
200
+ className: "font-medium",
201
+ children: k("pageReview.title")
202
+ }), /* @__PURE__ */ _(n, {
203
+ type: "button",
204
+ size: "xs",
205
+ variant: "ghost",
206
+ disabled: j.pending || A.loading,
207
+ onClick: A.reload,
208
+ children: k("pageReview.refresh")
209
+ })]
210
+ }), L]
211
+ });
212
+ }
213
+ //#endregion
214
+ export { C as PageReview };
215
+
216
+ //# sourceMappingURL=page-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-review.js","names":[],"sources":["../../../src/components/admin/page-review.tsx"],"sourcesContent":["import { cn } from \"cn\";\nimport { useState } from \"react\";\nimport type { ContentKitUiAppearance } from \"../../appearance.js\";\nimport type { ContentKitClient } from \"../../client/client.js\";\nimport type { PageReviewEntry, PageReviewPatch } from \"../../client/generated/wire.js\";\nimport { useMessages } from \"../../i18n/context.js\";\nimport type { ContentKitErrorHandler } from \"../../react/context.js\";\nimport { usePageReview } from \"../../react/page-review.js\";\nimport { ContentKitUiRoot } from \"../../scope.js\";\nimport { Badge } from \"#ckui/ui/badge\";\nimport { Button } from \"#ckui/ui/button\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"#ckui/ui/select\";\nimport { SortableList } from \"../sortable-list.js\";\nimport { ErrorLine, useAction } from \"../social/parts.js\";\nimport { LoadFailed, Rows } from \"./shell.js\";\n\nexport interface PageReviewProps {\n content: string;\n version: string;\n client?: ContentKitClient;\n onError?: ContentKitErrorHandler;\n className?: string;\n appearance?: ContentKitUiAppearance;\n}\n\n/** Only link the editor media URLs supplied by the server, never upload paths. */\nfunction imageURL(value?: string): string | undefined {\n if (!value) return;\n try {\n const url = new URL(value, globalThis.location?.href ?? \"http://localhost/\");\n if (url.protocol === \"http:\" || url.protocol === \"https:\") return value;\n } catch { /* An invalid or unsupported URL has no preview. */ }\n}\n\nconst words = (value: string) => value.replace(/[_-]+/g, \" \");\nconst originalName = (page: PageReviewEntry) => page.source_entry || page.source_name;\n\n/** Review automatic page choices without holding up ordinary publication. */\nexport function PageReview({ content, version, client, onError, className, appearance }: PageReviewProps) {\n const { t } = useMessages();\n const r = usePageReview(content, version, { client });\n const save = useAction(\"reader.save\", onError);\n const [saved, setSaved] = useState(false);\n const review = r.review;\n const chapterGuarded = review?.pages.some((page) => page.flags.includes(\"segmented_selection_preserved\")) ?? false;\n const apply = (patch: Omit<PageReviewPatch, \"revision\">) => {\n if (!review || chapterGuarded || save.pending || r.loading) return;\n setSaved(false);\n void save.run(() => r.update({ ...patch, revision: review.revision })).then((result) => result && setSaved(true));\n };\n const body = (() => {\n if (!review) return r.error ? <LoadFailed error={r.error} message={t(\"pageReview.loadFailed\")} retry={r.reload} /> : <Rows count={2} />;\n if (!review.pages.length) return <p className=\"text-muted-foreground\">{t(\"pageReview.empty\")}</p>;\n const disabled = chapterGuarded || save.pending || r.loading;\n return <>\n <p className=\"text-muted-foreground\">{t(\"pageReview.summary\", { selected: review.selected, total: review.pages.length, flagged: review.flagged })}</p>\n {chapterGuarded\n ? <p role=\"status\" className=\"rounded-md border border-border p-2 text-muted-foreground\">{t(\"pageReview.chapterGuard\")}</p>\n : <p className=\"text-xs text-muted-foreground\">{t(\"pageReview.help\")}</p>}\n <div className=\"max-h-[32rem] overflow-y-auto rounded-md border border-border p-2\">\n <SortableList items={review.pages} id={(page) => page.id} name={originalName} label={t(\"pageReview.order\")} disabled={disabled || review.pages.length < 2}\n onMove={(from, to) => {\n if (from === to) return;\n const order = review.pages.map((page) => page.id);\n const [moved] = order.splice(from, 1);\n order.splice(to, 0, moved!);\n apply({ order });\n }}>\n {(page, handle, index) => {\n const preview = imageURL(page.preview_url);\n const source = imageURL(page.source_url);\n return <div className=\"flex gap-2 rounded-md border border-border p-2\" data-ckui=\"page-review-row\" data-included={page.included} data-mode={page.mode}>\n <div className=\"flex shrink-0 flex-col items-center gap-1\">\n <span className=\"text-xs text-muted-foreground\">{index + 1}</span>\n {handle}\n {preview && <img src={preview} alt=\"\" loading=\"lazy\" decoding=\"async\" className=\"h-16 w-12 rounded object-contain\" />}\n </div>\n <div className=\"grid min-w-0 flex-1 gap-1\">\n <p className=\"break-words\"><span className=\"text-muted-foreground\">{t(\"pageReview.original\")} </span>{originalName(page)}</p>\n <p className=\"break-words\"><span className=\"text-muted-foreground\">{t(\"pageReview.canonical\")} </span>{page.id}</p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant={page.included ? \"outline\" : \"secondary\"}>{t(page.included ? \"pageReview.included\" : \"pageReview.excluded\")}</Badge>\n {!!page.flags.length && <Badge variant=\"outline\">{t(\"pageReview.flagged\")}</Badge>}\n {source && <a href={source} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-xs underline\">{t(\"pageReview.source\")}</a>}\n </div>\n <p className=\"text-xs text-muted-foreground\">{words(page.decision.reason)} · {t(\"pageReview.confidence\", { confidence: words(page.decision.confidence) })}</p>\n {!!page.flags.length && <p className=\"text-xs text-muted-foreground\">{page.flags.map(words).join(\" · \")}</p>}\n <Select value={page.mode} onValueChange={(mode) => {\n if (mode !== page.mode && (mode === \"auto\" || mode === \"include\" || mode === \"exclude\")) apply({ pages: [{ id: page.id, mode }] });\n }}>\n <SelectTrigger size=\"sm\" className=\"w-44\" disabled={disabled} aria-label={t(\"pageReview.choice\", { name: originalName(page) })}>\n <SelectValue>{(mode: string) => t(mode === \"include\" ? \"pageReview.include\" : mode === \"exclude\" ? \"pageReview.exclude\" : \"pageReview.automatic\")}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"auto\">{t(\"pageReview.automatic\")}</SelectItem>\n <SelectItem value=\"include\">{t(\"pageReview.include\")}</SelectItem>\n <SelectItem value=\"exclude\">{t(\"pageReview.exclude\")}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>;\n }}\n </SortableList>\n </div>\n {save.error?.status === 409 ? <p role=\"alert\" className=\"text-destructive\">{t(\"pageReview.conflict\")}</p> : <ErrorLine error={save.error} />}\n {r.error && <LoadFailed error={r.error} message={t(\"pageReview.loadFailed\")} retry={r.reload} />}\n {saved && <span role=\"status\" className=\"text-muted-foreground\">{t(\"pageReview.saved\")}</span>}\n </>;\n })();\n return <ContentKitUiRoot appearance={appearance} className={cn(\"grid gap-3 text-sm\", className)} data-ckui=\"page-review\" aria-busy={save.pending || r.loading}>\n <div className=\"flex items-center justify-between gap-2\">\n <h4 className=\"font-medium\">{t(\"pageReview.title\")}</h4>\n <Button type=\"button\" size=\"xs\" variant=\"ghost\" disabled={save.pending || r.loading} onClick={r.reload}>{t(\"pageReview.refresh\")}</Button>\n </div>\n {body}\n </ContentKitUiRoot>;\n}\n"],"mappings":"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"}