@jant/core 0.3.6 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/app.js +11 -21
  2. package/dist/client.js +1 -0
  3. package/dist/db/schema.js +15 -0
  4. package/dist/i18n/locales/en.js +1 -1
  5. package/dist/i18n/locales/zh-Hans.js +1 -1
  6. package/dist/i18n/locales/zh-Hant.js +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/lib/image.js +3 -3
  9. package/dist/lib/media-helpers.js +43 -0
  10. package/dist/lib/nav-reorder.js +27 -0
  11. package/dist/lib/navigation.js +35 -0
  12. package/dist/lib/schemas.js +32 -2
  13. package/dist/lib/sse.js +7 -8
  14. package/dist/lib/theme-components.js +49 -0
  15. package/dist/routes/api/posts.js +101 -5
  16. package/dist/routes/api/timeline.js +115 -0
  17. package/dist/routes/api/upload.js +9 -5
  18. package/dist/routes/dash/media.js +38 -0
  19. package/dist/routes/dash/navigation.js +274 -0
  20. package/dist/routes/dash/posts.js +45 -6
  21. package/dist/routes/feed/rss.js +10 -1
  22. package/dist/routes/pages/archive.js +14 -27
  23. package/dist/routes/pages/collection.js +10 -19
  24. package/dist/routes/pages/home.js +88 -98
  25. package/dist/routes/pages/page.js +19 -38
  26. package/dist/routes/pages/post.js +61 -48
  27. package/dist/routes/pages/search.js +13 -26
  28. package/dist/services/collection.js +13 -0
  29. package/dist/services/index.js +3 -1
  30. package/dist/services/media.js +55 -2
  31. package/dist/services/navigation.js +115 -0
  32. package/dist/services/post.js +26 -1
  33. package/dist/theme/components/MediaGallery.js +107 -0
  34. package/dist/theme/components/PostForm.js +158 -2
  35. package/dist/theme/components/PostList.js +5 -0
  36. package/dist/theme/components/index.js +3 -0
  37. package/dist/theme/components/timeline/ArticleCard.js +50 -0
  38. package/dist/theme/components/timeline/ImageCard.js +86 -0
  39. package/dist/theme/components/timeline/LinkCard.js +62 -0
  40. package/dist/theme/components/timeline/NoteCard.js +37 -0
  41. package/dist/theme/components/timeline/QuoteCard.js +51 -0
  42. package/dist/theme/components/timeline/ThreadPreview.js +52 -0
  43. package/dist/theme/components/timeline/TimelineFeed.js +43 -0
  44. package/dist/theme/components/timeline/TimelineItem.js +25 -0
  45. package/dist/theme/components/timeline/index.js +8 -0
  46. package/dist/theme/layouts/DashLayout.js +8 -0
  47. package/dist/theme/layouts/SiteLayout.js +160 -0
  48. package/dist/theme/layouts/index.js +1 -0
  49. package/dist/types/sortablejs.d.js +5 -0
  50. package/dist/types.js +27 -0
  51. package/package.json +3 -2
  52. package/src/__tests__/helpers/app.ts +6 -1
  53. package/src/__tests__/helpers/db.ts +20 -0
  54. package/src/app.tsx +11 -25
  55. package/src/client.ts +1 -0
  56. package/src/db/migrations/0002_add_media_attachments.sql +3 -0
  57. package/src/db/migrations/0003_add_navigation_links.sql +8 -0
  58. package/src/db/migrations/meta/0003_snapshot.json +821 -0
  59. package/src/db/migrations/meta/_journal.json +14 -0
  60. package/src/db/schema.ts +15 -0
  61. package/src/i18n/locales/en.po +170 -58
  62. package/src/i18n/locales/en.ts +1 -1
  63. package/src/i18n/locales/zh-Hans.po +162 -71
  64. package/src/i18n/locales/zh-Hans.ts +1 -1
  65. package/src/i18n/locales/zh-Hant.po +162 -71
  66. package/src/i18n/locales/zh-Hant.ts +1 -1
  67. package/src/index.ts +13 -1
  68. package/src/lib/__tests__/schemas.test.ts +89 -1
  69. package/src/lib/__tests__/sse.test.ts +13 -1
  70. package/src/lib/__tests__/theme-components.test.ts +107 -0
  71. package/src/lib/image.ts +3 -3
  72. package/src/lib/media-helpers.ts +54 -0
  73. package/src/lib/nav-reorder.ts +26 -0
  74. package/src/lib/navigation.ts +46 -0
  75. package/src/lib/schemas.ts +47 -1
  76. package/src/lib/sse.ts +10 -11
  77. package/src/lib/theme-components.ts +76 -0
  78. package/src/routes/api/__tests__/posts.test.ts +239 -0
  79. package/src/routes/api/__tests__/timeline.test.ts +242 -0
  80. package/src/routes/api/posts.ts +134 -5
  81. package/src/routes/api/timeline.tsx +145 -0
  82. package/src/routes/api/upload.ts +9 -5
  83. package/src/routes/dash/media.tsx +50 -0
  84. package/src/routes/dash/navigation.tsx +306 -0
  85. package/src/routes/dash/posts.tsx +79 -7
  86. package/src/routes/feed/rss.ts +14 -1
  87. package/src/routes/pages/archive.tsx +15 -23
  88. package/src/routes/pages/collection.tsx +8 -15
  89. package/src/routes/pages/home.tsx +121 -88
  90. package/src/routes/pages/page.tsx +17 -30
  91. package/src/routes/pages/post.tsx +64 -40
  92. package/src/routes/pages/search.tsx +18 -22
  93. package/src/services/__tests__/collection.test.ts +102 -0
  94. package/src/services/__tests__/media.test.ts +282 -7
  95. package/src/services/__tests__/navigation.test.ts +213 -0
  96. package/src/services/__tests__/post-timeline.test.ts +220 -0
  97. package/src/services/collection.ts +19 -0
  98. package/src/services/index.ts +7 -0
  99. package/src/services/media.ts +78 -2
  100. package/src/services/navigation.ts +165 -0
  101. package/src/services/post.ts +48 -1
  102. package/src/styles/components.css +59 -0
  103. package/src/theme/components/MediaGallery.tsx +128 -0
  104. package/src/theme/components/PostForm.tsx +170 -2
  105. package/src/theme/components/PostList.tsx +7 -0
  106. package/src/theme/components/index.ts +13 -0
  107. package/src/theme/components/timeline/ArticleCard.tsx +57 -0
  108. package/src/theme/components/timeline/ImageCard.tsx +80 -0
  109. package/src/theme/components/timeline/LinkCard.tsx +66 -0
  110. package/src/theme/components/timeline/NoteCard.tsx +41 -0
  111. package/src/theme/components/timeline/QuoteCard.tsx +55 -0
  112. package/src/theme/components/timeline/ThreadPreview.tsx +49 -0
  113. package/src/theme/components/timeline/TimelineFeed.tsx +52 -0
  114. package/src/theme/components/timeline/TimelineItem.tsx +39 -0
  115. package/src/theme/components/timeline/index.ts +8 -0
  116. package/src/theme/layouts/DashLayout.tsx +10 -0
  117. package/src/theme/layouts/SiteLayout.tsx +184 -0
  118. package/src/theme/layouts/index.ts +1 -0
  119. package/src/types/sortablejs.d.ts +23 -0
  120. package/src/types.ts +97 -0
  121. package/dist/app.d.ts +0 -38
  122. package/dist/app.d.ts.map +0 -1
  123. package/dist/auth.d.ts +0 -25
  124. package/dist/auth.d.ts.map +0 -1
  125. package/dist/db/index.d.ts +0 -10
  126. package/dist/db/index.d.ts.map +0 -1
  127. package/dist/db/schema.d.ts +0 -1507
  128. package/dist/db/schema.d.ts.map +0 -1
  129. package/dist/i18n/Trans.d.ts +0 -25
  130. package/dist/i18n/Trans.d.ts.map +0 -1
  131. package/dist/i18n/context.d.ts +0 -69
  132. package/dist/i18n/context.d.ts.map +0 -1
  133. package/dist/i18n/detect.d.ts +0 -20
  134. package/dist/i18n/detect.d.ts.map +0 -1
  135. package/dist/i18n/i18n.d.ts +0 -32
  136. package/dist/i18n/i18n.d.ts.map +0 -1
  137. package/dist/i18n/index.d.ts +0 -41
  138. package/dist/i18n/index.d.ts.map +0 -1
  139. package/dist/i18n/locales/en.d.ts +0 -3
  140. package/dist/i18n/locales/en.d.ts.map +0 -1
  141. package/dist/i18n/locales/zh-Hans.d.ts +0 -3
  142. package/dist/i18n/locales/zh-Hans.d.ts.map +0 -1
  143. package/dist/i18n/locales/zh-Hant.d.ts +0 -3
  144. package/dist/i18n/locales/zh-Hant.d.ts.map +0 -1
  145. package/dist/i18n/locales.d.ts +0 -11
  146. package/dist/i18n/locales.d.ts.map +0 -1
  147. package/dist/i18n/middleware.d.ts +0 -21
  148. package/dist/i18n/middleware.d.ts.map +0 -1
  149. package/dist/index.d.ts +0 -16
  150. package/dist/index.d.ts.map +0 -1
  151. package/dist/lib/config.d.ts +0 -83
  152. package/dist/lib/config.d.ts.map +0 -1
  153. package/dist/lib/constants.d.ts +0 -37
  154. package/dist/lib/constants.d.ts.map +0 -1
  155. package/dist/lib/image.d.ts +0 -73
  156. package/dist/lib/image.d.ts.map +0 -1
  157. package/dist/lib/index.d.ts +0 -9
  158. package/dist/lib/index.d.ts.map +0 -1
  159. package/dist/lib/markdown.d.ts +0 -60
  160. package/dist/lib/markdown.d.ts.map +0 -1
  161. package/dist/lib/schemas.d.ts +0 -113
  162. package/dist/lib/schemas.d.ts.map +0 -1
  163. package/dist/lib/sqid.d.ts +0 -60
  164. package/dist/lib/sqid.d.ts.map +0 -1
  165. package/dist/lib/sse.d.ts +0 -192
  166. package/dist/lib/sse.d.ts.map +0 -1
  167. package/dist/lib/theme.d.ts +0 -44
  168. package/dist/lib/theme.d.ts.map +0 -1
  169. package/dist/lib/time.d.ts +0 -90
  170. package/dist/lib/time.d.ts.map +0 -1
  171. package/dist/lib/url.d.ts +0 -82
  172. package/dist/lib/url.d.ts.map +0 -1
  173. package/dist/middleware/auth.d.ts +0 -24
  174. package/dist/middleware/auth.d.ts.map +0 -1
  175. package/dist/middleware/onboarding.d.ts +0 -26
  176. package/dist/middleware/onboarding.d.ts.map +0 -1
  177. package/dist/routes/api/posts.d.ts +0 -13
  178. package/dist/routes/api/posts.d.ts.map +0 -1
  179. package/dist/routes/api/search.d.ts +0 -13
  180. package/dist/routes/api/search.d.ts.map +0 -1
  181. package/dist/routes/api/upload.d.ts +0 -16
  182. package/dist/routes/api/upload.d.ts.map +0 -1
  183. package/dist/routes/dash/collections.d.ts +0 -13
  184. package/dist/routes/dash/collections.d.ts.map +0 -1
  185. package/dist/routes/dash/index.d.ts +0 -15
  186. package/dist/routes/dash/index.d.ts.map +0 -1
  187. package/dist/routes/dash/media.d.ts +0 -16
  188. package/dist/routes/dash/media.d.ts.map +0 -1
  189. package/dist/routes/dash/pages.d.ts +0 -15
  190. package/dist/routes/dash/pages.d.ts.map +0 -1
  191. package/dist/routes/dash/posts.d.ts +0 -13
  192. package/dist/routes/dash/posts.d.ts.map +0 -1
  193. package/dist/routes/dash/redirects.d.ts +0 -13
  194. package/dist/routes/dash/redirects.d.ts.map +0 -1
  195. package/dist/routes/dash/settings.d.ts +0 -15
  196. package/dist/routes/dash/settings.d.ts.map +0 -1
  197. package/dist/routes/feed/rss.d.ts +0 -13
  198. package/dist/routes/feed/rss.d.ts.map +0 -1
  199. package/dist/routes/feed/sitemap.d.ts +0 -13
  200. package/dist/routes/feed/sitemap.d.ts.map +0 -1
  201. package/dist/routes/pages/archive.d.ts +0 -15
  202. package/dist/routes/pages/archive.d.ts.map +0 -1
  203. package/dist/routes/pages/collection.d.ts +0 -13
  204. package/dist/routes/pages/collection.d.ts.map +0 -1
  205. package/dist/routes/pages/home.d.ts +0 -13
  206. package/dist/routes/pages/home.d.ts.map +0 -1
  207. package/dist/routes/pages/page.d.ts +0 -15
  208. package/dist/routes/pages/page.d.ts.map +0 -1
  209. package/dist/routes/pages/post.d.ts +0 -13
  210. package/dist/routes/pages/post.d.ts.map +0 -1
  211. package/dist/routes/pages/search.d.ts +0 -13
  212. package/dist/routes/pages/search.d.ts.map +0 -1
  213. package/dist/services/collection.d.ts +0 -31
  214. package/dist/services/collection.d.ts.map +0 -1
  215. package/dist/services/index.d.ts +0 -28
  216. package/dist/services/index.d.ts.map +0 -1
  217. package/dist/services/media.d.ts +0 -27
  218. package/dist/services/media.d.ts.map +0 -1
  219. package/dist/services/post.d.ts +0 -31
  220. package/dist/services/post.d.ts.map +0 -1
  221. package/dist/services/redirect.d.ts +0 -15
  222. package/dist/services/redirect.d.ts.map +0 -1
  223. package/dist/services/search.d.ts +0 -26
  224. package/dist/services/search.d.ts.map +0 -1
  225. package/dist/services/settings.d.ts +0 -18
  226. package/dist/services/settings.d.ts.map +0 -1
  227. package/dist/theme/color-themes.d.ts +0 -30
  228. package/dist/theme/color-themes.d.ts.map +0 -1
  229. package/dist/theme/components/ActionButtons.d.ts +0 -43
  230. package/dist/theme/components/ActionButtons.d.ts.map +0 -1
  231. package/dist/theme/components/CrudPageHeader.d.ts +0 -23
  232. package/dist/theme/components/CrudPageHeader.d.ts.map +0 -1
  233. package/dist/theme/components/DangerZone.d.ts +0 -36
  234. package/dist/theme/components/DangerZone.d.ts.map +0 -1
  235. package/dist/theme/components/EmptyState.d.ts +0 -27
  236. package/dist/theme/components/EmptyState.d.ts.map +0 -1
  237. package/dist/theme/components/ListItemRow.d.ts +0 -15
  238. package/dist/theme/components/ListItemRow.d.ts.map +0 -1
  239. package/dist/theme/components/PageForm.d.ts +0 -14
  240. package/dist/theme/components/PageForm.d.ts.map +0 -1
  241. package/dist/theme/components/Pagination.d.ts +0 -46
  242. package/dist/theme/components/Pagination.d.ts.map +0 -1
  243. package/dist/theme/components/PostForm.d.ts +0 -11
  244. package/dist/theme/components/PostForm.d.ts.map +0 -1
  245. package/dist/theme/components/PostList.d.ts +0 -10
  246. package/dist/theme/components/PostList.d.ts.map +0 -1
  247. package/dist/theme/components/ThreadView.d.ts +0 -15
  248. package/dist/theme/components/ThreadView.d.ts.map +0 -1
  249. package/dist/theme/components/TypeBadge.d.ts +0 -12
  250. package/dist/theme/components/TypeBadge.d.ts.map +0 -1
  251. package/dist/theme/components/VisibilityBadge.d.ts +0 -12
  252. package/dist/theme/components/VisibilityBadge.d.ts.map +0 -1
  253. package/dist/theme/components/index.d.ts +0 -13
  254. package/dist/theme/components/index.d.ts.map +0 -1
  255. package/dist/theme/index.d.ts +0 -21
  256. package/dist/theme/index.d.ts.map +0 -1
  257. package/dist/theme/layouts/BaseLayout.d.ts +0 -23
  258. package/dist/theme/layouts/BaseLayout.d.ts.map +0 -1
  259. package/dist/theme/layouts/DashLayout.d.ts +0 -17
  260. package/dist/theme/layouts/DashLayout.d.ts.map +0 -1
  261. package/dist/theme/layouts/index.d.ts +0 -3
  262. package/dist/theme/layouts/index.d.ts.map +0 -1
  263. package/dist/types.d.ts +0 -213
  264. package/dist/types.d.ts.map +0 -1
@@ -1 +1 @@
1
- /*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+7Wr2a\":[\"Edit: \",[\"title\"]],\"+MACwa\":[\"No collections yet.\"],\"+owNNn\":[\"Posts\"],\"+zy2Nq\":[\"Type\"],\"/0D1Xp\":[\"Edit Collection\"],\"/Rj5P4\":[\"Your Name\"],\"07Epll\":[\"This will theme both your site and your dashboard. All color themes support dark mode.\"],\"0JkyS7\":[\"Create your first page\"],\"0a6MpL\":[\"New Redirect\"],\"1CU1Td\":[\"URL-safe identifier (lowercase, numbers, hyphens)\"],\"1DBGsz\":[\"Notes\"],\"2N0qpv\":[\"Post title...\"],\"2q/Q7x\":[\"Visibility\"],\"2rJGtU\":[\"Page title...\"],\"3Yvsaz\":[\"302 (Temporary)\"],\"4/SFQS\":[\"View Site\"],\"40TVQj\":[\"Custom Path (optional)\"],\"4KzVT6\":[\"Delete Page\"],\"4b3oEV\":[\"Content\"],\"4mDPGp\":[\"The URL path for this page. Use lowercase letters, numbers, and hyphens.\"],\"6WdDG7\":[\"Page\"],\"6YtxFj\":[\"Name\"],\"7G4SBz\":[\"Page content (Markdown supported)...\"],\"7Mk+/h\":[\"Update Collection\"],\"7Q1KKN\":[\"From Path\"],\"7aECQB\":[\"Invalid or Expired Link\"],\"7nGhhM\":[\"What's on your mind?\"],\"7p5kLi\":[\"Dashboard\"],\"7vhWI8\":[\"New Password\"],\"8ZsakT\":[\"Password\"],\"90Luob\":[[\"count\"],\" replies\"],\"A1taO8\":[\"Search\"],\"AeXO77\":[\"Account\"],\"AyHO4m\":[\"What's this collection about?\"],\"B373X+\":[\"Edit Post\"],\"B495Gs\":[\"Archive\"],\"BjF0Jv\":[\"Lowercase letters, numbers, and hyphens only\"],\"D9Oea+\":[\"Permalink\"],\"DCKkhU\":[\"Current Password\"],\"DHhJ7s\":[\"Previous\"],\"DoJzLz\":[\"Collections\"],\"E80cJw\":[\"Deleting this media will remove it permanently from storage.\"],\"EEYbdt\":[\"Publish\"],\"EGwzOK\":[\"Complete Setup\"],\"EkH9pt\":[\"Update\"],\"FGrimz\":[\"New Post\"],\"FkMol5\":[\"Featured\"],\"Fxf4jq\":[\"Description (optional)\"],\"GA5A5H\":[\"Delete Collection\"],\"GX2VMa\":[\"Create your admin account.\"],\"GbVAnd\":[\"This password reset link is invalid or has expired. Please generate a new one.\"],\"GorKul\":[\"Welcome to Jant\"],\"GrZ6fH\":[\"New Page\"],\"GxkJXS\":[\"Uploading...\"],\"HfyyXl\":[\"My Blog\"],\"HiETwV\":[\"Quiet (normal)\"],\"Hzi9AA\":[\"No posts found.\"],\"I6gXOa\":[\"Path\"],\"IagCbF\":[\"URL\"],\"J4FNfC\":[\"No posts in this collection.\"],\"JIBC/T\":[\"Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB.\"],\"Jed1wB\":[\"Need help? Visit the <0>documentation</0>\"],\"JiP4aa\":[\"Published pages are accessible via their path. Drafts are not visible.\"],\"K9NcLu\":[\"Use this URL to embed the media in your posts.\"],\"KbS2K9\":[\"Reset Password\"],\"KiJn9B\":[\"Note\"],\"L85WcV\":[\"Slug\"],\"LkvLQe\":[\"No pages yet.\"],\"M1RvTd\":[\"Click image to view full size\"],\"M8kJqa\":[\"Drafts\"],\"M9xgHy\":[\"Redirects\"],\"MHrjPM\":[\"Title\"],\"MZbQHL\":[\"No results found.\"],\"Mhf/H/\":[\"Create Redirect\"],\"MqghUt\":[\"Search posts...\"],\"N40H+G\":[\"All\"],\"O3oNi5\":[\"Email\"],\"OCNZaU\":[\"The path to redirect from\"],\"ODiSoW\":[\"No posts yet.\"],\"ONWvwQ\":[\"Upload\"],\"Pbm2/N\":[\"Create Collection\"],\"RDjuBN\":[\"Setup\"],\"Rj01Fz\":[\"Links\"],\"RwGhWy\":[\"Thread with \",[\"count\"],\" posts\"],\"SJmfuf\":[\"Site Name\"],\"ST+lN2\":[\"No media uploaded yet.\"],\"Tt5T6+\":[\"Articles\"],\"TxE+Mj\":[\"1 reply\"],\"Tz0i8g\":[\"Settings\"],\"U5v6Gh\":[\"Edit Page\"],\"UDMjsP\":[\"Quick Actions\"],\"UGT5vp\":[\"Save Settings\"],\"VUSy8D\":[\"Search failed. Please try again.\"],\"VhMDMg\":[\"Change Password\"],\"WDcQq9\":[\"Unlisted\"],\"Weq9zb\":[\"General\"],\"WmZ/rP\":[\"To Path\"],\"Y+7JGK\":[\"Create Page\"],\"ZQKLI1\":[\"Danger Zone\"],\"ZhhOwV\":[\"Quote\"],\"aAIQg2\":[\"Appearance\"],\"an5hVd\":[\"Images\"],\"b+/jO6\":[\"301 (Permanent)\"],\"bHYIks\":[\"Sign Out\"],\"biOepV\":[\"← Back to home\"],\"cnGeoo\":[\"Delete\"],\"dEgA5A\":[\"Cancel\"],\"e6Jr7Q\":[\"← Back to Collections\"],\"ePK91l\":[\"Edit\"],\"eWLklq\":[\"Quotes\"],\"eneWvv\":[\"Draft\"],\"er8+x7\":[\"Demo account pre-filled. Just click Sign In.\"],\"f6e0Ry\":[\"Article\"],\"fG7BxZ\":[\"Upload images via the API: POST /api/upload with a file form field.\"],\"fttd2R\":[\"My Collection\"],\"hG89Ed\":[\"Image\"],\"hWOZIv\":[\"Enter your new password.\"],\"hXzOVo\":[\"Next\"],\"he3ygx\":[\"Copy\"],\"iH8pgl\":[\"Back\"],\"ig4hg2\":[\"Let's set up your site.\"],\"jpctdh\":[\"View\"],\"k1ifdL\":[\"Processing...\"],\"mTOYla\":[\"View all posts →\"],\"n1ekoW\":[\"Sign In\"],\"oYPBa0\":[\"Update Page\"],\"p2/GCq\":[\"Confirm Password\"],\"pRhYH2\":[\"Posts in Collection (\",[\"count\"],\")\"],\"pZq3aX\":[\"Upload failed. Please try again.\"],\"qMyM2u\":[\"Source URL (optional)\"],\"r1MpXi\":[\"Quiet\"],\"rFmBG3\":[\"Color theme\"],\"rdUucN\":[\"Preview\"],\"rzNUSl\":[\"Thread with 1 post\"],\"sGajR7\":[\"Thread start\"],\"ssqvZi\":[\"Save Profile\"],\"t/YqKh\":[\"Remove\"],\"tfrt7B\":[\"No redirects configured.\"],\"tiq7kl\":[\"Page \",[\"page\"]],\"u2f7vd\":[\"Site Description\"],\"u3wRF+\":[\"Published\"],\"u6Hp4N\":[\"Markdown\"],\"uAQUqI\":[\"Status\"],\"vERlcd\":[\"Profile\"],\"vXIe7J\":[\"Language\"],\"vzU4k9\":[\"New Collection\"],\"wEF6Ix\":[\"The destination path or URL\"],\"wK4OTM\":[\"Title (optional)\"],\"wM5UXj\":[\"Delete Media\"],\"wRR604\":[\"Pages\"],\"wja8aL\":[\"Untitled\"],\"x+doid\":[\"Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped.\"],\"x0mzE0\":[\"Create your first post\"],\"x4RuFo\":[\"Back to home\"],\"xYilR2\":[\"Media\"],\"y28hnO\":[\"Post\"],\"yQ2kGp\":[\"Load more\"],\"yjkELF\":[\"Confirm New Password\"],\"yzF66j\":[\"Link\"],\"z8ajIE\":[\"Found 1 result\"],\"zH6KqE\":[\"Found \",[\"count\"],\" results\"]}")as Messages;
1
+ /*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+7Wr2a\":[\"Edit: \",[\"title\"]],\"+MACwa\":[\"No collections yet.\"],\"+bHzpy\":[\"Display text for the link\"],\"+owNNn\":[\"Posts\"],\"+zy2Nq\":[\"Type\"],\"/0D1Xp\":[\"Edit Collection\"],\"/Rj5P4\":[\"Your Name\"],\"07Epll\":[\"This will theme both your site and your dashboard. All color themes support dark mode.\"],\"0JkyS7\":[\"Create your first page\"],\"0a6MpL\":[\"New Redirect\"],\"1CU1Td\":[\"URL-safe identifier (lowercase, numbers, hyphens)\"],\"1DBGsz\":[\"Notes\"],\"1o+wgo\":[\"e.g. The Verge, John Doe\"],\"2N0qpv\":[\"Post title...\"],\"2fUwEY\":[\"Select Media\"],\"2q/Q7x\":[\"Visibility\"],\"2rJGtU\":[\"Page title...\"],\"3Yvsaz\":[\"302 (Temporary)\"],\"4/SFQS\":[\"View Site\"],\"40TVQj\":[\"Custom Path (optional)\"],\"4KzVT6\":[\"Delete Page\"],\"4b3oEV\":[\"Content\"],\"4mDPGp\":[\"The URL path for this page. Use lowercase letters, numbers, and hyphens.\"],\"6WdDG7\":[\"Page\"],\"6YtxFj\":[\"Name\"],\"7G4SBz\":[\"Page content (Markdown supported)...\"],\"7Mk+/h\":[\"Update Collection\"],\"7Q1KKN\":[\"From Path\"],\"7aECQB\":[\"Invalid or Expired Link\"],\"7nGhhM\":[\"What's on your mind?\"],\"7p5kLi\":[\"Dashboard\"],\"7vhWI8\":[\"New Password\"],\"87a/t/\":[\"Label\"],\"8ZsakT\":[\"Password\"],\"90Luob\":[[\"count\"],\" replies\"],\"A1taO8\":[\"Search\"],\"AeXO77\":[\"Account\"],\"AyHO4m\":[\"What's this collection about?\"],\"B373X+\":[\"Edit Post\"],\"B495Gs\":[\"Archive\"],\"BjF0Jv\":[\"Lowercase letters, numbers, and hyphens only\"],\"D9Oea+\":[\"Permalink\"],\"DCKkhU\":[\"Current Password\"],\"DHhJ7s\":[\"Previous\"],\"DPfwMq\":[\"Done\"],\"DoJzLz\":[\"Collections\"],\"E80cJw\":[\"Deleting this media will remove it permanently from storage.\"],\"EEYbdt\":[\"Publish\"],\"EGwzOK\":[\"Complete Setup\"],\"EkH9pt\":[\"Update\"],\"FGrimz\":[\"New Post\"],\"FkMol5\":[\"Featured\"],\"Fxf4jq\":[\"Description (optional)\"],\"GA5A5H\":[\"Delete Collection\"],\"GX2VMa\":[\"Create your admin account.\"],\"GbVAnd\":[\"This password reset link is invalid or has expired. Please generate a new one.\"],\"GorKul\":[\"Welcome to Jant\"],\"GrZ6fH\":[\"New Page\"],\"GxkJXS\":[\"Uploading...\"],\"HfyyXl\":[\"My Blog\"],\"HiETwV\":[\"Quiet (normal)\"],\"Hzi9AA\":[\"No posts found.\"],\"I6gXOa\":[\"Path\"],\"I8hDlV\":[\"At least 1 image required for image posts.\"],\"IUwGEM\":[\"Save Changes\"],\"IagCbF\":[\"URL\"],\"J4FNfC\":[\"No posts in this collection.\"],\"JIBC/T\":[\"Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB.\"],\"Jed1wB\":[\"Need help? Visit the <0>documentation</0>\"],\"JiP4aa\":[\"Published pages are accessible via their path. Drafts are not visible.\"],\"K9NcLu\":[\"Use this URL to embed the media in your posts.\"],\"KbS2K9\":[\"Reset Password\"],\"KiJn9B\":[\"Note\"],\"KmGXnO\":[\"Are you sure you want to delete this post? This cannot be undone.\"],\"L85WcV\":[\"Slug\"],\"LkvLQe\":[\"No pages yet.\"],\"M1RvTd\":[\"Click image to view full size\"],\"M8kJqa\":[\"Drafts\"],\"M9xgHy\":[\"Redirects\"],\"MHrjPM\":[\"Title\"],\"MWBOxm\":[\"Collections (optional)\"],\"MZbQHL\":[\"No results found.\"],\"Mhf/H/\":[\"Create Redirect\"],\"MqghUt\":[\"Search posts...\"],\"N40H+G\":[\"All\"],\"O3oNi5\":[\"Email\"],\"OCNZaU\":[\"The path to redirect from\"],\"ODiSoW\":[\"No posts yet.\"],\"ONWvwQ\":[\"Upload\"],\"Pbm2/N\":[\"Create Collection\"],\"QEbNBb\":[\"Path (e.g. /archive) or full URL (e.g. https://example.com)\"],\"RDjuBN\":[\"Setup\"],\"Rj01Fz\":[\"Links\"],\"RwGhWy\":[\"Thread with \",[\"count\"],\" posts\"],\"SJmfuf\":[\"Site Name\"],\"ST+lN2\":[\"No media uploaded yet.\"],\"Tt5T6+\":[\"Articles\"],\"TxE+Mj\":[\"1 reply\"],\"Tz0i8g\":[\"Settings\"],\"U5v6Gh\":[\"Edit Page\"],\"UDMjsP\":[\"Quick Actions\"],\"UGT5vp\":[\"Save Settings\"],\"UxKoFf\":[\"Navigation\"],\"VUSy8D\":[\"Search failed. Please try again.\"],\"VhMDMg\":[\"Change Password\"],\"WDcQq9\":[\"Unlisted\"],\"Weq9zb\":[\"General\"],\"WmZ/rP\":[\"To Path\"],\"Y+7JGK\":[\"Create Page\"],\"Z3FXyt\":[\"Loading...\"],\"ZQKLI1\":[\"Danger Zone\"],\"ZhhOwV\":[\"Quote\"],\"aAIQg2\":[\"Appearance\"],\"aaGV/9\":[\"New Link\"],\"an5hVd\":[\"Images\"],\"b+/jO6\":[\"301 (Permanent)\"],\"bHYIks\":[\"Sign Out\"],\"biOepV\":[\"← Back to home\"],\"cnGeoo\":[\"Delete\"],\"dEgA5A\":[\"Cancel\"],\"e6Jr7Q\":[\"← Back to Collections\"],\"ePK91l\":[\"Edit\"],\"eWLklq\":[\"Quotes\"],\"eneWvv\":[\"Draft\"],\"er8+x7\":[\"Demo account pre-filled. Just click Sign In.\"],\"f6e0Ry\":[\"Article\"],\"fG7BxZ\":[\"Upload images via the API: POST /api/upload with a file form field.\"],\"fttd2R\":[\"My Collection\"],\"gDx5MG\":[\"Edit Link\"],\"hG89Ed\":[\"Image\"],\"hWOZIv\":[\"Enter your new password.\"],\"hXzOVo\":[\"Next\"],\"he3ygx\":[\"Copy\"],\"iH8pgl\":[\"Back\"],\"ig4hg2\":[\"Let's set up your site.\"],\"jpctdh\":[\"View\"],\"k1ifdL\":[\"Processing...\"],\"kd7eBB\":[\"Create Link\"],\"mTOYla\":[\"View all posts →\"],\"n1ekoW\":[\"Sign In\"],\"oJFOZk\":[\"Source Name (optional)\"],\"oYPBa0\":[\"Update Page\"],\"p2/GCq\":[\"Confirm Password\"],\"pRhYH2\":[\"Posts in Collection (\",[\"count\"],\")\"],\"pZq3aX\":[\"Upload failed. Please try again.\"],\"qMyM2u\":[\"Source URL (optional)\"],\"qiXmlF\":[\"Add Media\"],\"r1MpXi\":[\"Quiet\"],\"rFmBG3\":[\"Color theme\"],\"rdUucN\":[\"Preview\"],\"rzNUSl\":[\"Thread with 1 post\"],\"sGajR7\":[\"Thread start\"],\"smzF8S\":[\"Show \",[\"remainingCount\"],\" more \",[\"0\"]],\"ssqvZi\":[\"Save Profile\"],\"t/YqKh\":[\"Remove\"],\"tfrt7B\":[\"No redirects configured.\"],\"tiq7kl\":[\"Page \",[\"page\"]],\"u2f7vd\":[\"Site Description\"],\"u3wRF+\":[\"Published\"],\"u6Hp4N\":[\"Markdown\"],\"uAQUqI\":[\"Status\"],\"vERlcd\":[\"Profile\"],\"vXIe7J\":[\"Language\"],\"vzU4k9\":[\"New Collection\"],\"wEF6Ix\":[\"The destination path or URL\"],\"wK4OTM\":[\"Title (optional)\"],\"wM5UXj\":[\"Delete Media\"],\"wRR604\":[\"Pages\"],\"wdGjkd\":[\"No navigation links configured.\"],\"wja8aL\":[\"Untitled\"],\"x+doid\":[\"Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped.\"],\"x0mzE0\":[\"Create your first post\"],\"x4RuFo\":[\"Back to home\"],\"xYilR2\":[\"Media\"],\"y28hnO\":[\"Post\"],\"yQ2kGp\":[\"Load more\"],\"yjkELF\":[\"Confirm New Password\"],\"yzF66j\":[\"Link\"],\"z8ajIE\":[\"Found 1 result\"],\"zH6KqE\":[\"Found \",[\"count\"],\" results\"]}")as Messages;
@@ -23,13 +23,6 @@ msgstr "{count} 条回复"
23
23
  msgid "← Back to Collections"
24
24
  msgstr "← 返回收藏夹"
25
25
 
26
- #. @context: Navigation link
27
- #. @context: Navigation link
28
- #: src/routes/pages/collection.tsx:76
29
- #: src/routes/pages/post.tsx:51
30
- msgid "← Back to home"
31
- msgstr "← 返回首页"
32
-
33
26
  #. @context: Archive post reply indicator - single
34
27
  #: src/routes/pages/archive.tsx:175
35
28
  msgid "1 reply"
@@ -50,6 +43,11 @@ msgstr "302(临时)"
50
43
  msgid "Account"
51
44
  msgstr "账户"
52
45
 
46
+ #. @context: Button to open media picker
47
+ #: src/theme/components/PostForm.tsx:178
48
+ msgid "Add Media"
49
+ msgstr "添加媒体"
50
+
53
51
  #. @context: Archive filter - all types
54
52
  #: src/routes/pages/archive.tsx:115
55
53
  msgid "All"
@@ -61,17 +59,20 @@ msgid "Appearance"
61
59
  msgstr "外观"
62
60
 
63
61
  #. @context: Archive page title
64
- #. @context: Navigation link to archive page
65
62
  #: src/routes/pages/archive.tsx:102
66
- #: src/routes/pages/home.tsx:30
67
63
  msgid "Archive"
68
64
  msgstr "档案馆"
69
65
 
66
+ #. @context: Confirmation dialog when deleting a post from the list
67
+ #: src/theme/components/PostList.tsx:56
68
+ msgid "Are you sure you want to delete this post? This cannot be undone."
69
+ msgstr ""
70
+
70
71
  #. @context: Post type badge - article
71
72
  #. @context: Post type label - article
72
73
  #. @context: Post type option
73
74
  #: src/routes/pages/archive.tsx:28
74
- #: src/theme/components/PostForm.tsx:48
75
+ #: src/theme/components/PostForm.tsx:67
75
76
  #: src/theme/components/TypeBadge.tsx:20
76
77
  msgid "Article"
77
78
  msgstr "文章"
@@ -81,30 +82,28 @@ msgstr "文章"
81
82
  msgid "Articles"
82
83
  msgstr "文章"
83
84
 
85
+ #. @context: Hint for image post type media requirement
86
+ #: src/theme/components/PostForm.tsx:130
87
+ msgid "At least 1 image required for image posts."
88
+ msgstr "图像帖子至少需要 1 张图片。"
89
+
84
90
  #. @context: Button to go back to media list
85
91
  #: src/routes/dash/media.tsx:245
86
92
  msgid "Back"
87
93
  msgstr "返回"
88
94
 
89
- #. @context: Navigation link back to home page
90
- #. @context: Navigation link back to home page
91
- #. @context: Navigation link back to home page
92
- #: src/routes/pages/archive.tsx:209
93
- #: src/routes/pages/page.tsx:37
94
- #: src/routes/pages/search.tsx:144
95
- msgid "Back to home"
96
- msgstr "返回首页"
97
-
98
95
  #. @context: Button to cancel and go back
99
96
  #. @context: Button to cancel form
100
97
  #. @context: Button to cancel form
101
98
  #. @context: Button to cancel form
102
99
  #. @context: Button to cancel form
100
+ #. @context: Button to cancel form
103
101
  #: src/routes/dash/collections.tsx:176
104
102
  #: src/routes/dash/collections.tsx:345
103
+ #: src/routes/dash/navigation.tsx:182
105
104
  #: src/routes/dash/redirects.tsx:167
106
105
  #: src/theme/components/PageForm.tsx:161
107
- #: src/theme/components/PostForm.tsx:181
106
+ #: src/theme/components/PostForm.tsx:312
108
107
  msgid "Cancel"
109
108
  msgstr "取消"
110
109
 
@@ -127,13 +126,18 @@ msgstr "点击图片查看完整尺寸"
127
126
  msgid "Collections"
128
127
  msgstr "收藏夹"
129
128
 
129
+ #. @context: Post form field - assign to collections
130
+ #: src/theme/components/PostForm.tsx:261
131
+ msgid "Collections (optional)"
132
+ msgstr "集合(可选)"
133
+
130
134
  #. @context: Appearance settings heading
131
135
  #: src/routes/dash/settings.tsx:301
132
136
  msgid "Color theme"
133
137
  msgstr "颜色主题"
134
138
 
135
139
  #. @context: Setup form submit button
136
- #: src/app.tsx:245
140
+ #: src/app.tsx:248
137
141
  msgid "Complete Setup"
138
142
  msgstr "完成设置"
139
143
 
@@ -143,14 +147,14 @@ msgid "Confirm New Password"
143
147
  msgstr "确认新密码"
144
148
 
145
149
  #. @context: Password reset form field
146
- #: src/app.tsx:505
150
+ #: src/app.tsx:490
147
151
  msgid "Confirm Password"
148
152
  msgstr "确认密码"
149
153
 
150
154
  #. @context: Page form field label - content
151
155
  #. @context: Post form field
152
156
  #: src/theme/components/PageForm.tsx:95
153
- #: src/theme/components/PostForm.tsx:84
157
+ #: src/theme/components/PostForm.tsx:103
154
158
  msgid "Content"
155
159
  msgstr "内容"
156
160
 
@@ -166,6 +170,11 @@ msgstr "复制"
166
170
  msgid "Create Collection"
167
171
  msgstr "创建集合"
168
172
 
173
+ #. @context: Button to save new navigation link
174
+ #: src/routes/dash/navigation.tsx:176
175
+ msgid "Create Link"
176
+ msgstr "创建链接"
177
+
169
178
  #. @context: Button to create new page
170
179
  #: src/theme/components/PageForm.tsx:155
171
180
  msgid "Create Page"
@@ -177,7 +186,7 @@ msgid "Create Redirect"
177
186
  msgstr "创建重定向"
178
187
 
179
188
  #. @context: Setup page description
180
- #: src/app.tsx:187
189
+ #: src/app.tsx:190
181
190
  msgid "Create your admin account."
182
191
  msgstr "创建您的管理员账户。"
183
192
 
@@ -197,7 +206,7 @@ msgid "Current Password"
197
206
  msgstr "当前密码"
198
207
 
199
208
  #. @context: Post form field
200
- #: src/theme/components/PostForm.tsx:154
209
+ #: src/theme/components/PostForm.tsx:285
201
210
  msgid "Custom Path (optional)"
202
211
  msgstr "自定义路径(可选)"
203
212
 
@@ -214,7 +223,9 @@ msgid "Dashboard"
214
223
  msgstr "仪表板"
215
224
 
216
225
  #. @context: Button to delete item
226
+ #. @context: Button to delete navigation link
217
227
  #. @context: Button to delete redirect
228
+ #: src/routes/dash/navigation.tsx:66
218
229
  #: src/routes/dash/redirects.tsx:60
219
230
  #: src/theme/components/ActionButtons.tsx:80
220
231
  msgid "Delete"
@@ -241,7 +252,7 @@ msgid "Deleting this media will remove it permanently from storage."
241
252
  msgstr "删除此媒体将永久从存储中移除。"
242
253
 
243
254
  #. @context: Hint shown on signin page when demo credentials are pre-filled
244
- #: src/app.tsx:336
255
+ #: src/app.tsx:339
245
256
  msgid "Demo account pre-filled. Just click Sign In."
246
257
  msgstr "演示账户已预填。只需点击登录。"
247
258
 
@@ -252,11 +263,21 @@ msgstr "演示账户已预填。只需点击登录。"
252
263
  msgid "Description (optional)"
253
264
  msgstr "描述(可选)"
254
265
 
266
+ #. @context: Navigation label help text
267
+ #: src/routes/dash/navigation.tsx:139
268
+ msgid "Display text for the link"
269
+ msgstr "链接的显示文本"
270
+
271
+ #. @context: Close media picker button
272
+ #: src/theme/components/PostForm.tsx:334
273
+ msgid "Done"
274
+ msgstr "完成"
275
+
255
276
  #. @context: Page status option - draft
256
277
  #. @context: Post visibility badge - draft
257
278
  #. @context: Post visibility option
258
279
  #: src/theme/components/PageForm.tsx:132
259
- #: src/theme/components/PostForm.tsx:143
280
+ #: src/theme/components/PostForm.tsx:249
260
281
  #: src/theme/components/VisibilityBadge.tsx:38
261
282
  msgid "Draft"
262
283
  msgstr "草稿"
@@ -266,18 +287,25 @@ msgstr "草稿"
266
287
  msgid "Drafts"
267
288
  msgstr "草稿"
268
289
 
290
+ #. @context: Source name placeholder
291
+ #: src/theme/components/PostForm.tsx:214
292
+ msgid "e.g. The Verge, John Doe"
293
+ msgstr "例如:The Verge,John Doe"
294
+
269
295
  #. @context: Button to edit collection
270
296
  #. @context: Button to edit collection
271
297
  #. @context: Button to edit item
298
+ #. @context: Button to edit navigation link
272
299
  #. @context: Button to edit page
273
300
  #. @context: Button to edit page
274
301
  #. @context: Button to edit post
275
302
  #. @context: Button to edit post
276
303
  #: src/routes/dash/collections.tsx:66
277
304
  #: src/routes/dash/collections.tsx:210
305
+ #: src/routes/dash/navigation.tsx:61
278
306
  #: src/routes/dash/pages.tsx:64
279
307
  #: src/routes/dash/pages.tsx:134
280
- #: src/routes/dash/posts.tsx:124
308
+ #: src/routes/dash/posts.tsx:142
281
309
  #: src/theme/components/ActionButtons.tsx:72
282
310
  #: src/theme/components/PostList.tsx:46
283
311
  msgid "Edit"
@@ -288,33 +316,36 @@ msgstr "编辑"
288
316
  msgid "Edit Collection"
289
317
  msgstr "编辑集合"
290
318
 
319
+ #. @context: Page heading
320
+ #: src/routes/dash/navigation.tsx:105
321
+ msgid "Edit Link"
322
+ msgstr "编辑链接"
323
+
291
324
  #. @context: Edit page main heading
292
325
  #: src/routes/dash/pages.tsx:176
293
326
  msgid "Edit Page"
294
327
  msgstr "编辑页面"
295
328
 
296
329
  #. @context: Page heading
297
- #: src/routes/dash/posts.tsx:153
330
+ #: src/routes/dash/posts.tsx:185
298
331
  msgid "Edit Post"
299
332
  msgstr "编辑帖子"
300
333
 
301
334
  #. @context: Setup/signin form field - email
302
335
  #. @context: Setup/signin form field - email
303
- #: src/app.tsx:216
304
- #: src/app.tsx:350
336
+ #: src/app.tsx:219
337
+ #: src/app.tsx:353
305
338
  msgid "Email"
306
339
  msgstr "电子邮件"
307
340
 
308
341
  #. @context: Password reset page description
309
- #: src/app.tsx:475
342
+ #: src/app.tsx:460
310
343
  msgid "Enter your new password."
311
344
  msgstr "输入您的新密码。"
312
345
 
313
- #. @context: Post visibility badge
314
346
  #. @context: Post visibility badge - featured
315
347
  #. @context: Post visibility option
316
- #: src/routes/pages/home.tsx:75
317
- #: src/theme/components/PostForm.tsx:131
348
+ #: src/theme/components/PostForm.tsx:237
318
349
  #: src/theme/components/VisibilityBadge.tsx:26
319
350
  msgid "Featured"
320
351
  msgstr "精选"
@@ -345,7 +376,7 @@ msgstr "常规"
345
376
  #. @context: Post type label - image
346
377
  #. @context: Post type option
347
378
  #: src/routes/pages/archive.tsx:37
348
- #: src/theme/components/PostForm.tsx:57
379
+ #: src/theme/components/PostForm.tsx:76
349
380
  #: src/theme/components/TypeBadge.tsx:29
350
381
  msgid "Image"
351
382
  msgstr "图像"
@@ -361,10 +392,15 @@ msgid "Images are automatically optimized: resized to max 1920px, converted to W
361
392
  msgstr "图像会自动优化:调整大小至最大 1920px,转换为 WebP,并去除元数据。"
362
393
 
363
394
  #. @context: Password reset error heading
364
- #: src/app.tsx:540
395
+ #: src/app.tsx:525
365
396
  msgid "Invalid or Expired Link"
366
397
  msgstr "无效或过期的链接"
367
398
 
399
+ #. @context: Navigation link form field
400
+ #: src/routes/dash/navigation.tsx:126
401
+ msgid "Label"
402
+ msgstr "标签"
403
+
368
404
  #. @context: Settings form field
369
405
  #: src/routes/dash/settings.tsx:171
370
406
  msgid "Language"
@@ -374,7 +410,7 @@ msgstr "语言"
374
410
  #. @context: Post type label - link
375
411
  #. @context: Post type option
376
412
  #: src/routes/pages/archive.tsx:32
377
- #: src/theme/components/PostForm.tsx:51
413
+ #: src/theme/components/PostForm.tsx:70
378
414
  #: src/theme/components/TypeBadge.tsx:24
379
415
  msgid "Link"
380
416
  msgstr "链接"
@@ -384,11 +420,18 @@ msgstr "链接"
384
420
  msgid "Links"
385
421
  msgstr "链接"
386
422
 
423
+ #. @context: Button to load more posts in timeline
387
424
  #. @context: Pagination button - load more items
388
425
  #: src/theme/components/Pagination.tsx:103
426
+ #: src/theme/components/timeline/TimelineFeed.tsx:43
389
427
  msgid "Load more"
390
428
  msgstr "加载更多"
391
429
 
430
+ #. @context: Loading state for media picker
431
+ #: src/theme/components/PostForm.tsx:345
432
+ msgid "Loading..."
433
+ msgstr "加载中..."
434
+
392
435
  #. @context: Page path validation message
393
436
  #: src/theme/components/PageForm.tsx:76
394
437
  msgid "Lowercase letters, numbers, and hyphens only"
@@ -401,7 +444,9 @@ msgstr "Markdown"
401
444
 
402
445
  #. @context: Dashboard navigation - media library
403
446
  #. @context: Media main heading
447
+ #. @context: Post form field - media attachments
404
448
  #: src/routes/dash/media.tsx:138
449
+ #: src/theme/components/PostForm.tsx:121
405
450
  #: src/theme/layouts/DashLayout.tsx:105
406
451
  msgid "Media"
407
452
  msgstr "媒体"
@@ -416,6 +461,13 @@ msgstr "我的收藏"
416
461
  msgid "Name"
417
462
  msgstr "姓名"
418
463
 
464
+ #. @context: Dashboard heading
465
+ #. @context: Dashboard navigation - navigation links management
466
+ #: src/routes/dash/navigation.tsx:29
467
+ #: src/theme/layouts/DashLayout.tsx:133
468
+ msgid "Navigation"
469
+ msgstr "导航"
470
+
419
471
  #. @context: Help text with link
420
472
  #: src/routes/dash/index.tsx:78
421
473
  msgid "Need help? Visit the <0>documentation</0>"
@@ -430,6 +482,15 @@ msgstr "需要帮助吗?访问<0>文档</0>。"
430
482
  msgid "New Collection"
431
483
  msgstr "新收藏"
432
484
 
485
+ #. @context: Button to create new navigation link
486
+ #. @context: Button to create new navigation link
487
+ #. @context: Page heading
488
+ #: src/routes/dash/navigation.tsx:33
489
+ #: src/routes/dash/navigation.tsx:46
490
+ #: src/routes/dash/navigation.tsx:106
491
+ msgid "New Link"
492
+ msgstr "新链接"
493
+
433
494
  #. @context: Button to create new page
434
495
  #. @context: New page main heading
435
496
  #: src/routes/dash/pages.tsx:37
@@ -439,7 +500,7 @@ msgstr "新页面"
439
500
 
440
501
  #. @context: Password form field
441
502
  #. @context: Password reset form field
442
- #: src/app.tsx:489
503
+ #: src/app.tsx:474
443
504
  #: src/routes/dash/settings.tsx:417
444
505
  msgid "New Password"
445
506
  msgstr "新密码"
@@ -479,6 +540,11 @@ msgstr "尚未有任何收藏。"
479
540
  msgid "No media uploaded yet."
480
541
  msgstr "尚未上传任何媒体。"
481
542
 
543
+ #. @context: Empty state message
544
+ #: src/routes/dash/navigation.tsx:42
545
+ msgid "No navigation links configured."
546
+ msgstr "未配置导航链接。"
547
+
482
548
  #. @context: Empty state message when no pages exist
483
549
  #: src/routes/dash/pages.tsx:46
484
550
  msgid "No pages yet."
@@ -498,7 +564,7 @@ msgstr "此集合中没有帖子。"
498
564
 
499
565
  #. @context: Empty state message on home page
500
566
  #. @context: Empty state message when no posts exist
501
- #: src/routes/pages/home.tsx:44
567
+ #: src/routes/pages/home.tsx:42
502
568
  #: src/theme/components/PostList.tsx:25
503
569
  msgid "No posts yet."
504
570
  msgstr "还没有帖子。"
@@ -517,7 +583,7 @@ msgstr "未找到结果。"
517
583
  #. @context: Post type label - note
518
584
  #. @context: Post type option
519
585
  #: src/routes/pages/archive.tsx:27
520
- #: src/theme/components/PostForm.tsx:45
586
+ #: src/theme/components/PostForm.tsx:64
521
587
  #: src/theme/components/TypeBadge.tsx:19
522
588
  msgid "Note"
523
589
  msgstr "注意"
@@ -562,8 +628,8 @@ msgstr "页面"
562
628
 
563
629
  #. @context: Setup/signin form field - password
564
630
  #. @context: Setup/signin form field - password
565
- #: src/app.tsx:231
566
- #: src/app.tsx:359
631
+ #: src/app.tsx:234
632
+ #: src/app.tsx:362
567
633
  msgid "Password"
568
634
  msgstr "密码"
569
635
 
@@ -572,20 +638,25 @@ msgstr "密码"
572
638
  msgid "Path"
573
639
  msgstr "路径"
574
640
 
641
+ #. @context: Navigation URL help text
642
+ #: src/routes/dash/navigation.tsx:161
643
+ msgid "Path (e.g. /archive) or full URL (e.g. https://example.com)"
644
+ msgstr "路径(例如 /archive)或完整 URL(例如 https://example.com)"
645
+
575
646
  #. @context: Link to individual post in thread
576
647
  #. @context: Link to permanent URL of post
577
- #: src/routes/pages/post.tsx:41
648
+ #: src/routes/pages/post.tsx:52
578
649
  #: src/theme/components/ThreadView.tsx:68
579
650
  msgid "Permalink"
580
651
  msgstr "永久链接"
581
652
 
582
653
  #. @context: Default post title
583
- #: src/routes/dash/posts.tsx:113
654
+ #: src/routes/dash/posts.tsx:131
584
655
  msgid "Post"
585
656
  msgstr "帖子"
586
657
 
587
658
  #. @context: Post title placeholder
588
- #: src/theme/components/PostForm.tsx:74
659
+ #: src/theme/components/PostForm.tsx:93
589
660
  msgid "Post title..."
590
661
  msgstr "帖子标题..."
591
662
 
@@ -624,7 +695,7 @@ msgid "Profile"
624
695
  msgstr "个人资料"
625
696
 
626
697
  #. @context: Button to publish new post
627
- #: src/theme/components/PostForm.tsx:175
698
+ #: src/theme/components/PostForm.tsx:306
628
699
  msgid "Publish"
629
700
  msgstr "发布"
630
701
 
@@ -651,7 +722,7 @@ msgid "Quiet"
651
722
  msgstr "安静"
652
723
 
653
724
  #. @context: Post visibility option
654
- #: src/theme/components/PostForm.tsx:125
725
+ #: src/theme/components/PostForm.tsx:231
655
726
  msgid "Quiet (normal)"
656
727
  msgstr "安静(正常)"
657
728
 
@@ -659,7 +730,7 @@ msgstr "安静(正常)"
659
730
  #. @context: Post type label - quote
660
731
  #. @context: Post type option
661
732
  #: src/routes/pages/archive.tsx:33
662
- #: src/theme/components/PostForm.tsx:54
733
+ #: src/theme/components/PostForm.tsx:73
663
734
  #: src/theme/components/TypeBadge.tsx:25
664
735
  msgid "Quote"
665
736
  msgstr "引用"
@@ -677,17 +748,24 @@ msgid "Redirects"
677
748
  msgstr "重定向"
678
749
 
679
750
  #. @context: Button to remove post from collection
751
+ #. @context: Remove media attachment button
680
752
  #: src/routes/dash/collections.tsx:257
753
+ #: src/theme/components/PostForm.tsx:161
681
754
  msgid "Remove"
682
755
  msgstr "移除"
683
756
 
684
757
  #. @context: Password reset form submit button
685
758
  #. @context: Password reset page heading
686
- #: src/app.tsx:469
687
- #: src/app.tsx:520
759
+ #: src/app.tsx:454
760
+ #: src/app.tsx:505
688
761
  msgid "Reset Password"
689
762
  msgstr "重置密码"
690
763
 
764
+ #. @context: Button to save edited navigation link
765
+ #: src/routes/dash/navigation.tsx:172
766
+ msgid "Save Changes"
767
+ msgstr "保存更改"
768
+
691
769
  #. @context: Button to save profile
692
770
  #: src/routes/dash/settings.tsx:378
693
771
  msgid "Save Profile"
@@ -710,6 +788,11 @@ msgstr "搜索"
710
788
  msgid "Search posts..."
711
789
  msgstr "搜索帖子..."
712
790
 
791
+ #. @context: Media picker dialog title
792
+ #: src/theme/components/PostForm.tsx:324
793
+ msgid "Select Media"
794
+ msgstr "选择媒体"
795
+
713
796
  #. @context: Dashboard heading
714
797
  #. @context: Dashboard heading
715
798
  #. @context: Dashboard heading
@@ -717,14 +800,20 @@ msgstr "搜索帖子..."
717
800
  #: src/routes/dash/settings.tsx:118
718
801
  #: src/routes/dash/settings.tsx:290
719
802
  #: src/routes/dash/settings.tsx:341
720
- #: src/theme/layouts/DashLayout.tsx:133
803
+ #: src/theme/layouts/DashLayout.tsx:143
721
804
  msgid "Settings"
722
805
  msgstr "设置"
723
806
 
807
+ #. @context: Link to show remaining thread replies
808
+ #. placeholder {0}: remainingCount === 1 ? "reply" : "replies"
809
+ #: src/theme/components/timeline/ThreadPreview.tsx:38
810
+ msgid "Show {remainingCount} more {0}"
811
+ msgstr "显示 {remainingCount} 个更多 {0}"
812
+
724
813
  #. @context: Sign in form submit button
725
814
  #. @context: Sign in page heading
726
- #: src/app.tsx:327
727
- #: src/app.tsx:372
815
+ #: src/app.tsx:330
816
+ #: src/app.tsx:375
728
817
  msgid "Sign In"
729
818
  msgstr "登录"
730
819
 
@@ -750,8 +839,13 @@ msgstr "网站名称"
750
839
  msgid "Slug"
751
840
  msgstr "缩略名"
752
841
 
842
+ #. @context: Post form field - name of the source website or author
843
+ #: src/theme/components/PostForm.tsx:204
844
+ msgid "Source Name (optional)"
845
+ msgstr "来源名称(可选)"
846
+
753
847
  #. @context: Post form field
754
- #: src/theme/components/PostForm.tsx:102
848
+ #: src/theme/components/PostForm.tsx:188
755
849
  msgid "Source URL (optional)"
756
850
  msgstr "源网址(可选)"
757
851
 
@@ -776,7 +870,7 @@ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
776
870
  msgstr "此页面的 URL 路径。使用小写字母、数字和连字符。"
777
871
 
778
872
  #. @context: Password reset error description
779
- #: src/app.tsx:548
873
+ #: src/app.tsx:533
780
874
  msgid "This password reset link is invalid or has expired. Please generate a new one."
781
875
  msgstr "此密码重置链接无效或已过期。请生成一个新的链接。"
782
876
 
@@ -810,7 +904,7 @@ msgid "Title"
810
904
  msgstr "标题"
811
905
 
812
906
  #. @context: Post form field
813
- #: src/theme/components/PostForm.tsx:65
907
+ #: src/theme/components/PostForm.tsx:84
814
908
  msgid "Title (optional)"
815
909
  msgstr "标题(可选)"
816
910
 
@@ -822,13 +916,13 @@ msgstr "到路径"
822
916
  #. @context: Post form field - post type
823
917
  #. @context: Redirect form field
824
918
  #: src/routes/dash/redirects.tsx:141
825
- #: src/theme/components/PostForm.tsx:38
919
+ #: src/theme/components/PostForm.tsx:57
826
920
  msgid "Type"
827
921
  msgstr "类型"
828
922
 
829
923
  #. @context: Post visibility badge - unlisted
830
924
  #. @context: Post visibility option
831
- #: src/theme/components/PostForm.tsx:137
925
+ #: src/theme/components/PostForm.tsx:243
832
926
  #: src/theme/components/VisibilityBadge.tsx:34
833
927
  msgid "Unlisted"
834
928
  msgstr "未列出"
@@ -836,12 +930,12 @@ msgstr "未列出"
836
930
  #. @context: Default title for untitled page
837
931
  #. @context: Default title for untitled post
838
932
  #: src/routes/dash/pages.tsx:91
839
- #: src/theme/components/PostList.tsx:71
933
+ #: src/theme/components/PostList.tsx:78
840
934
  msgid "Untitled"
841
935
  msgstr "无标题"
842
936
 
843
937
  #. @context: Button to update existing post
844
- #: src/theme/components/PostForm.tsx:171
938
+ #: src/theme/components/PostForm.tsx:302
845
939
  msgid "Update"
846
940
  msgstr "更新"
847
941
 
@@ -871,7 +965,9 @@ msgid "Uploading..."
871
965
  msgstr "上传中..."
872
966
 
873
967
  #. @context: Media detail section - URL
968
+ #. @context: Navigation link form field
874
969
  #: src/routes/dash/media.tsx:297
970
+ #: src/routes/dash/navigation.tsx:148
875
971
  msgid "URL"
876
972
  msgstr "网址"
877
973
 
@@ -896,34 +992,29 @@ msgstr "使用此 URL 将媒体嵌入到您的帖子中。"
896
992
  #: src/routes/dash/collections.tsx:215
897
993
  #: src/routes/dash/pages.tsx:73
898
994
  #: src/routes/dash/pages.tsx:143
899
- #: src/routes/dash/posts.tsx:129
995
+ #: src/routes/dash/posts.tsx:147
900
996
  #: src/theme/components/ActionButtons.tsx:76
901
997
  #: src/theme/components/PostList.tsx:51
902
998
  msgid "View"
903
999
  msgstr "查看"
904
1000
 
905
- #. @context: Link to view all posts on archive page
906
- #: src/routes/pages/home.tsx:93
907
- msgid "View all posts →"
908
- msgstr "查看所有帖子 →"
909
-
910
1001
  #. @context: Dashboard header link to view the public site
911
1002
  #: src/theme/layouts/DashLayout.tsx:53
912
1003
  msgid "View Site"
913
1004
  msgstr "查看网站"
914
1005
 
915
1006
  #. @context: Post form field
916
- #: src/theme/components/PostForm.tsx:118
1007
+ #: src/theme/components/PostForm.tsx:224
917
1008
  msgid "Visibility"
918
1009
  msgstr "可见性"
919
1010
 
920
1011
  #. @context: Setup page welcome heading
921
- #: src/app.tsx:181
1012
+ #: src/app.tsx:184
922
1013
  msgid "Welcome to Jant"
923
1014
  msgstr "欢迎来到Jant"
924
1015
 
925
1016
  #. @context: Post content placeholder
926
- #: src/theme/components/PostForm.tsx:89
1017
+ #: src/theme/components/PostForm.tsx:108
927
1018
  msgid "What's on your mind?"
928
1019
  msgstr "你在想什么?"
929
1020
 
@@ -933,6 +1024,6 @@ msgid "What's this collection about?"
933
1024
  msgstr "这个系列是关于什么的?"
934
1025
 
935
1026
  #. @context: Setup form field - user name
936
- #: src/app.tsx:201
1027
+ #: src/app.tsx:204
937
1028
  msgid "Your Name"
938
1029
  msgstr "您的姓名"