@jant/core 0.6.16 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/README.md +11 -11
  2. package/bin/commands/assets/upload.js +192 -15
  3. package/bin/commands/import-site.js +60 -4
  4. package/bin/commands/reset-password.js +21 -8
  5. package/bin/commands/site/snapshot/export.js +1 -1
  6. package/bin/commands/site/snapshot/import.js +1 -1
  7. package/bin/lib/d1-query.js +5 -16
  8. package/bin/lib/node-env.js +40 -4
  9. package/bin/lib/site-selection.js +85 -29
  10. package/bin/lib/wrangler-cli.js +28 -2
  11. package/bin/lib/wrangler-json.js +35 -0
  12. package/dist/{app-C7_4oab9.js → app-K_Aa1MMn.js} +52476 -13330
  13. package/dist/client/.vite/manifest.json +255 -90
  14. package/dist/client/_assets/chunks/confirm-D7GrwsCN.js +45 -0
  15. package/dist/client/_assets/chunks/create-editor-CD3FhrOB.js +257 -0
  16. package/dist/client/_assets/chunks/{native-DpcrFAPh.js → emoji-mart-C4RpRKcU.js} +716 -1
  17. package/dist/client/_assets/chunks/footnote-rail-CmeoVtnU.js +1 -0
  18. package/dist/client/_assets/chunks/heic-to-CuP2Qlsw.js +1 -0
  19. package/dist/client/_assets/chunks/jant-locale-picker-DL6mIOT5.js +69 -0
  20. package/dist/client/_assets/chunks/lit-DW8VmJAT.js +2 -0
  21. package/dist/client/_assets/chunks/mediabunny-DRaCQ1r-.js +31 -0
  22. package/dist/client/_assets/chunks/rolldown-runtime-hePW80VL.js +1 -0
  23. package/dist/client/_assets/chunks/settings-paths-BcdySNx6.js +84 -0
  24. package/dist/client/_assets/chunks/site-header-nav-DzXsFk05.js +1 -0
  25. package/dist/client/_assets/chunks/slug-format-CRXO1AL5.js +1 -0
  26. package/dist/client/_assets/chunks/slugify-373citbs.js +1 -0
  27. package/dist/client/_assets/chunks/sortable-list-CgaL2jCs.js +2 -0
  28. package/dist/client/_assets/chunks/types-D5iF3H1a.js +1 -0
  29. package/dist/client/_assets/chunks/unsafe-html-B5ZEXaxg.js +1 -0
  30. package/dist/client/_assets/chunks/unsafe-svg-0QCkP0vZ.js +2 -0
  31. package/dist/client/_assets/client-GiYENVw8.css +2 -0
  32. package/dist/client/_assets/client-VnFxJN7G.js +295 -0
  33. package/dist/client/_assets/client-auth-k8gJ6QJj.js +828 -0
  34. package/dist/client/_assets/client-author-DQ8R-8KR.css +2 -0
  35. package/dist/client/_assets/client-compose-B_kDtWkW.js +2004 -0
  36. package/dist/client/_assets/client-manage-M90aSTOk.js +2170 -0
  37. package/dist/client/_assets/client-settings-DfYs9n1F.js +1112 -0
  38. package/dist/{export-Dl5KCiEs.js → github-sync-BPAvT999.js} +2254 -107
  39. package/dist/index.js +2 -5
  40. package/dist/node.js +5 -7
  41. package/package.json +3 -3
  42. package/src/__tests__/auth-session-freshness.test.ts +57 -0
  43. package/src/__tests__/basecoat-variants.test.ts +121 -0
  44. package/src/__tests__/bin/assets-upload.test.ts +68 -0
  45. package/src/__tests__/export-hugo-build.test.ts +260 -0
  46. package/src/__tests__/export-service.test.ts +231 -0
  47. package/src/__tests__/helpers/component-css.ts +91 -0
  48. package/src/__tests__/helpers/db.ts +33 -0
  49. package/src/__tests__/helpers/export-fixtures.ts +3 -0
  50. package/src/__tests__/stylesheet-audience.test.ts +159 -0
  51. package/src/__tests__/stylesheet-breakpoints.test.ts +183 -0
  52. package/src/app.tsx +71 -16
  53. package/src/auth.ts +18 -1
  54. package/src/client/__tests__/collection-page-actions.test.ts +51 -2
  55. package/src/client/__tests__/compose-bridge-image-upload.test.ts +196 -0
  56. package/src/client/__tests__/compose-bridge-video-poster.test.ts +159 -0
  57. package/src/client/__tests__/compose-bridge.test.ts +272 -0
  58. package/src/client/__tests__/compose-launch.test.ts +62 -1
  59. package/src/client/__tests__/compose-shortcuts.test.ts +38 -9
  60. package/src/client/__tests__/compose-triggers.test.ts +90 -0
  61. package/src/client/__tests__/copy-field.test.ts +162 -0
  62. package/src/client/__tests__/custom-url-menu.test.ts +127 -6
  63. package/src/client/__tests__/image-processor.test.ts +324 -2
  64. package/src/client/__tests__/lazy-entries.test.ts +92 -0
  65. package/src/client/__tests__/media-scroll-hint.test.ts +155 -0
  66. package/src/client/__tests__/runtime-paths.test.ts +84 -0
  67. package/src/client/__tests__/smart-collection-page-actions.test.ts +158 -0
  68. package/src/client/__tests__/toast.test.ts +23 -0
  69. package/src/client/__tests__/video-processor-probe.test.ts +175 -0
  70. package/src/client/__tests__/video-processor.test.ts +181 -0
  71. package/src/client/audio-processor.ts +24 -15
  72. package/src/client/audio-waveform.ts +49 -0
  73. package/src/client/collection-dialog-host.ts +72 -0
  74. package/src/client/collection-navigation.ts +51 -16
  75. package/src/client/collection-page-actions.ts +26 -0
  76. package/src/client/components/__tests__/jant-collection-dialog.test.ts +329 -0
  77. package/src/client/components/__tests__/jant-collection-directory.test.ts +274 -10
  78. package/src/client/components/__tests__/jant-collection-form.test.ts +59 -178
  79. package/src/client/components/__tests__/jant-command-palette.test.ts +28 -0
  80. package/src/client/components/__tests__/jant-compose-dialog-draft-storage.test.ts +340 -0
  81. package/src/client/components/__tests__/jant-compose-dialog.test.ts +1250 -53
  82. package/src/client/components/__tests__/jant-compose-editor.test.ts +544 -40
  83. package/src/client/components/__tests__/jant-compose-fullscreen.test.ts +0 -1
  84. package/src/client/components/__tests__/jant-locale-picker.test.ts +207 -0
  85. package/src/client/components/__tests__/jant-nav-manager.test.ts +234 -15
  86. package/src/client/components/__tests__/jant-post-menu.test.ts +413 -2
  87. package/src/client/components/__tests__/jant-post-picker.test.ts +197 -0
  88. package/src/client/components/__tests__/jant-settings-avatar.test.ts +15 -12
  89. package/src/client/components/__tests__/jant-settings-general.test.ts +541 -172
  90. package/src/client/components/__tests__/jant-settings-language.test.ts +851 -0
  91. package/src/client/components/__tests__/jant-smart-collection-dialog.test.ts +665 -0
  92. package/src/client/components/collection-dialog-types.ts +49 -0
  93. package/src/client/components/collection-manager-types.ts +32 -1
  94. package/src/client/components/collection-types.ts +1 -15
  95. package/src/client/components/compose-types.ts +75 -1
  96. package/src/client/components/jant-collection-dialog.ts +722 -0
  97. package/src/client/components/jant-collection-directory.ts +567 -182
  98. package/src/client/components/jant-collection-form.ts +53 -232
  99. package/src/client/components/jant-command-palette.ts +100 -49
  100. package/src/client/components/jant-compose-dialog.ts +1486 -707
  101. package/src/client/components/jant-compose-editor.ts +673 -336
  102. package/src/client/components/jant-compose-fullscreen.ts +51 -43
  103. package/src/client/components/jant-config-editor.ts +65 -53
  104. package/src/client/components/jant-confirm-dialog.ts +13 -11
  105. package/src/client/components/jant-locale-picker.ts +418 -0
  106. package/src/client/components/jant-media-lightbox.ts +146 -136
  107. package/src/client/components/jant-nav-manager.ts +690 -366
  108. package/src/client/components/jant-post-menu.ts +1086 -282
  109. package/src/client/components/jant-post-picker.ts +324 -0
  110. package/src/client/components/jant-repo-picker.ts +138 -106
  111. package/src/client/components/jant-settings-avatar.ts +31 -27
  112. package/src/client/components/jant-settings-general.ts +617 -543
  113. package/src/client/components/jant-settings-language.ts +1087 -0
  114. package/src/client/components/jant-smart-collection-dialog.ts +1021 -0
  115. package/src/client/components/jant-text-preview.ts +94 -86
  116. package/src/client/components/nav-manager-types.ts +62 -1
  117. package/src/client/components/settings-types.ts +14 -29
  118. package/src/client/components/smart-collection-conditions.ts +285 -0
  119. package/src/client/components/smart-collection-dialog-types.ts +68 -0
  120. package/src/client/compose-bridge.ts +214 -141
  121. package/src/client/compose-launch.ts +76 -2
  122. package/src/client/compose-shortcuts.ts +6 -8
  123. package/src/client/compose-triggers.ts +50 -0
  124. package/src/client/copy-field.ts +108 -0
  125. package/src/client/custom-url-menu.ts +60 -4
  126. package/src/client/icons.ts +14 -0
  127. package/src/client/image-plan.ts +165 -0
  128. package/src/client/image-processor.ts +195 -117
  129. package/src/client/image-worker-client.ts +45 -0
  130. package/src/client/image-worker.ts +135 -0
  131. package/src/client/lazy-entries.ts +95 -0
  132. package/src/client/lazy-slugify.ts +2 -2
  133. package/src/client/media-scroll-hint.ts +43 -2
  134. package/src/client/mediabunny.ts +29 -0
  135. package/src/client/post-picker.ts +41 -0
  136. package/src/client/runtime-paths.ts +74 -1
  137. package/src/client/settings-bridge.ts +4 -10
  138. package/src/client/site-header-nav.js +18 -6
  139. package/src/client/smart-collection-dialog-host.ts +116 -0
  140. package/src/client/smart-collection-page-actions.ts +208 -0
  141. package/src/client/tiptap/__tests__/bubble-menu.test.ts +110 -0
  142. package/src/client/tiptap/__tests__/floating-position.test.ts +136 -1
  143. package/src/client/tiptap/__tests__/inline-image-upload.test.ts +37 -0
  144. package/src/client/tiptap/bubble-menu.ts +47 -16
  145. package/src/client/tiptap/floating-position.ts +216 -2
  146. package/src/client/tiptap/inline-image-upload.ts +7 -3
  147. package/src/client/tiptap/link-toolbar.ts +22 -9
  148. package/src/client/toast.ts +13 -0
  149. package/src/client/types/vite-worker.d.ts +12 -0
  150. package/src/client/upload-with-metadata.ts +3 -13
  151. package/src/client/video-processor.ts +351 -107
  152. package/src/client-auth.ts +14 -31
  153. package/src/client-compose.ts +19 -0
  154. package/src/client-manage.ts +13 -0
  155. package/src/client-settings.ts +14 -0
  156. package/src/client-site.ts +10 -3
  157. package/src/client.ts +4 -0
  158. package/src/db/__tests__/backfill-nav-label-mirrors.test.ts +149 -0
  159. package/src/db/__tests__/schema-enum-sources.test.ts +33 -0
  160. package/src/db/__tests__/smart-collection-placement.test.ts +402 -0
  161. package/src/db/backfills/0006_clear_mirrored_page_nav_labels.sql +31 -0
  162. package/src/db/migrations/0032_married_tomas.sql +3 -0
  163. package/src/db/migrations/0033_busy_johnny_storm.sql +198 -0
  164. package/src/db/migrations/0034_cheerful_rumiko_fujikawa.sql +35 -0
  165. package/src/db/migrations/meta/0032_snapshot.json +2582 -0
  166. package/src/db/migrations/meta/0033_snapshot.json +2816 -0
  167. package/src/db/migrations/meta/0034_snapshot.json +2816 -0
  168. package/src/db/migrations/meta/_journal.json +21 -0
  169. package/src/db/migrations/pg/0030_abandoned_nighthawk.sql +3 -0
  170. package/src/db/migrations/pg/0031_strong_ultimatum.sql +128 -0
  171. package/src/db/migrations/pg/0032_furry_multiple_man.sql +6 -0
  172. package/src/db/migrations/pg/meta/0030_snapshot.json +3329 -0
  173. package/src/db/migrations/pg/meta/0031_snapshot.json +3660 -0
  174. package/src/db/migrations/pg/meta/0032_snapshot.json +3660 -0
  175. package/src/db/migrations/pg/meta/_journal.json +21 -0
  176. package/src/db/pg/schema.ts +195 -27
  177. package/src/db/post-visibility.ts +117 -0
  178. package/src/db/schema.ts +222 -27
  179. package/src/i18n/__tests__/detect.test.ts +26 -81
  180. package/src/i18n/__tests__/supported-locales.test.ts +83 -0
  181. package/src/i18n/context.tsx +12 -2
  182. package/src/i18n/detect.ts +7 -66
  183. package/src/i18n/locales/glossary.zh-Hans.yml +44 -4
  184. package/src/i18n/locales/glossary.zh-Hant.yml +44 -4
  185. package/src/i18n/locales/public/en.po +490 -158
  186. package/src/i18n/locales/public/en.ts +1 -1
  187. package/src/i18n/locales/public/zh-Hans.po +487 -155
  188. package/src/i18n/locales/public/zh-Hans.ts +1 -1
  189. package/src/i18n/locales/public/zh-Hant.po +487 -155
  190. package/src/i18n/locales/public/zh-Hant.ts +1 -1
  191. package/src/i18n/locales/settings/en.po +551 -69
  192. package/src/i18n/locales/settings/en.ts +1 -1
  193. package/src/i18n/locales/settings/zh-Hans.po +597 -115
  194. package/src/i18n/locales/settings/zh-Hans.ts +1 -1
  195. package/src/i18n/locales/settings/zh-Hant.po +610 -128
  196. package/src/i18n/locales/settings/zh-Hant.ts +1 -1
  197. package/src/i18n/locales.ts +94 -0
  198. package/src/i18n/middleware.ts +12 -2
  199. package/src/i18n/supported-locales.ts +80 -0
  200. package/src/lib/__tests__/api-settings.test.ts +11 -2
  201. package/src/lib/__tests__/asset-path.test.ts +92 -0
  202. package/src/lib/__tests__/deferred.test.ts +90 -0
  203. package/src/lib/__tests__/discover-ping.test.ts +89 -0
  204. package/src/lib/__tests__/discover.test.ts +410 -0
  205. package/src/lib/__tests__/feed-policy.test.ts +26 -0
  206. package/src/lib/__tests__/feed.test.ts +1526 -15
  207. package/src/lib/__tests__/filter-dimensions.test.ts +341 -0
  208. package/src/lib/__tests__/hosted-signin.test.ts +1 -1
  209. package/src/lib/__tests__/http-cache.test.ts +162 -0
  210. package/src/lib/__tests__/jant-docs-dev.test.ts +21 -0
  211. package/src/lib/__tests__/jant-docs.test.ts +23 -0
  212. package/src/lib/__tests__/lang-detect.test.ts +231 -0
  213. package/src/lib/__tests__/media-helpers.test.ts +81 -0
  214. package/src/lib/__tests__/navigation.test.ts +135 -1
  215. package/src/lib/__tests__/resolve-config.test.ts +64 -3
  216. package/src/lib/__tests__/schemas.test.ts +42 -4
  217. package/src/lib/__tests__/site-unavailable-page.test.ts +25 -0
  218. package/src/lib/__tests__/slug.test.ts +70 -0
  219. package/src/lib/__tests__/slugify.test.ts +85 -0
  220. package/src/lib/__tests__/storage.test.ts +32 -0
  221. package/src/lib/__tests__/thread-fold.test.ts +113 -0
  222. package/src/lib/__tests__/upload-sideload.test.ts +14 -0
  223. package/src/lib/__tests__/url-fetch.test.ts +1 -2
  224. package/src/lib/__tests__/url.test.ts +78 -72
  225. package/src/lib/__tests__/view-language.test.ts +413 -0
  226. package/src/lib/__tests__/worker-response-cache.test.ts +90 -0
  227. package/src/lib/address.ts +57 -0
  228. package/src/lib/api-posts.ts +12 -0
  229. package/src/lib/asset-path.ts +98 -1
  230. package/src/lib/build-env.ts +16 -0
  231. package/src/lib/collection-groups.ts +5 -1
  232. package/src/lib/collection-paths.ts +3 -10
  233. package/src/lib/constants.ts +28 -3
  234. package/src/lib/copy-field.ts +36 -0
  235. package/src/lib/crypto.ts +40 -0
  236. package/src/lib/csp-builder.ts +2 -1
  237. package/src/lib/deferred.ts +79 -0
  238. package/src/lib/discover-ping.ts +141 -0
  239. package/src/lib/discover.ts +437 -0
  240. package/src/lib/env.ts +134 -0
  241. package/src/lib/errors.ts +33 -0
  242. package/src/lib/feed-policy.ts +236 -2
  243. package/src/lib/feed.ts +926 -73
  244. package/src/lib/filter-dimensions.ts +1349 -0
  245. package/src/lib/github-sync-site-config.ts +3 -0
  246. package/src/lib/hosted-signin.ts +1 -1
  247. package/src/lib/http-cache.ts +148 -0
  248. package/src/lib/hugo-markdown.ts +16 -0
  249. package/src/lib/icons.ts +9 -2
  250. package/src/lib/ids.ts +3 -0
  251. package/src/lib/jant-docs.ts +42 -0
  252. package/src/lib/lang-detect.ts +308 -0
  253. package/src/lib/media-helpers.ts +13 -1
  254. package/src/lib/navigation.ts +78 -11
  255. package/src/lib/pagination.ts +28 -24
  256. package/src/lib/per-language-surfaces.ts +67 -0
  257. package/src/lib/post-meta.ts +19 -0
  258. package/src/lib/render.tsx +55 -7
  259. package/src/lib/resolve-config.ts +53 -5
  260. package/src/lib/schemas.ts +201 -10
  261. package/src/lib/site-header-fragment.tsx +2 -1
  262. package/src/lib/site-unavailable-page.ts +47 -0
  263. package/src/lib/slug.ts +51 -7
  264. package/src/lib/slugify.ts +113 -0
  265. package/src/lib/startup-config.ts +4 -6
  266. package/src/lib/storage.ts +7 -0
  267. package/src/lib/summary.ts +50 -0
  268. package/src/lib/thread-fold.ts +161 -0
  269. package/src/lib/time.ts +32 -0
  270. package/src/lib/timeline.ts +42 -1
  271. package/src/lib/tiptap-render.ts +1 -2
  272. package/src/lib/upload.ts +16 -13
  273. package/src/lib/url.ts +139 -86
  274. package/src/lib/version.ts +10 -8
  275. package/src/lib/view-language.ts +436 -0
  276. package/src/lib/view.ts +51 -23
  277. package/src/lib/viewer-context.ts +62 -0
  278. package/src/middleware/__tests__/auth.test.ts +70 -2
  279. package/src/middleware/__tests__/cache-control.test.ts +71 -3
  280. package/src/middleware/__tests__/onboarding.test.ts +76 -5
  281. package/src/middleware/__tests__/secure-headers.test.ts +1 -1
  282. package/src/middleware/__tests__/session.test.ts +181 -33
  283. package/src/middleware/auth.ts +50 -31
  284. package/src/middleware/cache-control.ts +75 -10
  285. package/src/middleware/config.ts +6 -6
  286. package/src/middleware/error-handler.ts +12 -0
  287. package/src/middleware/onboarding.ts +32 -10
  288. package/src/middleware/secure-headers.ts +1 -1
  289. package/src/middleware/session.ts +96 -8
  290. package/src/node/__tests__/cli-migrate.test.ts +21 -19
  291. package/src/node/__tests__/cli-reset-password.test.ts +81 -8
  292. package/src/node/__tests__/cli-runtime-target.test.ts +48 -1
  293. package/src/node/__tests__/cli-site-selection.test.ts +128 -38
  294. package/src/node/__tests__/runtime.test.ts +37 -0
  295. package/src/node/index.ts +1 -0
  296. package/src/preset.css +76 -22
  297. package/src/routes/__tests__/feed-validator.test.ts +156 -0
  298. package/src/routes/api/__tests__/collections.test.ts +114 -0
  299. package/src/routes/api/__tests__/discover.test.ts +222 -0
  300. package/src/routes/api/__tests__/nav-items.test.ts +212 -2
  301. package/src/routes/api/__tests__/post-translations.test.ts +829 -0
  302. package/src/routes/api/__tests__/settings.test.ts +24 -3
  303. package/src/routes/api/__tests__/telegram.test.ts +6 -5
  304. package/src/routes/api/collections.ts +49 -6
  305. package/src/routes/api/custom-urls.ts +0 -1
  306. package/src/routes/api/discover.ts +95 -0
  307. package/src/routes/api/export.ts +3 -0
  308. package/src/routes/api/internal/__tests__/sites.test.ts +42 -2
  309. package/src/routes/api/nav-items.ts +55 -8
  310. package/src/routes/api/posts.ts +159 -0
  311. package/src/routes/api/public/__tests__/archive.test.ts +111 -0
  312. package/src/routes/api/public/archive.ts +77 -81
  313. package/src/routes/api/public/posts.ts +23 -6
  314. package/src/routes/api/smart-collections.ts +132 -0
  315. package/src/routes/api/telegram.ts +2 -40
  316. package/src/routes/api/uploads.ts +1 -2
  317. package/src/routes/auth/__tests__/setup-auth.test.ts +137 -0
  318. package/src/routes/auth/__tests__/setup-discover.test.ts +204 -0
  319. package/src/routes/auth/__tests__/setup-flow.test.ts +270 -0
  320. package/src/routes/auth/__tests__/setup-page.test.tsx +329 -0
  321. package/src/routes/auth/__tests__/setup-steps.test.ts +310 -0
  322. package/src/routes/auth/__tests__/setup.test.ts +278 -26
  323. package/src/routes/auth/__tests__/signin.test.ts +135 -0
  324. package/src/routes/auth/setup.tsx +934 -186
  325. package/src/routes/auth/signin.tsx +10 -8
  326. package/src/routes/compose.tsx +5 -0
  327. package/src/routes/dash/__tests__/custom-urls-archive.test.ts +44 -0
  328. package/src/routes/dash/__tests__/custom-urls-page.test.ts +49 -0
  329. package/src/routes/dash/__tests__/delete-account.test.ts +106 -0
  330. package/src/routes/dash/__tests__/settings-discover.test.ts +213 -0
  331. package/src/routes/dash/custom-urls.tsx +1 -37
  332. package/src/routes/dash/settings.tsx +502 -41
  333. package/src/routes/discover-announce.ts +96 -0
  334. package/src/routes/feed/__tests__/feed.test.ts +165 -2
  335. package/src/routes/feed/feed.ts +69 -40
  336. package/src/routes/feed/sitemap.ts +95 -11
  337. package/src/routes/pages/__tests__/archive-indexing.test.ts +200 -0
  338. package/src/routes/pages/__tests__/archive-params.test.ts +370 -6
  339. package/src/routes/pages/__tests__/collection-routing.test.ts +16 -0
  340. package/src/routes/pages/__tests__/collections-feed-links.test.ts +72 -0
  341. package/src/routes/pages/__tests__/collections.test.ts +9 -3
  342. package/src/routes/pages/__tests__/custom-archive-url.test.ts +119 -0
  343. package/src/routes/pages/__tests__/feed-autodiscovery.test.ts +148 -0
  344. package/src/routes/pages/__tests__/language-routing.test.ts +679 -0
  345. package/src/routes/pages/__tests__/post-preview-partial.test.ts +96 -0
  346. package/src/routes/pages/__tests__/smart-collection.test.ts +298 -0
  347. package/src/routes/pages/__tests__/subscribe.test.ts +248 -0
  348. package/src/routes/pages/archive.tsx +471 -369
  349. package/src/routes/pages/collection.tsx +94 -96
  350. package/src/routes/pages/collections.tsx +38 -50
  351. package/src/routes/pages/featured.tsx +32 -13
  352. package/src/routes/pages/home.tsx +25 -6
  353. package/src/routes/pages/language.tsx +113 -0
  354. package/src/routes/pages/latest.tsx +26 -16
  355. package/src/routes/pages/new.tsx +3 -0
  356. package/src/routes/pages/page.tsx +178 -17
  357. package/src/routes/pages/partials.tsx +41 -0
  358. package/src/routes/pages/search.tsx +18 -3
  359. package/src/routes/pages/smart-collection.tsx +340 -0
  360. package/src/routes/pages/subscribe.tsx +182 -0
  361. package/src/runtime/__tests__/index.test.ts +19 -0
  362. package/src/runtime/__tests__/node.test.ts +129 -4
  363. package/src/runtime/cloudflare.ts +21 -2
  364. package/src/runtime/index.ts +27 -1
  365. package/src/runtime/node.ts +18 -1
  366. package/src/runtime/site.ts +95 -24
  367. package/src/services/__tests__/auth.test.ts +116 -7
  368. package/src/services/__tests__/collection.test.ts +108 -4
  369. package/src/services/__tests__/language.test.ts +495 -0
  370. package/src/services/__tests__/navigation.test.ts +213 -10
  371. package/src/services/__tests__/path.test.ts +180 -0
  372. package/src/services/__tests__/post-language.test.ts +830 -0
  373. package/src/services/__tests__/post.test.ts +46 -9
  374. package/src/services/__tests__/settings.test.ts +228 -17
  375. package/src/services/__tests__/site-admin.test.ts +5 -5
  376. package/src/services/__tests__/smart-collection.test.ts +651 -0
  377. package/src/services/about-page.ts +22 -1
  378. package/src/services/auth.ts +51 -49
  379. package/src/services/bootstrap.ts +188 -38
  380. package/src/services/collection-directory-position.ts +76 -0
  381. package/src/services/collection.ts +331 -46
  382. package/src/services/custom-url.ts +27 -22
  383. package/src/services/export-theme/assets/client-site.css +1 -1
  384. package/src/services/export-theme/assets/client-site.js +123 -123
  385. package/src/services/export-theme/layouts/_default/rss.xml +77 -1
  386. package/src/services/export-theme/layouts/partials/feed-post-content.xml +105 -2
  387. package/src/services/export-theme/layouts/partials/media-gallery.html +35 -21
  388. package/src/services/export-theme/layouts/partials/pagination.html +14 -13
  389. package/src/services/export-theme/layouts/partials/post-card.html +8 -4
  390. package/src/services/export-theme/layouts/partials/reply.html +2 -1
  391. package/src/services/export-theme/layouts/partials/thread-preview.html +40 -30
  392. package/src/services/export-theme/styles/main.css +13 -1
  393. package/src/services/export.ts +278 -19
  394. package/src/services/index.ts +34 -3
  395. package/src/services/language.ts +412 -0
  396. package/src/services/mcp.ts +3 -1
  397. package/src/services/media.ts +14 -6
  398. package/src/services/navigation.ts +429 -67
  399. package/src/services/path.ts +221 -6
  400. package/src/services/post.ts +1021 -152
  401. package/src/services/search.ts +39 -2
  402. package/src/services/settings.ts +238 -43
  403. package/src/services/site-admin.ts +24 -7
  404. package/src/services/site.ts +77 -1
  405. package/src/services/smart-collection.ts +636 -0
  406. package/src/services/telegram.ts +20 -22
  407. package/src/services/upload-session.ts +1 -3
  408. package/src/style-author.css +27 -0
  409. package/src/styles/components-author.css +1622 -0
  410. package/src/styles/components.css +24 -1571
  411. package/src/styles/site-media.css +16 -2
  412. package/src/styles/tokens.css +82 -12
  413. package/src/styles/ui-author.css +7602 -0
  414. package/src/styles/ui.css +1087 -7219
  415. package/src/types/app-context.ts +7 -0
  416. package/src/types/bindings.ts +3 -0
  417. package/src/types/config.ts +94 -15
  418. package/src/types/constants.ts +188 -16
  419. package/src/types/entities.ts +87 -1
  420. package/src/types/operations.ts +64 -2
  421. package/src/types/props.ts +157 -31
  422. package/src/types/views.ts +55 -1
  423. package/src/ui/__tests__/font-themes.test.ts +52 -12
  424. package/src/ui/compose/ComposeDialog.tsx +201 -7
  425. package/src/ui/compose/ComposePrompt.tsx +1 -5
  426. package/src/ui/compose/__tests__/ComposeDialog.test.tsx +125 -0
  427. package/src/ui/dash/appearance/AdvancedContent.tsx +2 -2
  428. package/src/ui/dash/appearance/CodeInjectionContent.tsx +12 -16
  429. package/src/ui/dash/appearance/NavigationContent.tsx +117 -16
  430. package/src/ui/dash/appearance/__tests__/NavigationContent.test.tsx +33 -11
  431. package/src/ui/dash/appearance/__tests__/system-nav-descriptions.test.ts +44 -0
  432. package/src/ui/dash/appearance/system-nav-descriptions.ts +75 -0
  433. package/src/ui/dash/settings/AccountMenuContent.tsx +2 -2
  434. package/src/ui/dash/settings/ApiTokensContent.tsx +2 -1
  435. package/src/ui/dash/settings/ConfigEditorContent.tsx +35 -16
  436. package/src/ui/dash/settings/GeneralContent.tsx +275 -113
  437. package/src/ui/dash/settings/LanguageContent.tsx +409 -0
  438. package/src/ui/dash/settings/SettingsRootContent.tsx +19 -1
  439. package/src/ui/dash/settings/__tests__/GeneralContent.test.tsx +324 -4
  440. package/src/ui/dash/settings/__tests__/LanguageContent.test.tsx +144 -0
  441. package/src/ui/dash/settings/__tests__/discover-copy.test.ts +66 -0
  442. package/src/ui/dash/settings/discover-copy.ts +116 -0
  443. package/src/ui/feed/LinkCard.tsx +55 -45
  444. package/src/ui/feed/NoteCard.tsx +9 -4
  445. package/src/ui/feed/PostStatusBadges.tsx +90 -43
  446. package/src/ui/feed/QuoteCard.tsx +55 -30
  447. package/src/ui/feed/ThreadPreview.tsx +6 -2
  448. package/src/ui/feed/__tests__/thread-preview.test.ts +13 -16
  449. package/src/ui/feed/__tests__/timeline-cards.test.ts +314 -49
  450. package/src/ui/feed/thread-preview-state.ts +20 -6
  451. package/src/ui/font-themes.ts +39 -29
  452. package/src/ui/layouts/BaseLayout.tsx +155 -10
  453. package/src/ui/layouts/SiteLayout.tsx +192 -34
  454. package/src/ui/layouts/__tests__/BaseLayout.test.tsx +196 -17
  455. package/src/ui/layouts/__tests__/SiteLayout.test.tsx +109 -85
  456. package/src/ui/pages/ArchivePage.tsx +282 -289
  457. package/src/ui/pages/CollectionPage.tsx +86 -76
  458. package/src/ui/pages/CollectionsPage.tsx +5 -0
  459. package/src/ui/pages/ComposePage.tsx +8 -0
  460. package/src/ui/pages/PostPage.tsx +47 -0
  461. package/src/ui/pages/SearchPage.tsx +3 -3
  462. package/src/ui/pages/SmartCollectionPage.tsx +434 -0
  463. package/src/ui/pages/SubscribePage.tsx +236 -0
  464. package/src/ui/pages/__tests__/ArchivePage.test.tsx +65 -9
  465. package/src/ui/pages/__tests__/collections-directory-rows.test.tsx +92 -0
  466. package/src/ui/pages/__tests__/collections-view-links.test.tsx +81 -0
  467. package/src/ui/shared/CollectionDirectory.tsx +178 -3
  468. package/src/ui/shared/CollectionsManager.tsx +70 -17
  469. package/src/ui/shared/CopyField.tsx +127 -0
  470. package/src/ui/shared/EmptyPostContent.tsx +23 -0
  471. package/src/ui/shared/MediaGallery.tsx +125 -46
  472. package/src/ui/shared/Pagination.tsx +20 -5
  473. package/src/ui/shared/PostFooter.tsx +20 -11
  474. package/src/ui/shared/__tests__/archive-labels.test.ts +100 -0
  475. package/src/ui/shared/__tests__/media-gallery.test.ts +210 -2
  476. package/src/ui/shared/__tests__/navigation-labels.test.ts +16 -22
  477. package/src/ui/shared/__tests__/pagination.test.ts +38 -24
  478. package/src/ui/shared/__tests__/post-footer.test.ts +32 -0
  479. package/src/ui/shared/archive-labels.ts +98 -0
  480. package/src/ui/shared/collection-management-labels.ts +94 -16
  481. package/src/ui/shared/navigation-labels.ts +45 -71
  482. package/src/ui/shared/post-article-attributes.ts +2 -0
  483. package/src/ui/shared/smart-collection-labels.ts +343 -0
  484. package/dist/app-C75Zc8dD.js +0 -6
  485. package/dist/client/_assets/chunks/heic-to-DUUaO23q.js +0 -1
  486. package/dist/client/_assets/chunks/module-DcsAZQZ_.js +0 -716
  487. package/dist/client/_assets/chunks/url-CU9pEbk5.js +0 -1
  488. package/dist/client/_assets/client-Bq0vre8Y.js +0 -296
  489. package/dist/client/_assets/client-D3VZyG4L.css +0 -2
  490. package/dist/client/_assets/client-auth-F2rb9WfF.js +0 -5571
  491. package/dist/env-BPYViDJJ.js +0 -281
  492. package/dist/github-api-BNF35Lkx.js +0 -176
  493. package/dist/github-app-DdiD-bC4.js +0 -275
  494. package/dist/github-sync-Bqg62IvV.js +0 -4
  495. package/dist/github-sync-HdK2EgvJ.js +0 -431
  496. package/dist/url-CbLAtlZe.js +0 -900
  497. package/src/client/__tests__/collection-created-notice.test.ts +0 -36
  498. package/src/client/__tests__/collection-form-bridge.test.ts +0 -216
  499. package/src/client/__tests__/post-form-bridge.test.ts +0 -82
  500. package/src/client/collection-created-notice.ts +0 -66
  501. package/src/client/collection-form-bridge.ts +0 -191
  502. package/src/client/components/__tests__/jant-post-form.test.ts +0 -193
  503. package/src/client/components/jant-post-form.ts +0 -422
  504. package/src/client/components/post-form-template.ts +0 -352
  505. package/src/client/components/post-form-types.ts +0 -96
  506. package/src/client/media-metadata.ts +0 -247
  507. package/src/client/post-form-bridge.ts +0 -193
  508. package/src/ui/pages/CollectionEditorPage.tsx +0 -175
@@ -38,6 +38,11 @@ msgstr ""
38
38
  msgid "{count} images couldn't be saved to your library — their original links were kept."
39
39
  msgstr "有 {count} 张图片无法转存到你的媒体库,已保留原链接。"
40
40
 
41
+ #. @context: Smart collection dialog live count — how many threads the conditions gather out of the site total
42
+ #: src/ui/shared/smart-collection-labels.ts
43
+ msgid "{count} of {total} threads"
44
+ msgstr ""
45
+
41
46
  #. @context: Value shown on a post's permalink control when the link is generated automatically — a stand-in for the path the server will assign. Sits next to real permalinks rendered as /my-post, so keep the leading slash
42
47
  #: src/ui/compose/ComposeDialog.tsx
43
48
  msgid "/…"
@@ -70,6 +75,16 @@ msgstr ""
70
75
  msgid "A calmer, warmer accent makes the default theme feel quieter and more intentional."
71
76
  msgstr ""
72
77
 
78
+ #. @context: Collection dialog validation message
79
+ #: src/ui/shared/collection-management-labels.ts
80
+ msgid "A collection needs a title and a link."
81
+ msgstr ""
82
+
83
+ #. @context: Subscribe page explanation of what a feed reader is and where it runs
84
+ #: src/ui/pages/SubscribePage.tsx
85
+ msgid "A feed reader checks these addresses for new posts and collects them in one place. Most are an app on your phone or computer; some are a website you sign in to."
86
+ msgstr ""
87
+
73
88
  #. @context: Section title for the usage guidance section on the brand asset page
74
89
  #: src/ui/pages/BrandPage.tsx
75
90
  msgid "A few simple rules."
@@ -89,6 +104,11 @@ msgstr ""
89
104
  msgid "A long-form article sample for checking the default palette in a true reading context."
90
105
  msgstr ""
91
106
 
107
+ #. @context: Subscribe page link to the independent aboutfeeds.com explainer. The whole sentence is the link text.
108
+ #: src/ui/pages/SubscribePage.tsx
109
+ msgid "A longer introduction to feeds and readers, at aboutfeeds.com"
110
+ msgstr ""
111
+
92
112
  #. @context: Subheading in the sample detail article
93
113
  #: src/ui/pages/ThemeSamplePage.tsx
94
114
  msgid "A practical checklist"
@@ -118,6 +138,11 @@ msgstr ""
118
138
  msgid "A single ZIP with the main logo, reverse logo, square PNG, rounded, square, and circle tiles, plus favicon, Apple touch icon, and social preview image."
119
139
  msgstr ""
120
140
 
141
+ #. @context: Smart collection dialog validation message
142
+ #: src/ui/shared/smart-collection-labels.ts
143
+ msgid "A smart collection needs a title and a link."
144
+ msgstr ""
145
+
121
146
  #. @context: Main sample article title
122
147
  #: src/ui/pages/ThemeSamplePage.tsx
123
148
  msgid "A softer blue feels more like ink than product chrome."
@@ -143,11 +168,6 @@ msgstr ""
143
168
  msgid "Add a label and URL."
144
169
  msgstr ""
145
170
 
146
- #. @context: Description for the RSS system navigation toggle
147
- #: src/ui/shared/navigation-labels.ts
148
- msgid "Add a link to your main RSS feed. Change what /feed returns in General."
149
- msgstr ""
150
-
151
171
  #. @context: Compose link title required error
152
172
  #: src/ui/compose/ComposeDialog.tsx
153
173
  msgid "Add a title before posting this link."
@@ -178,6 +198,11 @@ msgstr ""
178
198
  msgid "Add column before"
179
199
  msgstr ""
180
200
 
201
+ #. @context: Smart collection dialog button
202
+ #: src/ui/shared/smart-collection-labels.ts
203
+ msgid "Add condition"
204
+ msgstr ""
205
+
181
206
  #. @context: Primary action to add a custom link on collections page
182
207
  #: src/ui/shared/collection-management-labels.ts
183
208
  msgid "Add Link"
@@ -203,6 +228,17 @@ msgstr ""
203
228
  msgid "Adding…"
204
229
  msgstr ""
205
230
 
231
+ #. @context: Subscribe page name for the full archive feed. Matches the Archive page's own nav label.
232
+ #: src/routes/pages/subscribe.tsx
233
+ msgid "All"
234
+ msgstr ""
235
+
236
+ #. @context: Built-in navigation label for the archive page. Reads as the widest of Featured / Latest / All rather than 'old posts' — the page is the complete index, and its URL stays /archive.
237
+ #: src/ui/shared/navigation-labels.ts
238
+ msgctxt "nav"
239
+ msgid "All"
240
+ msgstr ""
241
+
206
242
  #. @context: Archive filter - collection dropdown default
207
243
  #: src/ui/pages/ArchivePage.tsx
208
244
  msgid "All collections"
@@ -213,8 +249,10 @@ msgstr ""
213
249
  msgid "All formats"
214
250
  msgstr ""
215
251
 
252
+ #. @context: Archive page heading and document title when no filter is active. Names the surface, not the current selection — the nav calls the same destination 'All'.
216
253
  #. @context: Archive thread filter - threads and single posts
217
254
  #: src/ui/pages/ArchivePage.tsx
255
+ #: src/ui/shared/archive-labels.ts
218
256
  msgid "All posts"
219
257
  msgstr ""
220
258
 
@@ -228,6 +266,11 @@ msgstr ""
228
266
  msgid "All years"
229
267
  msgstr ""
230
268
 
269
+ #. @context: Label before links to this post's translations
270
+ #: src/ui/pages/PostPage.tsx
271
+ msgid "Also available in"
272
+ msgstr ""
273
+
231
274
  #. @context: Alt text for the sample detail article image
232
275
  #: src/ui/pages/ThemeSamplePage.tsx
233
276
  msgid "An abstract editorial layout in warm paper colors"
@@ -254,35 +297,22 @@ msgid "Apple touch icon"
254
297
  msgstr ""
255
298
 
256
299
  #. @context: Archive feed title prefix
257
- #. @context: Archive page title
258
300
  #. @context: Inactive nav link label on sample page
259
301
  #: src/routes/pages/archive.tsx
260
- #: src/ui/pages/ArchivePage.tsx
261
302
  #: src/ui/pages/ThemeSamplePage.tsx
262
303
  msgid "Archive"
263
304
  msgstr ""
264
305
 
265
- #. @context: Built-in navigation label for the archive page
266
- #: src/ui/shared/navigation-labels.ts
267
- msgctxt "nav"
268
- msgid "Archive"
269
- msgstr ""
270
-
271
306
  #. @context: Section heading for the detail article sample on the theme sample page
272
307
  #: src/ui/pages/ThemeSamplePage.tsx
273
308
  msgid "Article detail page"
274
309
  msgstr ""
275
310
 
276
311
  #. @context: Archive media filter - audio
277
- #: src/ui/pages/ArchivePage.tsx
312
+ #: src/lib/filter-dimensions.ts
278
313
  msgid "Audio"
279
314
  msgstr ""
280
315
 
281
- #. @context: Error toast when authentication secret is missing from server config
282
- #: src/routes/auth/setup.tsx
283
- msgid "Auth secret is missing. Check your environment variables."
284
- msgstr ""
285
-
286
316
  #. @context: Error toast when authentication system is unavailable
287
317
  #: src/routes/auth/signin.tsx
288
318
  msgid "Authentication isn't set up. Check your server config."
@@ -298,6 +328,16 @@ msgstr ""
298
328
  msgid "Auto"
299
329
  msgstr ""
300
330
 
331
+ #. @context: Smart collection page — what it gathers, when no condition narrows it
332
+ #: src/ui/shared/smart-collection-labels.ts
333
+ msgid "Automatically collects every post."
334
+ msgstr ""
335
+
336
+ #. @context: Smart collection page — what it gathers. {conditions} is the list of conditions, already joined. A label and a list, not a sentence: the conditions are named in the archive's own words, which are noun fragments like "Titled" or "With media".
337
+ #: src/ui/shared/smart-collection-labels.ts
338
+ msgid "Automatically collects: {conditions}"
339
+ msgstr ""
340
+
301
341
  #. @context: Usage label for the circle tile asset card
302
342
  #: src/ui/pages/BrandPage.tsx
303
343
  msgid "Avatar-ready"
@@ -334,13 +374,6 @@ msgstr ""
334
374
  msgid "Brand tile"
335
375
  msgstr ""
336
376
 
337
- #. @context: Breadcrumb label on collection detail page
338
- #. @context: Breadcrumb label on collection editor page
339
- #: src/ui/pages/CollectionEditorPage.tsx
340
- #: src/ui/pages/CollectionPage.tsx
341
- msgid "Breadcrumb"
342
- msgstr ""
343
-
344
377
  #. @context: Secondary hero button label to jump to the file list
345
378
  #: src/ui/pages/BrandPage.tsx
346
379
  msgid "Browse files"
@@ -361,17 +394,20 @@ msgstr ""
361
394
  msgid "Buttons can stay steady, but links, thread markers, and subtle emphasis should feel closer to ink on paper than dashboard chrome."
362
395
  msgstr ""
363
396
 
397
+ #. @context: Back out of the attached-text sub-editor, paired with Done. Leaving the composer itself says Close instead — it may keep the work as a draft, so nothing is being cancelled.
364
398
  #. @context: Button label to dismiss a dialog or action
365
399
  #. @context: Button to cancel form
366
- #. @context: Close compose dialog
367
- #. @context: Confirm close action sheet - cancel and return to editor
368
- #: src/ui/compose/ComposeDialog.tsx
369
400
  #: src/ui/compose/ComposeDialog.tsx
370
401
  #: src/ui/shared/collection-management-labels.ts
371
402
  #: src/ui/shared/collection-management-labels.ts
372
403
  msgid "Cancel"
373
404
  msgstr ""
374
405
 
406
+ #. @context: Collection editing dialog warning shown when editing moves an existing collection link
407
+ #: src/ui/shared/collection-management-labels.ts
408
+ msgid "Changing the link breaks the old one immediately."
409
+ msgstr ""
410
+
375
411
  #. @context: Compose custom slug helper while checking whether a manual slug is available
376
412
  #: src/ui/compose/ComposeDialog.tsx
377
413
  msgid "Checking link..."
@@ -416,9 +452,9 @@ msgstr ""
416
452
  msgid "Clear filter"
417
453
  msgstr ""
418
454
 
419
- #. @context: Post options row that leaves the composer; prompts to save a draft first if there is unsaved work
455
+ #. @context: Leaves the composer — the × on a single post, and the button in a thread. Prompts to save a draft first if there is unsaved work.
420
456
  #: src/ui/compose/ComposeDialog.tsx
421
- msgid "Close compose"
457
+ msgid "Close"
422
458
  msgstr ""
423
459
 
424
460
  #. @context: Close drawer button label
@@ -432,6 +468,8 @@ msgid "collection"
432
468
  msgstr ""
433
469
 
434
470
  #. @context: Compose collection selector trigger label
471
+ #. @context: Post filter dimension name - collection membership
472
+ #: src/lib/filter-dimensions.ts
435
473
  #: src/ui/compose/ComposeDialog.tsx
436
474
  msgid "Collection"
437
475
  msgstr ""
@@ -471,14 +509,14 @@ msgstr ""
471
509
  msgid "collections"
472
510
  msgstr ""
473
511
 
474
- #. @context: Breadcrumb link to collections page
475
- #. @context: Breadcrumb link to collections page
476
512
  #. @context: Collections page heading
477
513
  #. @context: Collections page heading
478
514
  #. @context: Inactive nav link label on sample page
479
- #: src/ui/pages/CollectionEditorPage.tsx
515
+ #. @context: Link back to the collections directory from a collection page
516
+ #. @context: Link back to the collections directory from a collection page
480
517
  #: src/ui/pages/CollectionPage.tsx
481
518
  #: src/ui/pages/CollectionsPage.tsx
519
+ #: src/ui/pages/SmartCollectionPage.tsx
482
520
  #: src/ui/pages/ThemeSamplePage.tsx
483
521
  #: src/ui/shared/CollectionsManager.tsx
484
522
  msgid "Collections"
@@ -490,6 +528,11 @@ msgctxt "nav"
490
528
  msgid "Collections"
491
529
  msgstr ""
492
530
 
531
+ #. @context: Subscribe page closing note, next to a small feed icon standing in for the ones on collection and archive pages
532
+ #: src/ui/pages/SubscribePage.tsx
533
+ msgid "Collections and filtered archive views have their own feeds. Look for this icon on those pages."
534
+ msgstr ""
535
+
493
536
  #. @context: Alert title on theme sample page
494
537
  #: src/ui/pages/ThemeSamplePage.tsx
495
538
  msgid "Color check"
@@ -507,16 +550,21 @@ msgstr ""
507
550
  msgid "Compare it against the theme controls"
508
551
  msgstr ""
509
552
 
510
- #. @context: Setup form submit button
511
- #: src/routes/auth/setup.tsx
512
- msgid "Complete Setup"
513
- msgstr ""
514
-
515
553
  #. @context: Accessible name for the compose dialog
516
554
  #: src/ui/compose/ComposeDialog.tsx
517
555
  msgid "Compose"
518
556
  msgstr ""
519
557
 
558
+ #. @context: Smart collection dialog section heading
559
+ #: src/ui/shared/smart-collection-labels.ts
560
+ msgid "Conditions"
561
+ msgstr ""
562
+
563
+ #. @context: One line under the New Smart Collection heading, saying how it differs from an ordinary collection
564
+ #: src/ui/shared/smart-collection-labels.ts
565
+ msgid "Conditions choose what belongs here, not you. Posts you write later join on their own."
566
+ msgstr ""
567
+
520
568
  #. @context: Password reset form field
521
569
  #: src/routes/auth/reset.tsx
522
570
  msgid "Confirm Password"
@@ -537,18 +585,34 @@ msgstr ""
537
585
  msgid "Controls"
538
586
  msgstr ""
539
587
 
540
- #. @context: Error after a Collection could not be added to site navigation
588
+ #. @context: Button that copies a feed address to the clipboard
589
+ #: src/ui/pages/SubscribePage.tsx
590
+ msgid "Copy"
591
+ msgstr ""
592
+
593
+ #. @context: Toast when the clipboard is unavailable, pointing at selecting the address by hand
594
+ #: src/ui/pages/SubscribePage.tsx
595
+ msgid "Could not copy. Select the address and copy it."
596
+ msgstr ""
597
+
598
+ #. @context: Collection dialog load failure
541
599
  #: src/ui/shared/collection-management-labels.ts
542
- msgid "Couldn't add this collection to navigation. Try again."
600
+ msgid "Could not open this collection. Try again."
601
+ msgstr ""
602
+
603
+ #. @context: Smart collection dialog load failure
604
+ #: src/ui/shared/smart-collection-labels.ts
605
+ msgid "Could not open this smart collection. Try again."
543
606
  msgstr ""
544
607
 
545
- #. @context: Error toast when account creation fails
546
- #. @context: Error toast when account creation fails
547
- #. @context: Error toast when account creation fails
548
- #: src/routes/auth/setup.tsx
549
- #: src/routes/auth/setup.tsx
550
- #: src/routes/auth/setup.tsx
551
- msgid "Couldn't create your account. Check the details and try again."
608
+ #. @context: Smart collection dialog save failure
609
+ #: src/ui/shared/smart-collection-labels.ts
610
+ msgid "Could not save. Try again."
611
+ msgstr ""
612
+
613
+ #. @context: Error after a Collection could not be added to site navigation
614
+ #: src/ui/shared/collection-management-labels.ts
615
+ msgid "Couldn't add this collection to navigation. Try again."
552
616
  msgstr ""
553
617
 
554
618
  #. @context: Toast shown when edit mode fails to load a post
@@ -561,21 +625,31 @@ msgstr ""
561
625
  msgid "Couldn't publish. Saved as draft."
562
626
  msgstr ""
563
627
 
628
+ #. @context: Toast when publish fails and the server gave no reason
629
+ #: src/ui/compose/ComposeDialog.tsx
630
+ msgid "Couldn't publish. Try again."
631
+ msgstr ""
632
+
633
+ #. @context: Toast when a publish request never reached the server
634
+ #: src/ui/compose/ComposeDialog.tsx
635
+ msgid "Couldn't reach the server. Try again."
636
+ msgstr ""
637
+
564
638
  #. @context: Toast when save fails
565
639
  #: src/ui/shared/collection-management-labels.ts
566
640
  msgid "Couldn't save. Try again in a moment."
567
641
  msgstr ""
568
642
 
643
+ #. @context: Smart collection dialog while the count is loading
644
+ #: src/ui/shared/smart-collection-labels.ts
645
+ msgid "Counting…"
646
+ msgstr ""
647
+
569
648
  #. @context: Compose collection combobox empty state when no collections exist
570
649
  #: src/ui/compose/ComposeDialog.tsx
571
650
  msgid "Create a collection to get started."
572
651
  msgstr ""
573
652
 
574
- #. @context: Setup page description
575
- #: src/routes/auth/setup.tsx
576
- msgid "Create your admin account."
577
- msgstr ""
578
-
579
653
  #. @context: Thread item label on sample page
580
654
  #: src/ui/pages/ThemeSamplePage.tsx
581
655
  msgid "Current post"
@@ -626,7 +700,9 @@ msgid "Default preview image for social shares and link unfurls."
626
700
  msgstr ""
627
701
 
628
702
  #. @context: Delete collection action
703
+ #. @context: Destructive menu item on a smart collection's row and page. The row says which one; the confirmation names what is lost.
629
704
  #: src/ui/shared/collection-management-labels.ts
705
+ #: src/ui/shared/smart-collection-labels.ts
630
706
  msgid "Delete"
631
707
  msgstr ""
632
708
 
@@ -660,6 +736,11 @@ msgstr ""
660
736
  msgid "Delete this collection permanently? Threads inside won't be removed."
661
737
  msgstr ""
662
738
 
739
+ #. @context: Confirmation before deleting a smart collection, naming what is lost
740
+ #: src/ui/shared/smart-collection-labels.ts
741
+ msgid "Delete this smart collection? Its link stops working."
742
+ msgstr ""
743
+
663
744
  #. @context: Hint shown on signin page when demo credentials are pre-filled
664
745
  #: src/routes/auth/signin.tsx
665
746
  msgid "Demo credentials are pre-filled — hit Sign In to continue."
@@ -670,6 +751,11 @@ msgstr ""
670
751
  msgid "Describe this for people with visual impairments..."
671
752
  msgstr ""
672
753
 
754
+ #. @context: Smart collection dialog field
755
+ #: src/ui/shared/smart-collection-labels.ts
756
+ msgid "Description"
757
+ msgstr ""
758
+
673
759
  #. @context: Collection form field
674
760
  #. @context: Field label for a custom collections link description
675
761
  #: src/ui/shared/collection-management-labels.ts
@@ -691,6 +777,11 @@ msgstr ""
691
777
  msgid "Designing a calmer default accent for Jant"
692
778
  msgstr ""
693
779
 
780
+ #. @context: Compose language option that leaves detection to Jant
781
+ #: src/ui/compose/ComposeDialog.tsx
782
+ msgid "Detect"
783
+ msgstr ""
784
+
694
785
  #. @context: Confirm close action sheet - discard changes button for editing published post
695
786
  #. @context: More menu - discard post
696
787
  #: src/ui/compose/ComposeDialog.tsx
@@ -703,6 +794,11 @@ msgstr ""
703
794
  msgid "Discard changes?"
704
795
  msgstr ""
705
796
 
797
+ #. @context: Smart collection dialog section heading
798
+ #: src/ui/shared/smart-collection-labels.ts
799
+ msgid "Display"
800
+ msgstr ""
801
+
706
802
  #. @context: Label for a divider item while organizing collections
707
803
  #: src/ui/shared/CollectionsManager.tsx
708
804
  msgid "Divider"
@@ -818,14 +914,15 @@ msgid "Drag collections, links, and dividers into the order you want."
818
914
  msgstr ""
819
915
 
820
916
  #. @context: Per-collection edit action
821
- #. @context: Per-collection edit action
822
- #. @context: Per-collection edit action
823
- #: src/ui/pages/CollectionEditorPage.tsx
824
- #: src/ui/pages/CollectionEditorPage.tsx
825
917
  #: src/ui/shared/collection-management-labels.ts
826
918
  msgid "Edit"
827
919
  msgstr ""
828
920
 
921
+ #. @context: Title of the dialog that edits an existing collection
922
+ #: src/ui/shared/collection-management-labels.ts
923
+ msgid "Edit Collection"
924
+ msgstr ""
925
+
829
926
  #. @context: Compose action to reopen the custom link field from the action row summary
830
927
  #: src/ui/compose/ComposeDialog.tsx
831
928
  msgid "Edit custom link"
@@ -856,6 +953,11 @@ msgstr ""
856
953
  msgid "Edit publish date"
857
954
  msgstr ""
858
955
 
956
+ #. @context: Dialog title when editing an existing smart collection
957
+ #: src/ui/shared/smart-collection-labels.ts
958
+ msgid "Edit Smart Collection"
959
+ msgstr ""
960
+
859
961
  #. @context: Marker above the composer when changing a post that is already published
860
962
  #: src/ui/compose/ComposeDialog.tsx
861
963
  msgid "Editing"
@@ -867,11 +969,9 @@ msgid "Editorial interfaces worth borrowing from"
867
969
  msgstr ""
868
970
 
869
971
  #. @context: Setup/signin form field - email
870
- #. @context: Setup/signin form field - email
871
- #: src/routes/auth/setup.tsx
872
972
  #: src/routes/auth/signin.tsx
873
973
  msgid "Email"
874
- msgstr ""
974
+ msgstr "邮箱"
875
975
 
876
976
  #. @context: Compose toolbar - emoji picker tooltip
877
977
  #: src/ui/compose/ComposeDialog.tsx
@@ -888,6 +988,11 @@ msgstr ""
888
988
  msgid "Enter a valid URL starting with http://, https://, or mailto:."
889
989
  msgstr ""
890
990
 
991
+ #. @context: Subscribe page description of the full archive feed. Says what it adds over the other two rather than sounding like the default pick.
992
+ #: src/routes/pages/subscribe.tsx
993
+ msgid "Every published post, including those kept off the home page."
994
+ msgstr ""
995
+
891
996
  #. @context: Usage label for the brand pack card
892
997
  #: src/ui/pages/BrandPage.tsx
893
998
  msgid "Everything in one download"
@@ -917,9 +1022,11 @@ msgstr ""
917
1022
  #. @context: Browser page title for the featured feed
918
1023
  #. @context: Inactive browse tab label on sample page
919
1024
  #. @context: Page heading for the featured posts feed
1025
+ #. @context: Subscribe page name for the featured posts feed
920
1026
  #. @context: Tooltip and screen reader label for the featured-post icon in the post footer when no featured date is available
1027
+ #: src/lib/filter-dimensions.ts
921
1028
  #: src/routes/pages/featured.tsx
922
- #: src/ui/pages/ArchivePage.tsx
1029
+ #: src/routes/pages/subscribe.tsx
923
1030
  #: src/ui/pages/FeaturedPage.tsx
924
1031
  #: src/ui/pages/ThemeSamplePage.tsx
925
1032
  #: src/ui/shared/PostFooter.tsx
@@ -944,10 +1051,9 @@ msgstr ""
944
1051
  msgid "Featured posts"
945
1052
  msgstr ""
946
1053
 
947
- #. @context: Built-in navigation label for feed
948
- #: src/ui/shared/navigation-labels.ts
949
- msgctxt "nav"
950
- msgid "Feed"
1054
+ #. @context: Toast after copying a feed URL to the clipboard
1055
+ #: src/ui/pages/SubscribePage.tsx
1056
+ msgid "Feed URL copied."
951
1057
  msgstr ""
952
1058
 
953
1059
  #. @context: Search snippet suffix on sample page
@@ -981,15 +1087,25 @@ msgid "File uploaded."
981
1087
  msgstr ""
982
1088
 
983
1089
  #. @context: Archive media filter - files/documents
984
- #: src/ui/pages/ArchivePage.tsx
1090
+ #: src/lib/filter-dimensions.ts
985
1091
  msgid "Files"
986
1092
  msgstr ""
987
1093
 
1094
+ #. @context: Smart collection layout option — use the site's configured archive layout
1095
+ #: src/ui/shared/smart-collection-labels.ts
1096
+ msgid "Follow site default"
1097
+ msgstr ""
1098
+
988
1099
  #. @context: Paragraph mentioning code on the sample detail article
989
1100
  #: src/ui/pages/ThemeSamplePage.tsx
990
1101
  msgid "For the same reason, inline code should stay neutral. Something like theme.siteAccent = soften(green, 12%) should not suddenly become the loudest thing on the page."
991
1102
  msgstr ""
992
1103
 
1104
+ #. @context: Post filter dimension name - note, link, or quote
1105
+ #: src/lib/filter-dimensions.ts
1106
+ msgid "Format"
1107
+ msgstr ""
1108
+
993
1109
  #. @context: Compose dialog - open fullscreen editor
994
1110
  #: src/ui/compose/ComposeDialog.tsx
995
1111
  msgid "Fullscreen"
@@ -1010,6 +1126,11 @@ msgstr ""
1010
1126
  msgid "Give it a title..."
1011
1127
  msgstr ""
1012
1128
 
1129
+ #. @context: Smart collection layout option
1130
+ #: src/ui/shared/smart-collection-labels.ts
1131
+ msgid "Grid"
1132
+ msgstr ""
1133
+
1013
1134
  #. @context: Table cell in the sample detail article
1014
1135
  #: src/ui/pages/ThemeSamplePage.tsx
1015
1136
  msgid "Guide the eye without taking over the layout."
@@ -1037,19 +1158,31 @@ msgstr ""
1037
1158
 
1038
1159
  #. @context: Archive visibility filter for posts hidden from Latest
1039
1160
  #. @context: Compose publish settings visibility option
1161
+ #: src/lib/filter-dimensions.ts
1040
1162
  #: src/ui/compose/ComposeDialog.tsx
1041
- #: src/ui/pages/ArchivePage.tsx
1042
1163
  msgid "Hidden from Latest"
1043
1164
  msgstr ""
1044
1165
 
1166
+ #. @context: Button that folds away the original while writing its translation. Sits right after the words “Translating into …”, which is what makes it clear what gets hidden — the accessible name spells it out
1167
+ #: src/ui/compose/ComposeDialog.tsx
1168
+ msgid "Hide"
1169
+ msgstr ""
1170
+
1045
1171
  #. @context: Compose dropdown option for hiding a post from the Latest view
1046
1172
  #: src/ui/compose/ComposeDialog.tsx
1047
1173
  msgid "Hide from Latest"
1048
1174
  msgstr ""
1049
1175
 
1176
+ #. @context: Accessible name of the button that folds away the post being translated
1177
+ #: src/ui/compose/ComposeDialog.tsx
1178
+ msgid "Hide the original"
1179
+ msgstr ""
1180
+
1181
+ #. @context: Collection sort order option
1050
1182
  #. @context: Collection sort order option
1051
1183
  #. @context: Collection sort order option
1052
1184
  #: src/ui/pages/CollectionPage.tsx
1185
+ #: src/ui/pages/SmartCollectionPage.tsx
1053
1186
  #: src/ui/shared/collection-management-labels.ts
1054
1187
  msgid "Highest rated"
1055
1188
  msgstr ""
@@ -1080,7 +1213,7 @@ msgid "Image unavailable"
1080
1213
  msgstr ""
1081
1214
 
1082
1215
  #. @context: Archive media filter - images
1083
- #: src/ui/pages/ArchivePage.tsx
1216
+ #: src/lib/filter-dimensions.ts
1084
1217
  msgid "Images"
1085
1218
  msgstr ""
1086
1219
 
@@ -1146,6 +1279,11 @@ msgstr ""
1146
1279
  msgid "Journal"
1147
1280
  msgstr ""
1148
1281
 
1282
+ #. @context: Confirm close action sheet - dismiss the sheet and return to the editor. Says what it does rather than 'Cancel', which the composer already spends on leaving.
1283
+ #: src/ui/compose/ComposeDialog.tsx
1284
+ msgid "Keep editing"
1285
+ msgstr ""
1286
+
1149
1287
  #. @context: Guidance title on the brand asset page
1150
1288
  #: src/ui/pages/BrandPage.tsx
1151
1289
  msgid "Keep the artwork unchanged."
@@ -1166,6 +1304,20 @@ msgstr ""
1166
1304
  msgid "Label (optional)"
1167
1305
  msgstr ""
1168
1306
 
1307
+ #. @context: Accessible label for the site language switcher
1308
+ #. @context: Compose field for the post's content language
1309
+ #: src/ui/compose/ComposeDialog.tsx
1310
+ #: src/ui/layouts/SiteLayout.tsx
1311
+ msgid "Language"
1312
+ msgstr ""
1313
+
1314
+ #. @context: Accessible label for the site language switcher when it names the language on screen
1315
+ #. @context: Accessible name of the composer's language button, which sits beside Post and names the language this post would publish in
1316
+ #: src/ui/compose/ComposeDialog.tsx
1317
+ #: src/ui/layouts/SiteLayout.tsx
1318
+ msgid "Language: {language}"
1319
+ msgstr ""
1320
+
1169
1321
  #. @context: Tooltip text for the timestamp on an unpublished draft
1170
1322
  #: src/ui/shared/PostFooter.tsx
1171
1323
  msgid "Last edited on {date} at {time}"
@@ -1174,7 +1326,9 @@ msgstr ""
1174
1326
  #. @context: Active browse tab label on sample page
1175
1327
  #. @context: Browser page title for the latest feed
1176
1328
  #. @context: Page heading for the latest posts feed
1329
+ #. @context: Subscribe page name for the latest public posts feed
1177
1330
  #: src/routes/pages/home.tsx
1331
+ #: src/routes/pages/subscribe.tsx
1178
1332
  #: src/ui/pages/HomePage.tsx
1179
1333
  #: src/ui/pages/ThemeSamplePage.tsx
1180
1334
  msgid "Latest"
@@ -1193,6 +1347,13 @@ msgstr ""
1193
1347
  msgid "Latest posts"
1194
1348
  msgstr ""
1195
1349
 
1350
+ #. @context: Archive grid/list toggle group label
1351
+ #. @context: Smart collection dialog field
1352
+ #: src/ui/pages/ArchivePage.tsx
1353
+ #: src/ui/shared/smart-collection-labels.ts
1354
+ msgid "Layout"
1355
+ msgstr ""
1356
+
1196
1357
  #. @context: Compose publish settings slug help text
1197
1358
  #: src/ui/compose/ComposeDialog.tsx
1198
1359
  msgid "Leave blank to generate one automatically."
@@ -1229,35 +1390,13 @@ msgstr ""
1229
1390
  msgid "Link removed."
1230
1391
  msgstr ""
1231
1392
 
1232
- #. @context: Description for the featured system navigation toggle
1233
- #: src/ui/shared/navigation-labels.ts
1234
- msgid "Link to posts you've marked as featured."
1235
- msgstr ""
1236
-
1237
- #. @context: Description for the archive system navigation toggle
1238
- #: src/ui/shared/navigation-labels.ts
1239
- msgid "Link to the post archive"
1240
- msgstr ""
1241
-
1242
- #. @context: Description for the collections system navigation toggle
1243
- #: src/ui/shared/navigation-labels.ts
1244
- msgid "Link to your collections page"
1245
- msgstr ""
1246
-
1247
- #. @context: Description for the latest system navigation toggle
1248
- #: src/ui/shared/navigation-labels.ts
1249
- msgid "Link to your latest posts. Your homepage shows this feed."
1250
- msgstr ""
1251
-
1252
1393
  #. @context: Toast after saving a custom collections link
1253
1394
  #: src/ui/shared/collection-management-labels.ts
1254
1395
  msgid "Link updated."
1255
1396
  msgstr ""
1256
1397
 
1257
- #. @context: Archive feed title segment for link format filter
1258
1398
  #. @context: Post format label plural - links
1259
- #: src/routes/pages/archive.tsx
1260
- #: src/ui/pages/ArchivePage.tsx
1399
+ #: src/lib/filter-dimensions.ts
1261
1400
  msgid "Links"
1262
1401
  msgstr ""
1263
1402
 
@@ -1266,6 +1405,11 @@ msgstr ""
1266
1405
  msgid "Links should read clearly without glowing against the page."
1267
1406
  msgstr ""
1268
1407
 
1408
+ #. @context: Smart collection layout option
1409
+ #: src/ui/shared/smart-collection-labels.ts
1410
+ msgid "List"
1411
+ msgstr ""
1412
+
1269
1413
  #. @context: Inline link label in the sample note post body
1270
1414
  #. @context: Inline link label in the sample note summary
1271
1415
  #: src/ui/pages/ThemeSamplePage.tsx
@@ -1305,6 +1449,8 @@ msgid "Look at the footer metadata last, to make sure the accent is not fighting
1305
1449
  msgstr ""
1306
1450
 
1307
1451
  #. @context: Feed autodiscovery title for the site's main feed
1452
+ #. @context: Subscribe page name for the site's main feed
1453
+ #: src/routes/pages/subscribe.tsx
1308
1454
  #: src/ui/layouts/BaseLayout.tsx
1309
1455
  msgid "Main feed"
1310
1456
  msgstr ""
@@ -1315,6 +1461,8 @@ msgid "March 15"
1315
1461
  msgstr ""
1316
1462
 
1317
1463
  #. @context: Compose toolbar - media tooltip
1464
+ #. @context: Post filter dimension name - attached media
1465
+ #: src/lib/filter-dimensions.ts
1318
1466
  #: src/ui/compose/ComposeDialog.tsx
1319
1467
  msgid "Media"
1320
1468
  msgstr ""
@@ -1342,6 +1490,16 @@ msgstr ""
1342
1490
  msgid "More options are available after you create it."
1343
1491
  msgstr ""
1344
1492
 
1493
+ #. @context: Button that moves an attachment one place toward the start in compose
1494
+ #: src/ui/compose/ComposeDialog.tsx
1495
+ msgid "Move attachment earlier"
1496
+ msgstr ""
1497
+
1498
+ #. @context: Button that moves an attachment one place toward the end in compose
1499
+ #: src/ui/compose/ComposeDialog.tsx
1500
+ msgid "Move attachment later"
1501
+ msgstr ""
1502
+
1345
1503
  #. @context: Secondary badge label on sample page
1346
1504
  #. @context: Token label on sample page
1347
1505
  #: src/ui/pages/ThemeSamplePage.tsx
@@ -1360,10 +1518,8 @@ msgid "Navigation and reading states"
1360
1518
  msgstr ""
1361
1519
 
1362
1520
  #. @context: Button to create a collection from collections page
1363
- #. @context: Page title for new collection
1364
- #. @context: Page title for new collection
1365
- #: src/ui/pages/CollectionEditorPage.tsx
1366
- #: src/ui/pages/CollectionEditorPage.tsx
1521
+ #. @context: Title of the dialog that creates a collection
1522
+ #: src/ui/shared/collection-management-labels.ts
1367
1523
  #: src/ui/shared/CollectionsManager.tsx
1368
1524
  msgid "New Collection"
1369
1525
  msgstr ""
@@ -1394,14 +1550,21 @@ msgstr ""
1394
1550
  msgid "New post"
1395
1551
  msgstr ""
1396
1552
 
1553
+ #. @context: Menu item on the collections page that opens the smart collection dialog
1554
+ #: src/ui/shared/smart-collection-labels.ts
1555
+ msgid "New Smart Collection"
1556
+ msgstr ""
1557
+
1397
1558
  #. @context: Archive page meta note explaining the active sort order
1398
1559
  #: src/ui/pages/ArchivePage.tsx
1399
1560
  msgid "newest changes first"
1400
1561
  msgstr ""
1401
1562
 
1563
+ #. @context: Collection sort order option
1402
1564
  #. @context: Collection sort order option
1403
1565
  #. @context: Collection sort order option
1404
1566
  #: src/ui/pages/CollectionPage.tsx
1567
+ #: src/ui/pages/SmartCollectionPage.tsx
1405
1568
  #: src/ui/shared/collection-management-labels.ts
1406
1569
  msgid "Newest first"
1407
1570
  msgstr ""
@@ -1429,6 +1592,11 @@ msgstr ""
1429
1592
  msgid "No collections yet. Start one to organize threads by topic."
1430
1593
  msgstr ""
1431
1594
 
1595
+ #. @context: Smart collection dialog with no conditions set
1596
+ #: src/ui/shared/smart-collection-labels.ts
1597
+ msgid "No conditions yet. Add one to choose what lands here."
1598
+ msgstr ""
1599
+
1432
1600
  #. @context: Drafts panel empty state
1433
1601
  #: src/ui/compose/ComposeDialog.tsx
1434
1602
  msgid "No drafts yet. Save a draft to find it here."
@@ -1449,6 +1617,11 @@ msgstr ""
1449
1617
  msgid "No threads match these filters. Try adjusting your selection or clear all filters."
1450
1618
  msgstr ""
1451
1619
 
1620
+ #. @context: Help text under the compose language field before there is enough writing to read a language out of; {language} is the one it would publish in meanwhile, which is the language of the page the composer was opened from
1621
+ #: src/ui/compose/ComposeDialog.tsx
1622
+ msgid "Not enough text to tell yet — publishes in {language}"
1623
+ msgstr ""
1624
+
1452
1625
  #. @context: Action to dismiss the post-create Collection navigation prompt
1453
1626
  #: src/ui/shared/CollectionsManager.tsx
1454
1627
  msgid "Not now"
@@ -1468,10 +1641,8 @@ msgstr ""
1468
1641
  msgid "note treatment"
1469
1642
  msgstr ""
1470
1643
 
1471
- #. @context: Archive feed title segment for note format filter
1472
1644
  #. @context: Post format label plural - notes
1473
- #: src/routes/pages/archive.tsx
1474
- #: src/ui/pages/ArchivePage.tsx
1645
+ #: src/lib/filter-dimensions.ts
1475
1646
  msgid "Notes"
1476
1647
  msgstr ""
1477
1648
 
@@ -1480,23 +1651,45 @@ msgstr ""
1480
1651
  msgid "Nothing here yet. Add threads to one of these collections to fill this view."
1481
1652
  msgstr ""
1482
1653
 
1654
+ #. @context: Empty state when a collection has no posts in the language being browsed
1655
+ #: src/ui/pages/CollectionPage.tsx
1656
+ msgid "Nothing in {language} here yet."
1657
+ msgstr ""
1658
+
1483
1659
  #. @context: Empty state message on featured page
1484
1660
  #: src/ui/pages/FeaturedPage.tsx
1485
1661
  msgid "Nothing in Featured yet. Mark a post as featured to show it here."
1486
1662
  msgstr ""
1487
1663
 
1664
+ #. @context: Smart collection page when no post matches
1665
+ #: src/ui/shared/smart-collection-labels.ts
1666
+ msgid "Nothing matches these conditions yet."
1667
+ msgstr ""
1668
+
1488
1669
  #. @context: Value shown on a post's date control when it will publish at the current time
1489
1670
  #: src/ui/compose/ComposeDialog.tsx
1490
1671
  msgid "Now"
1491
1672
  msgstr ""
1492
1673
 
1674
+ #. @context: Archive page count when a filter narrows the view, following the matching count — reads as '42 of 1,240 threads'
1675
+ #: src/ui/pages/ArchivePage.tsx
1676
+ msgid "of {total} {unit}"
1677
+ msgstr ""
1678
+
1679
+ #. @context: Collection sort order option
1493
1680
  #. @context: Collection sort order option
1494
1681
  #. @context: Collection sort order option
1495
1682
  #: src/ui/pages/CollectionPage.tsx
1683
+ #: src/ui/pages/SmartCollectionPage.tsx
1496
1684
  #: src/ui/shared/collection-management-labels.ts
1497
1685
  msgid "Oldest first"
1498
1686
  msgstr ""
1499
1687
 
1688
+ #. @context: Subscribe page description of the featured posts feed
1689
+ #: src/routes/pages/subscribe.tsx
1690
+ msgid "Only the posts marked as featured."
1691
+ msgstr ""
1692
+
1500
1693
  #. @context: Compose publish settings help text for private visibility
1501
1694
  #: src/ui/compose/ComposeDialog.tsx
1502
1695
  msgid "Only visible when signed in."
@@ -1532,6 +1725,21 @@ msgstr ""
1532
1725
  msgid "Open raw SVG"
1533
1726
  msgstr ""
1534
1727
 
1728
+ #. @context: Tooltip on the source post link above the compose editor while writing a translation
1729
+ #: src/ui/compose/ComposeDialog.tsx
1730
+ msgid "Open the original in a new tab"
1731
+ msgstr ""
1732
+
1733
+ #. @context: Tooltip on the subscribe page feed names, which link to the page whose posts that feed carries
1734
+ #: src/ui/pages/SubscribePage.tsx
1735
+ msgid "Open the page this feed carries"
1736
+ msgstr ""
1737
+
1738
+ #. @context: Collection editing dialog field
1739
+ #: src/ui/shared/collection-management-labels.ts
1740
+ msgid "Order by"
1741
+ msgstr ""
1742
+
1535
1743
  #. @context: Menu action to organize collections
1536
1744
  #: src/ui/shared/CollectionsManager.tsx
1537
1745
  msgid "Organize"
@@ -1543,11 +1751,9 @@ msgid "Outline"
1543
1751
  msgstr ""
1544
1752
 
1545
1753
  #. @context: Setup/signin form field - password
1546
- #. @context: Setup/signin form field - password
1547
- #: src/routes/auth/setup.tsx
1548
1754
  #: src/routes/auth/signin.tsx
1549
1755
  msgid "Password"
1550
- msgstr ""
1756
+ msgstr "密码"
1551
1757
 
1552
1758
  #. @context: Error shown when password reset is blocked in demo mode
1553
1759
  #: src/routes/auth/reset.tsx
@@ -1592,6 +1798,11 @@ msgstr ""
1592
1798
  msgid "Post privately"
1593
1799
  msgstr ""
1594
1800
 
1801
+ #. @context: Smart collection dialog — conditions are combined with AND
1802
+ #: src/ui/shared/smart-collection-labels.ts
1803
+ msgid "Posts matching all of these"
1804
+ msgstr ""
1805
+
1595
1806
  #. @context: Hover hint for the homepage compose shortcut
1596
1807
  #: src/ui/compose/ComposePrompt.tsx
1597
1808
  msgid "Press N to write"
@@ -1636,16 +1847,16 @@ msgstr ""
1636
1847
  #. @context: Archive visibility filter - private posts
1637
1848
  #. @context: Compose publish settings visibility option
1638
1849
  #. @context: Post status badge for a private post
1850
+ #: src/lib/filter-dimensions.ts
1639
1851
  #: src/ui/compose/ComposeDialog.tsx
1640
1852
  #: src/ui/feed/PostStatusBadges.tsx
1641
- #: src/ui/pages/ArchivePage.tsx
1642
1853
  msgid "Private"
1643
1854
  msgstr ""
1644
1855
 
1645
1856
  #. @context: Archive visibility filter - public posts
1646
1857
  #. @context: Compose publish settings visibility option
1858
+ #: src/lib/filter-dimensions.ts
1647
1859
  #: src/ui/compose/ComposeDialog.tsx
1648
- #: src/ui/pages/ArchivePage.tsx
1649
1860
  msgid "Public"
1650
1861
  msgstr ""
1651
1862
 
@@ -1678,6 +1889,11 @@ msgstr ""
1678
1889
  msgid "Published!"
1679
1890
  msgstr ""
1680
1891
 
1892
+ #. @context: Toast shown while a post is being published
1893
+ #: src/ui/compose/ComposeDialog.tsx
1894
+ msgid "Publishing..."
1895
+ msgstr ""
1896
+
1681
1897
  #. @context: Search highlight text on sample page
1682
1898
  #: src/ui/pages/ThemeSamplePage.tsx
1683
1899
  msgid "quiet design"
@@ -1705,11 +1921,9 @@ msgstr ""
1705
1921
  msgid "Quoted or highlighted passages should feel like annotations, not warnings."
1706
1922
  msgstr ""
1707
1923
 
1708
- #. @context: Archive feed title segment for quote format filter
1709
1924
  #. @context: Placeholder for the custom collections link label
1710
1925
  #. @context: Post format label plural - quotes
1711
- #: src/routes/pages/archive.tsx
1712
- #: src/ui/pages/ArchivePage.tsx
1926
+ #: src/lib/filter-dimensions.ts
1713
1927
  #: src/ui/shared/collection-management-labels.ts
1714
1928
  msgid "Quotes"
1715
1929
  msgstr ""
@@ -1719,6 +1933,21 @@ msgstr ""
1719
1933
  msgid "Rate"
1720
1934
  msgstr ""
1721
1935
 
1936
+ #. @context: Help text under the compose language field
1937
+ #: src/ui/compose/ComposeDialog.tsx
1938
+ msgid "Read from what you write"
1939
+ msgstr ""
1940
+
1941
+ #. @context: Help text under the compose language field once a language has been detected
1942
+ #: src/ui/compose/ComposeDialog.tsx
1943
+ msgid "Read from what you write — looks like {language}"
1944
+ msgstr ""
1945
+
1946
+ #. @context: Link out of an empty language view of a collection
1947
+ #: src/ui/pages/CollectionPage.tsx
1948
+ msgid "Read it in {language}"
1949
+ msgstr ""
1950
+
1722
1951
  #. @context: Collapse an expanded untitled note back to its preview in the feed
1723
1952
  #: src/ui/feed/NoteCard.tsx
1724
1953
  msgid "Read less"
@@ -1759,6 +1988,11 @@ msgstr ""
1759
1988
  msgid "Remove attachment"
1760
1989
  msgstr ""
1761
1990
 
1991
+ #. @context: Smart collection dialog condition row button
1992
+ #: src/ui/shared/smart-collection-labels.ts
1993
+ msgid "Remove condition"
1994
+ msgstr ""
1995
+
1762
1996
  #. @context: Tooltip for divider delete button
1763
1997
  #: src/ui/shared/CollectionsManager.tsx
1764
1998
  msgid "Remove Divider"
@@ -1780,6 +2014,8 @@ msgid "Replace image"
1780
2014
  msgstr ""
1781
2015
 
1782
2016
  #. @context: Archive tile label for multiple thread replies
2017
+ #. @context: Post filter dimension name - whether a thread has replies
2018
+ #: src/lib/filter-dimensions.ts
1783
2019
  #: src/ui/pages/ArchivePage.tsx
1784
2020
  msgid "Replies"
1785
2021
  msgstr ""
@@ -1823,8 +2059,18 @@ msgstr ""
1823
2059
  msgid "Reverse logo"
1824
2060
  msgstr ""
1825
2061
 
2062
+ #. @context: Built-in navigation label for the feed. Keep the acronym in every locale — it is what readers scan for. The document /feed serves is Atom, but RSS is the category name readers and feed apps use, and it matches the vocabulary the rest of the product already speaks (systemKey `rss`, `mainRssFeed`). 'Feed' would collide with Featured/Latest/All, which are feeds too.
2063
+ #: src/ui/shared/navigation-labels.ts
2064
+ msgctxt "nav"
2065
+ msgid "RSS"
2066
+ msgstr ""
2067
+
2068
+ #. @context: Tooltip for the RSS feed icon beside a collection in the collections directory
2069
+ #. @context: Tooltip for the RSS feed link on a collection page
1826
2070
  #. @context: Tooltip for the RSS feed link on a collection page
1827
2071
  #: src/ui/pages/CollectionPage.tsx
2072
+ #: src/ui/pages/SmartCollectionPage.tsx
2073
+ #: src/ui/shared/CollectionDirectory.tsx
1828
2074
  msgid "RSS feed"
1829
2075
  msgstr ""
1830
2076
 
@@ -1882,6 +2128,11 @@ msgstr ""
1882
2128
  msgid "Save to drafts?"
1883
2129
  msgstr ""
1884
2130
 
2131
+ #. @context: Toast shown while a draft or an edited post is being saved
2132
+ #: src/ui/compose/ComposeDialog.tsx
2133
+ msgid "Saving..."
2134
+ msgstr ""
2135
+
1885
2136
  #. @context: Search page title
1886
2137
  #. @context: Search submit button
1887
2138
  #: src/ui/pages/SearchPage.tsx
@@ -1921,6 +2172,11 @@ msgstr ""
1921
2172
  msgid "Shared links"
1922
2173
  msgstr ""
1923
2174
 
2175
+ #. @context: Button that brings back the folded-away original while writing its translation
2176
+ #: src/ui/compose/ComposeDialog.tsx
2177
+ msgid "Show"
2178
+ msgstr ""
2179
+
1924
2180
  #. @context: Archive view option - grid
1925
2181
  #: src/ui/pages/ArchivePage.tsx
1926
2182
  msgid "Show as a grid of tiles"
@@ -1949,9 +2205,9 @@ msgstr ""
1949
2205
  msgid "Show more"
1950
2206
  msgstr ""
1951
2207
 
1952
- #. @context: Description for the settings system navigation toggle
1953
- #: src/ui/shared/navigation-labels.ts
1954
- msgid "Shows 'Settings' when logged in, 'Sign in' when logged out"
2208
+ #. @context: Accessible name of the button that brings back the folded-away post being translated
2209
+ #: src/ui/compose/ComposeDialog.tsx
2210
+ msgid "Show the original"
1955
2211
  msgstr ""
1956
2212
 
1957
2213
  #. @context: Built-in navigation label shown when auth is required
@@ -1974,12 +2230,9 @@ msgstr ""
1974
2230
  msgid "Sign in to start writing."
1975
2231
  msgstr ""
1976
2232
 
1977
- #. @context: Archive feed title segment for hasReplies=0 filter
1978
- #: src/routes/pages/archive.tsx
1979
- msgid "single posts"
1980
- msgstr ""
1981
-
1982
2233
  #. @context: Archive thread filter - posts without replies
2234
+ #. @context: Archive thread filter - posts without replies
2235
+ #: src/lib/filter-dimensions.ts
1983
2236
  #: src/ui/pages/ArchivePage.tsx
1984
2237
  msgid "Single posts"
1985
2238
  msgstr ""
@@ -1989,16 +2242,28 @@ msgstr ""
1989
2242
  msgid "Site accent"
1990
2243
  msgstr ""
1991
2244
 
1992
- #. @context: Setup form field - site name
1993
- #: src/routes/auth/setup.tsx
1994
- msgid "Site Name"
1995
- msgstr ""
1996
-
1997
2245
  #. @context: Description for the favicon asset card
1998
2246
  #: src/ui/pages/BrandPage.tsx
1999
2247
  msgid "Small browser icon used in tabs and bookmarks."
2000
2248
  msgstr ""
2001
2249
 
2250
+ #. @context: Name of a collection whose members come from conditions
2251
+ #: src/ui/shared/smart-collection-labels.ts
2252
+ msgid "Smart Collection"
2253
+ msgstr ""
2254
+
2255
+ #. @context: Confirmation after deleting a smart collection
2256
+ #. @context: Confirmation after deleting a smart collection
2257
+ #: src/ui/pages/SmartCollectionPage.tsx
2258
+ #: src/ui/shared/CollectionsManager.tsx
2259
+ msgid "Smart collection deleted."
2260
+ msgstr ""
2261
+
2262
+ #. @context: Confirmation after saving a smart collection
2263
+ #: src/ui/shared/smart-collection-labels.ts
2264
+ msgid "Smart collection saved."
2265
+ msgstr ""
2266
+
2002
2267
  #. @context: Asset keyword on the public brand asset page
2003
2268
  #: src/ui/pages/BrandPage.tsx
2004
2269
  msgid "Social preview"
@@ -2016,19 +2281,19 @@ msgstr ""
2016
2281
 
2017
2282
  #. @context: Fallback validation error for compose form
2018
2283
  #. @context: Fallback validation error for password reset form
2019
- #. @context: Fallback validation error for setup form
2020
2284
  #. @context: Fallback validation error for sign-in form
2021
2285
  #. @context: Fallback validation error for thread compose form
2022
2286
  #: src/routes/auth/reset.tsx
2023
- #: src/routes/auth/setup.tsx
2024
2287
  #: src/routes/auth/signin.tsx
2025
2288
  #: src/routes/compose.tsx
2026
2289
  #: src/routes/compose.tsx
2027
2290
  msgid "Something doesn't look right. Check the form and try again."
2028
- msgstr ""
2291
+ msgstr "有内容填写不正确,检查后重试。"
2029
2292
 
2293
+ #. @context: Sort menu label on collection detail page
2030
2294
  #. @context: Sort menu label on collection detail page
2031
2295
  #: src/ui/pages/CollectionPage.tsx
2296
+ #: src/ui/pages/SmartCollectionPage.tsx
2032
2297
  msgid "Sort"
2033
2298
  msgstr ""
2034
2299
 
@@ -2047,11 +2312,6 @@ msgstr ""
2047
2312
  msgid "Sort order"
2048
2313
  msgstr ""
2049
2314
 
2050
- #. @context: Collection form field
2051
- #: src/ui/shared/collection-management-labels.ts
2052
- msgid "Sort Order"
2053
- msgstr ""
2054
-
2055
2315
  #. @context: Compose quote source link placeholder
2056
2316
  #: src/ui/compose/ComposeDialog.tsx
2057
2317
  msgid "Source link (optional)"
@@ -2087,6 +2347,24 @@ msgstr ""
2087
2347
  msgid "Stay sturdy and readable."
2088
2348
  msgstr ""
2089
2349
 
2350
+ #. @context: Browser page title for the subscribe page
2351
+ #. @context: Page title for the feed subscription page
2352
+ #: src/routes/pages/subscribe.tsx
2353
+ #: src/ui/pages/SubscribePage.tsx
2354
+ msgid "Subscribe"
2355
+ msgstr ""
2356
+
2357
+ #. @context: Built-in navigation label for the page that explains the site's feeds. Names what the reader wants to do, unlike the sibling RSS entry which names the format and links at the Atom document itself.
2358
+ #: src/ui/shared/navigation-labels.ts
2359
+ msgctxt "nav"
2360
+ msgid "Subscribe"
2361
+ msgstr ""
2362
+
2363
+ #. @context: Subscribe page note that subscribing is one-sided and how to undo it
2364
+ #: src/ui/pages/SubscribePage.tsx
2365
+ msgid "Subscribing creates no account here. To stop, delete the address from your reader."
2366
+ msgstr ""
2367
+
2090
2368
  #. @context: Compose custom slug helper label for the suggested slug
2091
2369
  #: src/ui/compose/ComposeDialog.tsx
2092
2370
  msgid "Suggested link"
@@ -2141,8 +2419,8 @@ msgstr ""
2141
2419
 
2142
2420
  #. @context: Archive media filter - text file attachments
2143
2421
  #. @context: Attached text panel title
2422
+ #: src/lib/filter-dimensions.ts
2144
2423
  #: src/ui/compose/ComposeDialog.tsx
2145
- #: src/ui/pages/ArchivePage.tsx
2146
2424
  msgid "Text attachment"
2147
2425
  msgstr ""
2148
2426
 
@@ -2176,11 +2454,21 @@ msgstr ""
2176
2454
  msgid "The image should sit quietly inside the article instead of feeling like a card preview."
2177
2455
  msgstr ""
2178
2456
 
2457
+ #. @context: Accessible name of the scrollable panel holding the post being translated
2458
+ #: src/ui/compose/ComposeDialog.tsx
2459
+ msgid "The original"
2460
+ msgstr ""
2461
+
2179
2462
  #. @context: Blockquote on the theme sample page
2180
2463
  #: src/ui/pages/ThemeSamplePage.tsx
2181
2464
  msgid "The right accent should disappear into the writing until you need it."
2182
2465
  msgstr ""
2183
2466
 
2467
+ #. @context: Subscribe page description of the latest posts feed. The home page and this feed run the same query, so they carry the same posts.
2468
+ #: src/routes/pages/subscribe.tsx
2469
+ msgid "The same posts as the home page."
2470
+ msgstr ""
2471
+
2184
2472
  #. @context: Section heading for theme picker pills
2185
2473
  #: src/ui/pages/ThemeSamplePage.tsx
2186
2474
  msgid "Theme"
@@ -2203,6 +2491,11 @@ msgstr ""
2203
2491
  msgid "This article is here to answer a specific question: does the default accent still feel calm once it has to carry a full reading experience?"
2204
2492
  msgstr ""
2205
2493
 
2494
+ #. @context: Toast shown when the composer cannot write its local draft to browser storage
2495
+ #: src/ui/compose/ComposeDialog.tsx
2496
+ msgid "This browser can't keep a local copy. Save as a draft."
2497
+ msgstr ""
2498
+
2206
2499
  #. @context: Empty state message
2207
2500
  #: src/ui/pages/CollectionPage.tsx
2208
2501
  msgid "This collection is empty. Add threads from the editor."
@@ -2239,6 +2532,11 @@ msgstr ""
2239
2532
  msgid "This link is reserved. Choose something else."
2240
2533
  msgstr ""
2241
2534
 
2535
+ #. @context: Collection editing dialog — the typed collection link is already in use
2536
+ #: src/ui/shared/collection-management-labels.ts
2537
+ msgid "This link is taken. Choose another."
2538
+ msgstr ""
2539
+
2242
2540
  #. @context: Explanation in the draft preview status bar
2243
2541
  #: src/ui/shared/DraftPreviewBar.tsx
2244
2542
  msgid "This post isn’t published."
@@ -2259,6 +2557,11 @@ msgstr ""
2259
2557
  msgid "This sign-in link has expired. Return to "
2260
2558
  msgstr ""
2261
2559
 
2560
+ #. @context: Subscribe page introduction, above the feed addresses. States the format the site serves, then the one action to take.
2561
+ #: src/ui/pages/SubscribePage.tsx
2562
+ msgid "This site publishes Atom feeds. Copy one of these addresses into a feed reader."
2563
+ msgstr ""
2564
+
2262
2565
  #. @context: Error shown when a hosted upload would exceed the shared account media limit
2263
2566
  #. @context: Error shown when a hosted upload would exceed the shared account media limit
2264
2567
  #: src/routes/api/upload-multipart.ts
@@ -2275,10 +2578,14 @@ msgstr ""
2275
2578
  #. @context: Archive page summary unit for a single matching thread
2276
2579
  #. @context: Singular thread count label
2277
2580
  #. @context: Singular thread count label
2581
+ #. @context: Singular thread count label
2582
+ #. @context: Singular thread count label on collection detail page
2278
2583
  #. @context: Singular thread count label on collection detail page
2279
2584
  #: src/ui/pages/ArchivePage.tsx
2280
2585
  #: src/ui/pages/ArchivePage.tsx
2281
2586
  #: src/ui/pages/CollectionPage.tsx
2587
+ #: src/ui/pages/SmartCollectionPage.tsx
2588
+ #: src/ui/shared/CollectionDirectory.tsx
2282
2589
  #: src/ui/shared/CollectionDirectory.tsx
2283
2590
  #: src/ui/shared/CollectionsManager.tsx
2284
2591
  msgid "thread"
@@ -2294,22 +2601,26 @@ msgstr ""
2294
2601
  msgid "Thread accents"
2295
2602
  msgstr ""
2296
2603
 
2297
- #. @context: Archive feed title segment for hasReplies=1 filter
2298
2604
  #. @context: Archive month header count unit for multiple threads
2299
2605
  #. @context: Archive page summary unit for multiple matching threads
2300
2606
  #. @context: Plural thread count label
2301
2607
  #. @context: Plural thread count label
2608
+ #. @context: Plural thread count label
2609
+ #. @context: Plural thread count label on collection detail page
2302
2610
  #. @context: Plural thread count label on collection detail page
2303
- #: src/routes/pages/archive.tsx
2304
2611
  #: src/ui/pages/ArchivePage.tsx
2305
2612
  #: src/ui/pages/ArchivePage.tsx
2306
2613
  #: src/ui/pages/CollectionPage.tsx
2614
+ #: src/ui/pages/SmartCollectionPage.tsx
2615
+ #: src/ui/shared/CollectionDirectory.tsx
2307
2616
  #: src/ui/shared/CollectionDirectory.tsx
2308
2617
  #: src/ui/shared/CollectionsManager.tsx
2309
2618
  msgid "threads"
2310
2619
  msgstr ""
2311
2620
 
2312
2621
  #. @context: Archive thread filter - thread roots with replies
2622
+ #. @context: Archive thread filter - thread roots with replies
2623
+ #: src/lib/filter-dimensions.ts
2313
2624
  #: src/ui/pages/ArchivePage.tsx
2314
2625
  msgid "Threads"
2315
2626
  msgstr ""
@@ -2322,14 +2633,20 @@ msgstr ""
2322
2633
  #. @context: Collection form field
2323
2634
  #. @context: Compose toolbar - show or hide the title field
2324
2635
  #. @context: Input label on sample page
2636
+ #. @context: Post filter dimension name - whether a post is titled
2637
+ #. @context: Smart collection dialog field
2638
+ #: src/lib/filter-dimensions.ts
2325
2639
  #: src/ui/compose/ComposeDialog.tsx
2326
2640
  #: src/ui/pages/ThemeSamplePage.tsx
2327
2641
  #: src/ui/shared/collection-management-labels.ts
2642
+ #: src/ui/shared/smart-collection-labels.ts
2328
2643
  msgid "Title"
2329
2644
  msgstr ""
2330
2645
 
2331
2646
  #. @context: Archive filter - notes that have a title
2332
2647
  #. @context: Archive filter - notes that have a title
2648
+ #. @context: Archive filter - notes that have a title
2649
+ #: src/lib/filter-dimensions.ts
2333
2650
  #: src/ui/pages/ArchivePage.tsx
2334
2651
  #: src/ui/pages/ArchivePage.tsx
2335
2652
  msgid "Titled"
@@ -2345,6 +2662,21 @@ msgstr ""
2345
2662
  msgid "Toggle header row"
2346
2663
  msgstr ""
2347
2664
 
2665
+ #. @context: Divider between the original post and the editor writing its translation, when the target language is not known yet
2666
+ #: src/ui/compose/ComposeDialog.tsx
2667
+ msgid "Translating"
2668
+ msgstr ""
2669
+
2670
+ #. @context: Divider between the original post above and the editor below, naming the language being written
2671
+ #: src/ui/compose/ComposeDialog.tsx
2672
+ msgid "Translating into {language}"
2673
+ msgstr ""
2674
+
2675
+ #. @context: Compose banner shown while writing a translation of an existing post
2676
+ #: src/ui/compose/ComposeDialog.tsx
2677
+ msgid "Translation of “{title}”"
2678
+ msgstr ""
2679
+
2348
2680
  #. @context: Usage label for the square logo PNG asset card
2349
2681
  #: src/ui/pages/BrandPage.tsx
2350
2682
  msgid "Transparent square"
@@ -2365,9 +2697,11 @@ msgstr ""
2365
2697
  msgid "Type the quote..."
2366
2698
  msgstr ""
2367
2699
 
2700
+ #. @context: Archive filter - notes without a title
2368
2701
  #. @context: Archive filter - notes without a title
2369
2702
  #. @context: Archive filter - notes without a title
2370
2703
  #. @context: Compose note title placeholder. States what the note is while the field is empty rather than asking for a title — untitled notes are a normal kind of note here, and Archive files them under this same word.
2704
+ #: src/lib/filter-dimensions.ts
2371
2705
  #: src/ui/compose/ComposeDialog.tsx
2372
2706
  #: src/ui/pages/ArchivePage.tsx
2373
2707
  #: src/ui/pages/ArchivePage.tsx
@@ -2437,7 +2771,7 @@ msgid "Use this page to judge buttons, links, cards, forms, thread accents, and
2437
2771
  msgstr ""
2438
2772
 
2439
2773
  #. @context: Archive media filter - video
2440
- #: src/ui/pages/ArchivePage.tsx
2774
+ #: src/lib/filter-dimensions.ts
2441
2775
  msgid "Video"
2442
2776
  msgstr ""
2443
2777
 
@@ -2451,19 +2785,16 @@ msgstr ""
2451
2785
  msgid "View earlier notes in this thread"
2452
2786
  msgstr ""
2453
2787
 
2454
- #. @context: Archive grid/list toggle group label
2455
- #: src/ui/pages/ArchivePage.tsx
2456
- msgid "View mode"
2457
- msgstr ""
2458
-
2459
2788
  #. @context: Compose publish settings section label
2789
+ #. @context: Post filter dimension name - who can see a post
2790
+ #: src/lib/filter-dimensions.ts
2460
2791
  #: src/ui/compose/ComposeDialog.tsx
2461
2792
  msgid "Visibility"
2462
2793
  msgstr ""
2463
2794
 
2464
- #. @context: Setup page welcome heading
2465
- #: src/routes/auth/setup.tsx
2466
- msgid "Welcome to Jant"
2795
+ #. @context: Subscribe page heading over the explanation of feed readers, for readers who have not used one
2796
+ #: src/ui/pages/SubscribePage.tsx
2797
+ msgid "What a feed reader does"
2467
2798
  msgstr ""
2468
2799
 
2469
2800
  #. @context: Table header in the sample detail article
@@ -2521,24 +2852,20 @@ msgstr ""
2521
2852
  msgid "Why the default accent should feel written, not branded"
2522
2853
  msgstr ""
2523
2854
 
2524
- #. @context: Archive feed title segment for hasMedia=1 filter
2525
- #: src/routes/pages/archive.tsx
2526
- msgid "with media"
2527
- msgstr ""
2528
-
2529
- #. @context: Archive feed title segment for hasTitle=1 filter
2530
- #: src/routes/pages/archive.tsx
2531
- msgid "with title"
2532
- msgstr ""
2533
-
2534
- #. @context: Archive feed title segment for hasMedia=0 filter
2535
- #: src/routes/pages/archive.tsx
2536
- msgid "without media"
2855
+ #. @context: Archive filter - posts carrying any media attachment
2856
+ #. @context: Archive filter - posts carrying any media attachment
2857
+ #. @context: Archive filter - posts carrying any media attachment
2858
+ #: src/lib/filter-dimensions.ts
2859
+ #: src/ui/pages/ArchivePage.tsx
2860
+ #: src/ui/shared/smart-collection-labels.ts
2861
+ msgid "With media"
2537
2862
  msgstr ""
2538
2863
 
2539
- #. @context: Archive feed title segment for hasTitle=0 filter
2540
- #: src/routes/pages/archive.tsx
2541
- msgid "without title"
2864
+ #. @context: Archive filter - posts with no media attachment
2865
+ #. @context: Archive filter - posts with no media attachment
2866
+ #: src/lib/filter-dimensions.ts
2867
+ #: src/ui/shared/smart-collection-labels.ts
2868
+ msgid "Without media"
2542
2869
  msgstr ""
2543
2870
 
2544
2871
  #. @context: Compose publish settings hint for quiet reply switch
@@ -2556,6 +2883,11 @@ msgstr ""
2556
2883
  msgid "Wrong email or password. Check your credentials and try again."
2557
2884
  msgstr ""
2558
2885
 
2886
+ #. @context: Post filter dimension name - year of publication
2887
+ #: src/lib/filter-dimensions.ts
2888
+ msgid "Year"
2889
+ msgstr ""
2890
+
2559
2891
  #. @context: Confirm close action sheet title when editing a published post
2560
2892
  #: src/ui/compose/ComposeDialog.tsx
2561
2893
  msgid "You have unsaved changes"