@openrails/contentkit-ui 0.103.1 → 0.103.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/admin/content-manager.d.ts +1 -1
- package/dist/components/admin/content-manager.js +346 -304
- package/dist/components/admin/content-manager.js.map +1 -1
- package/dist/components/admin/page-review.js +106 -97
- package/dist/components/admin/page-review.js.map +1 -1
- package/dist/components/admin/reader-content-editor.d.ts +6 -0
- package/dist/components/admin/reader-content-editor.js +709 -0
- package/dist/components/admin/reader-content-editor.js.map +1 -0
- package/dist/components/admin/reader-manifest.js +120 -105
- package/dist/components/admin/reader-manifest.js.map +1 -1
- package/dist/components/content/editor-save.d.ts +32 -0
- package/dist/components/content/editor-save.js +51 -0
- package/dist/components/content/editor-save.js.map +1 -0
- package/dist/components/content/editors.d.ts +17 -2
- package/dist/components/content/editors.js +359 -328
- package/dist/components/content/editors.js.map +1 -1
- package/dist/components/content/offer-fields.d.ts +1 -1
- package/dist/components/content/offer-fields.js +86 -64
- package/dist/components/content/offer-fields.js.map +1 -1
- package/dist/components/groups/memberships.d.ts +11 -1
- package/dist/components/groups/memberships.js +1 -1
- package/dist/components/groups/memberships.js.map +1 -1
- package/dist/components/media-folder-editor.d.ts +4 -0
- package/dist/components/media-folder-editor.js +177 -167
- package/dist/components/media-folder-editor.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/locales/admin/de.js +25 -0
- package/dist/locales/admin/de.js.map +1 -1
- package/dist/locales/admin/en.d.ts +25 -0
- package/dist/locales/admin/en.js +25 -0
- package/dist/locales/admin/en.js.map +1 -1
- package/dist/locales/admin/es.js +25 -0
- package/dist/locales/admin/es.js.map +1 -1
- package/dist/locales/admin/ja.js +25 -0
- package/dist/locales/admin/ja.js.map +1 -1
- package/dist/locales/admin/ko.js +25 -0
- package/dist/locales/admin/ko.js.map +1 -1
- package/dist/locales/admin/zh.js +25 -0
- package/dist/locales/admin/zh.js.map +1 -1
- package/dist/locales/en.d.ts +25 -0
- package/dist/react/page-review.d.ts +1 -1
- package/dist/react/page-review.js +6 -5
- package/dist/react/page-review.js.map +1 -1
- package/dist/react/use-draft.d.ts +8 -0
- package/dist/react/use-draft.js +35 -0
- package/dist/react/use-draft.js.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader-content-editor.js","names":[],"sources":["../../../src/components/admin/reader-content-editor.tsx"],"sourcesContent":["import { StarIcon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { parseAttributes } from \"../../client/group-fields.js\";\nimport { imageRefs } from \"../../client/contents.js\";\nimport { toContentKitError } from \"../../client/errors.js\";\nimport type { CatalogText, Content, ContentModel, FileInfo, GroupCard, Listing, Rule } from \"../../client/generated/wire.js\";\nimport { stem } from \"../../client/media/client.js\";\nimport { isProcessing } from \"../../client/media/windows.js\";\nimport { useMessages } from \"../../i18n/context.js\";\nimport { useContent } from \"../../react/contents.js\";\nimport { useErrorReporter, useGuarded } from \"../../react/context.js\";\nimport { useMediaFolder } from \"../../react/folder.js\";\nimport { useContentGroups } from \"../../react/groups.js\";\nimport { usePageReview } from \"../../react/page-review.js\";\nimport { useContentScope } from \"../../react/use-resource.js\";\nimport { Badge } from \"#ckui/ui/badge\";\nimport { Button } from \"#ckui/ui/button\";\nimport { Input } from \"#ckui/ui/input\";\nimport { Label } from \"#ckui/ui/label\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"#ckui/ui/select\";\nimport { Textarea } from \"#ckui/ui/textarea\";\nimport { AttributeFields, formOf } from \"../groups/fields.js\";\nimport { MembershipRow } from \"../groups/memberships.js\";\nimport { GroupPicker, labelOf } from \"../groups/parts.js\";\nimport { MediaFolderEditor } from \"../media-folder-editor.js\";\nimport { useDraft } from \"../../react/use-draft.js\";\nimport { RuleFields, cleanRule, complete, VersionsEditor, versionLabel } from \"../content/editors.js\";\nimport { OfferFields } from \"../content/offer-fields.js\";\nimport { ErrorLine, contentError, useAction } from \"../social/parts.js\";\nimport { localInput } from \"../social/bans.js\";\nimport { EditorSaveContext, readerMediaReady, useEditorSaveCoordinator } from \"../content/editor-save.js\";\nimport { ReaderManifestEditor } from \"./reader-manifest.js\";\nimport { PageReview } from \"./page-review.js\";\nimport { LoadFailed, Rows, useConfirm } from \"./shell.js\";\nimport { contentStatus, type ContentEditorProps } from \"./content-manager.js\";\n\nconst blank = (): CatalogText => ({ title: \"\", slug: \"\", description: \"\", body: \"\" });\nconst editableText = (item: Content | null, language: string): CatalogText =>\n item?.text?.[language] ??\n (item?.language === language ? { title: item.title, slug: item.slug, description: item.description, body: item.body } : blank());\nconst fileTitle = (name: string) =>\n name\n .replace(/\\.[^.]+$/, \"\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .slice(0, 300);\nconst textOf = (text: CatalogText): CatalogText => ({\n ...text,\n title: text.title.trim(),\n slug: text.slug?.trim() || undefined,\n description: text.description?.trim(),\n});\nclass ValidationError extends Error {}\n\nfunction Panel({ title, children, className = \"\" }: { title: ReactNode; children: ReactNode; className?: string }) {\n return (\n <section className={`grid min-w-0 content-start gap-4 rounded-xl border border-border bg-card p-4 ${className}`}>\n <h2 className=\"text-base font-semibold\">{title}</h2>\n {children}\n </section>\n );\n}\n\n/** A reader work, its files and associations are one editing session. */\nexport function ReaderContentEditor(p: ContentEditorProps & { model: ContentModel }) {\n const { client, scope } = useContentScope(p.client);\n const m = useMessages();\n const { t } = m;\n const ids = useId();\n const guarded = useGuarded();\n const report = useErrorReporter(p.onError);\n const model = p.model,\n spec = model.kinds[p.kind]!;\n const offered = p.languages?.map((l) => (typeof l === \"string\" ? { value: l, label: l } : l));\n const languages = offered?.length ? offered : model.languages.map((l) => ({ value: l, label: l }));\n const languageKey = languages.map((l) => l.value).join(\"|\");\n const [language, setLanguage] = useState(languages[0]?.value ?? \"en\");\n const [chosen, setChosen] = useState(\"\");\n const ed = useContent(p.id, p.kind, language, { client, version: chosen || undefined });\n const [created, setCreated] = useState<Content | null>(null);\n const item = ed.content ?? created;\n const owned = useRef({ item, scope, alive: true });\n owned.current.item = item;\n useEffect(() => {\n const owner = owned.current;\n owner.alive = true;\n return () => {\n owner.alive = false;\n };\n }, []);\n const current = () => owned.current.alive && owned.current.scope === scope;\n const creating = useRef<Promise<Content> | null>(null);\n const [allocating, setAllocating] = useState(false);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<unknown>();\n const [notice, setNotice] = useState(\"\");\n const publication = useDraft(useMemo(() => ({ at: item?.publish_at ? localInput(new Date(item.publish_at)) : \"\" }), [item?.publish_at]));\n const publishAt = publication.value.at;\n const setPublishAt = (at: string) => publication.edit({ at });\n const [versionsOpened, setVersionsOpened] = useState(false);\n const [toolsOpened, setToolsOpened] = useState<string[]>([]);\n const [toolsExpanded, setToolsExpanded] = useState(false);\n const [reviewOpened, setReviewOpened] = useState(false);\n const versions = useMemo(() => [...(item?.versions ?? [])].sort((a, b) => a.position - b.position), [item?.versions]);\n const version = versions.find((v) => v.id === chosen) ?? versions[0];\n useEffect(() => {\n if (toolsExpanded && version) setToolsOpened((ids) => (ids.includes(version.id) ? ids : [...ids, version.id]));\n }, [toolsExpanded, version]);\n const membership = useContentGroups(item?.id, { language, client });\n const names = useMemo(() => new Map(membership.entities), [membership.entities]);\n const [picked, setPicked] = useState<ReadonlyMap<string, GroupCard>>(new Map());\n const cards = useMemo(() => new Map([...picked, ...names]), [names, picked]);\n const groupKinds = useMemo(() => spec.entities ?? [], [spec.entities]);\n const texts = useDraft(useMemo(() => Object.fromEntries(languageKey.split(\"|\").map((l) => [l, editableText(item, l)])), [item, languageKey]));\n const details = useDraft(\n useMemo(\n () => ({\n listing: item?.listing ?? (\"listed\" as Listing),\n comments: item?.comments ?? \"open\",\n attributes: formOf(spec.attributes ?? {}, item?.attributes ?? {}),\n access: item?.access ?? ({ level: \"public\" } as Rule),\n }),\n [item?.listing, item?.comments, item?.attributes, item?.access, spec.attributes],\n ),\n );\n const associations = useDraft(\n useMemo(\n () => ({ memberships: membership.memberships.filter((a) => groupKinds.includes(membership.entities.get(a.group_id ?? \"\")?.kind ?? \"\")) }),\n [membership.memberships, membership.entities, groupKinds],\n ),\n );\n const coordinator = useEditorSaveCoordinator();\n const latest = useRef({ texts, details, associations, language });\n latest.current = { texts, details, associations, language };\n const text = texts.value[language] ?? blank();\n const shownBody = (text.body ?? \"\").replace(imageRefs(), (ref, name: string) => ed.imageSrc(name) ?? ref);\n const editText = (patch: Partial<CatalogText>) => texts.edit((all) => ({ ...all, [language]: { ...(all[language] ?? blank()), ...patch } }));\n const fail = (e: unknown) => {\n if (!current()) return;\n setError(e instanceof ValidationError ? e.message : e);\n if (!(e instanceof ValidationError)) report(toContentKitError(e), \"content.save\");\n };\n const ensure = async (suggested?: string): Promise<Content> => {\n if (owned.current.item) return owned.current.item;\n if (creating.current) return creating.current;\n setAllocating(true);\n const l = latest.current.language;\n const before = latest.current.texts.get()[l] ?? blank();\n const title = before.title.trim() || fileTitle(suggested ?? \"\") || t(\"readerEditor.untitled\");\n if (!before.title.trim()) latest.current.texts.edit((all) => ({ ...all, [l]: { ...(all[l] ?? blank()), title } }));\n const input = { kind: p.kind, text: { [l]: { ...before, title } }, owner_group_id: p.ownerGroup };\n creating.current = ed\n .create(input)\n .then((content) => {\n owned.current.item = content;\n if (current()) {\n setCreated(content);\n p.onCreated?.(content);\n }\n return content;\n })\n .finally(() => {\n creating.current = null;\n if (current()) setAllocating(false);\n });\n return creating.current;\n };\n const ref = useMemo(() => (item && version ? { kind: p.kind, id: item.id, version: version.id } : null), [p.kind, item, version]);\n const cover = useAction(\"content.save\", p.onError);\n const offer = useAction(\"offer.save\", p.onError);\n const actions = useAction(\"content.save\", p.onError);\n const folder = useMediaFolder(ref, { commit: version?.live ? \"manual\" : \"auto\", client, onError: p.onError });\n const folderRef = useRef(folder);\n folderRef.current = folder;\n const files = folder.read.read?.files ?? [];\n const review = usePageReview(item?.id, version?.id, { client });\n const mediaFailed = !!folder.error || folder.queue.items.some((q) => q.status === \"failed\") || files.some((f) => f.failed);\n const processing = files.some(isProcessing);\n const selectedPages = review.review?.selected ?? 0;\n const publishingBlocked =\n folder.busy ||\n allocating ||\n processing ||\n mediaFailed ||\n review.loading ||\n !!review.error ||\n selectedPages === 0 ||\n coordinator.pending ||\n cover.pending ||\n offer.pending;\n const add = (input: Iterable<File>) => {\n const added = [...input];\n if (!added.length) return;\n folder.add(added);\n void ensure(added.find((f) => /\\.zip$/i.test(f.name))?.name ?? added[0]?.name).catch(fail);\n };\n const dirty =\n publication.dirty.length > 0 ||\n texts.dirty.length > 0 ||\n details.dirty.length > 0 ||\n associations.dirty.length > 0 ||\n coordinator.dirty;\n useEffect(() => {\n if (!dirty && !folder.busy) return;\n const ask = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = \"\";\n };\n addEventListener(\"beforeunload\", ask);\n return () => removeEventListener(\"beforeunload\", ask);\n }, [dirty, folder.busy]);\n const save = async (publish: boolean) => {\n if (saving) return;\n setError(undefined);\n setNotice(\"\");\n const state = latest.current;\n const active = state.texts.get()[state.language];\n if (!active?.title.trim()) return setError(t(\"contentManager.titleRequired\"));\n const problem = coordinator.problem();\n if (problem) return setError(t(\"readerEditor.fixSection\", { section: problem }));\n if (!complete(state.details.get().access) || (state.details.get().access.level === \"tier\" && !state.details.get().access.tiers?.length))\n return setError(t(\"readerEditor.accessRequired\"));\n let attributes: Record<string, unknown>;\n try {\n attributes = parseAttributes(spec.attributes ?? {}, state.details.get().attributes);\n } catch (e) {\n return fail(e);\n }\n if (publish && publishingBlocked) return setError(t(\"readerEditor.filesNotReady\"));\n setSaving(true);\n const settleTexts = state.texts.checkpoint(),\n settleDetails = state.details.checkpoint(),\n settleAssociations = state.associations.checkpoint();\n const changedText = state.texts.dirty.slice();\n const snapshotTexts = { ...state.texts.get() };\n const snapshotDetails = state.details.get();\n const snapshotAssociations = state.associations.get().memberships.slice();\n let cleanAssociations = true;\n try {\n let content = await ensure();\n if (!current()) return;\n if (membership.error) throw membership.error;\n await guarded(async () => {\n for (const key of changedText) {\n const l = String(key);\n const next = snapshotTexts[l];\n if (!next?.title.trim()) throw new ValidationError(t(\"contentManager.titleRequired\"));\n content = await client.contents.putText(content.id, l, textOf(next));\n if (!current()) return;\n }\n // Text writes advance the content revision. Fetch the current record\n // before the revision-checked details write, never reuse a stale one.\n content = await client.contents.get(content.id, language);\n if (!current()) return;\n content = await client.contents.update(content.id, {\n listing: snapshotDetails.listing,\n comments: snapshotDetails.comments,\n attributes,\n access: cleanRule(snapshotDetails.access),\n revision: content.revision,\n });\n if (!current()) return;\n if (state.associations.dirty.length) {\n const targetVersion = content.versions.find((v) => v.id === version?.id) ?? content.versions[0];\n const memberships = snapshotAssociations.map((a) => {\n const kind = cards.get(a.group_id ?? \"\")?.kind;\n return kind && model.entity_kinds[kind]?.version_level && !a.version_id ? { ...a, version_id: targetVersion?.id } : a;\n });\n const saved = await client.entities.setOfContent(content.id, { kinds: [...groupKinds], memberships }, language);\n cleanAssociations = settleAssociations({\n memberships: saved.memberships.filter((a) => groupKinds.includes(saved.entities.find((g) => g.id === a.group_id)?.kind ?? \"\")),\n });\n }\n });\n if (!current()) return;\n // A live edition queues changes for one commit; a draft adds files as\n // uploads finish. Saving metadata never interrupts a running upload.\n const currentFolder = folderRef.current;\n if (!currentFolder.busy && (currentFolder.pending.length || currentFolder.queue.items.some((q) => q.status === \"uploaded\"))) await currentFolder.commit();\n const blocked = await coordinator.save(current);\n if (blocked) throw new ValidationError(t(\"readerEditor.fixSection\", { section: blocked }));\n if (!current()) return;\n const cleanTexts = settleTexts(Object.fromEntries(languages.map((l) => [l.value, content.text?.[l.value] ?? snapshotTexts[l.value] ?? blank()])));\n const cleanDetails = settleDetails({\n listing: content.listing,\n comments: content.comments,\n attributes: formOf(spec.attributes ?? {}, content.attributes),\n access: content.access,\n });\n if (publish) {\n if (!cleanTexts || !cleanDetails || !cleanAssociations) throw new ValidationError(t(\"readerEditor.changedDuringSave\"));\n const fresh = folderRef.current;\n if (!ref || fresh.busy || fresh.error || fresh.queue.items.some((q) => q.status === \"failed\") || !(await readerMediaReady(client, ref)))\n throw new ValidationError(t(\"readerEditor.filesNotReady\"));\n const edition = version ? await client.contents.version(content.id, version.id, language) : null;\n if (edition?.state !== \"published\") throw new ValidationError(t(\"readerEditor.versionDraft\"));\n if (!current()) return;\n const settlePublication = publication.checkpoint();\n const published = await guarded(() => client.contents.publish(content.id, publishAt ? new Date(publishAt).toISOString() : undefined));\n settlePublication({ at: published.publish_at ? localInput(new Date(published.publish_at)) : \"\" });\n setNotice(t(\"contentManager.publishedNotice\"));\n } else setNotice(t(\"pollEditor.saved\"));\n } catch (e) {\n fail(e);\n } finally {\n if (current()) setSaving(false);\n }\n };\n\n const customCover = async (file: File) => {\n const content = await ensure(file.name);\n const v = content.versions.find((v) => v.id === version?.id) ?? content.versions[0];\n if (!v || !current()) return;\n const target = { kind: p.kind, id: content.id, version: v.id };\n const up = await client.media.uploadNamed(target, file, { path: await client.media.presetPath(p.kind, \"cover\", file) });\n if (current()) await client.contents.setCover(content.id, v.id, up.name);\n };\n const selectCover = async (file: FileInfo) => {\n if (!ref || !item || !version) return;\n const path = await client.media.presetPath(p.kind, \"cover\", new File([], file.path.split(\"/\").at(-1) ?? \"cover\", { type: file.type }));\n await client.media.commit(ref, [{ op: \"copy\", from: { id: item.id, version: version.id, path: file.path }, to: path }]);\n if (current()) await client.contents.setCover(item.id, version.id, stem(path).split(\"/\").at(-1)!);\n };\n const { confirm, dialog } = useConfirm();\n const remove = async () => {\n if (\n !item ||\n !(await confirm({\n title: t(\"contentManager.deleteTitle\", { title: item.title }),\n description: t(\"contentManager.deleteBody\"),\n confirm: t(\"contentManager.delete\"),\n }))\n )\n return;\n await actions.run(async () => {\n folder.discard();\n await client.contents.remove(item.id);\n if (current()) p.onDeleted?.(item);\n });\n };\n if (p.id && !item) return ed.error ? <LoadFailed error={ed.error} message={t(\"contentManager.loadFailed\")} retry={ed.reload} /> : <Rows />;\n const status = item ? contentStatus(item) : \"draft\";\n const primaryVersion = version?.id;\n const changeDetails = (patch: Partial<typeof details.value>) => details.edit((d) => ({ ...d, ...patch }));\n const versionChoices = versions.map((v) => ({ id: v.id, label: versionLabel(v, (l) => languages.find((x) => x.value === l)?.label ?? l, p.labels) }));\n return (\n <EditorSaveContext.Provider value={coordinator.context}>\n <div className=\"grid gap-5 text-base\" data-ckui=\"reader-content-editor\">\n <div className=\"sticky top-0 z-10 flex flex-wrap items-center gap-3 rounded-xl border border-border bg-background/95 p-4 shadow-sm\">\n <div className=\"min-w-0 flex-1\">\n <h1 className=\"truncate text-xl font-semibold\">{text.title || t(\"readerEditor.new\")}</h1>\n <div className=\"mt-1 flex items-center gap-2 text-sm text-muted-foreground\">\n <Badge variant={item?.live ? \"default\" : \"outline\"}>{t(`contentManager.${status}`)}</Badge>\n {version && <span>{t(\"contentEditor.pageCount\", { count: version.pages ?? selectedPages })}</span>}\n {allocating && <span role=\"status\">{t(\"common.saving\")}</span>}\n </div>\n </div>\n {item?.live && p.contentHref?.(item) && (\n <a href={p.contentHref(item)} className=\"text-sm underline\">\n {t(\"contentManager.view\")}\n </a>\n )}\n <Button disabled={saving || allocating} onClick={() => void save(false)}>\n {saving ? t(\"common.saving\") : t(item?.live ? \"common.save\" : \"readerEditor.saveDraft\")}\n </Button>\n {!item?.live && (\n <Button variant=\"outline\" disabled={saving || publishingBlocked} onClick={() => void save(true)}>\n {publishAt ? t(\"readerEditor.schedule\") : t(\"contentManager.publish\")}\n </Button>\n )}\n </div>\n {error != null && <ErrorLine>{typeof error === \"string\" ? error : contentError(m, toContentKitError(error))}</ErrorLine>}\n {notice && (\n <p role=\"status\" className=\"text-sm text-muted-foreground\">\n {notice}\n </p>\n )}\n <fieldset disabled={saving} className=\"grid min-w-0 items-start gap-5 xl:grid-cols-[minmax(0,1fr)_minmax(18rem,24rem)]\">\n <div className=\"grid min-w-0 gap-5\">\n <Panel title={t(\"readerEditor.details\")}>\n <div className=\"grid gap-4 sm:grid-cols-[minmax(0,1fr)_10rem]\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${ids}-title`}>{t(\"contentManager.itemTitle\")}</Label>\n <Input id={`${ids}-title`} required maxLength={300} value={text.title} onChange={(e) => editText({ title: e.target.value })} />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${ids}-language`}>{t(\"contentManager.language\")}</Label>\n <Select value={language} onValueChange={(l) => l && setLanguage(l)}>\n <SelectTrigger id={`${ids}-language`}>\n <SelectValue>{languages.find((l) => l.value === language)?.label ?? language}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {languages.map((l) => (\n <SelectItem key={l.value} value={l.value}>\n {l.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${ids}-description`}>{t(\"contentManager.description\")}</Label>\n <Textarea id={`${ids}-description`} rows={3} value={text.description ?? \"\"} onChange={(e) => editText({ description: e.target.value })} />\n </div>\n <AttributeFields\n declared={spec.attributes ?? {}}\n form={details.value.attributes}\n onChange={(name, value) => changeDetails({ attributes: { ...details.value.attributes, [name]: value } })}\n labels={p.labels}\n />\n <details className=\"grid gap-3\">\n <summary className=\"cursor-pointer text-sm text-muted-foreground\">{t(\"readerEditor.additionalText\")}</summary>\n <div className=\"mt-3 grid gap-3\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${ids}-slug`}>{t(\"contentManager.slug\")}</Label>\n <Input\n id={`${ids}-slug`}\n value={text.slug ?? \"\"}\n placeholder={t(\"contentManager.slugAuto\")}\n onChange={(e) => editText({ slug: e.target.value })}\n />\n </div>\n <Label htmlFor={`${ids}-body`}>{t(\"contentManager.body\")}</Label>\n {p.renderEditor ? (\n p.renderEditor({\n value: shownBody,\n onChange: (html) => editText({ body: ed.storedBody(html) }),\n uploadImage: item ? (file) => ed.uploadImage(file) : undefined,\n disabled: saving,\n \"aria-label\": t(\"contentManager.body\"),\n })\n ) : (\n <Textarea id={`${ids}-body`} value={text.body ?? \"\"} onChange={(e) => editText({ body: e.target.value })} />\n )}\n </div>\n </details>\n </Panel>\n <Panel title={t(\"readerEditor.files\")}>\n {versions.length > 1 && (\n <Select value={primaryVersion ?? \"\"} onValueChange={(v) => v && setChosen(v)} disabled={folder.busy || folder.pending.length > 0}>\n <SelectTrigger aria-label={t(\"contentEditor.versions\")}>\n <SelectValue>{versionChoices.find((v) => v.id === primaryVersion)?.label}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {versionChoices.map((v) => (\n <SelectItem key={v.id} value={v.id}>\n {v.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n <p className=\"text-sm text-muted-foreground\">{t(\"readerEditor.fileHelp\")}</p>\n <MediaFolderEditor\n folder={{ ...folder, add }}\n label={t(\"readerEditor.files\")}\n layout=\"grid\"\n disabled={saving}\n inputLabel={t(\"readerEditor.files\")}\n rowActions={(file) =>\n file.type.startsWith(\"image/\") && folder.groups.some((g) => g.rule?.page && g.files.some((f) => f.path === file.path)) ? (\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n title={t(\"readerEditor.useCover\")}\n aria-label={t(\"readerEditor.useCoverFor\", { name: file.path.split(\"/\").at(-1) ?? file.path })}\n disabled={cover.pending || saving}\n onClick={() => void cover.run(() => selectCover(file))}\n >\n <HugeiconsIcon icon={StarIcon} />\n </Button>\n ) : null\n }\n />\n {publishingBlocked && (\n <p role=\"status\" className=\"text-sm text-muted-foreground\">\n {mediaFailed ? t(\"readerEditor.filesFailed\") : processing || folder.busy ? t(\"readerEditor.processing\") : t(\"readerEditor.addPages\")}\n </p>\n )}\n {item && version && (\n <details onToggle={(e) => e.currentTarget.open && setReviewOpened(true)}>\n <summary className=\"cursor-pointer font-medium\">{t(\"pageReview.title\")}</summary>\n {reviewOpened && <PageReview key={version.id} content={item.id} version={version.id} client={client} onError={p.onError} />}\n </details>\n )}\n </Panel>\n {item && (\n <details className=\"rounded-xl border border-border bg-card p-4\" onToggle={(e) => e.currentTarget.open && setVersionsOpened(true)}>\n <summary className=\"cursor-pointer font-medium\">{t(\"readerEditor.versions\")}</summary>\n {versionsOpened && (\n <VersionsEditor content={item} media={false} activeVersion={primaryVersion} client={client} labels={p.labels} onError={p.onError} />\n )}\n </details>\n )}\n {item && version && (\n <details className=\"rounded-xl border border-border bg-card p-4\" onToggle={(e) => setToolsExpanded(e.currentTarget.open)}>\n <summary className=\"cursor-pointer font-medium\">{t(\"readerEditor.readerTools\")}</summary>\n {toolsOpened\n .filter((id) => versions.some((v) => v.id === id))\n .map((id) => (\n <div key={id} hidden={id !== version.id}>\n <ReaderManifestEditor content={item.id} version={id} client={client} onError={p.onError} />\n </div>\n ))}\n </details>\n )}\n </div>\n <aside className=\"grid min-w-0 gap-5\">\n <Panel title={t(\"readerEditor.entities\")}>\n {membership.error && <ErrorLine error={membership.error} />}\n {groupKinds.map((kind) => {\n const rows = associations.value.memberships.map((a, index) => ({ a, index })).filter(({ a }) => cards.get(a.group_id ?? \"\")?.kind === kind);\n return (\n <fieldset key={kind} disabled={!!item && membership.loading} className=\"grid min-w-0 gap-2\">\n <legend className=\"mb-2 font-semibold\">{labelOf(p.labels, kind)}</legend>\n {rows.map(({ a, index }) => (\n <MembershipRow\n key={`${a.group_id}:${index}`}\n m={a}\n card={cards.get(a.group_id ?? \"\")}\n spec={model.entity_kinds[kind] ?? {}}\n labels={p.labels}\n versions={versionChoices}\n versionLabel={(id) => versionChoices.find((v) => v.id === id)?.label ?? id}\n onChange={(patch) => associations.edit((d) => ({ memberships: d.memberships.map((x, i) => (i === index ? { ...x, ...patch } : x)) }))}\n onRemove={() => associations.edit((d) => ({ memberships: d.memberships.filter((_, i) => i !== index) }))}\n />\n ))}\n <GroupPicker\n kind={kind}\n management={p.management}\n language={language}\n exclude={rows.filter(({ a }) => !a.version_id && !a.role).map(({ a }) => a.group_id!)}\n label={t(\"memberships.add\", { kind: labelOf(p.labels, kind) })}\n client={client}\n onPick={(card) => {\n setPicked((all) => new Map(all).set(card.id, card));\n associations.edit((d) => ({\n memberships: [\n ...d.memberships,\n { group_id: card.id, ...(model.entity_kinds[kind]?.version_level && version ? { version_id: version.id } : {}) },\n ],\n }));\n }}\n />\n </fieldset>\n );\n })}\n </Panel>\n <Panel title={t(\"contentManager.cover\")}>\n {version?.cover?.url ? (\n <img src={version.cover.url} alt=\"\" className=\"mx-auto max-h-64 rounded-lg object-contain\" />\n ) : (\n <p className=\"text-sm text-muted-foreground\">{t(\"readerEditor.firstPageCover\")}</p>\n )}\n <label className=\"inline-flex cursor-pointer justify-center rounded-md border border-border px-3 py-2 text-sm font-medium hover:bg-muted\">\n {t(\"contentManager.addCover\")}\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"sr-only\"\n aria-label={t(\"contentManager.cover\")}\n disabled={cover.pending || saving}\n onChange={(e) => {\n const file = e.target.files?.[0];\n e.target.value = \"\";\n if (file) void cover.run(() => customCover(file));\n }}\n />\n </label>\n <ErrorLine error={cover.error} />\n </Panel>\n <Panel title={t(\"contentEditor.accessTitle\")}>\n <RuleFields\n value={details.value.access}\n onChange={(access) => changeDetails({ access })}\n model={model}\n kind={p.kind}\n owner={item?.owner_group_id ?? p.ownerGroup}\n labels={p.labels}\n client={client}\n />\n {item && (details.value.access.level === \"ppv\" || details.value.access.level === \"group_ppv\" || item.offer) && (\n <OfferFields\n offer={item.offer}\n pending={offer.pending}\n onSell={(terms) => offer.run(() => client.offers.sell({ content: item.id }, terms))}\n onWithdraw={() => void offer.run(() => client.offers.withdraw({ content: item.id }))}\n />\n )}\n <ErrorLine error={offer.error} />\n </Panel>\n <Panel title={t(\"readerEditor.publication\")}>\n {!item?.live && (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${ids}-publish`}>{t(\"contentManager.publishAt\")}</Label>\n <Input id={`${ids}-publish`} type=\"datetime-local\" value={publishAt} onChange={(e) => setPublishAt(e.target.value)} />\n </div>\n )}\n <Label htmlFor={`${ids}-listing`}>{t(\"contentEditor.listing\")}</Label>\n <Select value={details.value.listing} onValueChange={(listing) => listing && changeDetails({ listing: listing as Listing })}>\n <SelectTrigger id={`${ids}-listing`}>\n <SelectValue>{t(`contentEditor.listing_${details.value.listing}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {([\"listed\", \"members\", \"unlisted\"] as const).map((value) => (\n <SelectItem key={value} value={value}>\n {t(`contentEditor.listing_${value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Label htmlFor={`${ids}-comments`}>{t(\"contentEditor.comments\")}</Label>\n <Select value={details.value.comments} onValueChange={(comments) => comments && changeDetails({ comments })}>\n <SelectTrigger id={`${ids}-comments`}>\n <SelectValue>{t(`contentEditor.comments_${details.value.comments as \"open\" | \"closed\" | \"hidden\"}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {([\"open\", \"closed\", \"hidden\"] as const).map((value) => (\n <SelectItem key={value} value={value}>\n {t(`contentEditor.comments_${value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {item?.state === \"published\" && (\n <Button variant=\"outline\" disabled={actions.pending} onClick={() => void actions.run(() => client.contents.unpublish(item.id))}>\n {t(\"contentManager.unpublish\")}\n </Button>\n )}\n {item && (\n <Button variant=\"destructive\" disabled={actions.pending} onClick={() => void remove()}>\n {t(\"contentManager.delete\")}\n </Button>\n )}\n <ErrorLine error={actions.error} />\n </Panel>\n </aside>\n </fieldset>\n {dialog}\n </div>\n </EditorSaveContext.Provider>\n );\n}\n"],"mappings":"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"}
|