@openrails/contentkit-ui 0.104.0-rc.3 → 0.105.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.
@@ -1 +1 @@
1
- {"version":3,"file":"editors.js","names":[],"sources":["../../../src/components/content/editors.tsx"],"sourcesContent":["import { cn } from \"cn\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode, type SetStateAction } from \"react\";\nimport type { ContentKitClient } from \"../../client/client.js\";\nimport { fromLocalInput, parseAttributes, toLocalInput } from \"../../client/group-fields.js\";\nimport type { Content, ContentModel, Listing, Rule, Segment, Version } from \"../../client/generated/wire.js\";\nimport { useLanguageName, useMessages } from \"../../i18n/context.js\";\nimport { useContentKitClient, type ContentKitErrorHandler } from \"../../react/context.js\";\nimport { useKinds } from \"../../react/groups.js\";\nimport { useMediaRead } from \"../../react/read.js\";\nimport { usePresets } from \"../../react/public.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 { Switch } from \"#ckui/ui/switch\";\nimport { ReaderManifestEditor } from \"../admin/reader-manifest.js\";\nimport { PageNotices } from \"../admin/page-notices.js\";\nimport { PagePicker, usePlanMedia } from \"../admin/page-picker.js\";\nimport { useReaderPlan } from \"../../react/versions.js\";\nimport { VideoMediaEditor, videoPaths } from \"../admin/media-item-panel.js\";\nimport { Skeleton } from \"#ckui/ui/skeleton\";\nimport { MediaFolderEditor } from \"../media-folder-editor.js\";\nimport { SortableList } from \"../sortable-list.js\";\nimport { ErrorLine, useAction } from \"../social/parts.js\";\nimport { GroupPicker, labelOf, useGroupNames, type Labels } from \"../groups/parts.js\";\nimport { AttributeFields, formOf } from \"../groups/fields.js\";\nimport { MembershipEditor } from \"../groups/memberships.js\";\nimport { useDraft } from \"../../react/use-draft.js\";\nimport { useEditorSaveTask, readerMediaReady } from \"./editor-save.js\";\nimport { OfferFields } from \"./offer-fields.js\";\n\ninterface Common {\n client?: ContentKitClient;\n onError?: ContentKitErrorHandler;\n labels?: Labels;\n}\n\nconst NONE = \"__none__\";\nconst LISTINGS: readonly Listing[] = [\"listed\", \"members\", \"unlisted\"];\nconst COMMENTS = [\"open\", \"closed\", \"hidden\"] as const;\ntype Comments = (typeof COMMENTS)[number];\nconst LEVELS: readonly Rule[\"level\"][] = [\"public\", \"tier\", \"ppv\", \"group\", \"group_ppv\"];\nconst grouped = (l: Rule[\"level\"]) => l === \"group\" || l === \"group_ppv\";\n\nfunction Section({ title, ckui, children }: { title: ReactNode; ckui: string; children: ReactNode }) {\n return (\n <section className=\"grid gap-3 border-t border-border pt-4\" data-ckui={ckui}>\n <h3 className=\"font-medium\">{title}</h3>\n {children}\n </section>\n );\n}\n\nfunction Saved({ show }: { show: boolean }) {\n const { t } = useMessages();\n return show ? (\n <span role=\"status\" className=\"text-muted-foreground\">\n {t(\"contentEditor.saved\")}\n </span>\n ) : null;\n}\n\n/** The content model's kind, when it loaded. */\nfunction useKind(kind: string, client?: ContentKitClient): { model: ContentModel | null; spec: ContentModel[\"kinds\"][string] | undefined } {\n const { kinds } = useKinds({ client });\n return { model: kinds, spec: kinds?.kinds[kind] };\n}\n\n\nfunction useEditorKey(id: string, client: ContentKitClient, scope: string) {\n const [identity, setIdentity] = useState({ id, client, scope, key: 0 });\n if (identity.id !== id || identity.client !== client || identity.scope !== scope) {\n const next = { id, client, scope, key: identity.key + 1 };\n setIdentity(next);\n return next.key;\n }\n return identity.key;\n}\n\nfunction useEditorReload(content: Content, own?: ContentKitClient) {\n const { client, store, scope, language } = useContentScope(own);\n const mounted = useRef(true);\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; };\n }, []);\n return async () => {\n const fresh = await client.contents.get(content.id, language ?? content.language);\n let latest = fresh;\n if (mounted.current) store.patch<Content | null>(\n (tag) => tag.type === \"content\" && tag.id === content.id && (tag.readScope ?? \"{}\") === scope,\n (current) => {\n if (current && current.revision > latest.revision) latest = current;\n return latest;\n },\n );\n return latest;\n };\n}\n\n/** Listing and the kind's declared attributes. */\nexport function ContentDetailsEditor(p: Common & { content: Content }) {\n const { client, scope } = useContentScope(p.client);\n const key = useEditorKey(p.content.id, client, scope);\n return <ContentDetailsForm key={key} {...p} client={client} />;\n}\n\nfunction ContentDetailsForm({ content, ...p }: Common & { content: Content }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const { spec } = useKind(content.kind, p.client);\n const declared = useMemo(() => spec?.attributes ?? {}, [spec]);\n const fields = useDraft(useMemo(() => ({ listing: content.listing, comments: content.comments }), [content.listing, content.comments]));\n const attrs = useDraft(useMemo(() => formOf(declared, content.attributes), [declared, content.attributes]));\n const { listing, comments } = fields.value;\n const reload = useEditorReload(content, p.client);\n const [invalid, setInvalid] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n return (\n <Section title={t(\"contentEditor.details\")} ckui=\"content-details\">\n <form\n className=\"grid gap-3\"\n onSubmit={(e) => {\n e.preventDefault();\n setInvalid(null);\n setSaved(false);\n let attributes: Record<string, unknown>;\n try {\n attributes = parseAttributes(declared, attrs.value);\n } catch (err) {\n return setInvalid((err as Error).message);\n }\n const settleFields = fields.checkpoint(), settleAttrs = attrs.checkpoint();\n void save.run(() => client.contents.update(content.id, { listing, comments, attributes, revision: content.revision })).then((d) => {\n if (!d) return;\n const cleanFields = settleFields({ listing: d.listing, comments: d.comments });\n const cleanAttrs = settleAttrs(formOf(declared, d.attributes));\n setSaved(cleanFields && cleanAttrs);\n });\n }}\n >\n <div className=\"grid gap-1.5 sm:max-w-xs\">\n <Label>{t(\"contentEditor.listing\")}</Label>\n <Select value={listing} onValueChange={(v) => { fields.edit((f) => ({ ...f, listing: v as Listing })); setSaved(false); }}>\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.listing\")}>\n <SelectValue>{(v: string) => t(`contentEditor.listing_${v as Listing}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {LISTINGS.map((l) => (\n <SelectItem key={l} value={l}>\n {t(`contentEditor.listing_${l}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid gap-1.5 sm:max-w-xs\">\n <Label>{t(\"contentEditor.comments\")}</Label>\n <Select value={comments} onValueChange={(v) => { fields.edit((f) => ({ ...f, comments: v as Comments })); setSaved(false); }}>\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.comments\")}>\n <SelectValue>{(v: string) => t(`contentEditor.comments_${v as Comments}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {COMMENTS.map((c) => (\n <SelectItem key={c} value={c}>\n {t(`contentEditor.comments_${c}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <AttributeFields declared={declared} form={attrs.value} onChange={(n, v) => { attrs.edit((a) => ({ ...a, [n]: v })); setSaved(false); }} labels={p.labels} />\n {invalid && <ErrorLine>{invalid}</ErrorLine>}\n <ErrorLine error={save.error} />\n <div className=\"flex items-center gap-3\">\n <Button type=\"submit\" size=\"sm\" disabled={save.pending}>\n {save.pending ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={save.pending} onClick={() => {\n const settleFields = fields.checkpoint(), settleAttrs = attrs.checkpoint();\n void save.run(reload).then((d) => {\n if (!d) return;\n settleFields({ listing: d.listing, comments: d.comments });\n settleAttrs(formOf(declared, d.attributes));\n setInvalid(null);\n setSaved(false);\n });\n }}>{t(\"common.cancel\")}</Button>\n <Saved show={saved} />\n </div>\n </form>\n </Section>\n );\n}\n\n/** A rule's form: level, tiers, group (the content's owner group by default), the preview its kind has and when it turns free. */\nexport function RuleFields({ value, onChange, model, kind, owner, labels, client }: { value: Rule; onChange: (r: Rule) => void; model: ContentModel | null; kind: string; owner?: string; labels?: Labels; client: ContentKitClient }) {\n const { t } = useMessages();\n const id = useId();\n const tiers = model?.tiers ?? [];\n const spec = model?.kinds[kind];\n const groupKinds = Object.entries(model?.entity_kinds ?? {})\n .filter(([, g]) => g.sellable || g.auth_scope)\n .map(([k]) => k);\n // Picked once the model has loaded: its first group kind until one is chosen.\n const [chosenKind, setGroupKind] = useState<string>();\n const groupKind = chosenKind ?? groupKinds[0] ?? \"\";\n const named = useGroupNames(value.group_id ? [value.group_id] : [], { client });\n const group = value.group_id ? named.get(value.group_id) : undefined;\n const set = (patch: Partial<Rule>) => onChange({ ...value, ...patch });\n const pages = spec?.presentation === \"reader\";\n const segments = !!spec?.segments;\n return (\n <div className=\"grid gap-3\" data-ckui=\"rule-fields\">\n <div className=\"grid gap-1.5 sm:max-w-xs\">\n <Label>{t(\"contentEditor.access\")}</Label>\n <Select\n value={value.level}\n onValueChange={(v) => {\n const level = v as Rule[\"level\"];\n onChange({ level, group_id: grouped(level) ? value.group_id || owner : undefined, preview: value.preview, free_after: value.free_after });\n }}\n >\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.access\")}>\n <SelectValue>{(v: string) => t(`contentEditor.level_${v as Rule[\"level\"]}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {LEVELS.filter((l) => (l !== \"tier\" || tiers.length) && (!l.startsWith(\"group\") || groupKinds.length)).map((l) => (\n <SelectItem key={l} value={l}>\n {t(`contentEditor.level_${l}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n {value.level === \"tier\" && (\n <fieldset className=\"flex flex-wrap gap-3\">\n <legend className=\"sr-only\">{t(\"contentEditor.tiers\")}</legend>\n {tiers.map((tier) => (\n <label key={tier} className=\"flex items-center gap-2\">\n <Switch\n checked={value.tiers?.includes(tier) ?? false}\n onCheckedChange={(on) => set({ tiers: on ? [...(value.tiers ?? []), tier] : (value.tiers ?? []).filter((x) => x !== tier) })}\n aria-label={labelOf(labels, tier)}\n />\n {labelOf(labels, tier)}\n </label>\n ))}\n </fieldset>\n )}\n {grouped(value.level) && (\n <div className=\"flex flex-wrap items-end gap-2\">\n {group || value.group_id ? (\n <span className=\"rounded-md border border-border px-2 py-0.5\" data-ckui=\"rule-group\">\n {group ? group.name || group.slug : value.group_id}\n </span>\n ) : null}\n {groupKinds.length > 1 && (\n <Select value={groupKind} onValueChange={(v) => setGroupKind(String(v))}>\n <SelectTrigger size=\"sm\" aria-label={t(\"groupEditor.edgeKind\")}>\n <SelectValue>{(v: string) => labelOf(labels, v)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {groupKinds.map((k) => (\n <SelectItem key={k} value={k}>\n {labelOf(labels, k)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {groupKind && <GroupPicker key={groupKind} kind={groupKind} label={t(\"contentEditor.group\")} client={client} onPick={(g) => set({ group_id: g.id })} />}\n </div>\n )}\n {value.level !== \"public\" && (\n <div className=\"grid gap-3 sm:grid-cols-3\">\n {pages && (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-pages`}>{t(\"contentEditor.previewPages\")}</Label>\n <Input\n id={`${id}-pages`}\n className=\"h-8\"\n type=\"number\"\n min={0}\n value={value.preview?.pages ?? \"\"}\n onChange={(e) => set({ preview: { ...value.preview, pages: e.target.value ? Math.max(0, Math.trunc(Number(e.target.value))) : undefined } })}\n />\n </div>\n )}\n {segments && (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-segments`}>{t(\"contentEditor.previewSegments\")}</Label>\n <Input\n id={`${id}-segments`}\n className=\"h-8\"\n type=\"number\"\n min={0}\n value={value.preview?.segments ?? \"\"}\n onChange={(e) => set({ preview: { ...value.preview, segments: e.target.value ? Math.max(0, Math.trunc(Number(e.target.value))) : undefined } })}\n />\n </div>\n )}\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-free`}>{t(\"contentEditor.freeAfter\")}</Label>\n <Input id={`${id}-free`} className=\"h-8\" type=\"datetime-local\" value={toLocalInput(value.free_after)} onChange={(e) => set({ free_after: fromLocalInput(e.target.value) })} />\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/** A rule the server takes: a group level names its group. */\nexport const complete = (r: Rule) => !grouped(r.level) || !!r.group_id;\n\n/** A rule as stored: empty previews and absent fields left out. */\nexport function cleanRule(r: Rule): Rule {\n const preview = r.preview && (r.preview.pages || r.preview.segments) ? { pages: r.preview.pages || undefined, segments: r.preview.segments || undefined } : undefined;\n return {\n level: r.level,\n tiers: r.level === \"tier\" ? r.tiers : undefined,\n group_id: r.level === \"group\" || r.level === \"group_ppv\" ? r.group_id : undefined,\n preview: r.level === \"public\" ? undefined : preview,\n free_after: r.level === \"public\" ? undefined : r.free_after,\n };\n}\n\n/** Who may open the content and what it sells for. */\nexport function AccessEditor(p: Common & { content: Content }) {\n const { client, scope } = useContentScope(p.client);\n const key = useEditorKey(p.content.id, client, scope);\n return <AccessForm key={key} {...p} client={client} />;\n}\n\nfunction AccessForm({ content, ...p }: Common & { content: Content }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const { model } = useKind(content.kind, p.client);\n const rule = useDraft(content.access);\n const reload = useEditorReload(content, p.client);\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n const offer = useAction(\"offer.save\", p.onError);\n return (\n <Section title={t(\"contentEditor.accessTitle\")} ckui=\"access-editor\">\n <form\n className=\"grid gap-3\"\n onSubmit={(e) => {\n e.preventDefault();\n setSaved(false);\n const settle = rule.checkpoint();\n void save.run(() => client.contents.update(content.id, { access: cleanRule(rule.value), revision: content.revision })).then((d) => d && setSaved(settle(d.access)));\n }}\n >\n <RuleFields value={rule.value} onChange={(r) => { rule.edit(r); setSaved(false); }} model={model} kind={content.kind} owner={content.owner_group_id} labels={p.labels} client={client} />\n <ErrorLine error={save.error} />\n <div className=\"flex items-center gap-3\">\n <Button type=\"submit\" size=\"sm\" disabled={save.pending || !complete(rule.value)}>\n {save.pending ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={save.pending} onClick={() => {\n const settle = rule.checkpoint();\n void save.run(reload).then((d) => {\n if (!d) return;\n settle(d.access);\n setSaved(false);\n });\n }}>{t(\"common.cancel\")}</Button>\n <Saved show={saved} />\n </div>\n </form>\n <OfferFields\n offer={content.offer}\n pending={offer.pending}\n onSell={(terms) => offer.run(() => client.offers.sell({ content: content.id }, terms))}\n onWithdraw={() => void offer.run(() => client.offers.withdraw({ content: content.id }))}\n />\n <ErrorLine error={offer.error} />\n </Section>\n );\n}\n\n/** A version's name in the editor: its label, else its languages and traits. */\nexport function versionLabel(v: Version, languageName: (l: string) => string, labels?: Labels): string {\n return v.label || [...v.languages.map(languageName), ...v.traits.map((x) => labelOf(labels, x))].join(\" · \");\n}\n\n/**\n * A content's versions: order, languages, traits, label, state and\n * schedule, an access override and its own offer, segments (chapters) and\n * the version's media folder; add and delete. A kind whose one version is\n * hidden shows only that version's segments and media.\n */\nexport function VersionsEditor({ content, media = true, activeVersion, ...p }: Common & { content: Content; media?: boolean; activeVersion?: string }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const languageName = useLanguageName();\n const { model, spec } = useKind(content.kind, p.client);\n const order = useAction(\"content.save\", p.onError);\n const add = useAction(\"content.save\", p.onError);\n const [open, setOpen] = useState<string | null>(null);\n const [opened, setOpened] = useState<string[]>([]);\n const reveal = (id: string) => { setOpen(id); setOpened((ids) => ids.includes(id) ? ids : [...ids,id]); };\n useEffect(() => { if (activeVersion) { setOpen(activeVersion); setOpened((ids)=>ids.includes(activeVersion)?ids:[...ids,activeVersion]); } }, [activeVersion]);\n useEditorSaveTask(`versions:${content.id}`, {label:t(\"contentEditor.versions\"),dirty:false,pending:order.pending||add.pending,valid:true,save:async()=>true});\n const versions = useMemo(() => [...content.versions].sort((a, b) => a.position - b.position), [content.versions]);\n if (!spec) return null;\n if (spec.versions.hidden) {\n const only = versions[0];\n if (!only || (!media && !spec.segments)) return null;\n return (\n <Section title={t(\"contentEditor.media\")} ckui=\"version-media\">\n {spec.segments && <SegmentsEditor content={content} version={only} {...p} />}\n {media && <VersionMedia content={content} version={only} model={model} {...p} />}\n </Section>\n );\n }\n const languages = model?.languages ?? [];\n return (\n <Section title={t(\"contentEditor.versions\")} ckui=\"versions-editor\">\n <SortableList\n items={versions}\n id={(v) => v.id}\n name={(v) => versionLabel(v, languageName, p.labels)}\n label={t(\"contentEditor.versions\")}\n disabled={order.pending || versions.length < 2}\n onMove={(from, to) => {\n const ids = versions.map((v) => v.id);\n const [moved] = ids.splice(from, 1);\n ids.splice(to, 0, moved!);\n void order.run(() => client.contents.orderVersions(content.id, ids));\n }}\n >\n {(v, handle) => (\n <div className=\"grid gap-2 rounded-md border border-border p-2\" data-ckui=\"version-row\" data-version={v.id}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {versions.length > 1 && handle}\n <span className=\"min-w-0 flex-1 font-medium break-words\">{versionLabel(v, languageName, p.labels)}</span>\n <Badge variant={v.live ? \"default\" : \"outline\"}>{t(v.live ? \"contentEditor.live\" : v.state === \"draft\" ? \"contentManager.draft\" : \"contentManager.scheduled\")}</Badge>\n {v.access && <Badge variant=\"secondary\">{t(`contentEditor.level_${v.access.level}`)}</Badge>}\n {v.pages ? <span className=\"text-xs text-muted-foreground\">{t(\"contentEditor.pageCount\", { count: v.pages })}</span> : null}\n <Button type=\"button\" size=\"xs\" variant=\"ghost\" aria-expanded={open === v.id} onClick={() => open === v.id ? setOpen(null) : reveal(v.id)}>\n {t(open === v.id ? \"contentEditor.close\" : \"contentEditor.edit\")}\n </Button>\n </div>\n {opened.includes(v.id) && <div hidden={open !== v.id}><VersionForm content={content} version={v} model={model} media={media} {...p} /></div>}\n </div>\n )}\n </SortableList>\n <ErrorLine error={order.error} />\n <AddVersion\n languages={languages}\n many={spec?.versions.languages === \"many\"}\n pending={add.pending}\n // A new version is a draft: open it for its media.\n onAdd={(input) => void add.run(() => client.contents.addVersion(content.id, input)).then((v) => v && reveal(v.id))}\n />\n <ErrorLine error={add.error} />\n </Section>\n );\n}\n\nfunction LanguageFields({ languages, value, many, onChange }: { languages: readonly string[]; value: readonly string[]; many: boolean; onChange: (v: string[]) => void }) {\n const { t } = useMessages();\n const languageName = useLanguageName();\n if (!many)\n return (\n <Select value={value[0] ?? NONE} onValueChange={(v) => onChange(v === NONE ? [] : [String(v)])}>\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.versionLanguage\")}>\n <SelectValue>{(v: string) => (v === NONE ? t(\"contentEditor.chooseLanguage\") : languageName(v))}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {languages.map((l) => (\n <SelectItem key={l} value={l}>\n {languageName(l)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n return (\n <fieldset className=\"flex flex-wrap gap-3\">\n <legend className=\"sr-only\">{t(\"contentEditor.versionLanguages\")}</legend>\n {languages.map((l) => (\n <label key={l} className=\"flex items-center gap-1.5\">\n <Switch size=\"sm\" checked={value.includes(l)} onCheckedChange={(on) => onChange(on ? [...value, l] : value.filter((x) => x !== l))} aria-label={languageName(l)} />\n {languageName(l)}\n </label>\n ))}\n </fieldset>\n );\n}\n\nfunction AddVersion({ languages, many, pending, onAdd }: { languages: readonly string[]; many: boolean; pending: boolean; onAdd: (v: { languages: string[] }) => void }) {\n const { t } = useMessages();\n const [langs, setLangs] = useState<string[]>([]);\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-ckui=\"add-version\">\n <LanguageFields languages={languages} value={langs} many={many} onChange={setLangs} />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={pending || !langs.length}\n onClick={() => {\n onAdd({ languages: langs });\n setLangs([]);\n }}\n >\n {t(\"contentEditor.addVersion\")}\n </Button>\n </div>\n );\n}\n\nfunction VersionForm({ content, version: v, model, media, ...p }: Common & { content: Content; version: Version; model: ContentModel | null; media: boolean }) {\n const { t } = useMessages();\n const id = useId();\n const client = useContentKitClient(p.client);\n const spec = model?.kinds[content.kind];\n const seed = useCallback((v: Version) => ({langs:v.languages,traits:v.traits,label:v.label??\"\",draft:v.state===\"draft\",at:toLocalInput(v.publish_at),own:!!v.access,rule:v.access??content.access}),[content.access]);\n const fields = useDraft(useMemo(()=>seed(v),[seed,v]));\n const {langs,traits,label,draft,at,own,rule}=fields.value;\n const edit=(patch:Partial<typeof fields.value>)=>{fields.edit((old)=>({...old,...patch}));setSaved(false);};\n const [invalid,setInvalid]=useState<string|null>(null);\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n const remove = useAction(\"content.save\", p.onError);\n const offer = useAction(\"offer.save\", p.onError);\n const valid=langs.length>0&&(!own||complete(rule));\n const submit=async()=>{\n if(!valid)return false;\n setInvalid(null);setSaved(false);\n if(spec?.presentation===\"reader\"&&v.state===\"draft\"&&!draft&&!(await readerMediaReady(client,{kind:content.kind,id:content.id,version:v.id}))){setInvalid(t(\"readerEditor.filesNotReady\"));return false;}\n const settle=fields.checkpoint();\n const out=await save.run(()=>client.contents.updateVersion(content.id,v.id,{languages:langs,traits,label:label.trim(),state:draft?\"draft\":\"published\",publish_at:fromLocalInput(at),...(own?{access:cleanRule(rule)}:{clear_access:!!v.access})}));\n if(!out)return false;\n const clean=settle(seed(out));setSaved(clean);return clean;\n };\n useEditorSaveTask(`version:${v.id}`,{label:t(\"contentEditor.versions\"),dirty:fields.dirty.length>0,pending:save.pending||remove.pending,valid,save:submit,order:10});\n return (\n <div className=\"grid gap-4 pt-2\">\n <form className=\"grid gap-3\" onSubmit={(event)=>{event.preventDefault();void submit();}}>\n <LanguageFields languages={model?.languages ?? []} value={langs} many={spec?.versions.languages === \"many\"} onChange={(langs)=>edit({langs})} />\n {!!spec?.versions.traits?.length && (\n <fieldset className=\"flex flex-wrap gap-3\">\n <legend className=\"sr-only\">{t(\"contentEditor.traits\")}</legend>\n {spec.versions.traits.map((x) => (\n <label key={x} className=\"flex items-center gap-1.5\">\n <Switch size=\"sm\" checked={traits.includes(x)} onCheckedChange={(on) => edit({traits:on ? [...traits, x] : traits.filter((y) => y !== x)})} aria-label={labelOf(p.labels, x)} />\n {labelOf(p.labels, x)}\n </label>\n ))}\n </fieldset>\n )}\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-label`}>{t(\"contentEditor.versionLabel\")}</Label>\n <Input id={`${id}-label`} className=\"h-8\" value={label} onChange={(e)=>edit({label:e.target.value})} />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-at`}>{t(\"contentEditor.versionPublishAt\")}</Label>\n <Input id={`${id}-at`} className=\"h-8\" type=\"datetime-local\" value={at} onChange={(e)=>edit({at:e.target.value})} />\n </div>\n </div>\n <label className=\"flex items-center gap-2\">\n <Switch size=\"sm\" checked={draft} onCheckedChange={(draft)=>edit({draft})} />\n {t(\"contentEditor.versionDraft\")}\n </label>\n <label className=\"flex items-center gap-2\">\n <Switch size=\"sm\" checked={own} onCheckedChange={(own)=>edit({own})} />\n {t(\"contentEditor.ownAccess\")}\n </label>\n {own && <RuleFields value={rule} onChange={(rule)=>edit({rule})} model={model} kind={content.kind} owner={content.owner_group_id} labels={p.labels} client={client} />}\n {invalid&&<ErrorLine>{invalid}</ErrorLine>}\n <ErrorLine error={save.error} />\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button type=\"submit\" size=\"sm\" disabled={save.pending || !langs.length || (own && !complete(rule))}>\n {save.pending ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n <Saved show={saved} />\n <Button type=\"button\" size=\"sm\" variant=\"destructive\" className=\"ms-auto\" disabled={remove.pending} onClick={() => void remove.run(() => client.contents.removeVersion(content.id, v.id))}>\n {t(\"contentEditor.deleteVersion\")}\n </Button>\n </div>\n <ErrorLine error={remove.error} />\n </form>\n <OfferFields\n offer={v.offer}\n pending={offer.pending}\n onSell={(terms) => offer.run(() => client.offers.sell({ content: content.id, version: v.id }, terms))}\n onWithdraw={() => void offer.run(() => client.offers.withdraw({ content: content.id, version: v.id }))}\n />\n <ErrorLine error={offer.error} />\n {spec?.segments && <SegmentsEditor content={content} version={v} {...p} />}\n {media && <VersionCover content={content} version={v} {...p} />}\n {media && <VersionMedia content={content} version={v} model={model} {...p} />}\n {media && spec?.presentation === \"reader\" && <ReaderManifestEditor content={content.id} version={v.id} client={p.client} onError={p.onError} />}\n </div>\n );\n}\n\n/**\n * A version's own cover, where its kind has covers: the cover upload its\n * editors selected, else its first. Versions share no files.\n */\nexport function VersionCover({ content, version: v, ...p }: Common & { content: Content; version: Version }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const { presets } = usePresets({ client });\n const save = useAction(\"content.save\", p.onError);\n const input = useRef<HTMLInputElement>(null);\n const [fresh, setFresh] = useState<string | null>(null);\n useEffect(() => () => void (fresh && URL.revokeObjectURL(fresh)), [fresh]);\n if (!presets.some((r) => r.kind === content.kind && r.name === \"cover\")) return null;\n const src = fresh ?? v.cover?.url;\n const pick = (file: File | null) =>\n void save.run(async () => {\n if (!file) {\n setFresh(null);\n return client.contents.setCover(content.id, v.id, null);\n }\n const ref = { kind: content.kind, id: content.id, version: v.id };\n const up = await client.media.uploadNamed(ref, file, { path: await client.media.presetPath(content.kind, \"cover\", file) });\n const saved = await client.contents.setCover(content.id, v.id, up.name);\n if (typeof URL.createObjectURL === \"function\") setFresh(URL.createObjectURL(file));\n return saved;\n });\n return (\n <div className=\"grid gap-1.5\" data-ckui=\"version-cover\">\n <span className=\"text-sm font-medium\">{t(\"contentManager.cover\")}</span>\n <div className=\"flex flex-wrap items-center gap-3\">\n {src ? <img src={src} alt=\"\" className=\"h-20 w-36 rounded-md border border-border object-cover\" /> : <span className=\"text-muted-foreground\">{t(\"contentManager.noCover\")}</span>}\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={save.pending} onClick={() => input.current?.click()}>\n {t(src ? \"pollEditor.replaceImage\" : \"contentManager.addCover\")}\n </Button>\n {v.cover?.image && (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" disabled={save.pending} onClick={() => pick(null)}>\n {t(\"pollEditor.removeImage\")}\n </Button>\n )}\n <input\n ref={input}\n type=\"file\"\n accept=\"image/*\"\n hidden\n aria-label={t(\"contentManager.cover\")}\n onChange={(e) => {\n const f = e.target.files?.[0];\n e.target.value = \"\";\n if (f) pick(f);\n }}\n />\n </div>\n <ErrorLine error={save.error} />\n </div>\n );\n}\n\n/**\n * A version's media: a video kind's source, poster and subtitles (by its\n * upload rules), else its upload folders. Uploads to a version that is not\n * live are added as they finish; a live one's wait for \"Add\".\n */\nfunction VersionMedia({ content, version, model, ...p }: Common & { content: Content; version: Version; model: ContentModel | null }) {\n const { t } = useMessages();\n const languageName = useLanguageName();\n const item = useMemo(() => ({ kind: content.kind, id: content.id, version: version.id }), [content.kind, content.id, version.id]);\n const r = useMediaRead(item, { editor: true, client: p.client });\n const languages = useMemo(() => (model?.languages ?? []).map((l) => ({ value: l, label: languageName(l) })), [model, languageName]);\n if (!r.read && r.loading) return <Skeleton className=\"h-24 w-full\" />;\n if (r.read?.uploads && videoPaths(r.read.uploads).source) return <VideoMediaEditor item={item} languages={languages} client={p.client} onError={p.onError} />;\n return <>\n <MediaFolderEditor item={item} commit={version.live ? \"manual\" : \"auto\"} label={t(\"contentEditor.media\")} client={p.client} onError={p.onError} />\n {model?.kinds[content.kind]?.presentation === \"reader\" && <PageNotices content={content.id} version={version.id} client={p.client} onError={p.onError} />}\n </>;\n}\n\ntype Row = { title: string; start: string; end: string; release: string };\nconst segmentRows=(version:Version):Row[]=>version.segments.map((s)=>({title:s.title??\"\",start:String(s.start),end:String(s.end),release:toLocalInput(s.release_at)}));\n\n/** A version's segments (chapters): page ranges with titles and release times. */\nexport function SegmentsEditor({ content, version, ...p }: Common & { content: Content; version: Version }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const fields=useDraft(useMemo(()=>({rows:segmentRows(version)}),[version]));\n const rows=fields.value.rows;\n const setRows=(next:SetStateAction<Row[]>)=>fields.edit((old)=>({rows:typeof next===\"function\"?next(old.rows):next}));\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n // Published pages pick ranges by thumbnail; before a publication, numbers.\n const plan = useReaderPlan(content.id, version.id, { client });\n const { pages } = usePlanMedia(plan.plan, client);\n const set = (i: number, patch: Partial<Row>) => {\n setSaved(false);\n setRows((r) => r.map((x, j) => (j === i ? { ...x, ...patch } : x)));\n };\n const valid = rows.every((r) => /^\\d+$/.test(r.start) && /^\\d+$/.test(r.end) && Number(r.end) > Number(r.start));\n const submit=async()=>{\n if(!valid)return false;\n setSaved(false);const settle=fields.checkpoint();\n const segments:Segment[]=rows.map((r,i)=>({position:i+1,title:r.title.trim()||undefined,start:Number(r.start),end:Number(r.end),release_at:fromLocalInput(r.release),released:false}));\n const out=await save.run(()=>client.contents.setSegments(content.id,version.id,segments));\n if(!out)return false;const clean=settle({rows:segmentRows(out)});setSaved(clean);return clean;\n };\n useEditorSaveTask(`segments:${version.id}`,{label:t(\"contentEditor.segments\"),dirty:fields.dirty.length>0,pending:save.pending,valid,save:submit,order:20});\n return (\n <div className=\"grid gap-2\" data-ckui=\"segments-editor\">\n <h4 className=\"text-sm font-medium\">{t(\"contentEditor.segments\")}</h4>\n {rows.length === 0 && <p className=\"text-muted-foreground\">{t(\"contentEditor.noSegments\")}</p>}\n {rows.map((r, i) => (\n <div key={i} className=\"flex flex-wrap items-center gap-2\" data-ckui=\"segment-row\">\n <span className=\"w-6 text-xs text-muted-foreground tabular-nums\">{i + 1}</span>\n <Input className=\"h-8 w-40\" aria-label={t(\"contentEditor.segmentTitle\", { n: i + 1 })} placeholder={t(\"contentEditor.segmentTitlePlaceholder\")} value={r.title} onChange={(e) => set(i, { title: e.target.value })} />\n {pages.length ? (\n <>\n <PagePicker label={t(\"contentEditor.segmentStart\", { n: i + 1 })} pages={pages} value={pages[Number(r.start)]?.name ?? \"\"}\n onChange={(name) => set(i, { start: String(pages.findIndex((x) => x.name === name)) })} />\n <span aria-hidden>–</span>\n {/* end is exclusive: the picker names the segment's last page. */}\n <PagePicker label={t(\"contentEditor.segmentEnd\", { n: i + 1 })} pages={pages} value={pages[Number(r.end) - 1]?.name ?? \"\"}\n onChange={(name) => set(i, { end: String(pages.findIndex((x) => x.name === name) + 1) })} />\n </>\n ) : (\n <>\n <Input className=\"h-8 w-20\" type=\"number\" min={0} aria-label={t(\"contentEditor.segmentStart\", { n: i + 1 })} value={r.start} onChange={(e) => set(i, { start: e.target.value })} />\n <span aria-hidden>–</span>\n <Input className=\"h-8 w-20\" type=\"number\" min={1} aria-label={t(\"contentEditor.segmentEnd\", { n: i + 1 })} value={r.end} onChange={(e) => set(i, { end: e.target.value })} />\n </>\n )}\n <Input className=\"h-8 w-48\" type=\"datetime-local\" aria-label={t(\"contentEditor.segmentRelease\", { n: i + 1 })} value={r.release} onChange={(e) => set(i, { release: e.target.value })} />\n <Button type=\"button\" size=\"xs\" variant=\"ghost\" onClick={() => setRows((x) => x.filter((_, j) => j !== i))}>\n {t(\"common.remove\")}\n </Button>\n </div>\n ))}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n const last = rows.at(-1);\n const start = last ? Number(last.end) || 0 : 0;\n setRows((x) => [...x, { title: \"\", start: String(start), end: String(start + 1), release: \"\" }]);\n }}\n >\n {t(\"contentEditor.addSegment\")}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={save.pending || !valid}\n onClick={()=>void submit()}\n >\n {t(\"contentEditor.saveSegments\")}\n </Button>\n <Saved show={saved} />\n </div>\n <ErrorLine error={save.error} />\n </div>\n );\n}\n\n/** Every editor section of an existing content: details, access and price, versions, groups. */\nexport function ContentSections({ content, ...p }: Common & { content: Content; media?: boolean; className?: string; management?: boolean }) {\n const languageName = useLanguageName();\n const versions = useMemo(() => content.versions.map((v) => ({ id: v.id, label: versionLabel(v, languageName, p.labels) })), [content.versions, languageName, p.labels]);\n const { spec } = useKind(content.kind, p.client);\n return (\n <div className={cn(\"grid gap-6\", p.className)} data-ckui=\"content-sections\">\n <ContentDetailsEditor content={content} {...p} />\n <AccessEditor content={content} {...p} />\n <VersionsEditor content={content} {...p} />\n {!!spec?.entities?.length && (\n <section className=\"grid gap-3 border-t border-border pt-4\" data-ckui=\"content-groups\">\n <MembershipEditor management={p.management} content={content.id} contentKind={content.kind} versions={spec.versions.hidden ? undefined : versions} labels={p.labels} client={p.client} onError={p.onError} />\n </section>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"editors.js","names":[],"sources":["../../../src/components/content/editors.tsx"],"sourcesContent":["import { cn } from \"cn\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode, type SetStateAction } from \"react\";\nimport type { ContentKitClient } from \"../../client/client.js\";\nimport { fromLocalInput, parseAttributes, toLocalInput } from \"../../client/group-fields.js\";\nimport type { Content, ContentModel, Listing, Rule, Segment, Version } from \"../../client/generated/wire.js\";\nimport { useLanguageName, useMessages } from \"../../i18n/context.js\";\nimport { useContentKitClient, type ContentKitErrorHandler } from \"../../react/context.js\";\nimport { useKinds } from \"../../react/groups.js\";\nimport { useMediaRead } from \"../../react/read.js\";\nimport { usePresets } from \"../../react/public.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 { Switch } from \"#ckui/ui/switch\";\nimport { ReaderManifestEditor } from \"../admin/reader-manifest.js\";\nimport { PageNotices } from \"../admin/page-notices.js\";\nimport { PagePicker, usePlanMedia } from \"../admin/page-picker.js\";\nimport { useReaderPlan } from \"../../react/versions.js\";\nimport { VideoMediaEditor, videoPaths } from \"../admin/media-item-panel.js\";\nimport { Skeleton } from \"#ckui/ui/skeleton\";\nimport { MediaFolderEditor } from \"../media-folder-editor.js\";\nimport { SortableList } from \"../sortable-list.js\";\nimport { ErrorLine, useAction } from \"../social/parts.js\";\nimport { GroupPicker, labelOf, useGroupNames, type Labels } from \"../groups/parts.js\";\nimport { AttributeFields, formOf } from \"../groups/fields.js\";\nimport { MembershipEditor } from \"../groups/memberships.js\";\nimport { useDraft } from \"../../react/use-draft.js\";\nimport { useEditorSaveTask, readerMediaReady } from \"./editor-save.js\";\nimport { OfferFields } from \"./offer-fields.js\";\n\ninterface Common {\n client?: ContentKitClient;\n onError?: ContentKitErrorHandler;\n labels?: Labels;\n}\n\nconst NONE = \"__none__\";\nconst LISTINGS: readonly Listing[] = [\"listed\", \"members\", \"unlisted\"];\nconst COMMENTS = [\"open\", \"closed\", \"hidden\"] as const;\ntype Comments = (typeof COMMENTS)[number];\nconst LEVELS: readonly Rule[\"level\"][] = [\"public\", \"tier\", \"ppv\", \"group\", \"group_ppv\"];\nconst grouped = (l: Rule[\"level\"]) => l === \"group\" || l === \"group_ppv\";\n\n/** Prefer public access, otherwise the kind's first allowed level. */\nexport function defaultAccessRule(model: ContentModel, kind: string): Rule {\n const levels = model.kinds[kind]?.access_levels;\n const level = (!levels?.length || levels.includes(\"public\") ? \"public\" : levels[0]) as Rule[\"level\"];\n return { level, ...(level === \"tier\" ? { tiers: model.tiers.slice(0, 1) } : {}) };\n}\n\n/** The host's content model controls individual sale controls everywhere. */\nexport function allowsIndividualSales(model: ContentModel | null, kind: string): boolean {\n const spec = model?.kinds[kind];\n return !!spec && (!spec.access_levels?.length || spec.access_levels.some((level) => level === \"ppv\" || level === \"group_ppv\"));\n}\n\nfunction Section({ title, ckui, children }: { title: ReactNode; ckui: string; children: ReactNode }) {\n return (\n <section className=\"grid gap-3 border-t border-border pt-4\" data-ckui={ckui}>\n <h3 className=\"font-medium\">{title}</h3>\n {children}\n </section>\n );\n}\n\nfunction Saved({ show }: { show: boolean }) {\n const { t } = useMessages();\n return show ? (\n <span role=\"status\" className=\"text-muted-foreground\">\n {t(\"contentEditor.saved\")}\n </span>\n ) : null;\n}\n\n/** The content model's kind, when it loaded. */\nfunction useKind(kind: string, client?: ContentKitClient): { model: ContentModel | null; spec: ContentModel[\"kinds\"][string] | undefined } {\n const { kinds } = useKinds({ client });\n return { model: kinds, spec: kinds?.kinds[kind] };\n}\n\n\nfunction useEditorKey(id: string, client: ContentKitClient, scope: string) {\n const [identity, setIdentity] = useState({ id, client, scope, key: 0 });\n if (identity.id !== id || identity.client !== client || identity.scope !== scope) {\n const next = { id, client, scope, key: identity.key + 1 };\n setIdentity(next);\n return next.key;\n }\n return identity.key;\n}\n\nfunction useEditorReload(content: Content, own?: ContentKitClient) {\n const { client, store, scope, language } = useContentScope(own);\n const mounted = useRef(true);\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; };\n }, []);\n return async () => {\n const fresh = await client.contents.get(content.id, language ?? content.language);\n let latest = fresh;\n if (mounted.current) store.patch<Content | null>(\n (tag) => tag.type === \"content\" && tag.id === content.id && (tag.readScope ?? \"{}\") === scope,\n (current) => {\n if (current && current.revision > latest.revision) latest = current;\n return latest;\n },\n );\n return latest;\n };\n}\n\n/** Listing and the kind's declared attributes. */\nexport function ContentDetailsEditor(p: Common & { content: Content }) {\n const { client, scope } = useContentScope(p.client);\n const key = useEditorKey(p.content.id, client, scope);\n return <ContentDetailsForm key={key} {...p} client={client} />;\n}\n\nfunction ContentDetailsForm({ content, ...p }: Common & { content: Content }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const { spec } = useKind(content.kind, p.client);\n const declared = useMemo(() => spec?.attributes ?? {}, [spec]);\n const fields = useDraft(useMemo(() => ({ listing: content.listing, comments: content.comments }), [content.listing, content.comments]));\n const attrs = useDraft(useMemo(() => formOf(declared, content.attributes), [declared, content.attributes]));\n const { listing, comments } = fields.value;\n const reload = useEditorReload(content, p.client);\n const [invalid, setInvalid] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n return (\n <Section title={t(\"contentEditor.details\")} ckui=\"content-details\">\n <form\n className=\"grid gap-3\"\n onSubmit={(e) => {\n e.preventDefault();\n setInvalid(null);\n setSaved(false);\n let attributes: Record<string, unknown>;\n try {\n attributes = parseAttributes(declared, attrs.value);\n } catch (err) {\n return setInvalid((err as Error).message);\n }\n const settleFields = fields.checkpoint(), settleAttrs = attrs.checkpoint();\n void save.run(() => client.contents.update(content.id, { listing, comments, attributes, revision: content.revision })).then((d) => {\n if (!d) return;\n const cleanFields = settleFields({ listing: d.listing, comments: d.comments });\n const cleanAttrs = settleAttrs(formOf(declared, d.attributes));\n setSaved(cleanFields && cleanAttrs);\n });\n }}\n >\n <div className=\"grid gap-1.5 sm:max-w-xs\">\n <Label>{t(\"contentEditor.listing\")}</Label>\n <Select value={listing} onValueChange={(v) => { fields.edit((f) => ({ ...f, listing: v as Listing })); setSaved(false); }}>\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.listing\")}>\n <SelectValue>{(v: string) => t(`contentEditor.listing_${v as Listing}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {LISTINGS.map((l) => (\n <SelectItem key={l} value={l}>\n {t(`contentEditor.listing_${l}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n {spec?.comment_modes?.length !== 1 && (\n <div className=\"grid gap-1.5 sm:max-w-xs\">\n <Label>{t(\"contentEditor.comments\")}</Label>\n <Select value={comments} onValueChange={(v) => { fields.edit((f) => ({ ...f, comments: v as Comments })); setSaved(false); }}>\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.comments\")}>\n <SelectValue>{(v: string) => t(`contentEditor.comments_${v as Comments}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {COMMENTS.filter((mode) => !spec?.comment_modes?.length || spec.comment_modes.includes(mode)).map((c) => (\n <SelectItem key={c} value={c}>\n {t(`contentEditor.comments_${c}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n <AttributeFields declared={declared} form={attrs.value} onChange={(n, v) => { attrs.edit((a) => ({ ...a, [n]: v })); setSaved(false); }} labels={p.labels} />\n {invalid && <ErrorLine>{invalid}</ErrorLine>}\n <ErrorLine error={save.error} />\n <div className=\"flex items-center gap-3\">\n <Button type=\"submit\" size=\"sm\" disabled={save.pending}>\n {save.pending ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={save.pending} onClick={() => {\n const settleFields = fields.checkpoint(), settleAttrs = attrs.checkpoint();\n void save.run(reload).then((d) => {\n if (!d) return;\n settleFields({ listing: d.listing, comments: d.comments });\n settleAttrs(formOf(declared, d.attributes));\n setInvalid(null);\n setSaved(false);\n });\n }}>{t(\"common.cancel\")}</Button>\n <Saved show={saved} />\n </div>\n </form>\n </Section>\n );\n}\n\n/** A rule's form: level, tiers, group (the content's owner group by default), the preview its kind has and when it turns free. */\nexport function RuleFields({ value, onChange, model, kind, owner, labels, client }: { value: Rule; onChange: (r: Rule) => void; model: ContentModel | null; kind: string; owner?: string; labels?: Labels; client: ContentKitClient }) {\n const { t } = useMessages();\n const id = useId();\n const tiers = model?.tiers ?? [];\n const spec = model?.kinds[kind];\n const declaredLevels = spec?.access_levels;\n const fixedTier = !!declaredLevels?.length && tiers.length === 1;\n const levels = declaredLevels?.length ? LEVELS.filter((level) => declaredLevels.includes(level)) : LEVELS;\n const groupKinds = Object.entries(model?.entity_kinds ?? {})\n .filter(([, g]) => g.sellable || g.auth_scope)\n .map(([k]) => k);\n // Picked once the model has loaded: its first group kind until one is chosen.\n const [chosenKind, setGroupKind] = useState<string>();\n const groupKind = chosenKind ?? groupKinds[0] ?? \"\";\n const named = useGroupNames(value.group_id ? [value.group_id] : [], { client });\n const group = value.group_id ? named.get(value.group_id) : undefined;\n const set = (patch: Partial<Rule>) => onChange({ ...value, ...patch });\n const pages = spec?.presentation === \"reader\";\n const segments = !!spec?.segments;\n return (\n <div className=\"grid gap-3\" data-ckui=\"rule-fields\">\n <div className=\"grid gap-1.5 sm:max-w-xs\">\n <Label>{t(\"contentEditor.access\")}</Label>\n <Select\n value={value.level}\n onValueChange={(v) => {\n const level = v as Rule[\"level\"];\n onChange({ level, tiers: level === \"tier\" ? (fixedTier ? [...tiers] : value.tiers) : undefined, group_id: grouped(level) ? value.group_id || owner : undefined, preview: value.preview, free_after: value.free_after });\n }}\n >\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.access\")}>\n <SelectValue>{(v: string) => t(`contentEditor.level_${v as Rule[\"level\"]}`)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {levels.filter((l) => (l !== \"tier\" || tiers.length) && (!l.startsWith(\"group\") || groupKinds.length)).map((l) => (\n <SelectItem key={l} value={l}>\n {t(`contentEditor.level_${l}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n {value.level === \"tier\" && !fixedTier && (\n <fieldset className=\"flex flex-wrap gap-3\">\n <legend className=\"sr-only\">{t(\"contentEditor.tiers\")}</legend>\n {tiers.map((tier) => (\n <label key={tier} className=\"flex items-center gap-2\">\n <Switch\n checked={value.tiers?.includes(tier) ?? false}\n onCheckedChange={(on) => set({ tiers: on ? [...(value.tiers ?? []), tier] : (value.tiers ?? []).filter((x) => x !== tier) })}\n aria-label={labelOf(labels, tier)}\n />\n {labelOf(labels, tier)}\n </label>\n ))}\n </fieldset>\n )}\n {grouped(value.level) && (\n <div className=\"flex flex-wrap items-end gap-2\">\n {group || value.group_id ? (\n <span className=\"rounded-md border border-border px-2 py-0.5\" data-ckui=\"rule-group\">\n {group ? group.name || group.slug : value.group_id}\n </span>\n ) : null}\n {groupKinds.length > 1 && (\n <Select value={groupKind} onValueChange={(v) => setGroupKind(String(v))}>\n <SelectTrigger size=\"sm\" aria-label={t(\"groupEditor.edgeKind\")}>\n <SelectValue>{(v: string) => labelOf(labels, v)}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {groupKinds.map((k) => (\n <SelectItem key={k} value={k}>\n {labelOf(labels, k)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {groupKind && <GroupPicker key={groupKind} kind={groupKind} label={t(\"contentEditor.group\")} client={client} onPick={(g) => set({ group_id: g.id })} />}\n </div>\n )}\n {value.level !== \"public\" && (\n <div className=\"grid gap-3 sm:grid-cols-3\">\n {pages && (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-pages`}>{t(\"contentEditor.previewPages\")}</Label>\n <Input\n id={`${id}-pages`}\n className=\"h-8\"\n type=\"number\"\n min={0}\n value={value.preview?.pages ?? \"\"}\n onChange={(e) => set({ preview: { ...value.preview, pages: e.target.value ? Math.max(0, Math.trunc(Number(e.target.value))) : undefined } })}\n />\n </div>\n )}\n {segments && (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-segments`}>{t(\"contentEditor.previewSegments\")}</Label>\n <Input\n id={`${id}-segments`}\n className=\"h-8\"\n type=\"number\"\n min={0}\n value={value.preview?.segments ?? \"\"}\n onChange={(e) => set({ preview: { ...value.preview, segments: e.target.value ? Math.max(0, Math.trunc(Number(e.target.value))) : undefined } })}\n />\n </div>\n )}\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-free`}>{t(\"contentEditor.freeAfter\")}</Label>\n <Input id={`${id}-free`} className=\"h-8\" type=\"datetime-local\" value={toLocalInput(value.free_after)} onChange={(e) => set({ free_after: fromLocalInput(e.target.value) })} />\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/** A rule the server takes: a group level names its group. */\nexport const complete = (r: Rule) => !grouped(r.level) || !!r.group_id;\n\n/** A rule as stored: empty previews and absent fields left out. */\nexport function cleanRule(r: Rule): Rule {\n const preview = r.preview && (r.preview.pages || r.preview.segments) ? { pages: r.preview.pages || undefined, segments: r.preview.segments || undefined } : undefined;\n return {\n level: r.level,\n tiers: r.level === \"tier\" ? r.tiers : undefined,\n group_id: r.level === \"group\" || r.level === \"group_ppv\" ? r.group_id : undefined,\n preview: r.level === \"public\" ? undefined : preview,\n free_after: r.level === \"public\" ? undefined : r.free_after,\n };\n}\n\n/** Who may open the content and what it sells for. */\nexport function AccessEditor(p: Common & { content: Content }) {\n const { client, scope } = useContentScope(p.client);\n const key = useEditorKey(p.content.id, client, scope);\n return <AccessForm key={key} {...p} client={client} />;\n}\n\nfunction AccessForm({ content, ...p }: Common & { content: Content }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const { model } = useKind(content.kind, p.client);\n const rule = useDraft(content.access);\n const reload = useEditorReload(content, p.client);\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n const offer = useAction(\"offer.save\", p.onError);\n return (\n <Section title={t(allowsIndividualSales(model, content.kind) ? \"contentEditor.accessTitle\" : \"contentEditor.accessOnlyTitle\")} ckui=\"access-editor\">\n <form\n className=\"grid gap-3\"\n onSubmit={(e) => {\n e.preventDefault();\n setSaved(false);\n const settle = rule.checkpoint();\n void save.run(() => client.contents.update(content.id, { access: cleanRule(rule.value), revision: content.revision })).then((d) => d && setSaved(settle(d.access)));\n }}\n >\n <RuleFields value={rule.value} onChange={(r) => { rule.edit(r); setSaved(false); }} model={model} kind={content.kind} owner={content.owner_group_id} labels={p.labels} client={client} />\n <ErrorLine error={save.error} />\n <div className=\"flex items-center gap-3\">\n <Button type=\"submit\" size=\"sm\" disabled={save.pending || !complete(rule.value)}>\n {save.pending ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={save.pending} onClick={() => {\n const settle = rule.checkpoint();\n void save.run(reload).then((d) => {\n if (!d) return;\n settle(d.access);\n setSaved(false);\n });\n }}>{t(\"common.cancel\")}</Button>\n <Saved show={saved} />\n </div>\n </form>\n {allowsIndividualSales(model, content.kind) && <OfferFields\n offer={content.offer}\n pending={offer.pending}\n onSell={(terms) => offer.run(() => client.offers.sell({ content: content.id }, terms))}\n onWithdraw={() => void offer.run(() => client.offers.withdraw({ content: content.id }))}\n />}\n <ErrorLine error={offer.error} />\n </Section>\n );\n}\n\n/** A version's name in the editor: its label, else its languages and traits. */\nexport function versionLabel(v: Version, languageName: (l: string) => string, labels?: Labels): string {\n return v.label || [...v.languages.map(languageName), ...v.traits.map((x) => labelOf(labels, x))].join(\" · \");\n}\n\n/**\n * A content's versions: order, languages, traits, label, state and\n * schedule, an access override and its own offer, segments (chapters) and\n * the version's media folder; add and delete. A kind whose one version is\n * hidden shows only that version's segments and media.\n */\nexport function VersionsEditor({ content, media = true, activeVersion, ...p }: Common & { content: Content; media?: boolean; activeVersion?: string }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const languageName = useLanguageName();\n const { model, spec } = useKind(content.kind, p.client);\n const order = useAction(\"content.save\", p.onError);\n const add = useAction(\"content.save\", p.onError);\n const [open, setOpen] = useState<string | null>(null);\n const [opened, setOpened] = useState<string[]>([]);\n const reveal = (id: string) => { setOpen(id); setOpened((ids) => ids.includes(id) ? ids : [...ids,id]); };\n useEffect(() => { if (activeVersion) { setOpen(activeVersion); setOpened((ids)=>ids.includes(activeVersion)?ids:[...ids,activeVersion]); } }, [activeVersion]);\n useEditorSaveTask(`versions:${content.id}`, {label:t(\"contentEditor.versions\"),dirty:false,pending:order.pending||add.pending,valid:true,save:async()=>true});\n const versions = useMemo(() => [...content.versions].sort((a, b) => a.position - b.position), [content.versions]);\n if (!spec) return null;\n if (spec.versions.hidden) {\n const only = versions[0];\n if (!only || (!media && !spec.segments)) return null;\n return (\n <Section title={t(\"contentEditor.media\")} ckui=\"version-media\">\n {spec.segments && <SegmentsEditor content={content} version={only} {...p} />}\n {media && <VersionMedia content={content} version={only} model={model} {...p} />}\n </Section>\n );\n }\n const languages = model?.languages ?? [];\n return (\n <Section title={t(\"contentEditor.versions\")} ckui=\"versions-editor\">\n <SortableList\n items={versions}\n id={(v) => v.id}\n name={(v) => versionLabel(v, languageName, p.labels)}\n label={t(\"contentEditor.versions\")}\n disabled={order.pending || versions.length < 2}\n onMove={(from, to) => {\n const ids = versions.map((v) => v.id);\n const [moved] = ids.splice(from, 1);\n ids.splice(to, 0, moved!);\n void order.run(() => client.contents.orderVersions(content.id, ids));\n }}\n >\n {(v, handle) => (\n <div className=\"grid gap-2 rounded-md border border-border p-2\" data-ckui=\"version-row\" data-version={v.id}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {versions.length > 1 && handle}\n <span className=\"min-w-0 flex-1 font-medium break-words\">{versionLabel(v, languageName, p.labels)}</span>\n <Badge variant={v.live ? \"default\" : \"outline\"}>{t(v.live ? \"contentEditor.live\" : v.state === \"draft\" ? \"contentManager.draft\" : \"contentManager.scheduled\")}</Badge>\n {v.access && <Badge variant=\"secondary\">{t(`contentEditor.level_${v.access.level}`)}</Badge>}\n {v.pages ? <span className=\"text-xs text-muted-foreground\">{t(\"contentEditor.pageCount\", { count: v.pages })}</span> : null}\n <Button type=\"button\" size=\"xs\" variant=\"ghost\" aria-expanded={open === v.id} onClick={() => open === v.id ? setOpen(null) : reveal(v.id)}>\n {t(open === v.id ? \"contentEditor.close\" : \"contentEditor.edit\")}\n </Button>\n </div>\n {opened.includes(v.id) && <div hidden={open !== v.id}><VersionForm content={content} version={v} model={model} media={media} {...p} /></div>}\n </div>\n )}\n </SortableList>\n <ErrorLine error={order.error} />\n <AddVersion\n languages={languages}\n many={spec?.versions.languages === \"many\"}\n pending={add.pending}\n // A new version is a draft: open it for its media.\n onAdd={(input) => void add.run(() => client.contents.addVersion(content.id, input)).then((v) => v && reveal(v.id))}\n />\n <ErrorLine error={add.error} />\n </Section>\n );\n}\n\nfunction LanguageFields({ languages, value, many, onChange }: { languages: readonly string[]; value: readonly string[]; many: boolean; onChange: (v: string[]) => void }) {\n const { t } = useMessages();\n const languageName = useLanguageName();\n if (!many)\n return (\n <Select value={value[0] ?? NONE} onValueChange={(v) => onChange(v === NONE ? [] : [String(v)])}>\n <SelectTrigger size=\"sm\" aria-label={t(\"contentEditor.versionLanguage\")}>\n <SelectValue>{(v: string) => (v === NONE ? t(\"contentEditor.chooseLanguage\") : languageName(v))}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {languages.map((l) => (\n <SelectItem key={l} value={l}>\n {languageName(l)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n return (\n <fieldset className=\"flex flex-wrap gap-3\">\n <legend className=\"sr-only\">{t(\"contentEditor.versionLanguages\")}</legend>\n {languages.map((l) => (\n <label key={l} className=\"flex items-center gap-1.5\">\n <Switch size=\"sm\" checked={value.includes(l)} onCheckedChange={(on) => onChange(on ? [...value, l] : value.filter((x) => x !== l))} aria-label={languageName(l)} />\n {languageName(l)}\n </label>\n ))}\n </fieldset>\n );\n}\n\nfunction AddVersion({ languages, many, pending, onAdd }: { languages: readonly string[]; many: boolean; pending: boolean; onAdd: (v: { languages: string[] }) => void }) {\n const { t } = useMessages();\n const [langs, setLangs] = useState<string[]>([]);\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-ckui=\"add-version\">\n <LanguageFields languages={languages} value={langs} many={many} onChange={setLangs} />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={pending || !langs.length}\n onClick={() => {\n onAdd({ languages: langs });\n setLangs([]);\n }}\n >\n {t(\"contentEditor.addVersion\")}\n </Button>\n </div>\n );\n}\n\nfunction VersionForm({ content, version: v, model, media, ...p }: Common & { content: Content; version: Version; model: ContentModel | null; media: boolean }) {\n const { t } = useMessages();\n const id = useId();\n const client = useContentKitClient(p.client);\n const spec = model?.kinds[content.kind];\n const seed = useCallback((v: Version) => ({langs:v.languages,traits:v.traits,label:v.label??\"\",draft:v.state===\"draft\",at:toLocalInput(v.publish_at),own:!!v.access,rule:v.access??content.access}),[content.access]);\n const fields = useDraft(useMemo(()=>seed(v),[seed,v]));\n const {langs,traits,label,draft,at,own,rule}=fields.value;\n const edit=(patch:Partial<typeof fields.value>)=>{fields.edit((old)=>({...old,...patch}));setSaved(false);};\n const [invalid,setInvalid]=useState<string|null>(null);\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n const remove = useAction(\"content.save\", p.onError);\n const offer = useAction(\"offer.save\", p.onError);\n const valid=langs.length>0&&(!own||complete(rule));\n const submit=async()=>{\n if(!valid)return false;\n setInvalid(null);setSaved(false);\n if(spec?.presentation===\"reader\"&&v.state===\"draft\"&&!draft&&!(await readerMediaReady(client,{kind:content.kind,id:content.id,version:v.id}))){setInvalid(t(\"readerEditor.filesNotReady\"));return false;}\n const settle=fields.checkpoint();\n const out=await save.run(()=>client.contents.updateVersion(content.id,v.id,{languages:langs,traits,label:label.trim(),state:draft?\"draft\":\"published\",publish_at:fromLocalInput(at),...(own?{access:cleanRule(rule)}:{clear_access:!!v.access})}));\n if(!out)return false;\n const clean=settle(seed(out));setSaved(clean);return clean;\n };\n useEditorSaveTask(`version:${v.id}`,{label:t(\"contentEditor.versions\"),dirty:fields.dirty.length>0,pending:save.pending||remove.pending,valid,save:submit,order:10});\n return (\n <div className=\"grid gap-4 pt-2\">\n <form className=\"grid gap-3\" onSubmit={(event)=>{event.preventDefault();void submit();}}>\n <LanguageFields languages={model?.languages ?? []} value={langs} many={spec?.versions.languages === \"many\"} onChange={(langs)=>edit({langs})} />\n {!!spec?.versions.traits?.length && (\n <fieldset className=\"flex flex-wrap gap-3\">\n <legend className=\"sr-only\">{t(\"contentEditor.traits\")}</legend>\n {spec.versions.traits.map((x) => (\n <label key={x} className=\"flex items-center gap-1.5\">\n <Switch size=\"sm\" checked={traits.includes(x)} onCheckedChange={(on) => edit({traits:on ? [...traits, x] : traits.filter((y) => y !== x)})} aria-label={labelOf(p.labels, x)} />\n {labelOf(p.labels, x)}\n </label>\n ))}\n </fieldset>\n )}\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-label`}>{t(\"contentEditor.versionLabel\")}</Label>\n <Input id={`${id}-label`} className=\"h-8\" value={label} onChange={(e)=>edit({label:e.target.value})} />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor={`${id}-at`}>{t(\"contentEditor.versionPublishAt\")}</Label>\n <Input id={`${id}-at`} className=\"h-8\" type=\"datetime-local\" value={at} onChange={(e)=>edit({at:e.target.value})} />\n </div>\n </div>\n <label className=\"flex items-center gap-2\">\n <Switch size=\"sm\" checked={draft} onCheckedChange={(draft)=>edit({draft})} />\n {t(\"contentEditor.versionDraft\")}\n </label>\n <label className=\"flex items-center gap-2\">\n <Switch size=\"sm\" checked={own} onCheckedChange={(own)=>edit({own})} />\n {t(\"contentEditor.ownAccess\")}\n </label>\n {own && <RuleFields value={rule} onChange={(rule)=>edit({rule})} model={model} kind={content.kind} owner={content.owner_group_id} labels={p.labels} client={client} />}\n {invalid&&<ErrorLine>{invalid}</ErrorLine>}\n <ErrorLine error={save.error} />\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button type=\"submit\" size=\"sm\" disabled={save.pending || !langs.length || (own && !complete(rule))}>\n {save.pending ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n <Saved show={saved} />\n <Button type=\"button\" size=\"sm\" variant=\"destructive\" className=\"ms-auto\" disabled={remove.pending} onClick={() => void remove.run(() => client.contents.removeVersion(content.id, v.id))}>\n {t(\"contentEditor.deleteVersion\")}\n </Button>\n </div>\n <ErrorLine error={remove.error} />\n </form>\n {allowsIndividualSales(model, content.kind) && <OfferFields\n offer={v.offer}\n pending={offer.pending}\n onSell={(terms) => offer.run(() => client.offers.sell({ content: content.id, version: v.id }, terms))}\n onWithdraw={() => void offer.run(() => client.offers.withdraw({ content: content.id, version: v.id }))}\n />}\n <ErrorLine error={offer.error} />\n {spec?.segments && <SegmentsEditor content={content} version={v} {...p} />}\n {media && <VersionCover content={content} version={v} {...p} />}\n {media && <VersionMedia content={content} version={v} model={model} {...p} />}\n {media && spec?.presentation === \"reader\" && <ReaderManifestEditor content={content.id} version={v.id} client={p.client} onError={p.onError} />}\n </div>\n );\n}\n\n/**\n * A version's own cover, where its kind has covers: the cover upload its\n * editors selected, else its first. Versions share no files.\n */\nexport function VersionCover({ content, version: v, ...p }: Common & { content: Content; version: Version }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const { presets } = usePresets({ client });\n const save = useAction(\"content.save\", p.onError);\n const input = useRef<HTMLInputElement>(null);\n const [fresh, setFresh] = useState<string | null>(null);\n useEffect(() => () => void (fresh && URL.revokeObjectURL(fresh)), [fresh]);\n if (!presets.some((r) => r.kind === content.kind && r.name === \"cover\")) return null;\n const src = fresh ?? v.cover?.url;\n const pick = (file: File | null) =>\n void save.run(async () => {\n if (!file) {\n setFresh(null);\n return client.contents.setCover(content.id, v.id, null);\n }\n const ref = { kind: content.kind, id: content.id, version: v.id };\n const up = await client.media.uploadNamed(ref, file, { path: await client.media.presetPath(content.kind, \"cover\", file) });\n const saved = await client.contents.setCover(content.id, v.id, up.name);\n if (typeof URL.createObjectURL === \"function\") setFresh(URL.createObjectURL(file));\n return saved;\n });\n return (\n <div className=\"grid gap-1.5\" data-ckui=\"version-cover\">\n <span className=\"text-sm font-medium\">{t(\"contentManager.cover\")}</span>\n <div className=\"flex flex-wrap items-center gap-3\">\n {src ? <img src={src} alt=\"\" className=\"h-20 w-36 rounded-md border border-border object-cover\" /> : <span className=\"text-muted-foreground\">{t(\"contentManager.noCover\")}</span>}\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={save.pending} onClick={() => input.current?.click()}>\n {t(src ? \"pollEditor.replaceImage\" : \"contentManager.addCover\")}\n </Button>\n {v.cover?.image && (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" disabled={save.pending} onClick={() => pick(null)}>\n {t(\"pollEditor.removeImage\")}\n </Button>\n )}\n <input\n ref={input}\n type=\"file\"\n accept=\"image/*\"\n hidden\n aria-label={t(\"contentManager.cover\")}\n onChange={(e) => {\n const f = e.target.files?.[0];\n e.target.value = \"\";\n if (f) pick(f);\n }}\n />\n </div>\n <ErrorLine error={save.error} />\n </div>\n );\n}\n\n/**\n * A version's media: a video kind's source, poster and subtitles (by its\n * upload rules), else its upload folders. Uploads to a version that is not\n * live are added as they finish; a live one's wait for \"Add\".\n */\nfunction VersionMedia({ content, version, model, ...p }: Common & { content: Content; version: Version; model: ContentModel | null }) {\n const { t } = useMessages();\n const languageName = useLanguageName();\n const item = useMemo(() => ({ kind: content.kind, id: content.id, version: version.id }), [content.kind, content.id, version.id]);\n const r = useMediaRead(item, { editor: true, client: p.client });\n const languages = useMemo(() => (model?.languages ?? []).map((l) => ({ value: l, label: languageName(l) })), [model, languageName]);\n if (!r.read && r.loading) return <Skeleton className=\"h-24 w-full\" />;\n if (r.read?.uploads && videoPaths(r.read.uploads).source) return <VideoMediaEditor item={item} languages={languages} client={p.client} onError={p.onError} />;\n return <>\n <MediaFolderEditor item={item} commit={version.live ? \"manual\" : \"auto\"} label={t(\"contentEditor.media\")} client={p.client} onError={p.onError} />\n {model?.kinds[content.kind]?.presentation === \"reader\" && <PageNotices content={content.id} version={version.id} client={p.client} onError={p.onError} />}\n </>;\n}\n\ntype Row = { title: string; start: string; end: string; release: string };\nconst segmentRows=(version:Version):Row[]=>version.segments.map((s)=>({title:s.title??\"\",start:String(s.start),end:String(s.end),release:toLocalInput(s.release_at)}));\n\n/** A version's segments (chapters): page ranges with titles and release times. */\nexport function SegmentsEditor({ content, version, ...p }: Common & { content: Content; version: Version }) {\n const { t } = useMessages();\n const client = useContentKitClient(p.client);\n const fields=useDraft(useMemo(()=>({rows:segmentRows(version)}),[version]));\n const rows=fields.value.rows;\n const setRows=(next:SetStateAction<Row[]>)=>fields.edit((old)=>({rows:typeof next===\"function\"?next(old.rows):next}));\n const [saved, setSaved] = useState(false);\n const save = useAction(\"content.save\", p.onError);\n // Published pages pick ranges by thumbnail; before a publication, numbers.\n const plan = useReaderPlan(content.id, version.id, { client });\n const { pages } = usePlanMedia(plan.plan, client);\n const set = (i: number, patch: Partial<Row>) => {\n setSaved(false);\n setRows((r) => r.map((x, j) => (j === i ? { ...x, ...patch } : x)));\n };\n const valid = rows.every((r) => /^\\d+$/.test(r.start) && /^\\d+$/.test(r.end) && Number(r.end) > Number(r.start));\n const submit=async()=>{\n if(!valid)return false;\n setSaved(false);const settle=fields.checkpoint();\n const segments:Segment[]=rows.map((r,i)=>({position:i+1,title:r.title.trim()||undefined,start:Number(r.start),end:Number(r.end),release_at:fromLocalInput(r.release),released:false}));\n const out=await save.run(()=>client.contents.setSegments(content.id,version.id,segments));\n if(!out)return false;const clean=settle({rows:segmentRows(out)});setSaved(clean);return clean;\n };\n useEditorSaveTask(`segments:${version.id}`,{label:t(\"contentEditor.segments\"),dirty:fields.dirty.length>0,pending:save.pending,valid,save:submit,order:20});\n return (\n <div className=\"grid gap-2\" data-ckui=\"segments-editor\">\n <h4 className=\"text-sm font-medium\">{t(\"contentEditor.segments\")}</h4>\n {rows.length === 0 && <p className=\"text-muted-foreground\">{t(\"contentEditor.noSegments\")}</p>}\n {rows.map((r, i) => (\n <div key={i} className=\"flex flex-wrap items-center gap-2\" data-ckui=\"segment-row\">\n <span className=\"w-6 text-xs text-muted-foreground tabular-nums\">{i + 1}</span>\n <Input className=\"h-8 w-40\" aria-label={t(\"contentEditor.segmentTitle\", { n: i + 1 })} placeholder={t(\"contentEditor.segmentTitlePlaceholder\")} value={r.title} onChange={(e) => set(i, { title: e.target.value })} />\n {pages.length ? (\n <>\n <PagePicker label={t(\"contentEditor.segmentStart\", { n: i + 1 })} pages={pages} value={pages[Number(r.start)]?.name ?? \"\"}\n onChange={(name) => set(i, { start: String(pages.findIndex((x) => x.name === name)) })} />\n <span aria-hidden>–</span>\n {/* end is exclusive: the picker names the segment's last page. */}\n <PagePicker label={t(\"contentEditor.segmentEnd\", { n: i + 1 })} pages={pages} value={pages[Number(r.end) - 1]?.name ?? \"\"}\n onChange={(name) => set(i, { end: String(pages.findIndex((x) => x.name === name) + 1) })} />\n </>\n ) : (\n <>\n <Input className=\"h-8 w-20\" type=\"number\" min={0} aria-label={t(\"contentEditor.segmentStart\", { n: i + 1 })} value={r.start} onChange={(e) => set(i, { start: e.target.value })} />\n <span aria-hidden>–</span>\n <Input className=\"h-8 w-20\" type=\"number\" min={1} aria-label={t(\"contentEditor.segmentEnd\", { n: i + 1 })} value={r.end} onChange={(e) => set(i, { end: e.target.value })} />\n </>\n )}\n <Input className=\"h-8 w-48\" type=\"datetime-local\" aria-label={t(\"contentEditor.segmentRelease\", { n: i + 1 })} value={r.release} onChange={(e) => set(i, { release: e.target.value })} />\n <Button type=\"button\" size=\"xs\" variant=\"ghost\" onClick={() => setRows((x) => x.filter((_, j) => j !== i))}>\n {t(\"common.remove\")}\n </Button>\n </div>\n ))}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n const last = rows.at(-1);\n const start = last ? Number(last.end) || 0 : 0;\n setRows((x) => [...x, { title: \"\", start: String(start), end: String(start + 1), release: \"\" }]);\n }}\n >\n {t(\"contentEditor.addSegment\")}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={save.pending || !valid}\n onClick={()=>void submit()}\n >\n {t(\"contentEditor.saveSegments\")}\n </Button>\n <Saved show={saved} />\n </div>\n <ErrorLine error={save.error} />\n </div>\n );\n}\n\n/** Every editor section of an existing content: details, access and price, versions, groups. */\nexport function ContentSections({ content, ...p }: Common & { content: Content; media?: boolean; className?: string; management?: boolean }) {\n const languageName = useLanguageName();\n const versions = useMemo(() => content.versions.map((v) => ({ id: v.id, label: versionLabel(v, languageName, p.labels) })), [content.versions, languageName, p.labels]);\n const { spec } = useKind(content.kind, p.client);\n return (\n <div className={cn(\"grid gap-6\", p.className)} data-ckui=\"content-sections\">\n <ContentDetailsEditor content={content} {...p} />\n <AccessEditor content={content} {...p} />\n <VersionsEditor content={content} {...p} />\n {!!spec?.entities?.length && (\n <section className=\"grid gap-3 border-t border-border pt-4\" data-ckui=\"content-groups\">\n <MembershipEditor management={p.management} content={content.id} contentKind={content.kind} versions={spec.versions.hidden ? undefined : versions} labels={p.labels} client={p.client} onError={p.onError} />\n </section>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -41,6 +41,7 @@ var e = {
41
41
  comments_closed: "Geschlossen (bleiben, keine neuen)",
42
42
  comments_hidden: "Ausgeblendet",
43
43
  accessTitle: "Zugang und Preis",
44
+ accessOnlyTitle: "Zugriff",
44
45
  access: "Wer es öffnen kann",
45
46
  level_public: "Alle",
46
47
  level_tier: "Mitglieder einer Stufe",
@@ -1 +1 @@
1
- {"version":3,"file":"de.js","names":[],"sources":["../../../src/locales/content/de.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"Das ist gesperrt.\",\n unknown: \"Wir können deinen Zugang gerade nicht prüfen. Versuch es gleich noch einmal.\",\n requiresFirst: \"Tritt zuerst bei, dann kannst du das kaufen.\",\n previewPages_one: \"Die erste Seite ist kostenlos.\",\n previewPages_other: \"Die ersten {count} Seiten sind kostenlos.\",\n previewSegments_one: \"Das erste Kapitel ist kostenlos.\",\n previewSegments_other: \"Die ersten {count} Kapitel sind kostenlos.\",\n freeFrom: \"Ab {date} für alle kostenlos.\",\n joinFirst: \"Beitreten\",\n unlockFor: \"Freischalten für {price}\",\n unlockVersionFor: \"Diese Version freischalten für {price}\",\n joinFor: \"Beitreten für {price}\",\n subscribe: \"{tier} holen\",\n haveIt: \"Schon gekauft?\",\n signIn: \"Anmelden\",\n days_one: \"{count} Tag\",\n days_other: \"{count} Tage\",\n hours_one: \"{count} Stunde\",\n hours_other: \"{count} Stunden\",\n renews: \"{price} / {period}\",\n rents: \"{price} für {period}\",\n },\n versions: {\n language: \"Sprache\",\n version: \"Version\",\n locked: \"Gesperrt\",\n lockedOption: \"{name} (gesperrt)\",\n },\n contentEditor: {\n saved: \"Gespeichert.\",\n details: \"Details\",\n listing: \"Auflistung\",\n listing_listed: \"Aufgelistet\",\n listing_members: \"Aufgelistet für alle, die es öffnen können\",\n listing_unlisted: \"Nicht aufgelistet (nur per Link)\",\n comments: \"Kommentare\",\n comments_open: \"Offen\",\n comments_closed: \"Geschlossen (bleiben, keine neuen)\",\n comments_hidden: \"Ausgeblendet\",\n accessTitle: \"Zugang und Preis\",\n access: \"Wer es öffnen kann\",\n level_public: \"Alle\",\n level_tier: \"Mitglieder einer Stufe\",\n level_ppv: \"Käufer\",\n level_group: \"Gruppenmitglieder\",\n level_group_ppv: \"Gruppenmitglieder, die es kaufen\",\n tiers: \"Stufen\",\n group: \"Gruppe\",\n previewPages: \"Kostenlose Seiten\",\n previewSegments: \"Kostenlose Kapitel\",\n freeAfter: \"Für alle kostenlos ab\",\n onSale: \"Im Verkauf\",\n syncing: \"Wird mit der Abrechnung abgeglichen…\",\n withdraw: \"Aus dem Verkauf nehmen\",\n notForSale: \"Nicht im Verkauf.\",\n price: \"Preis\",\n currency: \"Währung\",\n priceMode: \"Verkauft als\",\n mode_once: \"Einmal, dauerhaft\",\n mode_rent: \"Zugang auf Zeit\",\n mode_renew: \"Wiederkehrend\",\n days: \"Tage\",\n sell: \"Zum Verkauf anbieten\",\n reprice: \"Preis ändern\",\n versions: \"Versionen\",\n live: \"Live\",\n edit: \"Bearbeiten\",\n close: \"Schließen\",\n pageCount: \"{count} Seiten\",\n addVersion: \"Version hinzufügen\",\n chooseLanguage: \"Sprache\",\n versionLanguage: \"Sprache der Version\",\n versionLanguages: \"Sprachen der Version\",\n traits: \"Merkmale\",\n versionLabel: \"Bezeichnung (optional)\",\n versionPublishAt: \"Geht live (optional)\",\n versionDraft: \"Entwurf\",\n ownAccess: \"Eigene Zugangsregel\",\n deleteVersion: \"Version löschen\",\n media: \"Medien\",\n segments: \"Kapitel\",\n noSegments: \"Keine Kapitel.\",\n segmentTitle: \"Titel von Kapitel {n}\",\n segmentTitlePlaceholder: \"Titel\",\n segmentStart: \"Beginn von Kapitel {n}\",\n segmentEnd: \"Ende von Kapitel {n}\",\n segmentRelease: \"Veröffentlichung von Kapitel {n}\",\n addSegment: \"Kapitel hinzufügen\",\n saveSegments: \"Kapitel speichern\",\n },\n myStats: {\n accessFor: \"{tier} seit\",\n accessDescription: \"Gesamte Zugriffszeit; ein Monat entspricht 30 Tagen.\",\n lessThanDay: \"Weniger als 1 Tag\",\n unavailable: \"Einige Statistiken sind vorübergehend nicht verfügbar.\",\n completed: \"{kind} beendet\",\n comments: \"Kommentare\",\n likes: \"Erhaltene Likes\",\n dislikes: \"Erhaltene Dislikes\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
1
+ {"version":3,"file":"de.js","names":[],"sources":["../../../src/locales/content/de.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"Das ist gesperrt.\",\n unknown: \"Wir können deinen Zugang gerade nicht prüfen. Versuch es gleich noch einmal.\",\n requiresFirst: \"Tritt zuerst bei, dann kannst du das kaufen.\",\n previewPages_one: \"Die erste Seite ist kostenlos.\",\n previewPages_other: \"Die ersten {count} Seiten sind kostenlos.\",\n previewSegments_one: \"Das erste Kapitel ist kostenlos.\",\n previewSegments_other: \"Die ersten {count} Kapitel sind kostenlos.\",\n freeFrom: \"Ab {date} für alle kostenlos.\",\n joinFirst: \"Beitreten\",\n unlockFor: \"Freischalten für {price}\",\n unlockVersionFor: \"Diese Version freischalten für {price}\",\n joinFor: \"Beitreten für {price}\",\n subscribe: \"{tier} holen\",\n haveIt: \"Schon gekauft?\",\n signIn: \"Anmelden\",\n days_one: \"{count} Tag\",\n days_other: \"{count} Tage\",\n hours_one: \"{count} Stunde\",\n hours_other: \"{count} Stunden\",\n renews: \"{price} / {period}\",\n rents: \"{price} für {period}\",\n },\n versions: {\n language: \"Sprache\",\n version: \"Version\",\n locked: \"Gesperrt\",\n lockedOption: \"{name} (gesperrt)\",\n },\n contentEditor: {\n saved: \"Gespeichert.\",\n details: \"Details\",\n listing: \"Auflistung\",\n listing_listed: \"Aufgelistet\",\n listing_members: \"Aufgelistet für alle, die es öffnen können\",\n listing_unlisted: \"Nicht aufgelistet (nur per Link)\",\n comments: \"Kommentare\",\n comments_open: \"Offen\",\n comments_closed: \"Geschlossen (bleiben, keine neuen)\",\n comments_hidden: \"Ausgeblendet\",\n accessTitle: \"Zugang und Preis\",\n accessOnlyTitle: \"Zugriff\",\n access: \"Wer es öffnen kann\",\n level_public: \"Alle\",\n level_tier: \"Mitglieder einer Stufe\",\n level_ppv: \"Käufer\",\n level_group: \"Gruppenmitglieder\",\n level_group_ppv: \"Gruppenmitglieder, die es kaufen\",\n tiers: \"Stufen\",\n group: \"Gruppe\",\n previewPages: \"Kostenlose Seiten\",\n previewSegments: \"Kostenlose Kapitel\",\n freeAfter: \"Für alle kostenlos ab\",\n onSale: \"Im Verkauf\",\n syncing: \"Wird mit der Abrechnung abgeglichen…\",\n withdraw: \"Aus dem Verkauf nehmen\",\n notForSale: \"Nicht im Verkauf.\",\n price: \"Preis\",\n currency: \"Währung\",\n priceMode: \"Verkauft als\",\n mode_once: \"Einmal, dauerhaft\",\n mode_rent: \"Zugang auf Zeit\",\n mode_renew: \"Wiederkehrend\",\n days: \"Tage\",\n sell: \"Zum Verkauf anbieten\",\n reprice: \"Preis ändern\",\n versions: \"Versionen\",\n live: \"Live\",\n edit: \"Bearbeiten\",\n close: \"Schließen\",\n pageCount: \"{count} Seiten\",\n addVersion: \"Version hinzufügen\",\n chooseLanguage: \"Sprache\",\n versionLanguage: \"Sprache der Version\",\n versionLanguages: \"Sprachen der Version\",\n traits: \"Merkmale\",\n versionLabel: \"Bezeichnung (optional)\",\n versionPublishAt: \"Geht live (optional)\",\n versionDraft: \"Entwurf\",\n ownAccess: \"Eigene Zugangsregel\",\n deleteVersion: \"Version löschen\",\n media: \"Medien\",\n segments: \"Kapitel\",\n noSegments: \"Keine Kapitel.\",\n segmentTitle: \"Titel von Kapitel {n}\",\n segmentTitlePlaceholder: \"Titel\",\n segmentStart: \"Beginn von Kapitel {n}\",\n segmentEnd: \"Ende von Kapitel {n}\",\n segmentRelease: \"Veröffentlichung von Kapitel {n}\",\n addSegment: \"Kapitel hinzufügen\",\n saveSegments: \"Kapitel speichern\",\n },\n myStats: {\n accessFor: \"{tier} seit\",\n accessDescription: \"Gesamte Zugriffszeit; ein Monat entspricht 30 Tagen.\",\n lessThanDay: \"Weniger als 1 Tag\",\n unavailable: \"Einige Statistiken sind vorübergehend nicht verfügbar.\",\n completed: \"{kind} beendet\",\n comments: \"Kommentare\",\n likes: \"Erhaltene Likes\",\n dislikes: \"Erhaltene Dislikes\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,iBAAiB;EACjB,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
@@ -40,6 +40,7 @@ export declare const content: {
40
40
  comments_closed: string;
41
41
  comments_hidden: string;
42
42
  accessTitle: string;
43
+ accessOnlyTitle: string;
43
44
  access: string;
44
45
  level_public: string;
45
46
  level_tier: string;
@@ -41,6 +41,7 @@ var e = {
41
41
  comments_closed: "Closed (kept, no new ones)",
42
42
  comments_hidden: "Hidden",
43
43
  accessTitle: "Access and price",
44
+ accessOnlyTitle: "Access",
44
45
  access: "Who can open it",
45
46
  level_public: "Everyone",
46
47
  level_tier: "Tier members",
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","names":[],"sources":["../../../src/locales/content/en.ts"],"sourcesContent":["// Content pages and editors: the paywall, the version picker and the editor's sections.\nexport const content = {\n paywall: {\n locked: \"This is locked.\",\n unknown: \"We can't check your access right now. Try again shortly.\",\n requiresFirst: \"Join first, then you can buy this.\",\n previewPages_one: \"The first page is free to read.\",\n previewPages_other: \"The first {count} pages are free to read.\",\n previewSegments_one: \"The first chapter is free.\",\n previewSegments_other: \"The first {count} chapters are free.\",\n freeFrom: \"Free for everyone from {date}.\",\n joinFirst: \"Join\",\n unlockFor: \"Unlock for {price}\",\n unlockVersionFor: \"Unlock this version for {price}\",\n joinFor: \"Join for {price}\",\n subscribe: \"Get {tier}\",\n haveIt: \"Already have it?\",\n signIn: \"Sign in\",\n days_one: \"{count} day\",\n days_other: \"{count} days\",\n hours_one: \"{count} hour\",\n hours_other: \"{count} hours\",\n renews: \"{price} / {period}\",\n rents: \"{price} for {period}\",\n },\n versions: {\n language: \"Language\",\n version: \"Version\",\n locked: \"Locked\",\n lockedOption: \"{name} (locked)\",\n },\n contentEditor: {\n saved: \"Saved.\",\n details: \"Details\",\n listing: \"Listing\",\n listing_listed: \"Listed\",\n listing_members: \"Listed for those who can open it\",\n listing_unlisted: \"Unlisted (link only)\",\n comments: \"Comments\",\n comments_open: \"Open\",\n comments_closed: \"Closed (kept, no new ones)\",\n comments_hidden: \"Hidden\",\n accessTitle: \"Access and price\",\n access: \"Who can open it\",\n level_public: \"Everyone\",\n level_tier: \"Tier members\",\n level_ppv: \"Buyers\",\n level_group: \"Group members\",\n level_group_ppv: \"Group members who buy it\",\n tiers: \"Tiers\",\n group: \"Group\",\n previewPages: \"Free pages\",\n previewSegments: \"Free chapters\",\n freeAfter: \"Free for everyone from\",\n onSale: \"On sale\",\n syncing: \"Syncing with billing…\",\n withdraw: \"Take off sale\",\n notForSale: \"Not for sale.\",\n price: \"Price\",\n currency: \"Currency\",\n priceMode: \"Sold as\",\n mode_once: \"Once, for good\",\n mode_rent: \"Access for a time\",\n mode_renew: \"Renewing\",\n days: \"Days\",\n sell: \"Put on sale\",\n reprice: \"Change price\",\n versions: \"Versions\",\n live: \"Live\",\n edit: \"Edit\",\n close: \"Close\",\n pageCount: \"{count} pages\",\n addVersion: \"Add version\",\n chooseLanguage: \"Language\",\n versionLanguage: \"Version language\",\n versionLanguages: \"Version languages\",\n traits: \"Traits\",\n versionLabel: \"Label (optional)\",\n versionPublishAt: \"Goes live (optional)\",\n versionDraft: \"Draft\",\n ownAccess: \"Its own access rule\",\n deleteVersion: \"Delete version\",\n media: \"Media\",\n segments: \"Chapters\",\n noSegments: \"No chapters.\",\n segmentTitle: \"Chapter {n} title\",\n segmentTitlePlaceholder: \"Title\",\n segmentStart: \"Chapter {n} start\",\n segmentEnd: \"Chapter {n} end\",\n segmentRelease: \"Chapter {n} release\",\n addSegment: \"Add chapter\",\n saveSegments: \"Save chapters\",\n },\n myStats: {\n accessFor: \"{tier} for\",\n accessDescription: \"Total time with access; a month is 30 days.\",\n lessThanDay: \"Less than 1 day\",\n unavailable: \"Some statistics are temporarily unavailable.\",\n completed: \"{kind} finished\",\n comments: \"Comments\",\n likes: \"Likes received\",\n dislikes: \"Dislikes received\",\n },\n};\n"],"mappings":";AACA,IAAa,IAAU;CACrB,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
1
+ {"version":3,"file":"en.js","names":[],"sources":["../../../src/locales/content/en.ts"],"sourcesContent":["// Content pages and editors: the paywall, the version picker and the editor's sections.\nexport const content = {\n paywall: {\n locked: \"This is locked.\",\n unknown: \"We can't check your access right now. Try again shortly.\",\n requiresFirst: \"Join first, then you can buy this.\",\n previewPages_one: \"The first page is free to read.\",\n previewPages_other: \"The first {count} pages are free to read.\",\n previewSegments_one: \"The first chapter is free.\",\n previewSegments_other: \"The first {count} chapters are free.\",\n freeFrom: \"Free for everyone from {date}.\",\n joinFirst: \"Join\",\n unlockFor: \"Unlock for {price}\",\n unlockVersionFor: \"Unlock this version for {price}\",\n joinFor: \"Join for {price}\",\n subscribe: \"Get {tier}\",\n haveIt: \"Already have it?\",\n signIn: \"Sign in\",\n days_one: \"{count} day\",\n days_other: \"{count} days\",\n hours_one: \"{count} hour\",\n hours_other: \"{count} hours\",\n renews: \"{price} / {period}\",\n rents: \"{price} for {period}\",\n },\n versions: {\n language: \"Language\",\n version: \"Version\",\n locked: \"Locked\",\n lockedOption: \"{name} (locked)\",\n },\n contentEditor: {\n saved: \"Saved.\",\n details: \"Details\",\n listing: \"Listing\",\n listing_listed: \"Listed\",\n listing_members: \"Listed for those who can open it\",\n listing_unlisted: \"Unlisted (link only)\",\n comments: \"Comments\",\n comments_open: \"Open\",\n comments_closed: \"Closed (kept, no new ones)\",\n comments_hidden: \"Hidden\",\n accessTitle: \"Access and price\",\n accessOnlyTitle: \"Access\",\n access: \"Who can open it\",\n level_public: \"Everyone\",\n level_tier: \"Tier members\",\n level_ppv: \"Buyers\",\n level_group: \"Group members\",\n level_group_ppv: \"Group members who buy it\",\n tiers: \"Tiers\",\n group: \"Group\",\n previewPages: \"Free pages\",\n previewSegments: \"Free chapters\",\n freeAfter: \"Free for everyone from\",\n onSale: \"On sale\",\n syncing: \"Syncing with billing…\",\n withdraw: \"Take off sale\",\n notForSale: \"Not for sale.\",\n price: \"Price\",\n currency: \"Currency\",\n priceMode: \"Sold as\",\n mode_once: \"Once, for good\",\n mode_rent: \"Access for a time\",\n mode_renew: \"Renewing\",\n days: \"Days\",\n sell: \"Put on sale\",\n reprice: \"Change price\",\n versions: \"Versions\",\n live: \"Live\",\n edit: \"Edit\",\n close: \"Close\",\n pageCount: \"{count} pages\",\n addVersion: \"Add version\",\n chooseLanguage: \"Language\",\n versionLanguage: \"Version language\",\n versionLanguages: \"Version languages\",\n traits: \"Traits\",\n versionLabel: \"Label (optional)\",\n versionPublishAt: \"Goes live (optional)\",\n versionDraft: \"Draft\",\n ownAccess: \"Its own access rule\",\n deleteVersion: \"Delete version\",\n media: \"Media\",\n segments: \"Chapters\",\n noSegments: \"No chapters.\",\n segmentTitle: \"Chapter {n} title\",\n segmentTitlePlaceholder: \"Title\",\n segmentStart: \"Chapter {n} start\",\n segmentEnd: \"Chapter {n} end\",\n segmentRelease: \"Chapter {n} release\",\n addSegment: \"Add chapter\",\n saveSegments: \"Save chapters\",\n },\n myStats: {\n accessFor: \"{tier} for\",\n accessDescription: \"Total time with access; a month is 30 days.\",\n lessThanDay: \"Less than 1 day\",\n unavailable: \"Some statistics are temporarily unavailable.\",\n completed: \"{kind} finished\",\n comments: \"Comments\",\n likes: \"Likes received\",\n dislikes: \"Dislikes received\",\n },\n};\n"],"mappings":";AACA,IAAa,IAAU;CACrB,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,iBAAiB;EACjB,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
@@ -41,6 +41,7 @@ var e = {
41
41
  comments_closed: "Cerrados (se conservan, sin nuevos)",
42
42
  comments_hidden: "Ocultos",
43
43
  accessTitle: "Acceso y precio",
44
+ accessOnlyTitle: "Acceso",
44
45
  access: "Quién puede abrirlo",
45
46
  level_public: "Todos",
46
47
  level_tier: "Miembros de un nivel",
@@ -1 +1 @@
1
- {"version":3,"file":"es.js","names":[],"sources":["../../../src/locales/content/es.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"Esto está bloqueado.\",\n unknown: \"Ahora no podemos comprobar tu acceso. Inténtalo de nuevo en un momento.\",\n requiresFirst: \"Únete primero y luego podrás comprarlo.\",\n previewPages_one: \"La primera página es gratis.\",\n previewPages_other: \"Las primeras {count} páginas son gratis.\",\n previewSegments_one: \"El primer capítulo es gratis.\",\n previewSegments_other: \"Los primeros {count} capítulos son gratis.\",\n freeFrom: \"Gratis para todos desde el {date}.\",\n joinFirst: \"Unirse\",\n unlockFor: \"Desbloquear por {price}\",\n unlockVersionFor: \"Desbloquear esta versión por {price}\",\n joinFor: \"Unirse por {price}\",\n subscribe: \"Conseguir {tier}\",\n haveIt: \"¿Ya lo tienes?\",\n signIn: \"Iniciar sesión\",\n days_one: \"{count} día\",\n days_other: \"{count} días\",\n hours_one: \"{count} hora\",\n hours_other: \"{count} horas\",\n renews: \"{price} / {period}\",\n rents: \"{price} por {period}\",\n },\n versions: {\n language: \"Idioma\",\n version: \"Versión\",\n locked: \"Bloqueada\",\n lockedOption: \"{name} (bloqueada)\",\n },\n contentEditor: {\n saved: \"Guardado.\",\n details: \"Detalles\",\n listing: \"Listado\",\n listing_listed: \"Listado\",\n listing_members: \"Listado para quien puede abrirlo\",\n listing_unlisted: \"No listado (solo con enlace)\",\n comments: \"Comentarios\",\n comments_open: \"Abiertos\",\n comments_closed: \"Cerrados (se conservan, sin nuevos)\",\n comments_hidden: \"Ocultos\",\n accessTitle: \"Acceso y precio\",\n access: \"Quién puede abrirlo\",\n level_public: \"Todos\",\n level_tier: \"Miembros de un nivel\",\n level_ppv: \"Compradores\",\n level_group: \"Miembros del grupo\",\n level_group_ppv: \"Miembros del grupo que lo compren\",\n tiers: \"Niveles\",\n group: \"Grupo\",\n previewPages: \"Páginas gratis\",\n previewSegments: \"Capítulos gratis\",\n freeAfter: \"Gratis para todos desde\",\n onSale: \"A la venta\",\n syncing: \"Sincronizando con la facturación…\",\n withdraw: \"Retirar de la venta\",\n notForSale: \"No está a la venta.\",\n price: \"Precio\",\n currency: \"Moneda\",\n priceMode: \"Se vende como\",\n mode_once: \"Una vez, para siempre\",\n mode_rent: \"Acceso por un tiempo\",\n mode_renew: \"Renovable\",\n days: \"Días\",\n sell: \"Poner a la venta\",\n reprice: \"Cambiar precio\",\n versions: \"Versiones\",\n live: \"Publicada\",\n edit: \"Editar\",\n close: \"Cerrar\",\n pageCount: \"{count} páginas\",\n addVersion: \"Añadir versión\",\n chooseLanguage: \"Idioma\",\n versionLanguage: \"Idioma de la versión\",\n versionLanguages: \"Idiomas de la versión\",\n traits: \"Rasgos\",\n versionLabel: \"Etiqueta (opcional)\",\n versionPublishAt: \"Se publica (opcional)\",\n versionDraft: \"Borrador\",\n ownAccess: \"Regla de acceso propia\",\n deleteVersion: \"Eliminar versión\",\n media: \"Medios\",\n segments: \"Capítulos\",\n noSegments: \"No hay capítulos.\",\n segmentTitle: \"Título del capítulo {n}\",\n segmentTitlePlaceholder: \"Título\",\n segmentStart: \"Inicio del capítulo {n}\",\n segmentEnd: \"Fin del capítulo {n}\",\n segmentRelease: \"Publicación del capítulo {n}\",\n addSegment: \"Añadir capítulo\",\n saveSegments: \"Guardar capítulos\",\n },\n myStats: {\n accessFor: \"Tiempo con {tier}\",\n accessDescription: \"Tiempo total con acceso; un mes equivale a 30 días.\",\n lessThanDay: \"Menos de 1 día\",\n unavailable: \"Algunas estadísticas no están disponibles temporalmente.\",\n completed: \"{kind} terminados\",\n comments: \"Comentarios\",\n likes: \"Me gusta recibidos\",\n dislikes: \"No me gusta recibidos\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
1
+ {"version":3,"file":"es.js","names":[],"sources":["../../../src/locales/content/es.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"Esto está bloqueado.\",\n unknown: \"Ahora no podemos comprobar tu acceso. Inténtalo de nuevo en un momento.\",\n requiresFirst: \"Únete primero y luego podrás comprarlo.\",\n previewPages_one: \"La primera página es gratis.\",\n previewPages_other: \"Las primeras {count} páginas son gratis.\",\n previewSegments_one: \"El primer capítulo es gratis.\",\n previewSegments_other: \"Los primeros {count} capítulos son gratis.\",\n freeFrom: \"Gratis para todos desde el {date}.\",\n joinFirst: \"Unirse\",\n unlockFor: \"Desbloquear por {price}\",\n unlockVersionFor: \"Desbloquear esta versión por {price}\",\n joinFor: \"Unirse por {price}\",\n subscribe: \"Conseguir {tier}\",\n haveIt: \"¿Ya lo tienes?\",\n signIn: \"Iniciar sesión\",\n days_one: \"{count} día\",\n days_other: \"{count} días\",\n hours_one: \"{count} hora\",\n hours_other: \"{count} horas\",\n renews: \"{price} / {period}\",\n rents: \"{price} por {period}\",\n },\n versions: {\n language: \"Idioma\",\n version: \"Versión\",\n locked: \"Bloqueada\",\n lockedOption: \"{name} (bloqueada)\",\n },\n contentEditor: {\n saved: \"Guardado.\",\n details: \"Detalles\",\n listing: \"Listado\",\n listing_listed: \"Listado\",\n listing_members: \"Listado para quien puede abrirlo\",\n listing_unlisted: \"No listado (solo con enlace)\",\n comments: \"Comentarios\",\n comments_open: \"Abiertos\",\n comments_closed: \"Cerrados (se conservan, sin nuevos)\",\n comments_hidden: \"Ocultos\",\n accessTitle: \"Acceso y precio\",\n accessOnlyTitle: \"Acceso\",\n access: \"Quién puede abrirlo\",\n level_public: \"Todos\",\n level_tier: \"Miembros de un nivel\",\n level_ppv: \"Compradores\",\n level_group: \"Miembros del grupo\",\n level_group_ppv: \"Miembros del grupo que lo compren\",\n tiers: \"Niveles\",\n group: \"Grupo\",\n previewPages: \"Páginas gratis\",\n previewSegments: \"Capítulos gratis\",\n freeAfter: \"Gratis para todos desde\",\n onSale: \"A la venta\",\n syncing: \"Sincronizando con la facturación…\",\n withdraw: \"Retirar de la venta\",\n notForSale: \"No está a la venta.\",\n price: \"Precio\",\n currency: \"Moneda\",\n priceMode: \"Se vende como\",\n mode_once: \"Una vez, para siempre\",\n mode_rent: \"Acceso por un tiempo\",\n mode_renew: \"Renovable\",\n days: \"Días\",\n sell: \"Poner a la venta\",\n reprice: \"Cambiar precio\",\n versions: \"Versiones\",\n live: \"Publicada\",\n edit: \"Editar\",\n close: \"Cerrar\",\n pageCount: \"{count} páginas\",\n addVersion: \"Añadir versión\",\n chooseLanguage: \"Idioma\",\n versionLanguage: \"Idioma de la versión\",\n versionLanguages: \"Idiomas de la versión\",\n traits: \"Rasgos\",\n versionLabel: \"Etiqueta (opcional)\",\n versionPublishAt: \"Se publica (opcional)\",\n versionDraft: \"Borrador\",\n ownAccess: \"Regla de acceso propia\",\n deleteVersion: \"Eliminar versión\",\n media: \"Medios\",\n segments: \"Capítulos\",\n noSegments: \"No hay capítulos.\",\n segmentTitle: \"Título del capítulo {n}\",\n segmentTitlePlaceholder: \"Título\",\n segmentStart: \"Inicio del capítulo {n}\",\n segmentEnd: \"Fin del capítulo {n}\",\n segmentRelease: \"Publicación del capítulo {n}\",\n addSegment: \"Añadir capítulo\",\n saveSegments: \"Guardar capítulos\",\n },\n myStats: {\n accessFor: \"Tiempo con {tier}\",\n accessDescription: \"Tiempo total con acceso; un mes equivale a 30 días.\",\n lessThanDay: \"Menos de 1 día\",\n unavailable: \"Algunas estadísticas no están disponibles temporalmente.\",\n completed: \"{kind} terminados\",\n comments: \"Comentarios\",\n likes: \"Me gusta recibidos\",\n dislikes: \"No me gusta recibidos\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,iBAAiB;EACjB,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
@@ -41,6 +41,7 @@ var e = {
41
41
  comments_closed: "締め切り(表示のみ)",
42
42
  comments_hidden: "非表示",
43
43
  accessTitle: "アクセスと価格",
44
+ accessOnlyTitle: "アクセス",
44
45
  access: "開ける人",
45
46
  level_public: "全員",
46
47
  level_tier: "プランの会員",
@@ -1 +1 @@
1
- {"version":3,"file":"ja.js","names":[],"sources":["../../../src/locales/content/ja.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"ロックされています。\",\n unknown: \"現在アクセス権を確認できません。しばらくしてからもう一度お試しください。\",\n requiresFirst: \"先に参加すると購入できます。\",\n previewPages_one: \"最初のページは無料で読めます。\",\n previewPages_other: \"最初の {count} ページは無料で読めます。\",\n previewSegments_one: \"最初の章は無料です。\",\n previewSegments_other: \"最初の {count} 章は無料です。\",\n freeFrom: \"{date} から全員無料になります。\",\n joinFirst: \"参加する\",\n unlockFor: \"{price} で解放\",\n unlockVersionFor: \"このバージョンを {price} で解放\",\n joinFor: \"{price} で参加\",\n subscribe: \"{tier} に加入\",\n haveIt: \"購入済みですか?\",\n signIn: \"サインイン\",\n days_one: \"{count} 日\",\n days_other: \"{count} 日\",\n hours_one: \"{count} 時間\",\n hours_other: \"{count} 時間\",\n renews: \"{price} / {period}\",\n rents: \"{period}で {price}\",\n },\n versions: {\n language: \"言語\",\n version: \"バージョン\",\n locked: \"ロック中\",\n lockedOption: \"{name}(ロック中)\",\n },\n contentEditor: {\n saved: \"保存しました。\",\n details: \"詳細\",\n listing: \"一覧表示\",\n listing_listed: \"表示\",\n listing_members: \"開ける人にだけ表示\",\n listing_unlisted: \"非表示(リンクのみ)\",\n comments: \"コメント\",\n comments_open: \"受け付ける\",\n comments_closed: \"締め切り(表示のみ)\",\n comments_hidden: \"非表示\",\n accessTitle: \"アクセスと価格\",\n access: \"開ける人\",\n level_public: \"全員\",\n level_tier: \"プランの会員\",\n level_ppv: \"購入者\",\n level_group: \"グループのメンバー\",\n level_group_ppv: \"購入したグループのメンバー\",\n tiers: \"プラン\",\n group: \"グループ\",\n previewPages: \"無料ページ数\",\n previewSegments: \"無料の章数\",\n freeAfter: \"全員無料になる日時\",\n onSale: \"販売中\",\n syncing: \"決済と同期中…\",\n withdraw: \"販売をやめる\",\n notForSale: \"販売していません。\",\n price: \"価格\",\n currency: \"通貨\",\n priceMode: \"販売方法\",\n mode_once: \"買い切り\",\n mode_rent: \"期間限定アクセス\",\n mode_renew: \"定期更新\",\n days: \"日数\",\n sell: \"販売する\",\n reprice: \"価格を変更\",\n versions: \"バージョン\",\n live: \"公開中\",\n edit: \"編集\",\n close: \"閉じる\",\n pageCount: \"{count} ページ\",\n addVersion: \"バージョンを追加\",\n chooseLanguage: \"言語\",\n versionLanguage: \"バージョンの言語\",\n versionLanguages: \"バージョンの言語\",\n traits: \"特徴\",\n versionLabel: \"ラベル(任意)\",\n versionPublishAt: \"公開日時(任意)\",\n versionDraft: \"下書き\",\n ownAccess: \"個別のアクセスルール\",\n deleteVersion: \"バージョンを削除\",\n media: \"メディア\",\n segments: \"章\",\n noSegments: \"章はありません。\",\n segmentTitle: \"第 {n} 章のタイトル\",\n segmentTitlePlaceholder: \"タイトル\",\n segmentStart: \"第 {n} 章の開始\",\n segmentEnd: \"第 {n} 章の終了\",\n segmentRelease: \"第 {n} 章の公開日時\",\n addSegment: \"章を追加\",\n saveSegments: \"章を保存\",\n },\n myStats: {\n accessFor: \"{tier}の利用期間\",\n accessDescription: \"利用可能だった合計期間。1か月は30日です。\",\n lessThanDay: \"1日未満\",\n unavailable: \"一部の統計は一時的に利用できません。\",\n completed: \"読了・視聴済みの{kind}\",\n comments: \"コメント\",\n likes: \"もらったいいね\",\n dislikes: \"もらったよくないね\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
1
+ {"version":3,"file":"ja.js","names":[],"sources":["../../../src/locales/content/ja.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"ロックされています。\",\n unknown: \"現在アクセス権を確認できません。しばらくしてからもう一度お試しください。\",\n requiresFirst: \"先に参加すると購入できます。\",\n previewPages_one: \"最初のページは無料で読めます。\",\n previewPages_other: \"最初の {count} ページは無料で読めます。\",\n previewSegments_one: \"最初の章は無料です。\",\n previewSegments_other: \"最初の {count} 章は無料です。\",\n freeFrom: \"{date} から全員無料になります。\",\n joinFirst: \"参加する\",\n unlockFor: \"{price} で解放\",\n unlockVersionFor: \"このバージョンを {price} で解放\",\n joinFor: \"{price} で参加\",\n subscribe: \"{tier} に加入\",\n haveIt: \"購入済みですか?\",\n signIn: \"サインイン\",\n days_one: \"{count} 日\",\n days_other: \"{count} 日\",\n hours_one: \"{count} 時間\",\n hours_other: \"{count} 時間\",\n renews: \"{price} / {period}\",\n rents: \"{period}で {price}\",\n },\n versions: {\n language: \"言語\",\n version: \"バージョン\",\n locked: \"ロック中\",\n lockedOption: \"{name}(ロック中)\",\n },\n contentEditor: {\n saved: \"保存しました。\",\n details: \"詳細\",\n listing: \"一覧表示\",\n listing_listed: \"表示\",\n listing_members: \"開ける人にだけ表示\",\n listing_unlisted: \"非表示(リンクのみ)\",\n comments: \"コメント\",\n comments_open: \"受け付ける\",\n comments_closed: \"締め切り(表示のみ)\",\n comments_hidden: \"非表示\",\n accessTitle: \"アクセスと価格\",\n accessOnlyTitle: \"アクセス\",\n access: \"開ける人\",\n level_public: \"全員\",\n level_tier: \"プランの会員\",\n level_ppv: \"購入者\",\n level_group: \"グループのメンバー\",\n level_group_ppv: \"購入したグループのメンバー\",\n tiers: \"プラン\",\n group: \"グループ\",\n previewPages: \"無料ページ数\",\n previewSegments: \"無料の章数\",\n freeAfter: \"全員無料になる日時\",\n onSale: \"販売中\",\n syncing: \"決済と同期中…\",\n withdraw: \"販売をやめる\",\n notForSale: \"販売していません。\",\n price: \"価格\",\n currency: \"通貨\",\n priceMode: \"販売方法\",\n mode_once: \"買い切り\",\n mode_rent: \"期間限定アクセス\",\n mode_renew: \"定期更新\",\n days: \"日数\",\n sell: \"販売する\",\n reprice: \"価格を変更\",\n versions: \"バージョン\",\n live: \"公開中\",\n edit: \"編集\",\n close: \"閉じる\",\n pageCount: \"{count} ページ\",\n addVersion: \"バージョンを追加\",\n chooseLanguage: \"言語\",\n versionLanguage: \"バージョンの言語\",\n versionLanguages: \"バージョンの言語\",\n traits: \"特徴\",\n versionLabel: \"ラベル(任意)\",\n versionPublishAt: \"公開日時(任意)\",\n versionDraft: \"下書き\",\n ownAccess: \"個別のアクセスルール\",\n deleteVersion: \"バージョンを削除\",\n media: \"メディア\",\n segments: \"章\",\n noSegments: \"章はありません。\",\n segmentTitle: \"第 {n} 章のタイトル\",\n segmentTitlePlaceholder: \"タイトル\",\n segmentStart: \"第 {n} 章の開始\",\n segmentEnd: \"第 {n} 章の終了\",\n segmentRelease: \"第 {n} 章の公開日時\",\n addSegment: \"章を追加\",\n saveSegments: \"章を保存\",\n },\n myStats: {\n accessFor: \"{tier}の利用期間\",\n accessDescription: \"利用可能だった合計期間。1か月は30日です。\",\n lessThanDay: \"1日未満\",\n unavailable: \"一部の統計は一時的に利用できません。\",\n completed: \"読了・視聴済みの{kind}\",\n comments: \"コメント\",\n likes: \"もらったいいね\",\n dislikes: \"もらったよくないね\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,iBAAiB;EACjB,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
@@ -41,6 +41,7 @@ var e = {
41
41
  comments_closed: "닫힘 (기존 댓글 유지)",
42
42
  comments_hidden: "숨김",
43
43
  accessTitle: "이용 권한과 가격",
44
+ accessOnlyTitle: "접근",
44
45
  access: "열 수 있는 사람",
45
46
  level_public: "모두",
46
47
  level_tier: "등급 회원",
@@ -1 +1 @@
1
- {"version":3,"file":"ko.js","names":[],"sources":["../../../src/locales/content/ko.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"잠겨 있습니다.\",\n unknown: \"지금은 이용 권한을 확인할 수 없습니다. 잠시 후 다시 시도하세요.\",\n requiresFirst: \"먼저 가입하면 구매할 수 있습니다.\",\n previewPages_one: \"첫 페이지는 무료입니다.\",\n previewPages_other: \"처음 {count}페이지는 무료입니다.\",\n previewSegments_one: \"첫 챕터는 무료입니다.\",\n previewSegments_other: \"처음 {count}개 챕터는 무료입니다.\",\n freeFrom: \"{date}부터 모두에게 무료입니다.\",\n joinFirst: \"가입\",\n unlockFor: \"{price}에 잠금 해제\",\n unlockVersionFor: \"이 버전을 {price}에 잠금 해제\",\n joinFor: \"{price}에 가입\",\n subscribe: \"{tier} 이용하기\",\n haveIt: \"이미 있으신가요?\",\n signIn: \"로그인\",\n days_one: \"{count}일\",\n days_other: \"{count}일\",\n hours_one: \"{count}시간\",\n hours_other: \"{count}시간\",\n renews: \"{price} / {period}\",\n rents: \"{period} 동안 {price}\",\n },\n versions: {\n language: \"언어\",\n version: \"버전\",\n locked: \"잠김\",\n lockedOption: \"{name} (잠김)\",\n },\n contentEditor: {\n saved: \"저장했습니다.\",\n details: \"세부 정보\",\n listing: \"목록 표시\",\n listing_listed: \"표시\",\n listing_members: \"열 수 있는 사람에게만 표시\",\n listing_unlisted: \"비공개 목록(링크로만)\",\n comments: \"댓글\",\n comments_open: \"열림\",\n comments_closed: \"닫힘 (기존 댓글 유지)\",\n comments_hidden: \"숨김\",\n accessTitle: \"이용 권한과 가격\",\n access: \"열 수 있는 사람\",\n level_public: \"모두\",\n level_tier: \"등급 회원\",\n level_ppv: \"구매자\",\n level_group: \"그룹 구성원\",\n level_group_ppv: \"구매한 그룹 구성원\",\n tiers: \"등급\",\n group: \"그룹\",\n previewPages: \"무료 페이지\",\n previewSegments: \"무료 챕터\",\n freeAfter: \"모두에게 무료가 되는 시점\",\n onSale: \"판매 중\",\n syncing: \"결제와 동기화 중…\",\n withdraw: \"판매 중지\",\n notForSale: \"판매하지 않습니다.\",\n price: \"가격\",\n currency: \"통화\",\n priceMode: \"판매 방식\",\n mode_once: \"한 번 구매로 영구\",\n mode_rent: \"기간 한정 이용\",\n mode_renew: \"정기 갱신\",\n days: \"일\",\n sell: \"판매하기\",\n reprice: \"가격 변경\",\n versions: \"버전\",\n live: \"공개 중\",\n edit: \"편집\",\n close: \"닫기\",\n pageCount: \"{count}페이지\",\n addVersion: \"버전 추가\",\n chooseLanguage: \"언어\",\n versionLanguage: \"버전 언어\",\n versionLanguages: \"버전 언어\",\n traits: \"특징\",\n versionLabel: \"라벨(선택)\",\n versionPublishAt: \"공개 시점(선택)\",\n versionDraft: \"초안\",\n ownAccess: \"별도 이용 규칙\",\n deleteVersion: \"버전 삭제\",\n media: \"미디어\",\n segments: \"챕터\",\n noSegments: \"챕터가 없습니다.\",\n segmentTitle: \"챕터 {n} 제목\",\n segmentTitlePlaceholder: \"제목\",\n segmentStart: \"챕터 {n} 시작\",\n segmentEnd: \"챕터 {n} 끝\",\n segmentRelease: \"챕터 {n} 공개 시점\",\n addSegment: \"챕터 추가\",\n saveSegments: \"챕터 저장\",\n },\n myStats: {\n accessFor: \"{tier} 이용 기간\",\n accessDescription: \"이용 가능한 총기간입니다. 한 달은 30일입니다.\",\n lessThanDay: \"1일 미만\",\n unavailable: \"일부 통계를 일시적으로 사용할 수 없습니다.\",\n completed: \"완료한 {kind}\",\n comments: \"댓글\",\n likes: \"받은 좋아요\",\n dislikes: \"받은 싫어요\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
1
+ {"version":3,"file":"ko.js","names":[],"sources":["../../../src/locales/content/ko.ts"],"sourcesContent":["import type { content as en } from \"./en.js\";\n\nexport const content: typeof en = {\n paywall: {\n locked: \"잠겨 있습니다.\",\n unknown: \"지금은 이용 권한을 확인할 수 없습니다. 잠시 후 다시 시도하세요.\",\n requiresFirst: \"먼저 가입하면 구매할 수 있습니다.\",\n previewPages_one: \"첫 페이지는 무료입니다.\",\n previewPages_other: \"처음 {count}페이지는 무료입니다.\",\n previewSegments_one: \"첫 챕터는 무료입니다.\",\n previewSegments_other: \"처음 {count}개 챕터는 무료입니다.\",\n freeFrom: \"{date}부터 모두에게 무료입니다.\",\n joinFirst: \"가입\",\n unlockFor: \"{price}에 잠금 해제\",\n unlockVersionFor: \"이 버전을 {price}에 잠금 해제\",\n joinFor: \"{price}에 가입\",\n subscribe: \"{tier} 이용하기\",\n haveIt: \"이미 있으신가요?\",\n signIn: \"로그인\",\n days_one: \"{count}일\",\n days_other: \"{count}일\",\n hours_one: \"{count}시간\",\n hours_other: \"{count}시간\",\n renews: \"{price} / {period}\",\n rents: \"{period} 동안 {price}\",\n },\n versions: {\n language: \"언어\",\n version: \"버전\",\n locked: \"잠김\",\n lockedOption: \"{name} (잠김)\",\n },\n contentEditor: {\n saved: \"저장했습니다.\",\n details: \"세부 정보\",\n listing: \"목록 표시\",\n listing_listed: \"표시\",\n listing_members: \"열 수 있는 사람에게만 표시\",\n listing_unlisted: \"비공개 목록(링크로만)\",\n comments: \"댓글\",\n comments_open: \"열림\",\n comments_closed: \"닫힘 (기존 댓글 유지)\",\n comments_hidden: \"숨김\",\n accessTitle: \"이용 권한과 가격\",\n accessOnlyTitle: \"접근\",\n access: \"열 수 있는 사람\",\n level_public: \"모두\",\n level_tier: \"등급 회원\",\n level_ppv: \"구매자\",\n level_group: \"그룹 구성원\",\n level_group_ppv: \"구매한 그룹 구성원\",\n tiers: \"등급\",\n group: \"그룹\",\n previewPages: \"무료 페이지\",\n previewSegments: \"무료 챕터\",\n freeAfter: \"모두에게 무료가 되는 시점\",\n onSale: \"판매 중\",\n syncing: \"결제와 동기화 중…\",\n withdraw: \"판매 중지\",\n notForSale: \"판매하지 않습니다.\",\n price: \"가격\",\n currency: \"통화\",\n priceMode: \"판매 방식\",\n mode_once: \"한 번 구매로 영구\",\n mode_rent: \"기간 한정 이용\",\n mode_renew: \"정기 갱신\",\n days: \"일\",\n sell: \"판매하기\",\n reprice: \"가격 변경\",\n versions: \"버전\",\n live: \"공개 중\",\n edit: \"편집\",\n close: \"닫기\",\n pageCount: \"{count}페이지\",\n addVersion: \"버전 추가\",\n chooseLanguage: \"언어\",\n versionLanguage: \"버전 언어\",\n versionLanguages: \"버전 언어\",\n traits: \"특징\",\n versionLabel: \"라벨(선택)\",\n versionPublishAt: \"공개 시점(선택)\",\n versionDraft: \"초안\",\n ownAccess: \"별도 이용 규칙\",\n deleteVersion: \"버전 삭제\",\n media: \"미디어\",\n segments: \"챕터\",\n noSegments: \"챕터가 없습니다.\",\n segmentTitle: \"챕터 {n} 제목\",\n segmentTitlePlaceholder: \"제목\",\n segmentStart: \"챕터 {n} 시작\",\n segmentEnd: \"챕터 {n} 끝\",\n segmentRelease: \"챕터 {n} 공개 시점\",\n addSegment: \"챕터 추가\",\n saveSegments: \"챕터 저장\",\n },\n myStats: {\n accessFor: \"{tier} 이용 기간\",\n accessDescription: \"이용 가능한 총기간입니다. 한 달은 30일입니다.\",\n lessThanDay: \"1일 미만\",\n unavailable: \"일부 통계를 일시적으로 사용할 수 없습니다.\",\n completed: \"완료한 {kind}\",\n comments: \"댓글\",\n likes: \"받은 좋아요\",\n dislikes: \"받은 싫어요\",\n },\n};\n"],"mappings":";AAEA,IAAa,IAAqB;CAChC,SAAS;EACP,QAAQ;EACR,SAAS;EACT,eAAe;EACf,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,UAAU;EACV,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,UAAU;EACV,SAAS;EACT,QAAQ;EACR,cAAc;CAChB;CACA,eAAe;EACb,OAAO;EACP,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,iBAAiB;EACjB,aAAa;EACb,iBAAiB;EACjB,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,OAAO;EACP,OAAO;EACP,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;EACP,UAAU;EACV,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,MAAM;EACN,MAAM;EACN,SAAS;EACT,UAAU;EACV,MAAM;EACN,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,eAAe;EACf,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;CAChB;CACA,SAAS;EACP,WAAW;EACX,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;CACZ;AACF"}
@@ -41,6 +41,7 @@ var e = {
41
41
  comments_closed: "关闭(保留已有评论)",
42
42
  comments_hidden: "隐藏",
43
43
  accessTitle: "访问权限与价格",
44
+ accessOnlyTitle: "访问权限",
44
45
  access: "谁可以打开",
45
46
  level_public: "所有人",
46
47
  level_tier: "会员等级",