@openrails/contentkit-ui 0.70.0 → 0.71.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.
- package/dist/client/content/comments.d.ts +2 -2
- package/dist/client/content/comments.js.map +1 -1
- package/dist/client/content/polls.d.ts +2 -2
- package/dist/client/content/polls.js.map +1 -1
- package/dist/client/content/posts.d.ts +4 -4
- package/dist/client/content/posts.js.map +1 -1
- package/dist/client/generated/error-codes.js +2 -2
- package/dist/client/generated/error-codes.js.map +1 -1
- package/dist/client/generated/routes.d.ts +118 -118
- package/dist/client/generated/routes.js +205 -117
- package/dist/client/generated/routes.js.map +1 -1
- package/dist/client/generated/wire.d.ts +1 -0
- package/dist/client/generated/wire.js.map +1 -1
- package/dist/client/taxonomy.d.ts +1 -1
- package/dist/client/taxonomy.js.map +1 -1
- package/dist/components/social/poll-editor.d.ts +1 -1
- package/dist/components/social/poll-editor.js.map +1 -1
- package/dist/react/comments.d.ts +1 -1
- package/dist/react/comments.js.map +1 -1
- package/dist/react/polls.d.ts +2 -2
- package/dist/react/polls.js.map +1 -1
- package/dist/react/posts.d.ts +3 -3
- package/dist/react/posts.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","names":[],"sources":["../../../src/client/generated/routes.ts"],"sourcesContent":["// Generated by `go generate ./internal/contract` from ContentKit's route catalog. Do not edit.\n\nexport type ContentKitModule = \"content\" | \"upload\" | \"media\" | \"codes\" | \"taxonomy\";\n\n// Each module's sub-path under the one mount (contentkit.Runtime.Handler).\nexport const CONTENTKIT_MODULES: Readonly<Record<ContentKitModule, string>> = {\n content: \"\",\n upload: \"/media/upload\",\n media: \"/media\",\n codes: \"/codes\",\n taxonomy: \"/taxonomy\",\n};\n\nexport type ContentKitRoute = {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n module: ContentKitModule;\n // The path from the module's mount: CONTENTKIT_MODULES[module] + path under the one mount.\n path: string;\n // public: the actor is optional; user: a signed-in actor; staff: the host permission.\n auth: \"public\" | \"user\" | \"staff\";\n // A staff route's content.Perms field.\n permission: string | null;\n query: readonly string[];\n // wire.ts type names (or a content type): the JSON body, and each success by status.\n request: string | null;\n responses: Readonly<Record<number, string | null>>;\n // The route's own codes, and the shared sets (CONTENTKIT_ERROR_SETS) it also answers.\n errors: readonly string[];\n errorSets: readonly string[];\n};\n\nexport const CONTENTKIT_ROUTES = [\n { method: \"GET\", module: \"content\", path: \"/config\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"Config\" }, errors: [], errorSets: [\"module:content\"] },\n { method: \"GET\", module: \"content\", path: \"/posts\", auth: \"public\", permission: null, query: [\"language\", \"sort\", \"limit\", \"offset\"], request: null, responses: { 200: \"Post[]\" }, errors: [], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/posts/admin\", auth: \"staff\", permission: \"PostWrite\", query: [\"language\", \"draft\", \"deleted\", \"q\", \"limit\", \"offset\"], request: null, responses: { 200: \"Post[]\" }, errors: [], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/posts/{id}\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"Post\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/posts\", auth: \"staff\", permission: \"PostWrite\", query: [], request: \"PostInput\", responses: { 201: \"Post\", 202: \"Post\" }, errors: [\"conflict\", \"forbidden\", \"moderation_rejected\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/posts/{id}\", auth: \"staff\", permission: \"PostWrite\", query: [], request: \"PostInput\", responses: { 200: \"Post\", 202: \"Post\" }, errors: [\"conflict\", \"forbidden\", \"moderation_rejected\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/posts/{id}\", auth: \"staff\", permission: \"PostWrite\", query: [], request: null, responses: { 204: null }, errors: [\"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/posts/{id}/restore\", auth: \"staff\", permission: \"PostWrite\", query: [], request: null, responses: { 200: \"Post\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/posts/{id}/cover\", auth: \"staff\", permission: \"PostWrite\", query: [], request: \"ImageInput\", responses: { 200: \"PostCover\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/posts/{id}/images\", auth: \"staff\", permission: \"PostWrite\", query: [], request: \"ImageInput\", responses: { 200: \"InlineImage\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/comments\", auth: \"public\", permission: null, query: [\"sort\", \"limit\", \"offset\"], request: null, responses: { 200: \"Comment[]\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/comments\", auth: \"public\", permission: null, query: [], request: \"CommentInput\", responses: { 201: \"Comment\", 202: \"Comment\" }, errors: [\"comment_banned\", \"comment_too_long\", \"forbidden\", \"moderation_rejected\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comments/latest\", auth: \"public\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"FeedItem[]\" }, errors: [], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comments/admin\", auth: \"staff\", permission: \"CommentModerate\", query: [\"content_kind\", \"limit\", \"offset\"], request: null, responses: { 200: \"AdminComment[]\" }, errors: [], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/comments/{cid}/restore\", auth: \"staff\", permission: \"CommentModerate\", query: [], request: null, responses: { 200: \"Restored\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comments/{cid}/replies\", auth: \"public\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"Comment[]\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/comments/{cid}\", auth: \"public\", permission: null, query: [], request: \"CommentEdit\", responses: { 200: \"Comment\", 202: \"Comment\" }, errors: [\"comment_banned\", \"comment_too_long\", \"conflict\", \"forbidden\", \"moderation_rejected\", \"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/comments/{cid}\", auth: \"public\", permission: null, query: [], request: null, responses: { 204: null }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/comments/{cid}/like\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/comments/{cid}/dislike\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/comments/{cid}/reaction\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/like\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/dislike\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/{kind}/{id}/reaction\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/reaction\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/favorites\", auth: \"user\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"FavoriteItem[]\" }, errors: [], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/favorite\", auth: \"user\", permission: null, query: [], request: null, responses: { 200: \"FavoriteState\" }, errors: [\"forbidden\", \"not_found\", \"rate_limited\"], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/{kind}/{id}/favorite\", auth: \"user\", permission: null, query: [], request: null, responses: { 200: \"FavoriteState\" }, errors: [\"forbidden\", \"invalid_request\", \"rate_limited\"], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/favorite\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"FavoriteState\" }, errors: [\"invalid_request\", \"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/polls\", auth: \"public\", permission: null, query: [\"language\", \"month\", \"date\", \"limit\", \"offset\"], request: null, responses: { 200: \"Poll[]\" }, errors: [], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/polls/admin\", auth: \"staff\", permission: \"PollWrite\", query: [\"language\", \"month\", \"date\", \"limit\", \"offset\"], request: null, responses: { 200: \"Poll[]\" }, errors: [], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/polls/{id}\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"Poll\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls\", auth: \"staff\", permission: \"PollWrite\", query: [], request: \"PollInput\", responses: { 201: \"Poll\" }, errors: [\"not_configured\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/polls/{id}\", auth: \"staff\", permission: \"PollWrite\", query: [], request: \"PollUpdate\", responses: { 200: \"Poll\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/polls/{id}\", auth: \"staff\", permission: \"PollWrite\", query: [], request: null, responses: { 204: null }, errors: [\"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls/{id}/vote\", auth: \"public\", permission: null, query: [], request: \"PollVote\", responses: { 200: \"Poll\" }, errors: [\"forbidden\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls/{id}/answer\", auth: \"user\", permission: null, query: [], request: \"PollAnswerInput\", responses: { 200: \"Poll\" }, errors: [\"forbidden\", \"not_found\", \"rate_limited\"], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/polls/{id}/image\", auth: \"staff\", permission: \"PollWrite\", query: [], request: \"ImageInput\", responses: { 200: \"PollImage\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls/{id}/options\", auth: \"staff\", permission: \"PollWrite\", query: [], request: \"PollOptionPatch\", responses: { 201: \"PollOption\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/polls/{id}/options/{oid}\", auth: \"staff\", permission: \"PollWrite\", query: [], request: \"PollOptionPatch\", responses: { 200: \"PollOption\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/polls/{id}/options/{oid}\", auth: \"staff\", permission: \"PollWrite\", query: [], request: null, responses: { 204: null }, errors: [\"invalid_request\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/polls/{id}/options/{oid}/image\", auth: \"staff\", permission: \"PollWrite\", query: [], request: \"ImageInput\", responses: { 200: \"PollImage\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comment-bans\", auth: \"user\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"CommentBan[]\" }, errors: [], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/comment-bans/{user}\", auth: \"user\", permission: null, query: [], request: \"BanInput\", responses: { 200: \"CommentBan\" }, errors: [], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/comment-bans/{user}\", auth: \"user\", permission: null, query: [], request: null, responses: { 204: null }, errors: [], errorSets: [\"module:content\", \"tier:user\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/global-comment-bans\", auth: \"staff\", permission: \"CommentBan\", query: [\"limit\", \"offset\"], request: null, responses: { 200: \"CommentBan[]\" }, errors: [\"unauthorized\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/global-comment-bans/{user}\", auth: \"staff\", permission: \"CommentBan\", query: [], request: \"BanInput\", responses: { 200: \"CommentBan\" }, errors: [\"unauthorized\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/global-comment-bans/{user}\", auth: \"staff\", permission: \"CommentBan\", query: [], request: null, responses: { 204: null }, errors: [\"unauthorized\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/can-comment\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"CommentStanding\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/moderation/held\", auth: \"staff\", permission: \"ModerationReview\", query: [\"kind\", \"cursor\", \"limit\"], request: null, responses: { 200: \"HeldPage\" }, errors: [], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/moderation/{kind}/{id}/resolve\", auth: \"staff\", permission: \"ModerationReview\", query: [], request: \"ResolveInput\", responses: { 200: \"ReviewOutcome\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:content\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/presign\", auth: \"user\", permission: null, query: [], request: \"PresignBody\", responses: { 200: \"PresignReply\" }, errors: [\"conflict\", \"forbidden\", \"not_found\", \"quota_exceeded\", \"rate_limited\", \"too_large\", \"too_many_files\", \"type_not_allowed\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/parts\", auth: \"user\", permission: null, query: [], request: \"PartsBody\", responses: { 200: \"PartsReply\" }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/parts/list\", auth: \"user\", permission: null, query: [], request: \"TicketBody\", responses: { 200: \"PartsReply\" }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/complete\", auth: \"user\", permission: null, query: [], request: \"TicketBody\", responses: { 200: \"CompleteReply\" }, errors: [\"checksum_mismatch\", \"forbidden\", \"incomplete\", \"not_found\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/abort\", auth: \"user\", permission: null, query: [], request: \"TicketBody\", responses: { 204: null }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/commit\", auth: \"user\", permission: null, query: [], request: \"CommitBody\", responses: { 200: \"CommitReply\" }, errors: [\"conflict\", \"forbidden\", \"image_too_small\", \"not_found\", \"not_uploaded\", \"quota_exceeded\", \"rate_limited\", \"too_large\", \"too_many_files\", \"type_not_allowed\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"GET\", module: \"upload\", path: \"/frame\", auth: \"user\", permission: null, query: [\"kind\", \"id\", \"path\", \"t\", \"w\"], request: null, responses: { 200: \"image/jpeg\" }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"tier:user\", \"request\"] },\n { method: \"GET\", module: \"media\", path: \"/presets\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"PresetRule[]\" }, errors: [], errorSets: [\"module:media\"] },\n { method: \"GET\", module: \"media\", path: \"/{kind}/{id}\", auth: \"public\", permission: null, query: [\"prefix\", \"offset\", \"limit\", \"download\", \"editor\"], request: null, responses: { 200: \"ReadResult\" }, errors: [], errorSets: [\"module:media\", \"request\"] },\n { method: \"GET\", module: \"media\", path: \"/{kind}/{id}/hls/{path...}\", auth: \"public\", permission: null, query: [\"audio\", \"subs\"], request: null, responses: { 200: \"application/vnd.apple.mpegurl\" }, errors: [], errorSets: [\"module:media\", \"request\"] },\n { method: \"GET\", module: \"codes\", path: \"/{code}\", auth: \"public\", permission: null, query: [\"lang\"], request: null, responses: { 200: \"Resolved\" }, errors: [\"gone\", \"not_found\"], errorSets: [\"module:codes\", \"request\"] },\n { method: \"GET\", module: \"taxonomy\", path: \"/nodes\", auth: \"staff\", permission: \"Taxonomy\", query: [\"kind\", \"state\", \"id\", \"slug\", \"language\", \"language_mode\", \"name_prefix\", \"q\", \"content_kind\", \"min_count\", \"sort\", \"cursor\", \"offset\", \"limit\"], request: null, responses: { 200: \"NodePage\" }, errors: [], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/nodes\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"NodeInput[]\", responses: { 201: \"Node[]\" }, errors: [\"conflict\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"taxonomy\", path: \"/nodes/{id}\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: null, responses: { 200: \"NodeDetail\" }, errors: [\"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"PATCH\", module: \"taxonomy\", path: \"/nodes/{id}\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"NodeUpdate\", responses: { 200: \"Node\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/nodes/{id}\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: null, responses: { 200: \"Node\" }, errors: [\"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"PUT\", module: \"taxonomy\", path: \"/nodes/{id}/names\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"Name[]\", responses: { 200: \"NodeDetail\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/nodes/{id}/names\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"Name[]\", responses: { 200: \"NodeDetail\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/nodes/{id}/names\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"Name[]\", responses: { 200: \"NodeDetail\" }, errors: [\"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/nodes/{id}/merge\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"MergeInput\", responses: { 200: \"MergeReport\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/edges\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"Edge[]\", responses: { 200: \"EdgesWritten\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/edges\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"Edge[]\", responses: { 200: \"EdgesWritten\" }, errors: [], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/assignments\", auth: \"staff\", permission: \"Taxonomy\", query: [\"suppress_counts\"], request: \"Assignment[]\", responses: { 200: \"AssignmentsWritten\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/assignments\", auth: \"staff\", permission: \"Taxonomy\", query: [\"suppress_counts\"], request: \"Assignment[]\", responses: { 200: \"AssignmentsWritten\" }, errors: [], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/effective\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: \"ContentRef[]\", responses: { 200: \"EffectiveTagsOf[]\" }, errors: [], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"GET\", module: \"taxonomy\", path: \"/counts\", auth: \"staff\", permission: \"Taxonomy\", query: [\"taxonomy_id\"], request: null, responses: { 200: \"Record<string, Count[]>\" }, errors: [], errorSets: [\"module:taxonomy\", \"tier:staff\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/counts/rebuild\", auth: \"staff\", permission: \"Taxonomy\", query: [], request: null, responses: { 200: \"CountsRebuilt\" }, errors: [], errorSets: [\"module:taxonomy\", \"tier:staff\"] },\n] as const satisfies readonly ContentKitRoute[];\n\n// The codes every route of a kind answers, by set name.\nexport const CONTENTKIT_ERROR_SETS: Readonly<Record<string, readonly string[]>> = {\n \"module:codes\": [\"internal_error\"],\n \"module:content\": [\"internal_error\", \"tenant_mismatch\"],\n \"module:media\": [\"internal_error\", \"not_found\", \"rate_limited\", \"unavailable\", \"upgrade_required\"],\n \"module:taxonomy\": [\"internal_error\"],\n \"module:upload\": [\"internal_error\", \"unavailable\", \"upgrade_required\"],\n \"request\": [\"invalid_request\"],\n \"tier:staff\": [\"forbidden\"],\n \"tier:user\": [\"unauthorized\"],\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","names":[],"sources":["../../../src/client/generated/routes.ts"],"sourcesContent":["// Generated by `go generate ./internal/contract` from ContentKit's route catalog. Do not edit.\n\nexport type ContentKitModule = \"content\" | \"upload\" | \"media\" | \"codes\" | \"taxonomy\";\n\n// Each module's sub-path under the one mount (contentkit.Runtime.Handler).\nexport const CONTENTKIT_MODULES: Readonly<Record<ContentKitModule, string>> = {\n content: \"\",\n upload: \"/media/upload\",\n media: \"/media\",\n codes: \"/codes\",\n taxonomy: \"/taxonomy\",\n};\n\nexport type ContentKitRoute = {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n module: ContentKitModule;\n // The path from the module's mount: CONTENTKIT_MODULES[module] + path under the one mount.\n path: string;\n // open: never authenticates; public: the actor is optional; user: a signed-in person;\n // staff: a person or an application holding the host permission.\n auth: \"open\" | \"public\" | \"user\" | \"staff\";\n // A staff route's permission: root:<resource>:<action>.\n permission: string | null;\n query: readonly string[];\n // wire.ts type names (or a content type): the JSON body, and each success by status.\n request: string | null;\n responses: Readonly<Record<number, string | null>>;\n // The route's own codes, and the shared sets (CONTENTKIT_ERROR_SETS) it also answers.\n errors: readonly string[];\n errorSets: readonly string[];\n};\n\nexport const CONTENTKIT_ROUTES = [\n { method: \"GET\", module: \"content\", path: \"/config\", auth: \"open\", permission: null, query: [], request: null, responses: { 200: \"Config\" }, errors: [], errorSets: [\"module:content\"] },\n { method: \"GET\", module: \"content\", path: \"/posts\", auth: \"public\", permission: null, query: [\"language\", \"sort\", \"limit\", \"offset\"], request: null, responses: { 200: \"Post[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/posts/admin\", auth: \"staff\", permission: \"root:posts:write\", query: [\"language\", \"draft\", \"deleted\", \"q\", \"limit\", \"offset\"], request: null, responses: { 200: \"Post[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/posts/{id}\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"Post\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/posts\", auth: \"staff\", permission: \"root:posts:write\", query: [], request: \"PostInput\", responses: { 201: \"Post\", 202: \"Post\" }, errors: [\"conflict\", \"forbidden\", \"moderation_rejected\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/posts/{id}\", auth: \"staff\", permission: \"root:posts:write\", query: [], request: \"PostInput\", responses: { 200: \"Post\", 202: \"Post\" }, errors: [\"conflict\", \"forbidden\", \"moderation_rejected\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/posts/{id}\", auth: \"staff\", permission: \"root:posts:write\", query: [], request: null, responses: { 204: null }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/posts/{id}/restore\", auth: \"staff\", permission: \"root:posts:write\", query: [], request: null, responses: { 200: \"Post\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/posts/{id}/cover\", auth: \"staff\", permission: \"root:posts:write\", query: [], request: \"ImageInput\", responses: { 200: \"PostCover\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/posts/{id}/images\", auth: \"staff\", permission: \"root:posts:write\", query: [], request: \"ImageInput\", responses: { 200: \"InlineImage\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/comments\", auth: \"public\", permission: null, query: [\"sort\", \"limit\", \"offset\"], request: null, responses: { 200: \"Comment[]\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/comments\", auth: \"public\", permission: null, query: [], request: \"CommentInput\", responses: { 201: \"Comment\", 202: \"Comment\" }, errors: [\"comment_banned\", \"comment_too_long\", \"forbidden\", \"moderation_rejected\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comments/latest\", auth: \"public\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"FeedItem[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comments/admin\", auth: \"staff\", permission: \"root:comments:moderate\", query: [\"content_kind\", \"limit\", \"offset\"], request: null, responses: { 200: \"AdminComment[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/comments/{cid}/restore\", auth: \"staff\", permission: \"root:comments:moderate\", query: [], request: null, responses: { 200: \"Restored\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comments/{cid}/replies\", auth: \"public\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"Comment[]\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/comments/{cid}\", auth: \"public\", permission: null, query: [], request: \"CommentEdit\", responses: { 200: \"Comment\", 202: \"Comment\" }, errors: [\"comment_banned\", \"comment_too_long\", \"conflict\", \"forbidden\", \"moderation_rejected\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/comments/{cid}\", auth: \"public\", permission: null, query: [], request: null, responses: { 204: null }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/comments/{cid}/like\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/comments/{cid}/dislike\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/comments/{cid}/reaction\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/like\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/dislike\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/{kind}/{id}/reaction\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"forbidden\", \"invalid_request\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/reaction\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"ReactionCounts\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/favorites\", auth: \"user\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"FavoriteItem[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/{kind}/{id}/favorite\", auth: \"user\", permission: null, query: [], request: null, responses: { 200: \"FavoriteState\" }, errors: [\"forbidden\", \"not_found\", \"rate_limited\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/{kind}/{id}/favorite\", auth: \"user\", permission: null, query: [], request: null, responses: { 200: \"FavoriteState\" }, errors: [\"forbidden\", \"invalid_request\", \"rate_limited\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/favorite\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"FavoriteState\" }, errors: [\"invalid_request\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/polls\", auth: \"public\", permission: null, query: [\"language\", \"month\", \"date\", \"limit\", \"offset\"], request: null, responses: { 200: \"Poll[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/polls/admin\", auth: \"staff\", permission: \"root:polls:write\", query: [\"language\", \"month\", \"date\", \"limit\", \"offset\"], request: null, responses: { 200: \"Poll[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/polls/{id}\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"Poll\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: \"PollInput\", responses: { 201: \"Poll\" }, errors: [\"not_configured\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/polls/{id}\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: \"PollUpdate\", responses: { 200: \"Poll\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/polls/{id}\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: null, responses: { 204: null }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls/{id}/vote\", auth: \"public\", permission: null, query: [], request: \"PollVote\", responses: { 200: \"Poll\" }, errors: [\"forbidden\", \"not_found\", \"rate_limited\", \"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls/{id}/answer\", auth: \"user\", permission: null, query: [], request: \"PollAnswerInput\", responses: { 200: \"Poll\" }, errors: [\"forbidden\", \"not_found\", \"rate_limited\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/polls/{id}/image\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: \"ImageInput\", responses: { 200: \"PollImage\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/polls/{id}/options\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: \"PollOptionPatch\", responses: { 201: \"PollOption\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PATCH\", module: \"content\", path: \"/polls/{id}/options/{oid}\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: \"PollOptionPatch\", responses: { 200: \"PollOption\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/polls/{id}/options/{oid}\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: null, responses: { 204: null }, errors: [\"invalid_request\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/polls/{id}/options/{oid}/image\", auth: \"staff\", permission: \"root:polls:write\", query: [], request: \"ImageInput\", responses: { 200: \"PollImage\" }, errors: [\"not_configured\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/comment-bans\", auth: \"user\", permission: null, query: [\"limit\", \"offset\"], request: null, responses: { 200: \"CommentBan[]\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/comment-bans/{user}\", auth: \"user\", permission: null, query: [], request: \"BanInput\", responses: { 200: \"CommentBan\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/comment-bans/{user}\", auth: \"user\", permission: null, query: [], request: null, responses: { 204: null }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/global-comment-bans\", auth: \"staff\", permission: \"root:comments:ban\", query: [\"limit\", \"offset\"], request: null, responses: { 200: \"CommentBan[]\" }, errors: [\"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"PUT\", module: \"content\", path: \"/global-comment-bans/{user}\", auth: \"staff\", permission: \"root:comments:ban\", query: [], request: \"BanInput\", responses: { 200: \"CommentBan\" }, errors: [\"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"content\", path: \"/global-comment-bans/{user}\", auth: \"staff\", permission: \"root:comments:ban\", query: [], request: null, responses: { 204: null }, errors: [\"unauthorized\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/{kind}/{id}/can-comment\", auth: \"public\", permission: null, query: [], request: null, responses: { 200: \"CommentStanding\" }, errors: [\"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"content\", path: \"/moderation/held\", auth: \"staff\", permission: \"root:moderation:review\", query: [\"kind\", \"cursor\", \"limit\"], request: null, responses: { 200: \"HeldPage\" }, errors: [], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"content\", path: \"/moderation/{kind}/{id}/resolve\", auth: \"staff\", permission: \"root:moderation:review\", query: [], request: \"ResolveInput\", responses: { 200: \"ReviewOutcome\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:content\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/presign\", auth: \"user\", permission: null, query: [], request: \"PresignBody\", responses: { 200: \"PresignReply\" }, errors: [\"conflict\", \"forbidden\", \"not_found\", \"quota_exceeded\", \"rate_limited\", \"too_large\", \"too_many_files\", \"type_not_allowed\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/parts\", auth: \"user\", permission: null, query: [], request: \"PartsBody\", responses: { 200: \"PartsReply\" }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/parts/list\", auth: \"user\", permission: null, query: [], request: \"TicketBody\", responses: { 200: \"PartsReply\" }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/complete\", auth: \"user\", permission: null, query: [], request: \"TicketBody\", responses: { 200: \"CompleteReply\" }, errors: [\"checksum_mismatch\", \"forbidden\", \"incomplete\", \"not_found\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/abort\", auth: \"user\", permission: null, query: [], request: \"TicketBody\", responses: { 204: null }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"upload\", path: \"/commit\", auth: \"user\", permission: null, query: [], request: \"CommitBody\", responses: { 200: \"CommitReply\" }, errors: [\"conflict\", \"forbidden\", \"image_too_small\", \"not_found\", \"not_uploaded\", \"quota_exceeded\", \"rate_limited\", \"too_large\", \"too_many_files\", \"type_not_allowed\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"upload\", path: \"/frame\", auth: \"user\", permission: null, query: [\"kind\", \"id\", \"path\", \"t\", \"w\"], request: null, responses: { 200: \"image/jpeg\" }, errors: [\"forbidden\", \"not_found\"], errorSets: [\"module:upload\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"media\", path: \"/presets\", auth: \"open\", permission: null, query: [], request: null, responses: { 200: \"PresetRule[]\" }, errors: [], errorSets: [\"module:media\"] },\n { method: \"GET\", module: \"media\", path: \"/{kind}/{id}\", auth: \"public\", permission: null, query: [\"prefix\", \"offset\", \"limit\", \"download\", \"editor\"], request: null, responses: { 200: \"ReadResult\" }, errors: [], errorSets: [\"module:media\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"media\", path: \"/{kind}/{id}/hls/{path...}\", auth: \"public\", permission: null, query: [\"audio\", \"subs\"], request: null, responses: { 200: \"application/vnd.apple.mpegurl\" }, errors: [], errorSets: [\"module:media\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"codes\", path: \"/{code}\", auth: \"open\", permission: null, query: [\"lang\"], request: null, responses: { 200: \"Resolved\" }, errors: [\"gone\", \"not_found\"], errorSets: [\"module:codes\", \"request\"] },\n { method: \"GET\", module: \"taxonomy\", path: \"/nodes\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [\"kind\", \"state\", \"id\", \"slug\", \"language\", \"language_mode\", \"name_prefix\", \"q\", \"content_kind\", \"min_count\", \"sort\", \"cursor\", \"offset\", \"limit\"], request: null, responses: { 200: \"NodePage\" }, errors: [], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/nodes\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"NodeInput[]\", responses: { 201: \"Node[]\" }, errors: [\"conflict\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"taxonomy\", path: \"/nodes/{id}\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: null, responses: { 200: \"NodeDetail\" }, errors: [\"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"PATCH\", module: \"taxonomy\", path: \"/nodes/{id}\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"NodeUpdate\", responses: { 200: \"Node\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/nodes/{id}\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: null, responses: { 200: \"Node\" }, errors: [\"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"PUT\", module: \"taxonomy\", path: \"/nodes/{id}/names\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"Name[]\", responses: { 200: \"NodeDetail\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/nodes/{id}/names\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"Name[]\", responses: { 200: \"NodeDetail\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/nodes/{id}/names\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"Name[]\", responses: { 200: \"NodeDetail\" }, errors: [\"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/nodes/{id}/merge\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"MergeInput\", responses: { 200: \"MergeReport\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/edges\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"Edge[]\", responses: { 200: \"EdgesWritten\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/edges\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"Edge[]\", responses: { 200: \"EdgesWritten\" }, errors: [], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/assignments\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [\"suppress_counts\"], request: \"Assignment[]\", responses: { 200: \"AssignmentsWritten\" }, errors: [\"conflict\", \"not_found\"], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"DELETE\", module: \"taxonomy\", path: \"/assignments\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [\"suppress_counts\"], request: \"Assignment[]\", responses: { 200: \"AssignmentsWritten\" }, errors: [], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/effective\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: \"ContentRef[]\", responses: { 200: \"EffectiveTagsOf[]\" }, errors: [], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"GET\", module: \"taxonomy\", path: \"/counts\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [\"taxonomy_id\"], request: null, responses: { 200: \"Record<string, Count[]>\" }, errors: [], errorSets: [\"module:taxonomy\", \"auth\", \"request\"] },\n { method: \"POST\", module: \"taxonomy\", path: \"/counts/rebuild\", auth: \"staff\", permission: \"root:taxonomy:write\", query: [], request: null, responses: { 200: \"CountsRebuilt\" }, errors: [], errorSets: [\"module:taxonomy\", \"auth\"] },\n] as const satisfies readonly ContentKitRoute[];\n\n// The codes every route of a kind answers, by set name.\nexport const CONTENTKIT_ERROR_SETS: Readonly<Record<string, readonly string[]>> = {\n \"auth\": [\"forbidden\", \"unauthorized\", \"unavailable\"],\n \"module:codes\": [\"internal_error\"],\n \"module:content\": [\"internal_error\", \"tenant_mismatch\"],\n \"module:media\": [\"internal_error\", \"not_found\", \"rate_limited\", \"unavailable\", \"upgrade_required\"],\n \"module:taxonomy\": [\"internal_error\"],\n \"module:upload\": [\"internal_error\", \"unavailable\", \"upgrade_required\"],\n \"request\": [\"invalid_request\"],\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","names":[],"sources":["../../../src/client/generated/wire.ts"],"sourcesContent":["// Generated by `go generate ./internal/contract` from ContentKit's route catalog. Do not edit.\n\nimport type { ErrorCode } from \"./error-codes.js\";\n\nexport type { ErrorCode };\n\n// Upload sizes: one PUT up to MAX_SINGLE_PUT bytes, else multipart parts.\nexport const MAX_SINGLE_PUT = 67108864;\nexport const MIN_PART_SIZE = 8388608;\nexport const MAX_PART_SIZE = 16777216;\n\nexport type OpName = \"put\" | \"edit\" | \"move\" | \"rename\" | \"remove\" | \"attach\" | \"copy\" | \"frame\" | \"meta\" | \"regenerate\";\nexport type Access = \"full\" | \"none\";\nexport type ItemState = \"ready\" | \"processing\" | \"failed\";\nexport type EncodePhase = \"queued\" | \"downloading\" | \"probing\" | \"encoding\" | \"muxing\" | \"uploading\" | \"publishing\" | \"images\";\nexport type PollKind = \"multiple_choice\" | \"free_text\";\nexport type ModerationState = \"approved\" | \"held\" | \"rejected\";\n\nexport interface AdminComment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n deleted_at?: string;\n}\n\nexport interface Anonymous {\n comments: boolean;\n reactions: boolean;\n votes: boolean;\n}\n\nexport interface Assignment {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n taxonomy_id: string;\n relation: string;\n state?: \"active\" | \"proposed\";\n source_revision: number;\n}\n\nexport interface AssignmentsWritten {\n assignments: number;\n}\n\nexport interface BanInput {\n reason?: string;\n until?: string;\n}\n\nexport interface BanNotice {\n scope: string;\n reason?: string;\n until?: string;\n}\n\nexport interface Comment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CommentBan {\n user_id: string;\n user?: PublicUser;\n scope: string;\n reason?: string;\n until?: string;\n banned_by: string;\n banned_at: string;\n expired: boolean;\n}\n\nexport interface CommentEdit {\n body: string;\n}\n\nexport interface CommentInput {\n body: string;\n reply_to_id?: string;\n anon_name?: string;\n}\n\nexport interface CommentStanding {\n can_comment: boolean;\n ban?: BanNotice;\n anonymous: boolean;\n max_length: number;\n user_id?: string;\n moderate: boolean;\n ban_scopes: (\"global\" | \"owner\")[];\n}\n\nexport interface CommitBody {\n ref: RefBody;\n operation_id: string;\n ops: Op[];\n}\n\nexport interface CommitReply {\n files: FileInfo[];\n}\n\nexport interface CompleteReply {\n blob: string;\n type: string;\n size: number;\n}\n\nexport interface Config {\n anonymous: Anonymous;\n comment_max_length: number;\n}\n\nexport interface ContentRef {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface CopyFrom {\n id: string;\n path: string;\n}\n\nexport interface Count {\n content_kind: string;\n language: string;\n count: number;\n}\n\nexport interface CountsRebuilt {\n nodes: number;\n}\n\nexport interface Crop {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface Edge {\n from_taxonomy_id: string;\n relation: \"alias_of\" | \"artist_of\" | \"child\" | \"member_of\" | \"parent\" | \"synonym\" | \"voice_of\";\n to_taxonomy_id: string;\n source_revision: number;\n}\n\nexport interface EdgesWritten {\n edges: number;\n}\n\nexport interface Edit {\n crop?: Crop;\n rotate?: number;\n}\n\nexport interface EffectiveTag {\n taxonomy_id: string;\n kind: string;\n slug: string;\n relation: string;\n scope: \"content\" | \"version\";\n}\n\nexport interface EffectiveTagsOf {\n content: ContentRef;\n tags: EffectiveTag[];\n}\n\nexport interface EncodeProgress {\n phase: EncodePhase;\n queue_position?: number;\n segments_done?: number;\n segments_total?: number;\n percent: number;\n speed?: number;\n eta?: number;\n at: number;\n stalled?: boolean;\n stage?: number;\n stages?: number;\n}\n\nexport interface ErrorDetails {\n width?: number;\n height?: number;\n min_width?: number;\n max_pixels?: number;\n type?: string;\n allowed?: string[];\n size?: number;\n max_bytes?: number;\n frames?: number;\n max_frames?: number;\n seconds?: number;\n max_seconds?: number;\n min_aspect?: number;\n max_aspect?: number;\n max?: number;\n}\n\nexport interface ErrorReply {\n error: string;\n code: ErrorCode;\n retry_after?: number;\n action?: \"comment\" | \"comment_reaction\" | \"favorite\" | \"poll_vote\" | \"post_reaction\" | \"reaction\";\n ban?: BanNotice;\n blobs?: string[];\n details?: ErrorDetails;\n}\n\nexport interface Failure {\n of: string;\n message: string;\n code?: ErrorCode;\n details?: ErrorDetails;\n}\n\nexport interface FavoriteItem {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n created_at: string;\n}\n\nexport interface FavoriteState {\n favorited: boolean;\n count: number;\n}\n\nexport interface FeedItem {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface FileInfo {\n path: string;\n type: string;\n size?: number;\n w?: number;\n h?: number;\n dur?: number;\n download?: string;\n url?: string;\n locked?: boolean;\n upload?: boolean;\n staged?: boolean;\n from?: string;\n edit?: Edit;\n frame?: Frame;\n meta?: Record<string, unknown>;\n unattached?: boolean;\n pending?: string[];\n failed?: Failure;\n editor_url?: string;\n progress?: EncodeProgress;\n}\n\nexport interface Frame {\n t?: number;\n auto?: boolean;\n of?: string;\n}\n\nexport interface Group {\n id: string;\n label: string;\n count: number;\n}\n\nexport interface HeldItem {\n kind: string;\n revision: number;\n id: string;\n ref: ContentRef;\n author_id?: string;\n author?: PublicUser;\n anon_name?: string;\n title?: string;\n body: string;\n reason: string;\n model?: string;\n prompt_version?: string;\n confidence?: number;\n error?: string;\n held_at: string;\n created_at: string;\n}\n\nexport interface HeldPage {\n items: HeldItem[];\n next?: string;\n}\n\nexport interface ImageInput {\n image?: string;\n}\n\nexport interface InlineImage {\n ref: string;\n url: string | null;\n}\n\nexport interface MergeInput {\n into_taxonomy_id: string;\n}\n\nexport interface MergeReport {\n from_taxonomy_id: string;\n into_taxonomy_id: string;\n assignments_moved: number;\n names_moved: number;\n edges_rewritten: number;\n assignments_merged: number;\n}\n\nexport interface MultipartReply {\n ticket: string;\n min_part_size: number;\n max_part_size: number;\n max_parts: number;\n}\n\nexport interface Name {\n language: string;\n kind: \"alias\" | \"name\";\n name: string;\n normalized?: string;\n source_revision: number;\n}\n\nexport interface Node {\n taxonomy_id: string;\n tenant_id: string;\n kind: string;\n slug: string;\n state: \"active\" | \"deleted\" | \"merged\";\n source_revision: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface NodeDetail {\n taxonomy_id: string;\n tenant_id: string;\n kind: string;\n slug: string;\n state: \"active\" | \"deleted\" | \"merged\";\n source_revision: number;\n created_at: string;\n updated_at: string;\n names: Name[];\n edges: Edge[];\n counts: Count[];\n}\n\nexport interface NodeInput {\n taxonomy_id?: string;\n kind: string;\n slug: string;\n names?: Name[];\n source_revision: number;\n}\n\nexport interface NodePage {\n nodes: NodeRow[];\n next_cursor?: string;\n total: number;\n}\n\nexport interface NodeRow {\n taxonomy_id: string;\n tenant_id: string;\n kind: string;\n slug: string;\n state: \"active\" | \"deleted\" | \"merged\";\n source_revision: number;\n created_at: string;\n updated_at: string;\n name?: string;\n name_language?: string;\n count: number;\n}\n\nexport interface NodeUpdate {\n slug?: string;\n state?: \"active\" | \"deleted\" | \"merged\";\n source_revision?: number;\n}\n\nexport interface Op {\n op: OpName;\n path?: string;\n blob?: string;\n create_id?: string;\n index?: number;\n meta?: Record<string, unknown>;\n edit?: Edit;\n unattached?: boolean;\n to?: string;\n from?: CopyFrom;\n t?: number;\n auto?: boolean;\n preset?: string;\n force?: boolean;\n takedown?: boolean;\n}\n\nexport interface PartBody {\n number: number;\n size: number;\n sha256: string;\n}\n\nexport interface PartReply {\n number: number;\n size?: number;\n sha256?: string;\n request?: RequestReply;\n}\n\nexport interface PartsBody {\n ticket: string;\n parts: PartBody[];\n}\n\nexport interface PartsReply {\n parts: PartReply[];\n}\n\nexport interface Poll {\n id: string;\n kind: PollKind;\n question: string;\n language: string;\n is_active: boolean;\n image_url?: string;\n live_at: string;\n closes_at?: string;\n closed: boolean;\n total_votes: number;\n options: PollOption[];\n voted: boolean;\n my_option?: string;\n answer_count?: number;\n groups?: Group[];\n my_answer?: PollAnswer;\n}\n\nexport interface PollAnswer {\n id: string;\n text: string;\n classified: boolean;\n updated_at: string;\n}\n\nexport interface PollAnswerInput {\n text: string;\n}\n\nexport interface PollImage {\n image_url: string | null;\n}\n\nexport interface PollInput {\n kind?: PollKind;\n question: string;\n language: string;\n live_at?: string;\n closes_at?: string;\n options?: PollOptionInput[];\n}\n\nexport interface PollOption {\n id: string;\n label: string;\n image_url?: string;\n position: number;\n vote_count: number;\n}\n\nexport interface PollOptionInput {\n label: string;\n position: number;\n}\n\nexport interface PollOptionPatch {\n label?: string;\n position?: number;\n}\n\nexport interface PollUpdate {\n question?: string;\n is_active?: boolean;\n live_at?: string;\n closes_at?: string | null;\n}\n\nexport interface PollVote {\n option_id: string;\n}\n\nexport interface Post {\n id: string;\n author_id: string;\n title: string;\n slug?: string;\n body: string;\n excerpt?: string;\n cover?: string;\n cover_url?: string;\n images?: Record<string, string>;\n language: string;\n is_draft: boolean;\n live_at?: string;\n total_likes: number;\n total_dislikes: number;\n comment_count: number;\n moderation?: ModerationState;\n moderation_reason?: string;\n code: string;\n url_slug: string;\n created_at: string;\n updated_at: string;\n deleted_at?: string;\n}\n\nexport interface PostCover {\n cover_url: string | null;\n}\n\nexport interface PostInput {\n title?: string;\n body?: string;\n excerpt?: string;\n language?: string;\n slug?: string;\n is_draft?: boolean;\n live_at?: string;\n}\n\nexport interface PresetRule {\n kind: string;\n name: string;\n from: string;\n base: string;\n namespace: string;\n to: string;\n widths: number[];\n aspect?: string;\n min_width?: number;\n first?: number;\n default: boolean;\n}\n\nexport interface PresignBody {\n ref: RefBody;\n path: string;\n type: string;\n size: number;\n sha256: string;\n}\n\nexport interface PresignReply {\n path: string;\n blob: string;\n exists?: boolean;\n put?: RequestReply;\n multipart?: MultipartReply;\n process_on_upload?: boolean;\n}\n\nexport interface PublicImage {\n from: string;\n preset: string;\n renditions: PublicRendition[];\n}\n\nexport interface PublicRendition {\n url: string;\n w: number;\n h: number;\n}\n\nexport interface PublicUser {\n id: string;\n username: string;\n avatar?: string;\n avatar_srcset?: string;\n}\n\nexport interface ReactionCounts {\n likes: number;\n dislikes: number;\n mine: number;\n}\n\nexport interface ReadResult {\n access: Access;\n expires: number;\n meta?: Record<string, unknown>;\n previews?: string[];\n public?: PublicImage[];\n total: number;\n offset: number;\n limit: number;\n hls?: string[];\n state?: ItemState;\n full?: boolean;\n uploads?: UploadRule[];\n files: FileInfo[];\n}\n\nexport interface RefBody {\n kind: string;\n id: string;\n}\n\nexport interface RequestReply {\n method: string;\n url: string;\n headers: Record<string, string>;\n expires: string;\n}\n\nexport interface ResolveInput {\n decision: \"approve\" | \"reject\" | \"review\";\n revision: number;\n reason?: string;\n}\n\nexport interface Resolved {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n code: string;\n slug: string;\n slugs?: Record<string, string>;\n path: string;\n}\n\nexport interface Restored {\n restored: boolean;\n}\n\nexport interface ReviewOutcome {\n decision: \"approve\" | \"reject\" | \"review\";\n}\n\nexport interface TicketBody {\n ticket: string;\n}\n\nexport interface UploadRule {\n path: string;\n types: string[];\n max_bytes: number;\n max?: number;\n named?: boolean;\n frames?: string;\n aspect?: string;\n min_width?: number;\n video?: VideoLimits;\n min_aspect?: number;\n max_aspect?: number;\n}\n\nexport interface VideoLimits {\n max_seconds?: number;\n max_fps?: number;\n max_pixels?: number;\n max_work?: number;\n}\n"],"mappings":";AAOA,IAAa,IAAiB,UACjB,IAAgB,SAChB,IAAgB"}
|
|
1
|
+
{"version":3,"file":"wire.js","names":[],"sources":["../../../src/client/generated/wire.ts"],"sourcesContent":["// Generated by `go generate ./internal/contract` from ContentKit's route catalog. Do not edit.\n\nimport type { ErrorCode } from \"./error-codes.js\";\n\nexport type { ErrorCode };\n\n// Upload sizes: one PUT up to MAX_SINGLE_PUT bytes, else multipart parts.\nexport const MAX_SINGLE_PUT = 67108864;\nexport const MIN_PART_SIZE = 8388608;\nexport const MAX_PART_SIZE = 16777216;\n\nexport type OpName = \"put\" | \"edit\" | \"move\" | \"rename\" | \"remove\" | \"attach\" | \"copy\" | \"frame\" | \"meta\" | \"regenerate\";\nexport type Access = \"full\" | \"none\";\nexport type ItemState = \"ready\" | \"processing\" | \"failed\";\nexport type EncodePhase = \"queued\" | \"downloading\" | \"probing\" | \"encoding\" | \"muxing\" | \"uploading\" | \"publishing\" | \"images\";\nexport type PollKind = \"multiple_choice\" | \"free_text\";\nexport type ModerationState = \"approved\" | \"held\" | \"rejected\";\n\nexport interface AdminComment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n deleted_at?: string;\n}\n\nexport interface Anonymous {\n comments: boolean;\n reactions: boolean;\n votes: boolean;\n}\n\nexport interface Assignment {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n taxonomy_id: string;\n relation: string;\n state?: \"active\" | \"proposed\";\n source_revision: number;\n}\n\nexport interface AssignmentsWritten {\n assignments: number;\n}\n\nexport interface BanInput {\n reason?: string;\n until?: string;\n}\n\nexport interface BanNotice {\n scope: string;\n reason?: string;\n until?: string;\n}\n\nexport interface Comment {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CommentBan {\n user_id: string;\n user?: PublicUser;\n scope: string;\n reason?: string;\n until?: string;\n banned_by: string;\n banned_at: string;\n expired: boolean;\n}\n\nexport interface CommentEdit {\n body: string;\n}\n\nexport interface CommentInput {\n body: string;\n reply_to_id?: string;\n anon_name?: string;\n}\n\nexport interface CommentStanding {\n can_comment: boolean;\n ban?: BanNotice;\n anonymous: boolean;\n max_length: number;\n user_id?: string;\n moderate: boolean;\n ban_scopes: (\"global\" | \"owner\")[];\n}\n\nexport interface CommitBody {\n ref: RefBody;\n operation_id: string;\n ops: Op[];\n}\n\nexport interface CommitReply {\n files: FileInfo[];\n}\n\nexport interface CompleteReply {\n blob: string;\n type: string;\n size: number;\n}\n\nexport interface Config {\n anonymous: Anonymous;\n comment_max_length: number;\n}\n\nexport interface ContentRef {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface CopyFrom {\n id: string;\n path: string;\n}\n\nexport interface Count {\n content_kind: string;\n language: string;\n count: number;\n}\n\nexport interface CountsRebuilt {\n nodes: number;\n}\n\nexport interface Crop {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface Edge {\n from_taxonomy_id: string;\n relation: \"alias_of\" | \"artist_of\" | \"child\" | \"member_of\" | \"parent\" | \"synonym\" | \"voice_of\";\n to_taxonomy_id: string;\n source_revision: number;\n}\n\nexport interface EdgesWritten {\n edges: number;\n}\n\nexport interface Edit {\n crop?: Crop;\n rotate?: number;\n}\n\nexport interface EffectiveTag {\n taxonomy_id: string;\n kind: string;\n slug: string;\n relation: string;\n scope: \"content\" | \"version\";\n}\n\nexport interface EffectiveTagsOf {\n content: ContentRef;\n tags: EffectiveTag[];\n}\n\nexport interface EncodeProgress {\n phase: EncodePhase;\n queue_position?: number;\n segments_done?: number;\n segments_total?: number;\n percent: number;\n speed?: number;\n eta?: number;\n at: number;\n stalled?: boolean;\n stage?: number;\n stages?: number;\n}\n\nexport interface ErrorDetails {\n width?: number;\n height?: number;\n min_width?: number;\n max_pixels?: number;\n type?: string;\n allowed?: string[];\n size?: number;\n max_bytes?: number;\n frames?: number;\n max_frames?: number;\n seconds?: number;\n max_seconds?: number;\n min_aspect?: number;\n max_aspect?: number;\n max?: number;\n}\n\nexport interface ErrorReply {\n error: string;\n code: ErrorCode;\n retry_after?: number;\n action?: \"comment\" | \"comment_reaction\" | \"favorite\" | \"poll_vote\" | \"post_reaction\" | \"reaction\";\n ban?: BanNotice;\n blobs?: string[];\n details?: ErrorDetails;\n}\n\nexport interface Failure {\n of: string;\n message: string;\n code?: ErrorCode;\n details?: ErrorDetails;\n}\n\nexport interface FavoriteItem {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n created_at: string;\n}\n\nexport interface FavoriteState {\n favorited: boolean;\n count: number;\n}\n\nexport interface FeedItem {\n id: string;\n reply_to_id?: string;\n user_id?: string;\n anon_name?: string;\n body: string;\n deleted: boolean;\n likes: number;\n dislikes: number;\n mine: number;\n reply_count: number;\n author?: PublicUser;\n moderation?: ModerationState;\n moderation_reason?: string;\n created_at: string;\n updated_at: string;\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n}\n\nexport interface FileInfo {\n path: string;\n type: string;\n size?: number;\n w?: number;\n h?: number;\n dur?: number;\n download?: string;\n url?: string;\n locked?: boolean;\n upload?: boolean;\n staged?: boolean;\n from?: string;\n edit?: Edit;\n frame?: Frame;\n meta?: Record<string, unknown>;\n unattached?: boolean;\n pending?: string[];\n failed?: Failure;\n editor_url?: string;\n progress?: EncodeProgress;\n}\n\nexport interface Frame {\n t?: number;\n auto?: boolean;\n of?: string;\n}\n\nexport interface Group {\n id: string;\n label: string;\n count: number;\n}\n\nexport interface HeldItem {\n kind: string;\n revision: number;\n id: string;\n ref: ContentRef;\n author_id?: string;\n author?: PublicUser;\n anon_name?: string;\n title?: string;\n body: string;\n reason: string;\n model?: string;\n prompt_version?: string;\n confidence?: number;\n error?: string;\n held_at: string;\n created_at: string;\n}\n\nexport interface HeldPage {\n items: HeldItem[];\n next?: string;\n}\n\nexport interface ImageInput {\n image?: string;\n}\n\nexport interface InlineImage {\n ref: string;\n url: string | null;\n}\n\nexport interface MergeInput {\n into_taxonomy_id: string;\n}\n\nexport interface MergeReport {\n from_taxonomy_id: string;\n into_taxonomy_id: string;\n assignments_moved: number;\n names_moved: number;\n edges_rewritten: number;\n assignments_merged: number;\n}\n\nexport interface MultipartReply {\n ticket: string;\n min_part_size: number;\n max_part_size: number;\n max_parts: number;\n}\n\nexport interface Name {\n language: string;\n kind: \"alias\" | \"name\";\n name: string;\n normalized?: string;\n source_revision: number;\n}\n\nexport interface Node {\n taxonomy_id: string;\n tenant_id: string;\n kind: string;\n slug: string;\n state: \"active\" | \"deleted\" | \"merged\";\n source_revision: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface NodeDetail {\n taxonomy_id: string;\n tenant_id: string;\n kind: string;\n slug: string;\n state: \"active\" | \"deleted\" | \"merged\";\n source_revision: number;\n created_at: string;\n updated_at: string;\n names: Name[];\n edges: Edge[];\n counts: Count[];\n}\n\nexport interface NodeInput {\n taxonomy_id?: string;\n kind: string;\n slug: string;\n names?: Name[];\n source_revision: number;\n}\n\nexport interface NodePage {\n nodes: NodeRow[];\n next_cursor?: string;\n total: number;\n}\n\nexport interface NodeRow {\n taxonomy_id: string;\n tenant_id: string;\n kind: string;\n slug: string;\n state: \"active\" | \"deleted\" | \"merged\";\n source_revision: number;\n created_at: string;\n updated_at: string;\n name?: string;\n name_language?: string;\n count: number;\n}\n\nexport interface NodeUpdate {\n slug?: string;\n state?: \"active\" | \"deleted\" | \"merged\";\n source_revision?: number;\n}\n\nexport interface Op {\n op: OpName;\n path?: string;\n blob?: string;\n create_id?: string;\n index?: number;\n meta?: Record<string, unknown>;\n edit?: Edit;\n unattached?: boolean;\n to?: string;\n from?: CopyFrom;\n t?: number;\n auto?: boolean;\n preset?: string;\n force?: boolean;\n takedown?: boolean;\n}\n\nexport interface PartBody {\n number: number;\n size: number;\n sha256: string;\n}\n\nexport interface PartReply {\n number: number;\n size?: number;\n sha256?: string;\n request?: RequestReply;\n}\n\nexport interface PartsBody {\n ticket: string;\n parts: PartBody[];\n}\n\nexport interface PartsReply {\n parts: PartReply[];\n}\n\nexport interface Poll {\n id: string;\n kind: PollKind;\n question: string;\n language: string;\n is_active: boolean;\n image_url?: string;\n live_at: string;\n closes_at?: string;\n closed: boolean;\n total_votes: number;\n options: PollOption[];\n voted: boolean;\n my_option?: string;\n answer_count?: number;\n groups?: Group[];\n my_answer?: PollAnswer;\n}\n\nexport interface PollAnswer {\n id: string;\n text: string;\n classified: boolean;\n updated_at: string;\n}\n\nexport interface PollAnswerInput {\n text: string;\n}\n\nexport interface PollImage {\n image_url: string | null;\n}\n\nexport interface PollInput {\n kind?: PollKind;\n question: string;\n language: string;\n live_at?: string;\n closes_at?: string;\n options?: PollOptionInput[];\n}\n\nexport interface PollOption {\n id: string;\n label: string;\n image_url?: string;\n position: number;\n vote_count: number;\n}\n\nexport interface PollOptionInput {\n label: string;\n position: number;\n}\n\nexport interface PollOptionPatch {\n label?: string;\n position?: number;\n}\n\nexport interface PollUpdate {\n question?: string;\n is_active?: boolean;\n live_at?: string;\n closes_at?: string | null;\n}\n\nexport interface PollVote {\n option_id: string;\n}\n\nexport interface Post {\n id: string;\n author_id: string;\n title: string;\n slug?: string;\n body: string;\n excerpt?: string;\n cover?: string;\n cover_url?: string;\n images?: Record<string, string>;\n language: string;\n is_draft: boolean;\n live_at?: string;\n total_likes: number;\n total_dislikes: number;\n comment_count: number;\n moderation?: ModerationState;\n moderation_reason?: string;\n code: string;\n url_slug: string;\n created_at: string;\n updated_at: string;\n deleted_at?: string;\n}\n\nexport interface PostCover {\n cover_url: string | null;\n}\n\nexport interface PostInput {\n title?: string;\n body?: string;\n excerpt?: string;\n language?: string;\n slug?: string;\n is_draft?: boolean;\n live_at?: string;\n}\n\nexport interface PresetRule {\n kind: string;\n name: string;\n from: string;\n base: string;\n namespace: string;\n to: string;\n widths: number[];\n aspect?: string;\n min_width?: number;\n first?: number;\n default: boolean;\n}\n\nexport interface PresignBody {\n ref: RefBody;\n path: string;\n type: string;\n size: number;\n sha256: string;\n}\n\nexport interface PresignReply {\n path: string;\n blob: string;\n exists?: boolean;\n put?: RequestReply;\n multipart?: MultipartReply;\n process_on_upload?: boolean;\n}\n\nexport interface PublicImage {\n from: string;\n preset: string;\n renditions: PublicRendition[];\n}\n\nexport interface PublicRendition {\n url: string;\n w: number;\n h: number;\n}\n\nexport interface PublicUser {\n id: string;\n name?: string;\n username: string;\n avatar?: string;\n avatar_srcset?: string;\n}\n\nexport interface ReactionCounts {\n likes: number;\n dislikes: number;\n mine: number;\n}\n\nexport interface ReadResult {\n access: Access;\n expires: number;\n meta?: Record<string, unknown>;\n previews?: string[];\n public?: PublicImage[];\n total: number;\n offset: number;\n limit: number;\n hls?: string[];\n state?: ItemState;\n full?: boolean;\n uploads?: UploadRule[];\n files: FileInfo[];\n}\n\nexport interface RefBody {\n kind: string;\n id: string;\n}\n\nexport interface RequestReply {\n method: string;\n url: string;\n headers: Record<string, string>;\n expires: string;\n}\n\nexport interface ResolveInput {\n decision: \"approve\" | \"reject\" | \"review\";\n revision: number;\n reason?: string;\n}\n\nexport interface Resolved {\n tenant_id: string;\n content_kind: string;\n content_id: string;\n content_version_id?: string;\n code: string;\n slug: string;\n slugs?: Record<string, string>;\n path: string;\n}\n\nexport interface Restored {\n restored: boolean;\n}\n\nexport interface ReviewOutcome {\n decision: \"approve\" | \"reject\" | \"review\";\n}\n\nexport interface TicketBody {\n ticket: string;\n}\n\nexport interface UploadRule {\n path: string;\n types: string[];\n max_bytes: number;\n max?: number;\n named?: boolean;\n frames?: string;\n aspect?: string;\n min_width?: number;\n video?: VideoLimits;\n min_aspect?: number;\n max_aspect?: number;\n}\n\nexport interface VideoLimits {\n max_seconds?: number;\n max_fps?: number;\n max_pixels?: number;\n max_work?: number;\n}\n"],"mappings":";AAOA,IAAa,IAAiB,UACjB,IAAgB,SAChB,IAAgB"}
|
|
@@ -3,7 +3,7 @@ import { Http } from './http.js';
|
|
|
3
3
|
import { RouteQuery } from './route.js';
|
|
4
4
|
/** GET /taxonomy/nodes filters, as the route names them. */
|
|
5
5
|
export type NodeQuery = RouteQuery<"GET", "/nodes">;
|
|
6
|
-
/** The taxonomy admin API (
|
|
6
|
+
/** The taxonomy admin API (root:taxonomy:write). */
|
|
7
7
|
export declare class TaxonomyClient {
|
|
8
8
|
private readonly http;
|
|
9
9
|
constructor(http: Http);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomy.js","names":[],"sources":["../../src/client/taxonomy.ts"],"sourcesContent":["import type {\n Assignment,\n AssignmentsWritten,\n ContentRef,\n Count,\n CountsRebuilt,\n Edge,\n EdgesWritten,\n EffectiveTagsOf,\n MergeReport,\n Name,\n Node,\n NodeDetail,\n NodeInput,\n NodePage,\n NodeUpdate,\n} from \"./generated/wire.js\";\nimport type { Http } from \"./http.js\";\nimport { call, type RouteQuery } from \"./route.js\";\n\n/** GET /taxonomy/nodes filters, as the route names them. */\nexport type NodeQuery = RouteQuery<\"GET\", \"/nodes\">;\n\n/** The taxonomy admin API (
|
|
1
|
+
{"version":3,"file":"taxonomy.js","names":[],"sources":["../../src/client/taxonomy.ts"],"sourcesContent":["import type {\n Assignment,\n AssignmentsWritten,\n ContentRef,\n Count,\n CountsRebuilt,\n Edge,\n EdgesWritten,\n EffectiveTagsOf,\n MergeReport,\n Name,\n Node,\n NodeDetail,\n NodeInput,\n NodePage,\n NodeUpdate,\n} from \"./generated/wire.js\";\nimport type { Http } from \"./http.js\";\nimport { call, type RouteQuery } from \"./route.js\";\n\n/** GET /taxonomy/nodes filters, as the route names them. */\nexport type NodeQuery = RouteQuery<\"GET\", \"/nodes\">;\n\n/** The taxonomy admin API (root:taxonomy:write). */\nexport class TaxonomyClient {\n constructor(private readonly http: Http) {}\n\n nodes(q: NodeQuery = {}, signal?: AbortSignal): Promise<NodePage> {\n return call(this.http, \"GET\", \"/nodes\", { query: q, signal });\n }\n node(id: string, signal?: AbortSignal): Promise<NodeDetail> {\n return call(this.http, \"GET\", \"/nodes/{id}\", { params: { id }, signal });\n }\n createNodes(nodes: NodeInput[]): Promise<Node[]> {\n return this.write(call(this.http, \"POST\", \"/nodes\", { body: nodes }));\n }\n updateNode(id: string, patch: NodeUpdate): Promise<Node> {\n return this.write(call(this.http, \"PATCH\", \"/nodes/{id}\", { params: { id }, body: patch }));\n }\n /** Marks the node deleted. */\n deleteNode(id: string): Promise<Node> {\n return this.write(call(this.http, \"DELETE\", \"/nodes/{id}\", { params: { id } }));\n }\n /** Replaces, adds or removes names. */\n names(id: string, op: \"set\" | \"add\" | \"remove\", names: Name[]): Promise<NodeDetail> {\n const method = op === \"set\" ? \"PUT\" : op === \"add\" ? \"POST\" : \"DELETE\";\n return this.write(call(this.http, method, \"/nodes/{id}/names\", { params: { id }, body: names }));\n }\n merge(id: string, into: string): Promise<MergeReport> {\n return this.write(call(this.http, \"POST\", \"/nodes/{id}/merge\", { params: { id }, body: { into_taxonomy_id: into } }));\n }\n edges(op: \"add\" | \"remove\", edges: Edge[]): Promise<EdgesWritten> {\n return this.write(call(this.http, op === \"add\" ? \"POST\" : \"DELETE\", \"/edges\", { body: edges }));\n }\n /** Assigns or unassigns nodes; suppressCounts skips count upkeep (rebuildCounts afterwards). */\n assignments(op: \"add\" | \"remove\", assignments: Assignment[], o: { suppressCounts?: boolean } = {}): Promise<AssignmentsWritten> {\n return this.write(call(this.http, op === \"add\" ? \"POST\" : \"DELETE\", \"/assignments\", { body: assignments, query: { suppress_counts: o.suppressCounts } }));\n }\n /** The effective tags (work and version) of each content. */\n effective(refs: ContentRef[], signal?: AbortSignal): Promise<EffectiveTagsOf[]> {\n return call(this.http, \"POST\", \"/effective\", { body: refs, signal });\n }\n /** Content counts of nodes, by taxonomy id. */\n counts(ids: readonly string[], signal?: AbortSignal): Promise<Record<string, Count[]>> {\n return call(this.http, \"GET\", \"/counts\", { query: { taxonomy_id: ids }, signal });\n }\n rebuildCounts(): Promise<CountsRebuilt> {\n return this.write(call(this.http, \"POST\", \"/counts/rebuild\"));\n }\n\n private async write<T>(p: Promise<T>): Promise<T> {\n const emit = this.http.captureChanges();\n const out = await p;\n emit({ type: \"taxonomy.changed\" });\n return out;\n }\n}\n"],"mappings":";;AAwBA,IAAa,IAAb,MAA4B;CACG;CAA7B,YAAY,GAA6B;EAAZ,KAAA,OAAA;CAAa;CAE1C,MAAM,IAAe,CAAC,GAAG,GAAyC;EAChE,OAAO,EAAK,KAAK,MAAM,OAAO,UAAU;GAAE,OAAO;GAAG;EAAO,CAAC;CAC9D;CACA,KAAK,GAAY,GAA2C;EAC1D,OAAO,EAAK,KAAK,MAAM,OAAO,eAAe;GAAE,QAAQ,EAAE,MAAG;GAAG;EAAO,CAAC;CACzE;CACA,YAAY,GAAqC;EAC/C,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,QAAQ,UAAU,EAAE,MAAM,EAAM,CAAC,CAAC;CACtE;CACA,WAAW,GAAY,GAAkC;EACvD,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,SAAS,eAAe;GAAE,QAAQ,EAAE,MAAG;GAAG,MAAM;EAAM,CAAC,CAAC;CAC5F;CAEA,WAAW,GAA2B;EACpC,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,UAAU,eAAe,EAAE,QAAQ,EAAE,MAAG,EAAE,CAAC,CAAC;CAChF;CAEA,MAAM,GAAY,GAA8B,GAAoC;EAClF,IAAM,IAAS,MAAO,QAAQ,QAAQ,MAAO,QAAQ,SAAS;EAC9D,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,GAAQ,qBAAqB;GAAE,QAAQ,EAAE,MAAG;GAAG,MAAM;EAAM,CAAC,CAAC;CACjG;CACA,MAAM,GAAY,GAAoC;EACpD,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,QAAQ,qBAAqB;GAAE,QAAQ,EAAE,MAAG;GAAG,MAAM,EAAE,kBAAkB,EAAK;EAAE,CAAC,CAAC;CACtH;CACA,MAAM,GAAsB,GAAsC;EAChE,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,MAAO,QAAQ,SAAS,UAAU,UAAU,EAAE,MAAM,EAAM,CAAC,CAAC;CAChG;CAEA,YAAY,GAAsB,GAA2B,IAAkC,CAAC,GAAgC;EAC9H,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,MAAO,QAAQ,SAAS,UAAU,gBAAgB;GAAE,MAAM;GAAa,OAAO,EAAE,iBAAiB,EAAE,eAAe;EAAE,CAAC,CAAC;CAC1J;CAEA,UAAU,GAAoB,GAAkD;EAC9E,OAAO,EAAK,KAAK,MAAM,QAAQ,cAAc;GAAE,MAAM;GAAM;EAAO,CAAC;CACrE;CAEA,OAAO,GAAwB,GAAwD;EACrF,OAAO,EAAK,KAAK,MAAM,OAAO,WAAW;GAAE,OAAO,EAAE,aAAa,EAAI;GAAG;EAAO,CAAC;CAClF;CACA,gBAAwC;EACtC,OAAO,KAAK,MAAM,EAAK,KAAK,MAAM,QAAQ,iBAAiB,CAAC;CAC9D;CAEA,MAAc,MAAS,GAA2B;EAChD,IAAM,IAAO,KAAK,KAAK,eAAe,GAChC,IAAM,MAAM;EAElB,OADA,EAAK,EAAE,MAAM,mBAAmB,CAAC,GAC1B;CACT;AACF"}
|
|
@@ -25,7 +25,7 @@ export interface PollEditorProps {
|
|
|
25
25
|
appearance?: ContentKitUiAppearance;
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Staff: creates or edits a poll (
|
|
28
|
+
* Staff: creates or edits a poll (root:polls:write): question, language, type, when
|
|
29
29
|
* it goes live and closes, visibility, a question image, and options with
|
|
30
30
|
* images, reordered with the move buttons. A new poll is written at once with
|
|
31
31
|
* its images; an existing one saves its fields with Save and each option
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll-editor.js","names":[],"sources":["../../../src/components/social/poll-editor.tsx"],"sourcesContent":["import { Delete02Icon, ImageAdd01Icon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { cn } from \"cn\";\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport type { ContentKitClient } from \"../../client/client.js\";\nimport { toContentKitError, type ContentKitError } from \"../../client/errors.js\";\nimport type { Poll, PollKind, PollOption, PollUpdate } from \"../../client/generated/wire.js\";\nimport type { ContentKitUiAppearance } from \"../../appearance.js\";\nimport { useMessages } from \"../../i18n/context.js\";\nimport { useErrorReporter, type ContentKitErrorHandler } from \"../../react/context.js\";\nimport { usePollEditor } from \"../../react/polls.js\";\nimport { ContentKitUiRoot } from \"../../scope.js\";\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 { Skeleton } from \"#ckui/ui/skeleton\";\nimport { Switch } from \"#ckui/ui/switch\";\nimport { Textarea } from \"#ckui/ui/textarea\";\nimport { localInput } from \"./bans.js\";\nimport { SortableList } from \"../sortable-list.js\";\nimport { ConfirmDialog, contentError, ErrorLine } from \"./parts.js\";\n\nexport interface PollEditorProps {\n /** The poll to edit; none creates one. */\n poll?: string | null;\n /** Languages offered for a new poll: codes, or codes with labels. Without them the language is typed. */\n languages?: readonly (string | { value: string; label: string })[];\n /** A new poll's language. Default the first offered, else \"en\". */\n defaultLanguage?: string;\n /** Offer free-text polls (the host registered an answer classifier). Default false. */\n freeText?: boolean;\n /** Most options. Default 10. */\n maxOptions?: number;\n onCreated?: (poll: Poll) => void;\n onSaved?: (poll: Poll) => void;\n onDeleted?: () => void;\n client?: ContentKitClient;\n onError?: ContentKitErrorHandler;\n className?: string;\n appearance?: ContentKitUiAppearance;\n}\n\ninterface Draft {\n key: string;\n label: string;\n image: File | null;\n}\n\nconst toISO = (local: string) => (local ? new Date(local).toISOString() : undefined);\nlet seq = 0;\nconst draft = (): Draft => ({ key: `o${++seq}`, label: \"\", image: null });\n\n/**\n * Staff: creates or edits a poll (PollWrite): question, language, type, when\n * it goes live and closes, visibility, a question image, and options with\n * images, reordered with the move buttons. A new poll is written at once with\n * its images; an existing one saves its fields with Save and each option\n * change as it is made.\n */\nexport function PollEditor(p: PollEditorProps) {\n const m = useMessages();\n const { t } = m;\n const ed = usePollEditor(p.poll ?? null, { client: p.client });\n const report = useErrorReporter(p.onError);\n const [error, setError] = useState<ContentKitError | string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [deleting, setDeleting] = useState(false);\n const fail = (e: unknown) => {\n const err = toContentKitError(e);\n setError(err);\n report(err, \"poll.save\");\n };\n const root = (children: ReactNode) => (\n <ContentKitUiRoot appearance={p.appearance} className={cn(\"grid gap-5 text-sm\", p.className)} data-ckui=\"poll-editor\">\n {children}\n </ContentKitUiRoot>\n );\n if (ed.loading && !ed.poll) {\n return root(\n <div className=\"grid gap-3\" aria-busy>\n <Skeleton className=\"h-9 w-full\" />\n <Skeleton className=\"h-24 w-full\" />\n </div>,\n );\n }\n if (ed.error && !ed.poll) return root(<ErrorLine error={ed.error} />);\n return root(\n <>\n <h2 className=\"text-base font-semibold\">{t(ed.poll ? \"pollEditor.editTitle\" : \"pollEditor.newTitle\")}</h2>\n {ed.poll ? (\n <EditFields\n key={ed.poll.id}\n poll={ed.poll}\n saving={ed.saving}\n maxOptions={p.maxOptions ?? 10}\n editor={ed}\n onError={fail}\n onInvalid={(msg) => setError(msg)}\n onSaved={(poll) => {\n setError(null);\n setNotice(t(\"pollEditor.saved\"));\n p.onSaved?.(poll);\n }}\n />\n ) : (\n <CreateFields\n saving={ed.saving}\n languages={p.languages}\n defaultLanguage={p.defaultLanguage}\n freeText={!!p.freeText}\n maxOptions={p.maxOptions ?? 10}\n onInvalid={(msg) => setError(msg)}\n onCreate={async (input, images) => {\n setError(null);\n try {\n const { poll, imageErrors } = await ed.create(input, images);\n setNotice(imageErrors.length ? t(\"pollEditor.imageFailed\") : t(\"pollEditor.created\"));\n for (const e of imageErrors) report(e, \"poll.save\");\n p.onCreated?.(poll);\n } catch (e) {\n fail(e);\n }\n }}\n />\n )}\n {error && <ErrorLine>{typeof error === \"string\" ? error : contentError(m, error)}</ErrorLine>}\n {notice && !error && (\n <p role=\"status\" className=\"text-sm text-muted-foreground\">\n {notice}\n </p>\n )}\n {ed.poll && (\n <div className=\"border-t border-border pt-4\">\n <Button variant=\"destructive\" onClick={() => setDeleting(true)} disabled={ed.saving}>\n {t(\"pollEditor.delete\")}\n </Button>\n </div>\n )}\n <ConfirmDialog\n open={deleting}\n onOpenChange={setDeleting}\n title={t(\"pollEditor.deleteTitle\")}\n description={t(\"pollEditor.deleteBody\")}\n confirm={t(\"pollEditor.delete\")}\n onConfirm={() =>\n void ed.remove().then(\n () => p.onDeleted?.(),\n (e) => fail(e),\n )\n }\n />\n </>,\n );\n}\n\nfunction CreateFields(p: {\n saving: boolean;\n languages?: PollEditorProps[\"languages\"];\n defaultLanguage?: string;\n freeText: boolean;\n maxOptions: number;\n onInvalid: (message: string) => void;\n onCreate: (input: Parameters<ReturnType<typeof usePollEditor>[\"create\"]>[0], images: { question: File | null; options: (File | null)[] }) => Promise<void>;\n}) {\n const { t } = useMessages();\n const ids = useId();\n const langs = useMemo(() => (p.languages ?? []).map((l) => (typeof l === \"string\" ? { value: l, label: l } : l)), [p.languages]);\n const [question, setQuestion] = useState(\"\");\n const [language, setLanguage] = useState(p.defaultLanguage ?? langs[0]?.value ?? \"en\");\n const [kind, setKind] = useState<PollKind>(\"multiple_choice\");\n const [liveAt, setLiveAt] = useState(() => localInput(new Date()));\n const [closesAt, setClosesAt] = useState(\"\");\n const [image, setImage] = useState<File | null>(null);\n const [options, setOptions] = useState<Draft[]>(() => [draft(), draft()]);\n const set = (key: string, patch: Partial<Draft>) => setOptions((os) => os.map((o) => (o.key === key ? { ...o, ...patch } : o)));\n const move = (from: number, to: number) =>\n setOptions((os) => {\n const next = [...os];\n next.splice(to, 0, ...next.splice(from, 1));\n return next;\n });\n const submit = () => {\n if (!question.trim()) return p.onInvalid(t(\"pollEditor.questionRequired\"));\n const kept = options.filter((o) => o.label.trim() || o.image);\n if (kind === \"multiple_choice\") {\n if (kept.some((o) => !o.label.trim())) return p.onInvalid(t(\"pollEditor.optionRequired\"));\n if (kept.length < 2) return p.onInvalid(t(\"pollEditor.minOptions\"));\n }\n const choice = kind === \"multiple_choice\";\n void p.onCreate(\n {\n kind,\n question: question.trim(),\n language,\n live_at: toISO(liveAt),\n closes_at: toISO(closesAt),\n options: choice ? kept.map((o, position) => ({ label: o.label.trim(), position })) : undefined,\n },\n { question: image, options: choice ? kept.map((o) => o.image) : [] },\n );\n };\n return (\n <form\n className=\"grid gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n <Field id={`${ids}-q`} label={t(\"pollEditor.question\")}>\n <Textarea id={`${ids}-q`} rows={2} value={question} placeholder={t(\"pollEditor.questionPlaceholder\")} onChange={(e) => setQuestion(e.target.value)} />\n </Field>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Field id={`${ids}-lang`} label={t(\"pollEditor.language\")}>\n {langs.length ? (\n <Select value={language} onValueChange={(v) => setLanguage(String(v))}>\n <SelectTrigger id={`${ids}-lang`} className=\"w-full\">\n <SelectValue>{(v: string) => langs.find((l) => l.value === v)?.label ?? v}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {langs.map((l) => (\n <SelectItem key={l.value} value={l.value}>\n {l.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input id={`${ids}-lang`} value={language} onChange={(e) => setLanguage(e.target.value)} />\n )}\n </Field>\n {p.freeText && (\n <fieldset className=\"grid gap-1.5\">\n <legend className=\"mb-1.5 text-sm font-medium\">{t(\"pollEditor.kind\")}</legend>\n <div className=\"flex flex-wrap gap-2\">\n {([\"multiple_choice\", \"free_text\"] as const).map((k) => (\n <Button key={k} type=\"button\" size=\"sm\" variant={kind === k ? \"default\" : \"outline\"} aria-pressed={kind === k} onClick={() => setKind(k)}>\n {t(k === \"free_text\" ? \"pollEditor.freeText\" : \"pollEditor.multipleChoice\")}\n </Button>\n ))}\n </div>\n </fieldset>\n )}\n <Field id={`${ids}-live`} label={t(\"pollEditor.liveAt\")}>\n <Input id={`${ids}-live`} type=\"datetime-local\" value={liveAt} onChange={(e) => setLiveAt(e.target.value)} />\n </Field>\n <Field id={`${ids}-closes`} label={t(\"pollEditor.closesAt\")}>\n <Input id={`${ids}-closes`} type=\"datetime-local\" value={closesAt} min={liveAt} onChange={(e) => setClosesAt(e.target.value)} />\n </Field>\n </div>\n <ImageField label={t(\"pollEditor.image\")} url={useObjectURL(image)} onPick={setImage} onRemove={() => setImage(null)} />\n {kind === \"free_text\" ? (\n <p className=\"text-muted-foreground\">{t(\"pollEditor.freeTextHelp\")}</p>\n ) : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"mb-1.5 text-sm font-medium\">{t(\"pollEditor.options\")}</legend>\n <SortableList\n items={options}\n id={(o) => o.key}\n name={(o) => o.label || t(\"pollEditor.option\", { index: options.indexOf(o) + 1 })}\n onMove={move}\n label={t(\"pollEditor.options\")}\n className=\"gap-2\"\n row={() => ({ className: OPTION_ROW, \"data-ckui\": \"poll-option\" })}\n >\n {(o, handle, i) => (\n <OptionRow\n handle={handle}\n index={i}\n label={o.label}\n image={o.image}\n onLabel={(label) => set(o.key, { label })}\n onImage={(image) => set(o.key, { image })}\n onRemove={options.length > 2 ? () => setOptions((os) => os.filter((x) => x.key !== o.key)) : undefined}\n />\n )}\n </SortableList>\n {options.length < p.maxOptions ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"justify-self-start\" onClick={() => setOptions((os) => [...os, draft()])}>\n {t(\"pollEditor.addOption\")}\n </Button>\n ) : (\n <p className=\"text-xs text-muted-foreground\">{t(\"pollEditor.maxOptions\", { max: p.maxOptions })}</p>\n )}\n </fieldset>\n )}\n <Button type=\"submit\" className=\"justify-self-start\" disabled={p.saving}>\n {p.saving ? t(\"pollEditor.creating\") : t(\"pollEditor.create\")}\n </Button>\n </form>\n );\n}\n\nfunction EditFields(p: {\n poll: Poll;\n saving: boolean;\n maxOptions: number;\n editor: ReturnType<typeof usePollEditor>;\n onError: (e: unknown) => void;\n onInvalid: (message: string) => void;\n onSaved: (poll: Poll) => void;\n}) {\n const m = useMessages();\n const { t } = m;\n const ids = useId();\n const { poll, editor } = p;\n const [question, setQuestion] = useState(poll.question);\n const [liveAt, setLiveAt] = useState(localInput(new Date(poll.live_at)));\n const [closesAt, setClosesAt] = useState(poll.closes_at ? localInput(new Date(poll.closes_at)) : \"\");\n const [active, setActive] = useState(poll.is_active);\n const [added, setAdded] = useState(\"\");\n const [removing, setRemoving] = useState<PollOption | null>(null);\n const options = [...poll.options].sort((a, b) => a.position - b.position);\n const patch: PollUpdate = {};\n if (question.trim() !== poll.question) patch.question = question.trim();\n if (toISO(liveAt) !== new Date(localInput(new Date(poll.live_at))).toISOString()) patch.live_at = toISO(liveAt);\n if (closesAt && toISO(closesAt) !== (poll.closes_at && new Date(localInput(new Date(poll.closes_at))).toISOString())) patch.closes_at = toISO(closesAt);\n else if (!closesAt && poll.closes_at) patch.closes_at = null;\n if (active !== poll.is_active) patch.is_active = active;\n const dirty = Object.keys(patch).length > 0;\n const act = (fn: () => Promise<unknown>) => void fn().catch(p.onError);\n return (\n <div className=\"grid gap-4\">\n <form\n className=\"grid gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n if (!question.trim()) return p.onInvalid(t(\"pollEditor.questionRequired\"));\n if (dirty) act(async () => p.onSaved(await editor.update(patch)));\n }}\n >\n <Field id={`${ids}-q`} label={t(\"pollEditor.question\")}>\n <Textarea id={`${ids}-q`} rows={2} value={question} onChange={(e) => setQuestion(e.target.value)} />\n </Field>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Field id={`${ids}-live`} label={t(\"pollEditor.liveAt\")}>\n <Input id={`${ids}-live`} type=\"datetime-local\" value={liveAt} onChange={(e) => setLiveAt(e.target.value)} />\n </Field>\n <Field id={`${ids}-closes`} label={t(\"pollEditor.closesAt\")}>\n <Input id={`${ids}-closes`} type=\"datetime-local\" value={closesAt} min={liveAt} onChange={(e) => setClosesAt(e.target.value)} />\n </Field>\n </div>\n <div className=\"flex items-center gap-3\">\n <Switch id={`${ids}-active`} checked={active} onCheckedChange={setActive} />\n <Label htmlFor={`${ids}-active`}>{t(active ? \"pollEditor.active\" : \"pollEditor.inactive\")}</Label>\n </div>\n <Button type=\"submit\" className=\"justify-self-start\" disabled={!dirty || p.saving}>\n {p.saving ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n </form>\n <ImageField label={t(\"pollEditor.image\")} url={poll.image_url} disabled={p.saving} onPick={(f) => act(() => editor.setImage(f))} onRemove={() => act(() => editor.setImage(null))} />\n {poll.kind === \"free_text\" ? (\n <p className=\"text-muted-foreground\">\n {t(\"pollEditor.freeTextHelp\")} {m.plural(\"poll.answers\", poll.answer_count ?? 0)}\n </p>\n ) : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"mb-1.5 text-sm font-medium\">{t(\"pollEditor.options\")}</legend>\n <SortableList\n items={options}\n id={(o) => o.id}\n name={(o) => o.label}\n disabled={p.saving}\n onMove={(from, to) => act(() => editor.moveOption(options[from]!.id, to))}\n label={t(\"pollEditor.options\")}\n className=\"gap-2\"\n row={() => ({ className: OPTION_ROW, \"data-ckui\": \"poll-option\" })}\n >\n {(o, handle, i) => (\n <OptionRow\n handle={handle}\n index={i}\n label={o.label}\n url={o.image_url}\n votes={o.vote_count}\n disabled={p.saving}\n onCommit={(label) => label.trim() && label.trim() !== o.label && act(() => editor.renameOption(o.id, label.trim()))}\n onImage={(f) => act(() => editor.setOptionImage(o.id, f))}\n onRemove={options.length > 2 ? () => setRemoving(o) : undefined}\n />\n )}\n </SortableList>\n {options.length < p.maxOptions ? (\n <form\n className=\"flex gap-2\"\n onSubmit={(e) => {\n e.preventDefault();\n if (!added.trim()) return;\n act(async () => {\n await editor.addOption(added.trim());\n setAdded(\"\");\n });\n }}\n >\n <Input value={added} placeholder={t(\"pollEditor.newOption\")} aria-label={t(\"pollEditor.newOption\")} onChange={(e) => setAdded(e.target.value)} />\n <Button type=\"submit\" variant=\"outline\" disabled={!added.trim() || p.saving}>\n {t(\"pollEditor.addOption\")}\n </Button>\n </form>\n ) : (\n <p className=\"text-xs text-muted-foreground\">{t(\"pollEditor.maxOptions\", { max: p.maxOptions })}</p>\n )}\n </fieldset>\n )}\n <ConfirmDialog\n open={!!removing}\n onOpenChange={(o) => !o && setRemoving(null)}\n title={t(\"pollEditor.removeOptionTitle\")}\n description={t(\"pollEditor.removeOptionBody\")}\n confirm={t(\"pollEditor.removeOption\")}\n onConfirm={() => removing && act(() => editor.removeOption(removing.id))}\n />\n </div>\n );\n}\n\nconst OPTION_ROW = \"flex flex-wrap items-center gap-2 rounded-lg border border-border p-2\";\n\n/** One option's content: its drag handle, label, image, votes and remove. */\nfunction OptionRow(p: {\n handle: ReactNode;\n index: number;\n label: string;\n /** A new poll's staged image. */\n image?: File | null;\n /** An existing option's image. */\n url?: string;\n votes?: number;\n disabled?: boolean;\n /** A new poll's label as typed. */\n onLabel?: (label: string) => void;\n /** An existing option's label, on blur or Enter. */\n onCommit?: (label: string) => void;\n onImage: (file: File | null) => void;\n onRemove?: () => void;\n}) {\n const m = useMessages();\n const { t } = m;\n const [label, setLabel] = useState(p.label);\n useEffect(() => setLabel(p.label), [p.label]);\n const staged = useObjectURL(p.image ?? null);\n const name = t(\"pollEditor.option\", { index: p.index + 1 });\n return (\n <>\n {p.handle}\n <Input\n className=\"min-w-40 flex-1\"\n value={label}\n aria-label={name}\n placeholder={name}\n disabled={p.disabled && !p.onLabel}\n onChange={(e) => {\n setLabel(e.target.value);\n p.onLabel?.(e.target.value);\n }}\n onBlur={() => p.onCommit?.(label)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && p.onCommit) {\n e.preventDefault();\n p.onCommit(label);\n }\n }}\n />\n <ImageField compact label={t(\"pollEditor.optionImage\", { index: p.index + 1 })} url={p.url ?? staged} disabled={p.disabled} onPick={p.onImage} onRemove={() => p.onImage(null)} />\n {p.votes !== undefined && <span className=\"text-xs tabular-nums text-muted-foreground\">{m.plural(\"poll.votes\", p.votes)}</span>}\n {p.onRemove && (\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label={`${t(\"pollEditor.removeOption\")}: ${name}`} disabled={p.disabled} onClick={p.onRemove}>\n <HugeiconsIcon icon={Delete02Icon} strokeWidth={2} />\n </Button>\n )}\n </>\n );\n}\n\nfunction ImageField(p: { label: string; url?: string | null; compact?: boolean; disabled?: boolean; onPick: (file: File) => void; onRemove: () => void }) {\n const { t } = useMessages();\n const input = useRef<HTMLInputElement>(null);\n const pick = (\n <input\n ref={input}\n type=\"file\"\n accept=\"image/*\"\n hidden\n aria-label={p.label}\n onChange={(e) => {\n const f = e.target.files?.[0];\n e.target.value = \"\";\n if (f) p.onPick(f);\n }}\n />\n );\n if (p.compact) {\n return (\n <div className=\"flex items-center gap-1\" data-ckui=\"poll-image\">\n {pick}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"overflow-hidden p-0\"\n aria-label={`${p.url ? t(\"pollEditor.replaceImage\") : t(\"pollEditor.uploadImage\")}: ${p.label}`}\n disabled={p.disabled}\n onClick={() => input.current?.click()}\n >\n {p.url ? <img src={p.url} alt=\"\" className=\"size-full object-cover\" /> : <HugeiconsIcon icon={ImageAdd01Icon} strokeWidth={2} />}\n </Button>\n {p.url && (\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={p.disabled} onClick={p.onRemove}>\n {t(\"pollEditor.removeImage\")}\n </Button>\n )}\n </div>\n );\n }\n return (\n <div className=\"grid gap-1.5\" data-ckui=\"poll-image\">\n <span className=\"text-sm font-medium\">{p.label}</span>\n {pick}\n {p.url && <img src={p.url} alt=\"\" className=\"aspect-video w-full max-w-sm rounded-lg border border-border object-cover\" />}\n <div className=\"flex gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={p.disabled} onClick={() => input.current?.click()}>\n <HugeiconsIcon icon={ImageAdd01Icon} strokeWidth={2} data-icon=\"inline-start\" />\n {p.url ? t(\"pollEditor.replaceImage\") : t(\"pollEditor.uploadImage\")}\n </Button>\n {p.url && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={p.disabled} onClick={p.onRemove}>\n {t(\"pollEditor.removeImage\")}\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nfunction Field({ id, label, children }: { id: string; label: string; children: ReactNode }) {\n return (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={id}>{label}</Label>\n {children}\n </div>\n );\n}\n\n/** An object URL for a staged file, revoked when it changes. */\nfunction useObjectURL(file: File | null): string | undefined {\n const [url, setUrl] = useState<string>();\n useEffect(() => {\n if (!file) return setUrl(undefined);\n const u = URL.createObjectURL(file);\n setUrl(u);\n return () => URL.revokeObjectURL(u);\n }, [file]);\n return url;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"poll-editor.js","names":[],"sources":["../../../src/components/social/poll-editor.tsx"],"sourcesContent":["import { Delete02Icon, ImageAdd01Icon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { cn } from \"cn\";\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport type { ContentKitClient } from \"../../client/client.js\";\nimport { toContentKitError, type ContentKitError } from \"../../client/errors.js\";\nimport type { Poll, PollKind, PollOption, PollUpdate } from \"../../client/generated/wire.js\";\nimport type { ContentKitUiAppearance } from \"../../appearance.js\";\nimport { useMessages } from \"../../i18n/context.js\";\nimport { useErrorReporter, type ContentKitErrorHandler } from \"../../react/context.js\";\nimport { usePollEditor } from \"../../react/polls.js\";\nimport { ContentKitUiRoot } from \"../../scope.js\";\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 { Skeleton } from \"#ckui/ui/skeleton\";\nimport { Switch } from \"#ckui/ui/switch\";\nimport { Textarea } from \"#ckui/ui/textarea\";\nimport { localInput } from \"./bans.js\";\nimport { SortableList } from \"../sortable-list.js\";\nimport { ConfirmDialog, contentError, ErrorLine } from \"./parts.js\";\n\nexport interface PollEditorProps {\n /** The poll to edit; none creates one. */\n poll?: string | null;\n /** Languages offered for a new poll: codes, or codes with labels. Without them the language is typed. */\n languages?: readonly (string | { value: string; label: string })[];\n /** A new poll's language. Default the first offered, else \"en\". */\n defaultLanguage?: string;\n /** Offer free-text polls (the host registered an answer classifier). Default false. */\n freeText?: boolean;\n /** Most options. Default 10. */\n maxOptions?: number;\n onCreated?: (poll: Poll) => void;\n onSaved?: (poll: Poll) => void;\n onDeleted?: () => void;\n client?: ContentKitClient;\n onError?: ContentKitErrorHandler;\n className?: string;\n appearance?: ContentKitUiAppearance;\n}\n\ninterface Draft {\n key: string;\n label: string;\n image: File | null;\n}\n\nconst toISO = (local: string) => (local ? new Date(local).toISOString() : undefined);\nlet seq = 0;\nconst draft = (): Draft => ({ key: `o${++seq}`, label: \"\", image: null });\n\n/**\n * Staff: creates or edits a poll (root:polls:write): question, language, type, when\n * it goes live and closes, visibility, a question image, and options with\n * images, reordered with the move buttons. A new poll is written at once with\n * its images; an existing one saves its fields with Save and each option\n * change as it is made.\n */\nexport function PollEditor(p: PollEditorProps) {\n const m = useMessages();\n const { t } = m;\n const ed = usePollEditor(p.poll ?? null, { client: p.client });\n const report = useErrorReporter(p.onError);\n const [error, setError] = useState<ContentKitError | string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [deleting, setDeleting] = useState(false);\n const fail = (e: unknown) => {\n const err = toContentKitError(e);\n setError(err);\n report(err, \"poll.save\");\n };\n const root = (children: ReactNode) => (\n <ContentKitUiRoot appearance={p.appearance} className={cn(\"grid gap-5 text-sm\", p.className)} data-ckui=\"poll-editor\">\n {children}\n </ContentKitUiRoot>\n );\n if (ed.loading && !ed.poll) {\n return root(\n <div className=\"grid gap-3\" aria-busy>\n <Skeleton className=\"h-9 w-full\" />\n <Skeleton className=\"h-24 w-full\" />\n </div>,\n );\n }\n if (ed.error && !ed.poll) return root(<ErrorLine error={ed.error} />);\n return root(\n <>\n <h2 className=\"text-base font-semibold\">{t(ed.poll ? \"pollEditor.editTitle\" : \"pollEditor.newTitle\")}</h2>\n {ed.poll ? (\n <EditFields\n key={ed.poll.id}\n poll={ed.poll}\n saving={ed.saving}\n maxOptions={p.maxOptions ?? 10}\n editor={ed}\n onError={fail}\n onInvalid={(msg) => setError(msg)}\n onSaved={(poll) => {\n setError(null);\n setNotice(t(\"pollEditor.saved\"));\n p.onSaved?.(poll);\n }}\n />\n ) : (\n <CreateFields\n saving={ed.saving}\n languages={p.languages}\n defaultLanguage={p.defaultLanguage}\n freeText={!!p.freeText}\n maxOptions={p.maxOptions ?? 10}\n onInvalid={(msg) => setError(msg)}\n onCreate={async (input, images) => {\n setError(null);\n try {\n const { poll, imageErrors } = await ed.create(input, images);\n setNotice(imageErrors.length ? t(\"pollEditor.imageFailed\") : t(\"pollEditor.created\"));\n for (const e of imageErrors) report(e, \"poll.save\");\n p.onCreated?.(poll);\n } catch (e) {\n fail(e);\n }\n }}\n />\n )}\n {error && <ErrorLine>{typeof error === \"string\" ? error : contentError(m, error)}</ErrorLine>}\n {notice && !error && (\n <p role=\"status\" className=\"text-sm text-muted-foreground\">\n {notice}\n </p>\n )}\n {ed.poll && (\n <div className=\"border-t border-border pt-4\">\n <Button variant=\"destructive\" onClick={() => setDeleting(true)} disabled={ed.saving}>\n {t(\"pollEditor.delete\")}\n </Button>\n </div>\n )}\n <ConfirmDialog\n open={deleting}\n onOpenChange={setDeleting}\n title={t(\"pollEditor.deleteTitle\")}\n description={t(\"pollEditor.deleteBody\")}\n confirm={t(\"pollEditor.delete\")}\n onConfirm={() =>\n void ed.remove().then(\n () => p.onDeleted?.(),\n (e) => fail(e),\n )\n }\n />\n </>,\n );\n}\n\nfunction CreateFields(p: {\n saving: boolean;\n languages?: PollEditorProps[\"languages\"];\n defaultLanguage?: string;\n freeText: boolean;\n maxOptions: number;\n onInvalid: (message: string) => void;\n onCreate: (input: Parameters<ReturnType<typeof usePollEditor>[\"create\"]>[0], images: { question: File | null; options: (File | null)[] }) => Promise<void>;\n}) {\n const { t } = useMessages();\n const ids = useId();\n const langs = useMemo(() => (p.languages ?? []).map((l) => (typeof l === \"string\" ? { value: l, label: l } : l)), [p.languages]);\n const [question, setQuestion] = useState(\"\");\n const [language, setLanguage] = useState(p.defaultLanguage ?? langs[0]?.value ?? \"en\");\n const [kind, setKind] = useState<PollKind>(\"multiple_choice\");\n const [liveAt, setLiveAt] = useState(() => localInput(new Date()));\n const [closesAt, setClosesAt] = useState(\"\");\n const [image, setImage] = useState<File | null>(null);\n const [options, setOptions] = useState<Draft[]>(() => [draft(), draft()]);\n const set = (key: string, patch: Partial<Draft>) => setOptions((os) => os.map((o) => (o.key === key ? { ...o, ...patch } : o)));\n const move = (from: number, to: number) =>\n setOptions((os) => {\n const next = [...os];\n next.splice(to, 0, ...next.splice(from, 1));\n return next;\n });\n const submit = () => {\n if (!question.trim()) return p.onInvalid(t(\"pollEditor.questionRequired\"));\n const kept = options.filter((o) => o.label.trim() || o.image);\n if (kind === \"multiple_choice\") {\n if (kept.some((o) => !o.label.trim())) return p.onInvalid(t(\"pollEditor.optionRequired\"));\n if (kept.length < 2) return p.onInvalid(t(\"pollEditor.minOptions\"));\n }\n const choice = kind === \"multiple_choice\";\n void p.onCreate(\n {\n kind,\n question: question.trim(),\n language,\n live_at: toISO(liveAt),\n closes_at: toISO(closesAt),\n options: choice ? kept.map((o, position) => ({ label: o.label.trim(), position })) : undefined,\n },\n { question: image, options: choice ? kept.map((o) => o.image) : [] },\n );\n };\n return (\n <form\n className=\"grid gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n <Field id={`${ids}-q`} label={t(\"pollEditor.question\")}>\n <Textarea id={`${ids}-q`} rows={2} value={question} placeholder={t(\"pollEditor.questionPlaceholder\")} onChange={(e) => setQuestion(e.target.value)} />\n </Field>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Field id={`${ids}-lang`} label={t(\"pollEditor.language\")}>\n {langs.length ? (\n <Select value={language} onValueChange={(v) => setLanguage(String(v))}>\n <SelectTrigger id={`${ids}-lang`} className=\"w-full\">\n <SelectValue>{(v: string) => langs.find((l) => l.value === v)?.label ?? v}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {langs.map((l) => (\n <SelectItem key={l.value} value={l.value}>\n {l.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input id={`${ids}-lang`} value={language} onChange={(e) => setLanguage(e.target.value)} />\n )}\n </Field>\n {p.freeText && (\n <fieldset className=\"grid gap-1.5\">\n <legend className=\"mb-1.5 text-sm font-medium\">{t(\"pollEditor.kind\")}</legend>\n <div className=\"flex flex-wrap gap-2\">\n {([\"multiple_choice\", \"free_text\"] as const).map((k) => (\n <Button key={k} type=\"button\" size=\"sm\" variant={kind === k ? \"default\" : \"outline\"} aria-pressed={kind === k} onClick={() => setKind(k)}>\n {t(k === \"free_text\" ? \"pollEditor.freeText\" : \"pollEditor.multipleChoice\")}\n </Button>\n ))}\n </div>\n </fieldset>\n )}\n <Field id={`${ids}-live`} label={t(\"pollEditor.liveAt\")}>\n <Input id={`${ids}-live`} type=\"datetime-local\" value={liveAt} onChange={(e) => setLiveAt(e.target.value)} />\n </Field>\n <Field id={`${ids}-closes`} label={t(\"pollEditor.closesAt\")}>\n <Input id={`${ids}-closes`} type=\"datetime-local\" value={closesAt} min={liveAt} onChange={(e) => setClosesAt(e.target.value)} />\n </Field>\n </div>\n <ImageField label={t(\"pollEditor.image\")} url={useObjectURL(image)} onPick={setImage} onRemove={() => setImage(null)} />\n {kind === \"free_text\" ? (\n <p className=\"text-muted-foreground\">{t(\"pollEditor.freeTextHelp\")}</p>\n ) : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"mb-1.5 text-sm font-medium\">{t(\"pollEditor.options\")}</legend>\n <SortableList\n items={options}\n id={(o) => o.key}\n name={(o) => o.label || t(\"pollEditor.option\", { index: options.indexOf(o) + 1 })}\n onMove={move}\n label={t(\"pollEditor.options\")}\n className=\"gap-2\"\n row={() => ({ className: OPTION_ROW, \"data-ckui\": \"poll-option\" })}\n >\n {(o, handle, i) => (\n <OptionRow\n handle={handle}\n index={i}\n label={o.label}\n image={o.image}\n onLabel={(label) => set(o.key, { label })}\n onImage={(image) => set(o.key, { image })}\n onRemove={options.length > 2 ? () => setOptions((os) => os.filter((x) => x.key !== o.key)) : undefined}\n />\n )}\n </SortableList>\n {options.length < p.maxOptions ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"justify-self-start\" onClick={() => setOptions((os) => [...os, draft()])}>\n {t(\"pollEditor.addOption\")}\n </Button>\n ) : (\n <p className=\"text-xs text-muted-foreground\">{t(\"pollEditor.maxOptions\", { max: p.maxOptions })}</p>\n )}\n </fieldset>\n )}\n <Button type=\"submit\" className=\"justify-self-start\" disabled={p.saving}>\n {p.saving ? t(\"pollEditor.creating\") : t(\"pollEditor.create\")}\n </Button>\n </form>\n );\n}\n\nfunction EditFields(p: {\n poll: Poll;\n saving: boolean;\n maxOptions: number;\n editor: ReturnType<typeof usePollEditor>;\n onError: (e: unknown) => void;\n onInvalid: (message: string) => void;\n onSaved: (poll: Poll) => void;\n}) {\n const m = useMessages();\n const { t } = m;\n const ids = useId();\n const { poll, editor } = p;\n const [question, setQuestion] = useState(poll.question);\n const [liveAt, setLiveAt] = useState(localInput(new Date(poll.live_at)));\n const [closesAt, setClosesAt] = useState(poll.closes_at ? localInput(new Date(poll.closes_at)) : \"\");\n const [active, setActive] = useState(poll.is_active);\n const [added, setAdded] = useState(\"\");\n const [removing, setRemoving] = useState<PollOption | null>(null);\n const options = [...poll.options].sort((a, b) => a.position - b.position);\n const patch: PollUpdate = {};\n if (question.trim() !== poll.question) patch.question = question.trim();\n if (toISO(liveAt) !== new Date(localInput(new Date(poll.live_at))).toISOString()) patch.live_at = toISO(liveAt);\n if (closesAt && toISO(closesAt) !== (poll.closes_at && new Date(localInput(new Date(poll.closes_at))).toISOString())) patch.closes_at = toISO(closesAt);\n else if (!closesAt && poll.closes_at) patch.closes_at = null;\n if (active !== poll.is_active) patch.is_active = active;\n const dirty = Object.keys(patch).length > 0;\n const act = (fn: () => Promise<unknown>) => void fn().catch(p.onError);\n return (\n <div className=\"grid gap-4\">\n <form\n className=\"grid gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n if (!question.trim()) return p.onInvalid(t(\"pollEditor.questionRequired\"));\n if (dirty) act(async () => p.onSaved(await editor.update(patch)));\n }}\n >\n <Field id={`${ids}-q`} label={t(\"pollEditor.question\")}>\n <Textarea id={`${ids}-q`} rows={2} value={question} onChange={(e) => setQuestion(e.target.value)} />\n </Field>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Field id={`${ids}-live`} label={t(\"pollEditor.liveAt\")}>\n <Input id={`${ids}-live`} type=\"datetime-local\" value={liveAt} onChange={(e) => setLiveAt(e.target.value)} />\n </Field>\n <Field id={`${ids}-closes`} label={t(\"pollEditor.closesAt\")}>\n <Input id={`${ids}-closes`} type=\"datetime-local\" value={closesAt} min={liveAt} onChange={(e) => setClosesAt(e.target.value)} />\n </Field>\n </div>\n <div className=\"flex items-center gap-3\">\n <Switch id={`${ids}-active`} checked={active} onCheckedChange={setActive} />\n <Label htmlFor={`${ids}-active`}>{t(active ? \"pollEditor.active\" : \"pollEditor.inactive\")}</Label>\n </div>\n <Button type=\"submit\" className=\"justify-self-start\" disabled={!dirty || p.saving}>\n {p.saving ? t(\"common.saving\") : t(\"common.save\")}\n </Button>\n </form>\n <ImageField label={t(\"pollEditor.image\")} url={poll.image_url} disabled={p.saving} onPick={(f) => act(() => editor.setImage(f))} onRemove={() => act(() => editor.setImage(null))} />\n {poll.kind === \"free_text\" ? (\n <p className=\"text-muted-foreground\">\n {t(\"pollEditor.freeTextHelp\")} {m.plural(\"poll.answers\", poll.answer_count ?? 0)}\n </p>\n ) : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"mb-1.5 text-sm font-medium\">{t(\"pollEditor.options\")}</legend>\n <SortableList\n items={options}\n id={(o) => o.id}\n name={(o) => o.label}\n disabled={p.saving}\n onMove={(from, to) => act(() => editor.moveOption(options[from]!.id, to))}\n label={t(\"pollEditor.options\")}\n className=\"gap-2\"\n row={() => ({ className: OPTION_ROW, \"data-ckui\": \"poll-option\" })}\n >\n {(o, handle, i) => (\n <OptionRow\n handle={handle}\n index={i}\n label={o.label}\n url={o.image_url}\n votes={o.vote_count}\n disabled={p.saving}\n onCommit={(label) => label.trim() && label.trim() !== o.label && act(() => editor.renameOption(o.id, label.trim()))}\n onImage={(f) => act(() => editor.setOptionImage(o.id, f))}\n onRemove={options.length > 2 ? () => setRemoving(o) : undefined}\n />\n )}\n </SortableList>\n {options.length < p.maxOptions ? (\n <form\n className=\"flex gap-2\"\n onSubmit={(e) => {\n e.preventDefault();\n if (!added.trim()) return;\n act(async () => {\n await editor.addOption(added.trim());\n setAdded(\"\");\n });\n }}\n >\n <Input value={added} placeholder={t(\"pollEditor.newOption\")} aria-label={t(\"pollEditor.newOption\")} onChange={(e) => setAdded(e.target.value)} />\n <Button type=\"submit\" variant=\"outline\" disabled={!added.trim() || p.saving}>\n {t(\"pollEditor.addOption\")}\n </Button>\n </form>\n ) : (\n <p className=\"text-xs text-muted-foreground\">{t(\"pollEditor.maxOptions\", { max: p.maxOptions })}</p>\n )}\n </fieldset>\n )}\n <ConfirmDialog\n open={!!removing}\n onOpenChange={(o) => !o && setRemoving(null)}\n title={t(\"pollEditor.removeOptionTitle\")}\n description={t(\"pollEditor.removeOptionBody\")}\n confirm={t(\"pollEditor.removeOption\")}\n onConfirm={() => removing && act(() => editor.removeOption(removing.id))}\n />\n </div>\n );\n}\n\nconst OPTION_ROW = \"flex flex-wrap items-center gap-2 rounded-lg border border-border p-2\";\n\n/** One option's content: its drag handle, label, image, votes and remove. */\nfunction OptionRow(p: {\n handle: ReactNode;\n index: number;\n label: string;\n /** A new poll's staged image. */\n image?: File | null;\n /** An existing option's image. */\n url?: string;\n votes?: number;\n disabled?: boolean;\n /** A new poll's label as typed. */\n onLabel?: (label: string) => void;\n /** An existing option's label, on blur or Enter. */\n onCommit?: (label: string) => void;\n onImage: (file: File | null) => void;\n onRemove?: () => void;\n}) {\n const m = useMessages();\n const { t } = m;\n const [label, setLabel] = useState(p.label);\n useEffect(() => setLabel(p.label), [p.label]);\n const staged = useObjectURL(p.image ?? null);\n const name = t(\"pollEditor.option\", { index: p.index + 1 });\n return (\n <>\n {p.handle}\n <Input\n className=\"min-w-40 flex-1\"\n value={label}\n aria-label={name}\n placeholder={name}\n disabled={p.disabled && !p.onLabel}\n onChange={(e) => {\n setLabel(e.target.value);\n p.onLabel?.(e.target.value);\n }}\n onBlur={() => p.onCommit?.(label)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && p.onCommit) {\n e.preventDefault();\n p.onCommit(label);\n }\n }}\n />\n <ImageField compact label={t(\"pollEditor.optionImage\", { index: p.index + 1 })} url={p.url ?? staged} disabled={p.disabled} onPick={p.onImage} onRemove={() => p.onImage(null)} />\n {p.votes !== undefined && <span className=\"text-xs tabular-nums text-muted-foreground\">{m.plural(\"poll.votes\", p.votes)}</span>}\n {p.onRemove && (\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label={`${t(\"pollEditor.removeOption\")}: ${name}`} disabled={p.disabled} onClick={p.onRemove}>\n <HugeiconsIcon icon={Delete02Icon} strokeWidth={2} />\n </Button>\n )}\n </>\n );\n}\n\nfunction ImageField(p: { label: string; url?: string | null; compact?: boolean; disabled?: boolean; onPick: (file: File) => void; onRemove: () => void }) {\n const { t } = useMessages();\n const input = useRef<HTMLInputElement>(null);\n const pick = (\n <input\n ref={input}\n type=\"file\"\n accept=\"image/*\"\n hidden\n aria-label={p.label}\n onChange={(e) => {\n const f = e.target.files?.[0];\n e.target.value = \"\";\n if (f) p.onPick(f);\n }}\n />\n );\n if (p.compact) {\n return (\n <div className=\"flex items-center gap-1\" data-ckui=\"poll-image\">\n {pick}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"overflow-hidden p-0\"\n aria-label={`${p.url ? t(\"pollEditor.replaceImage\") : t(\"pollEditor.uploadImage\")}: ${p.label}`}\n disabled={p.disabled}\n onClick={() => input.current?.click()}\n >\n {p.url ? <img src={p.url} alt=\"\" className=\"size-full object-cover\" /> : <HugeiconsIcon icon={ImageAdd01Icon} strokeWidth={2} />}\n </Button>\n {p.url && (\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={p.disabled} onClick={p.onRemove}>\n {t(\"pollEditor.removeImage\")}\n </Button>\n )}\n </div>\n );\n }\n return (\n <div className=\"grid gap-1.5\" data-ckui=\"poll-image\">\n <span className=\"text-sm font-medium\">{p.label}</span>\n {pick}\n {p.url && <img src={p.url} alt=\"\" className=\"aspect-video w-full max-w-sm rounded-lg border border-border object-cover\" />}\n <div className=\"flex gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={p.disabled} onClick={() => input.current?.click()}>\n <HugeiconsIcon icon={ImageAdd01Icon} strokeWidth={2} data-icon=\"inline-start\" />\n {p.url ? t(\"pollEditor.replaceImage\") : t(\"pollEditor.uploadImage\")}\n </Button>\n {p.url && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={p.disabled} onClick={p.onRemove}>\n {t(\"pollEditor.removeImage\")}\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nfunction Field({ id, label, children }: { id: string; label: string; children: ReactNode }) {\n return (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={id}>{label}</Label>\n {children}\n </div>\n );\n}\n\n/** An object URL for a staged file, revoked when it changes. */\nfunction useObjectURL(file: File | null): string | undefined {\n const [url, setUrl] = useState<string>();\n useEffect(() => {\n if (!file) return setUrl(undefined);\n const u = URL.createObjectURL(file);\n setUrl(u);\n return () => URL.revokeObjectURL(u);\n }, [file]);\n return url;\n}\n"],"mappings":"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"}
|
package/dist/react/comments.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export interface UseAdminComments extends UseList<AdminComment> {
|
|
|
51
51
|
restore: (id: string) => Promise<void>;
|
|
52
52
|
react: (comment: Comment, value: Reaction) => Promise<void>;
|
|
53
53
|
}
|
|
54
|
-
/** Staff: every comment, newest first, deleted, held and rejected ones with their bodies (
|
|
54
|
+
/** Staff: every comment, newest first, deleted, held and rejected ones with their bodies (root:comments:moderate). */
|
|
55
55
|
export declare function useAdminComments(o?: {
|
|
56
56
|
contentKind?: string;
|
|
57
57
|
pageSize?: number;
|