@jant/core 0.6.15 → 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 (537) hide show
  1. package/README.md +11 -11
  2. package/bin/commands/assets/upload.js +192 -15
  3. package/bin/commands/import-site.js +67 -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-C-oi_t8W.js → app-K_Aa1MMn.js} +52623 -13193
  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-CsFx6F_M.js → github-sync-BPAvT999.js} +2343 -110
  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__/mise-config.test.ts +22 -0
  51. package/src/__tests__/stylesheet-audience.test.ts +159 -0
  52. package/src/__tests__/stylesheet-breakpoints.test.ts +183 -0
  53. package/src/app.tsx +71 -16
  54. package/src/auth.ts +18 -1
  55. package/src/client/__tests__/collection-page-actions.test.ts +51 -2
  56. package/src/client/__tests__/compose-bridge-image-upload.test.ts +196 -0
  57. package/src/client/__tests__/compose-bridge-video-poster.test.ts +159 -0
  58. package/src/client/__tests__/compose-bridge.test.ts +524 -2
  59. package/src/client/__tests__/compose-launch.test.ts +62 -1
  60. package/src/client/__tests__/compose-shortcuts.test.ts +57 -8
  61. package/src/client/__tests__/compose-triggers.test.ts +90 -0
  62. package/src/client/__tests__/copy-field.test.ts +162 -0
  63. package/src/client/__tests__/custom-url-menu.test.ts +127 -6
  64. package/src/client/__tests__/image-processor.test.ts +324 -2
  65. package/src/client/__tests__/lazy-entries.test.ts +92 -0
  66. package/src/client/__tests__/media-scroll-hint.test.ts +155 -0
  67. package/src/client/__tests__/runtime-paths.test.ts +84 -0
  68. package/src/client/__tests__/smart-collection-page-actions.test.ts +158 -0
  69. package/src/client/__tests__/toast.test.ts +88 -1
  70. package/src/client/__tests__/video-processor-probe.test.ts +175 -0
  71. package/src/client/__tests__/video-processor.test.ts +181 -0
  72. package/src/client/audio-processor.ts +24 -15
  73. package/src/client/audio-waveform.ts +49 -0
  74. package/src/client/collection-dialog-host.ts +72 -0
  75. package/src/client/collection-navigation.ts +51 -16
  76. package/src/client/collection-page-actions.ts +26 -0
  77. package/src/client/components/__tests__/compose-format-convert.test.ts +0 -19
  78. package/src/client/components/__tests__/jant-collection-dialog.test.ts +329 -0
  79. package/src/client/components/__tests__/jant-collection-directory.test.ts +274 -10
  80. package/src/client/components/__tests__/jant-collection-form.test.ts +59 -178
  81. package/src/client/components/__tests__/jant-command-palette.test.ts +79 -0
  82. package/src/client/components/__tests__/jant-compose-dialog-draft-storage.test.ts +340 -0
  83. package/src/client/components/__tests__/jant-compose-dialog.test.ts +3283 -389
  84. package/src/client/components/__tests__/jant-compose-editor.test.ts +581 -86
  85. package/src/client/components/__tests__/jant-compose-fullscreen.test.ts +34 -89
  86. package/src/client/components/__tests__/jant-locale-picker.test.ts +207 -0
  87. package/src/client/components/__tests__/jant-nav-manager.test.ts +234 -15
  88. package/src/client/components/__tests__/jant-post-menu.test.ts +413 -2
  89. package/src/client/components/__tests__/jant-post-picker.test.ts +197 -0
  90. package/src/client/components/__tests__/jant-settings-avatar.test.ts +15 -12
  91. package/src/client/components/__tests__/jant-settings-general.test.ts +541 -172
  92. package/src/client/components/__tests__/jant-settings-language.test.ts +851 -0
  93. package/src/client/components/__tests__/jant-smart-collection-dialog.test.ts +665 -0
  94. package/src/client/components/collection-dialog-types.ts +49 -0
  95. package/src/client/components/collection-manager-types.ts +32 -1
  96. package/src/client/components/collection-types.ts +1 -15
  97. package/src/client/components/compose-format-convert.ts +5 -1
  98. package/src/client/components/compose-types.ts +121 -3
  99. package/src/client/components/jant-collection-dialog.ts +722 -0
  100. package/src/client/components/jant-collection-directory.ts +567 -182
  101. package/src/client/components/jant-collection-form.ts +53 -232
  102. package/src/client/components/jant-command-palette.ts +106 -49
  103. package/src/client/components/jant-compose-dialog.ts +2757 -1194
  104. package/src/client/components/jant-compose-editor.ts +866 -397
  105. package/src/client/components/jant-compose-fullscreen.ts +53 -47
  106. package/src/client/components/jant-config-editor.ts +65 -53
  107. package/src/client/components/jant-confirm-dialog.ts +13 -11
  108. package/src/client/components/jant-locale-picker.ts +418 -0
  109. package/src/client/components/jant-media-lightbox.ts +146 -136
  110. package/src/client/components/jant-nav-manager.ts +690 -366
  111. package/src/client/components/jant-post-menu.ts +1142 -268
  112. package/src/client/components/jant-post-picker.ts +324 -0
  113. package/src/client/components/jant-repo-picker.ts +138 -106
  114. package/src/client/components/jant-settings-avatar.ts +31 -27
  115. package/src/client/components/jant-settings-general.ts +617 -543
  116. package/src/client/components/jant-settings-language.ts +1087 -0
  117. package/src/client/components/jant-smart-collection-dialog.ts +1021 -0
  118. package/src/client/components/jant-text-preview.ts +94 -86
  119. package/src/client/components/nav-manager-types.ts +62 -1
  120. package/src/client/components/settings-types.ts +14 -29
  121. package/src/client/components/smart-collection-conditions.ts +285 -0
  122. package/src/client/components/smart-collection-dialog-types.ts +68 -0
  123. package/src/client/compose-bridge.ts +336 -242
  124. package/src/client/compose-launch.ts +89 -2
  125. package/src/client/compose-shortcuts.ts +9 -7
  126. package/src/client/compose-triggers.ts +50 -0
  127. package/src/client/copy-field.ts +108 -0
  128. package/src/client/custom-url-menu.ts +60 -4
  129. package/src/client/icons.ts +14 -0
  130. package/src/client/image-plan.ts +165 -0
  131. package/src/client/image-processor.ts +195 -117
  132. package/src/client/image-worker-client.ts +45 -0
  133. package/src/client/image-worker.ts +135 -0
  134. package/src/client/lazy-entries.ts +95 -0
  135. package/src/client/lazy-slugify.ts +2 -2
  136. package/src/client/media-scroll-hint.ts +43 -2
  137. package/src/client/mediabunny.ts +29 -0
  138. package/src/client/post-picker.ts +41 -0
  139. package/src/client/post-refresh.ts +135 -0
  140. package/src/client/runtime-paths.ts +74 -1
  141. package/src/client/settings-bridge.ts +4 -10
  142. package/src/client/site-header-nav.js +18 -6
  143. package/src/client/smart-collection-dialog-host.ts +116 -0
  144. package/src/client/smart-collection-page-actions.ts +208 -0
  145. package/src/client/tiptap/__tests__/bubble-menu.test.ts +110 -0
  146. package/src/client/tiptap/__tests__/floating-position.test.ts +136 -1
  147. package/src/client/tiptap/__tests__/inline-image-upload.test.ts +37 -0
  148. package/src/client/tiptap/__tests__/link-input-rules.test.ts +121 -0
  149. package/src/client/tiptap/bubble-menu.ts +47 -16
  150. package/src/client/tiptap/floating-position.ts +216 -2
  151. package/src/client/tiptap/inline-image-upload.ts +7 -3
  152. package/src/client/tiptap/link-input-rules.ts +4 -4
  153. package/src/client/tiptap/link-toolbar.ts +22 -9
  154. package/src/client/toast.ts +143 -38
  155. package/src/client/types/vite-worker.d.ts +12 -0
  156. package/src/client/upload-with-metadata.ts +3 -13
  157. package/src/client/video-processor.ts +351 -107
  158. package/src/client-auth.ts +14 -31
  159. package/src/client-compose.ts +19 -0
  160. package/src/client-manage.ts +13 -0
  161. package/src/client-settings.ts +14 -0
  162. package/src/client-site.ts +10 -3
  163. package/src/client.ts +4 -0
  164. package/src/db/__tests__/backfill-nav-label-mirrors.test.ts +149 -0
  165. package/src/db/__tests__/backfill-thread-activity.test.ts +234 -0
  166. package/src/db/__tests__/schema-enum-sources.test.ts +33 -0
  167. package/src/db/__tests__/smart-collection-placement.test.ts +402 -0
  168. package/src/db/__tests__/thread-activity.test.ts +113 -0
  169. package/src/db/backfills/0005_split_thread_activity_from_quiet_replies.sql +68 -0
  170. package/src/db/backfills/0006_clear_mirrored_page_nav_labels.sql +31 -0
  171. package/src/db/migrations/0031_many_ego.sql +3 -0
  172. package/src/db/migrations/0032_married_tomas.sql +3 -0
  173. package/src/db/migrations/0033_busy_johnny_storm.sql +198 -0
  174. package/src/db/migrations/0034_cheerful_rumiko_fujikawa.sql +35 -0
  175. package/src/db/migrations/meta/0031_snapshot.json +2562 -0
  176. package/src/db/migrations/meta/0032_snapshot.json +2582 -0
  177. package/src/db/migrations/meta/0033_snapshot.json +2816 -0
  178. package/src/db/migrations/meta/0034_snapshot.json +2816 -0
  179. package/src/db/migrations/meta/_journal.json +28 -0
  180. package/src/db/migrations/pg/0029_rare_hairball.sql +3 -0
  181. package/src/db/migrations/pg/0030_abandoned_nighthawk.sql +3 -0
  182. package/src/db/migrations/pg/0031_strong_ultimatum.sql +128 -0
  183. package/src/db/migrations/pg/0032_furry_multiple_man.sql +6 -0
  184. package/src/db/migrations/pg/meta/0029_snapshot.json +3289 -0
  185. package/src/db/migrations/pg/meta/0030_snapshot.json +3329 -0
  186. package/src/db/migrations/pg/meta/0031_snapshot.json +3660 -0
  187. package/src/db/migrations/pg/meta/0032_snapshot.json +3660 -0
  188. package/src/db/migrations/pg/meta/_journal.json +28 -0
  189. package/src/db/pg/schema.ts +213 -27
  190. package/src/db/post-visibility.ts +117 -0
  191. package/src/db/schema.ts +242 -27
  192. package/src/db/thread-activity.ts +101 -0
  193. package/src/i18n/__tests__/detect.test.ts +26 -81
  194. package/src/i18n/__tests__/supported-locales.test.ts +83 -0
  195. package/src/i18n/context.tsx +12 -2
  196. package/src/i18n/detect.ts +7 -66
  197. package/src/i18n/locales/glossary.zh-Hans.yml +44 -4
  198. package/src/i18n/locales/glossary.zh-Hant.yml +44 -4
  199. package/src/i18n/locales/public/en.po +568 -168
  200. package/src/i18n/locales/public/en.ts +1 -1
  201. package/src/i18n/locales/public/zh-Hans.po +562 -162
  202. package/src/i18n/locales/public/zh-Hans.ts +1 -1
  203. package/src/i18n/locales/public/zh-Hant.po +562 -162
  204. package/src/i18n/locales/public/zh-Hant.ts +1 -1
  205. package/src/i18n/locales/settings/en.po +551 -69
  206. package/src/i18n/locales/settings/en.ts +1 -1
  207. package/src/i18n/locales/settings/zh-Hans.po +597 -115
  208. package/src/i18n/locales/settings/zh-Hans.ts +1 -1
  209. package/src/i18n/locales/settings/zh-Hant.po +610 -128
  210. package/src/i18n/locales/settings/zh-Hant.ts +1 -1
  211. package/src/i18n/locales.ts +94 -0
  212. package/src/i18n/middleware.ts +12 -2
  213. package/src/i18n/supported-locales.ts +80 -0
  214. package/src/lib/__tests__/api-settings.test.ts +11 -2
  215. package/src/lib/__tests__/asset-path.test.ts +92 -0
  216. package/src/lib/__tests__/deferred.test.ts +90 -0
  217. package/src/lib/__tests__/discover-ping.test.ts +89 -0
  218. package/src/lib/__tests__/discover.test.ts +410 -0
  219. package/src/lib/__tests__/feed-policy.test.ts +26 -0
  220. package/src/lib/__tests__/feed.test.ts +1691 -12
  221. package/src/lib/__tests__/filter-dimensions.test.ts +341 -0
  222. package/src/lib/__tests__/hosted-signin.test.ts +1 -1
  223. package/src/lib/__tests__/http-cache.test.ts +162 -0
  224. package/src/lib/__tests__/jant-docs-dev.test.ts +21 -0
  225. package/src/lib/__tests__/jant-docs.test.ts +23 -0
  226. package/src/lib/__tests__/lang-detect.test.ts +231 -0
  227. package/src/lib/__tests__/markdown.test.ts +16 -0
  228. package/src/lib/__tests__/media-helpers.test.ts +81 -0
  229. package/src/lib/__tests__/navigation.test.ts +135 -1
  230. package/src/lib/__tests__/resolve-config.test.ts +64 -3
  231. package/src/lib/__tests__/schemas.test.ts +42 -4
  232. package/src/lib/__tests__/site-unavailable-page.test.ts +25 -0
  233. package/src/lib/__tests__/slug.test.ts +88 -0
  234. package/src/lib/__tests__/slugify.test.ts +85 -0
  235. package/src/lib/__tests__/storage.test.ts +32 -0
  236. package/src/lib/__tests__/thread-fold.test.ts +113 -0
  237. package/src/lib/__tests__/translit.test.ts +87 -0
  238. package/src/lib/__tests__/upload-sideload.test.ts +14 -0
  239. package/src/lib/__tests__/url-fetch.test.ts +1 -2
  240. package/src/lib/__tests__/url.test.ts +93 -34
  241. package/src/lib/__tests__/view-language.test.ts +413 -0
  242. package/src/lib/__tests__/worker-response-cache.test.ts +90 -0
  243. package/src/lib/address.ts +57 -0
  244. package/src/lib/api-posts.ts +12 -0
  245. package/src/lib/asset-path.ts +98 -1
  246. package/src/lib/build-env.ts +16 -0
  247. package/src/lib/collection-groups.ts +5 -1
  248. package/src/lib/collection-paths.ts +3 -10
  249. package/src/lib/constants.ts +28 -3
  250. package/src/lib/copy-field.ts +36 -0
  251. package/src/lib/crypto.ts +40 -0
  252. package/src/lib/csp-builder.ts +2 -1
  253. package/src/lib/deferred.ts +79 -0
  254. package/src/lib/discover-ping.ts +141 -0
  255. package/src/lib/discover.ts +437 -0
  256. package/src/lib/env.ts +134 -0
  257. package/src/lib/errors.ts +33 -0
  258. package/src/lib/feed-policy.ts +236 -2
  259. package/src/lib/feed.ts +1021 -66
  260. package/src/lib/filter-dimensions.ts +1349 -0
  261. package/src/lib/github-sync-site-config.ts +3 -0
  262. package/src/lib/hosted-signin.ts +1 -1
  263. package/src/lib/http-cache.ts +148 -0
  264. package/src/lib/hugo-markdown.ts +21 -0
  265. package/src/lib/icons.ts +9 -2
  266. package/src/lib/ids.ts +3 -0
  267. package/src/lib/jant-docs.ts +42 -0
  268. package/src/lib/lang-detect.ts +308 -0
  269. package/src/lib/link-preview.ts +25 -0
  270. package/src/lib/markdown-manager.ts +6 -1
  271. package/src/lib/media-helpers.ts +13 -1
  272. package/src/lib/navigation.ts +78 -11
  273. package/src/lib/pagination.ts +28 -24
  274. package/src/lib/per-language-surfaces.ts +67 -0
  275. package/src/lib/post-display.ts +42 -9
  276. package/src/lib/post-meta.ts +19 -0
  277. package/src/lib/render.tsx +55 -7
  278. package/src/lib/resolve-config.ts +53 -5
  279. package/src/lib/schemas.ts +201 -10
  280. package/src/lib/site-header-fragment.tsx +2 -1
  281. package/src/lib/site-unavailable-page.ts +47 -0
  282. package/src/lib/slug.ts +51 -7
  283. package/src/lib/slugify.ts +113 -0
  284. package/src/lib/startup-config.ts +4 -6
  285. package/src/lib/storage.ts +7 -0
  286. package/src/lib/summary.ts +50 -0
  287. package/src/lib/thread-fold.ts +161 -0
  288. package/src/lib/time.ts +32 -0
  289. package/src/lib/timeline.ts +81 -10
  290. package/src/lib/tiptap-render.ts +5 -4
  291. package/src/lib/translit.ts +288 -0
  292. package/src/lib/upload.ts +16 -13
  293. package/src/lib/url.ts +188 -24
  294. package/src/lib/version.ts +10 -8
  295. package/src/lib/view-language.ts +436 -0
  296. package/src/lib/view.ts +79 -23
  297. package/src/lib/viewer-context.ts +62 -0
  298. package/src/middleware/__tests__/auth.test.ts +70 -2
  299. package/src/middleware/__tests__/cache-control.test.ts +71 -3
  300. package/src/middleware/__tests__/onboarding.test.ts +76 -5
  301. package/src/middleware/__tests__/secure-headers.test.ts +1 -1
  302. package/src/middleware/__tests__/session.test.ts +181 -33
  303. package/src/middleware/auth.ts +50 -31
  304. package/src/middleware/cache-control.ts +75 -10
  305. package/src/middleware/config.ts +6 -6
  306. package/src/middleware/error-handler.ts +12 -0
  307. package/src/middleware/onboarding.ts +32 -10
  308. package/src/middleware/secure-headers.ts +1 -1
  309. package/src/middleware/session.ts +96 -8
  310. package/src/node/__tests__/cli-migrate.test.ts +21 -19
  311. package/src/node/__tests__/cli-reset-password.test.ts +81 -8
  312. package/src/node/__tests__/cli-runtime-target.test.ts +48 -1
  313. package/src/node/__tests__/cli-site-selection.test.ts +128 -38
  314. package/src/node/__tests__/runtime.test.ts +37 -0
  315. package/src/node/index.ts +1 -0
  316. package/src/preset.css +76 -22
  317. package/src/routes/__tests__/feed-validator.test.ts +156 -0
  318. package/src/routes/api/__tests__/collections.test.ts +114 -0
  319. package/src/routes/api/__tests__/discover.test.ts +222 -0
  320. package/src/routes/api/__tests__/nav-items.test.ts +212 -2
  321. package/src/routes/api/__tests__/palette.test.ts +44 -0
  322. package/src/routes/api/__tests__/post-translations.test.ts +829 -0
  323. package/src/routes/api/__tests__/settings.test.ts +24 -3
  324. package/src/routes/api/__tests__/telegram.test.ts +6 -5
  325. package/src/routes/api/collections.ts +49 -6
  326. package/src/routes/api/custom-urls.ts +0 -1
  327. package/src/routes/api/discover.ts +95 -0
  328. package/src/routes/api/export.ts +3 -0
  329. package/src/routes/api/internal/__tests__/sites.test.ts +42 -2
  330. package/src/routes/api/nav-items.ts +55 -8
  331. package/src/routes/api/posts.ts +172 -9
  332. package/src/routes/api/public/__tests__/archive.test.ts +111 -0
  333. package/src/routes/api/public/__tests__/posts.test.ts +38 -0
  334. package/src/routes/api/public/archive.ts +77 -81
  335. package/src/routes/api/public/posts.ts +30 -6
  336. package/src/routes/api/smart-collections.ts +132 -0
  337. package/src/routes/api/telegram.ts +2 -40
  338. package/src/routes/api/uploads.ts +1 -2
  339. package/src/routes/auth/__tests__/setup-auth.test.ts +137 -0
  340. package/src/routes/auth/__tests__/setup-discover.test.ts +204 -0
  341. package/src/routes/auth/__tests__/setup-flow.test.ts +270 -0
  342. package/src/routes/auth/__tests__/setup-page.test.tsx +329 -0
  343. package/src/routes/auth/__tests__/setup-steps.test.ts +310 -0
  344. package/src/routes/auth/__tests__/setup.test.ts +278 -26
  345. package/src/routes/auth/__tests__/signin.test.ts +135 -0
  346. package/src/routes/auth/setup.tsx +934 -186
  347. package/src/routes/auth/signin.tsx +10 -8
  348. package/src/routes/compose.tsx +11 -2
  349. package/src/routes/dash/__tests__/custom-urls-archive.test.ts +44 -0
  350. package/src/routes/dash/__tests__/custom-urls-page.test.ts +49 -0
  351. package/src/routes/dash/__tests__/delete-account.test.ts +106 -0
  352. package/src/routes/dash/__tests__/settings-discover.test.ts +213 -0
  353. package/src/routes/dash/custom-urls.tsx +1 -37
  354. package/src/routes/dash/settings.tsx +502 -41
  355. package/src/routes/discover-announce.ts +96 -0
  356. package/src/routes/feed/__tests__/feed.test.ts +165 -2
  357. package/src/routes/feed/__tests__/sitemap.test.ts +68 -1
  358. package/src/routes/feed/feed.ts +69 -40
  359. package/src/routes/feed/sitemap.ts +95 -11
  360. package/src/routes/pages/__tests__/archive-indexing.test.ts +200 -0
  361. package/src/routes/pages/__tests__/archive-params.test.ts +657 -1
  362. package/src/routes/pages/__tests__/collection-routing.test.ts +16 -0
  363. package/src/routes/pages/__tests__/collections-feed-links.test.ts +72 -0
  364. package/src/routes/pages/__tests__/collections.test.ts +9 -3
  365. package/src/routes/pages/__tests__/custom-archive-url.test.ts +119 -0
  366. package/src/routes/pages/__tests__/featured.test.ts +6 -2
  367. package/src/routes/pages/__tests__/feed-autodiscovery.test.ts +148 -0
  368. package/src/routes/pages/__tests__/language-routing.test.ts +679 -0
  369. package/src/routes/pages/__tests__/post-preview-partial.test.ts +96 -0
  370. package/src/routes/pages/__tests__/preview.test.ts +3 -1
  371. package/src/routes/pages/__tests__/smart-collection.test.ts +298 -0
  372. package/src/routes/pages/__tests__/subscribe.test.ts +248 -0
  373. package/src/routes/pages/archive.tsx +507 -357
  374. package/src/routes/pages/collection.tsx +94 -96
  375. package/src/routes/pages/collections.tsx +38 -50
  376. package/src/routes/pages/featured.tsx +32 -13
  377. package/src/routes/pages/home.tsx +25 -6
  378. package/src/routes/pages/language.tsx +113 -0
  379. package/src/routes/pages/latest.tsx +26 -16
  380. package/src/routes/pages/new.tsx +3 -0
  381. package/src/routes/pages/page.tsx +183 -19
  382. package/src/routes/pages/partials.tsx +41 -0
  383. package/src/routes/pages/search.tsx +18 -3
  384. package/src/routes/pages/smart-collection.tsx +340 -0
  385. package/src/routes/pages/subscribe.tsx +182 -0
  386. package/src/runtime/__tests__/index.test.ts +19 -0
  387. package/src/runtime/__tests__/node.test.ts +129 -4
  388. package/src/runtime/cloudflare.ts +21 -2
  389. package/src/runtime/index.ts +27 -1
  390. package/src/runtime/node.ts +18 -1
  391. package/src/runtime/site.ts +95 -24
  392. package/src/services/__tests__/auth.test.ts +116 -7
  393. package/src/services/__tests__/collection.test.ts +139 -4
  394. package/src/services/__tests__/language.test.ts +495 -0
  395. package/src/services/__tests__/navigation.test.ts +213 -10
  396. package/src/services/__tests__/path.test.ts +180 -0
  397. package/src/services/__tests__/post-language.test.ts +830 -0
  398. package/src/services/__tests__/post-timeline.test.ts +142 -11
  399. package/src/services/__tests__/post.test.ts +323 -9
  400. package/src/services/__tests__/settings.test.ts +228 -17
  401. package/src/services/__tests__/site-admin.test.ts +5 -5
  402. package/src/services/__tests__/smart-collection.test.ts +651 -0
  403. package/src/services/about-page.ts +22 -1
  404. package/src/services/auth.ts +51 -49
  405. package/src/services/bootstrap.ts +188 -38
  406. package/src/services/collection-directory-position.ts +76 -0
  407. package/src/services/collection.ts +330 -47
  408. package/src/services/custom-url.ts +27 -22
  409. package/src/services/export-theme/assets/client-site.css +1 -1
  410. package/src/services/export-theme/assets/client-site.js +123 -123
  411. package/src/services/export-theme/layouts/_default/rss.xml +77 -1
  412. package/src/services/export-theme/layouts/partials/feed-post-content.xml +105 -2
  413. package/src/services/export-theme/layouts/partials/media-gallery.html +35 -21
  414. package/src/services/export-theme/layouts/partials/pagination.html +14 -13
  415. package/src/services/export-theme/layouts/partials/post-card.html +8 -4
  416. package/src/services/export-theme/layouts/partials/reply.html +2 -1
  417. package/src/services/export-theme/layouts/partials/thread-preview.html +40 -30
  418. package/src/services/export-theme/styles/main.css +13 -1
  419. package/src/services/export.ts +281 -24
  420. package/src/services/index.ts +34 -3
  421. package/src/services/language.ts +412 -0
  422. package/src/services/mcp.ts +3 -1
  423. package/src/services/media.ts +14 -6
  424. package/src/services/navigation.ts +429 -67
  425. package/src/services/path.ts +225 -7
  426. package/src/services/post.ts +1318 -252
  427. package/src/services/search.ts +48 -2
  428. package/src/services/settings.ts +238 -43
  429. package/src/services/site-admin.ts +24 -7
  430. package/src/services/site.ts +77 -1
  431. package/src/services/smart-collection.ts +636 -0
  432. package/src/services/telegram.ts +20 -22
  433. package/src/services/upload-session.ts +1 -3
  434. package/src/style-author.css +27 -0
  435. package/src/styles/components-author.css +1622 -0
  436. package/src/styles/components.css +24 -1585
  437. package/src/styles/site-media.css +20 -6
  438. package/src/styles/tokens.css +144 -13
  439. package/src/styles/ui-author.css +7602 -0
  440. package/src/styles/ui.css +1224 -7276
  441. package/src/types/app-context.ts +7 -0
  442. package/src/types/bindings.ts +3 -0
  443. package/src/types/config.ts +94 -15
  444. package/src/types/constants.ts +188 -16
  445. package/src/types/entities.ts +92 -1
  446. package/src/types/operations.ts +64 -2
  447. package/src/types/props.ts +168 -30
  448. package/src/types/views.ts +61 -1
  449. package/src/ui/__tests__/font-themes.test.ts +52 -12
  450. package/src/ui/compose/ComposeDialog.tsx +215 -21
  451. package/src/ui/compose/ComposePrompt.tsx +1 -5
  452. package/src/ui/compose/__tests__/ComposeDialog.test.tsx +125 -0
  453. package/src/ui/dash/appearance/AdvancedContent.tsx +2 -2
  454. package/src/ui/dash/appearance/CodeInjectionContent.tsx +12 -16
  455. package/src/ui/dash/appearance/NavigationContent.tsx +117 -16
  456. package/src/ui/dash/appearance/__tests__/NavigationContent.test.tsx +33 -11
  457. package/src/ui/dash/appearance/__tests__/system-nav-descriptions.test.ts +44 -0
  458. package/src/ui/dash/appearance/system-nav-descriptions.ts +75 -0
  459. package/src/ui/dash/settings/AccountMenuContent.tsx +2 -2
  460. package/src/ui/dash/settings/ApiTokensContent.tsx +2 -1
  461. package/src/ui/dash/settings/ConfigEditorContent.tsx +35 -16
  462. package/src/ui/dash/settings/GeneralContent.tsx +275 -113
  463. package/src/ui/dash/settings/LanguageContent.tsx +409 -0
  464. package/src/ui/dash/settings/SettingsRootContent.tsx +19 -1
  465. package/src/ui/dash/settings/__tests__/GeneralContent.test.tsx +324 -4
  466. package/src/ui/dash/settings/__tests__/LanguageContent.test.tsx +144 -0
  467. package/src/ui/dash/settings/__tests__/discover-copy.test.ts +66 -0
  468. package/src/ui/dash/settings/discover-copy.ts +116 -0
  469. package/src/ui/feed/LinkCard.tsx +55 -45
  470. package/src/ui/feed/LinkPreview.tsx +2 -7
  471. package/src/ui/feed/NoteCard.tsx +9 -4
  472. package/src/ui/feed/PostStatusBadges.tsx +103 -17
  473. package/src/ui/feed/QuoteCard.tsx +55 -30
  474. package/src/ui/feed/ThreadPreview.tsx +6 -2
  475. package/src/ui/feed/__tests__/thread-preview.test.ts +13 -16
  476. package/src/ui/feed/__tests__/timeline-cards.test.ts +314 -49
  477. package/src/ui/feed/thread-preview-state.ts +20 -6
  478. package/src/ui/font-themes.ts +39 -29
  479. package/src/ui/layouts/BaseLayout.tsx +155 -10
  480. package/src/ui/layouts/SiteLayout.tsx +192 -34
  481. package/src/ui/layouts/__tests__/BaseLayout.test.tsx +196 -17
  482. package/src/ui/layouts/__tests__/SiteLayout.test.tsx +109 -85
  483. package/src/ui/pages/ArchivePage.tsx +401 -301
  484. package/src/ui/pages/CollectionPage.tsx +86 -76
  485. package/src/ui/pages/CollectionsPage.tsx +5 -0
  486. package/src/ui/pages/ComposePage.tsx +8 -0
  487. package/src/ui/pages/PostPage.tsx +47 -0
  488. package/src/ui/pages/SearchPage.tsx +3 -3
  489. package/src/ui/pages/SmartCollectionPage.tsx +434 -0
  490. package/src/ui/pages/SubscribePage.tsx +236 -0
  491. package/src/ui/pages/__tests__/ArchivePage.test.tsx +122 -3
  492. package/src/ui/pages/__tests__/collections-directory-rows.test.tsx +92 -0
  493. package/src/ui/pages/__tests__/collections-view-links.test.tsx +81 -0
  494. package/src/ui/shared/CollectionDirectory.tsx +178 -3
  495. package/src/ui/shared/CollectionsManager.tsx +70 -17
  496. package/src/ui/shared/CopyField.tsx +127 -0
  497. package/src/ui/shared/DraftPreviewBar.tsx +25 -9
  498. package/src/ui/shared/EmptyPostContent.tsx +23 -0
  499. package/src/ui/shared/MediaGallery.tsx +125 -46
  500. package/src/ui/shared/Pagination.tsx +20 -5
  501. package/src/ui/shared/PostFooter.tsx +55 -23
  502. package/src/ui/shared/__tests__/archive-labels.test.ts +100 -0
  503. package/src/ui/shared/__tests__/media-gallery.test.ts +210 -2
  504. package/src/ui/shared/__tests__/navigation-labels.test.ts +16 -22
  505. package/src/ui/shared/__tests__/pagination.test.ts +38 -24
  506. package/src/ui/shared/__tests__/post-footer.test.ts +32 -0
  507. package/src/ui/shared/archive-labels.ts +98 -0
  508. package/src/ui/shared/collection-management-labels.ts +94 -16
  509. package/src/ui/shared/custom-icons.ts +5 -0
  510. package/src/ui/shared/navigation-labels.ts +45 -71
  511. package/src/ui/shared/post-article-attributes.ts +8 -0
  512. package/src/ui/shared/smart-collection-labels.ts +343 -0
  513. package/dist/app-BxCOR3Uc.js +0 -6
  514. package/dist/client/_assets/chunks/heic-to-DUUaO23q.js +0 -1
  515. package/dist/client/_assets/chunks/module-DcsAZQZ_.js +0 -716
  516. package/dist/client/_assets/chunks/url-pLre2DM_.js +0 -1
  517. package/dist/client/_assets/client-B_eGKN5p.css +0 -2
  518. package/dist/client/_assets/client-DxY5BFe8.js +0 -296
  519. package/dist/client/_assets/client-auth-CakPESv9.js +0 -5533
  520. package/dist/env-OHRKGcMj.js +0 -281
  521. package/dist/github-api-BgSiE71w.js +0 -176
  522. package/dist/github-app-BbklkFmU.js +0 -275
  523. package/dist/github-sync-Cq1pzzOI.js +0 -431
  524. package/dist/github-sync-ppWXN3jb.js +0 -4
  525. package/dist/url-BMYO-Zlt.js +0 -395
  526. package/src/client/__tests__/collection-created-notice.test.ts +0 -36
  527. package/src/client/__tests__/collection-form-bridge.test.ts +0 -216
  528. package/src/client/__tests__/post-form-bridge.test.ts +0 -82
  529. package/src/client/collection-created-notice.ts +0 -66
  530. package/src/client/collection-form-bridge.ts +0 -191
  531. package/src/client/components/__tests__/jant-post-form.test.ts +0 -193
  532. package/src/client/components/jant-post-form.ts +0 -422
  533. package/src/client/components/post-form-template.ts +0 -352
  534. package/src/client/components/post-form-types.ts +0 -96
  535. package/src/client/media-metadata.ts +0 -247
  536. package/src/client/post-form-bridge.ts +0 -193
  537. package/src/ui/pages/CollectionEditorPage.tsx +0 -175
@@ -38,6 +38,16 @@ 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
+
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
47
+ #: src/ui/compose/ComposeDialog.tsx
48
+ msgid "/…"
49
+ msgstr ""
50
+
41
51
  #. @context: Placeholder for the custom collections link URL
42
52
  #: src/ui/shared/collection-management-labels.ts
43
53
  msgid "/archive?format=quote or https://example.com"
@@ -65,6 +75,16 @@ msgstr ""
65
75
  msgid "A calmer, warmer accent makes the default theme feel quieter and more intentional."
66
76
  msgstr ""
67
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
+
68
88
  #. @context: Section title for the usage guidance section on the brand asset page
69
89
  #: src/ui/pages/BrandPage.tsx
70
90
  msgid "A few simple rules."
@@ -84,6 +104,11 @@ msgstr ""
84
104
  msgid "A long-form article sample for checking the default palette in a true reading context."
85
105
  msgstr ""
86
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
+
87
112
  #. @context: Subheading in the sample detail article
88
113
  #: src/ui/pages/ThemeSamplePage.tsx
89
114
  msgid "A practical checklist"
@@ -113,6 +138,11 @@ msgstr ""
113
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."
114
139
  msgstr ""
115
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
+
116
146
  #. @context: Main sample article title
117
147
  #: src/ui/pages/ThemeSamplePage.tsx
118
148
  msgid "A softer blue feels more like ink than product chrome."
@@ -138,11 +168,6 @@ msgstr ""
138
168
  msgid "Add a label and URL."
139
169
  msgstr ""
140
170
 
141
- #. @context: Description for the RSS system navigation toggle
142
- #: src/ui/shared/navigation-labels.ts
143
- msgid "Add a link to your main RSS feed. Change what /feed returns in General."
144
- msgstr ""
145
-
146
171
  #. @context: Compose link title required error
147
172
  #: src/ui/compose/ComposeDialog.tsx
148
173
  msgid "Add a title before posting this link."
@@ -173,6 +198,11 @@ msgstr ""
173
198
  msgid "Add column before"
174
199
  msgstr ""
175
200
 
201
+ #. @context: Smart collection dialog button
202
+ #: src/ui/shared/smart-collection-labels.ts
203
+ msgid "Add condition"
204
+ msgstr ""
205
+
176
206
  #. @context: Primary action to add a custom link on collections page
177
207
  #: src/ui/shared/collection-management-labels.ts
178
208
  msgid "Add Link"
@@ -198,6 +228,17 @@ msgstr ""
198
228
  msgid "Adding…"
199
229
  msgstr ""
200
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
+
201
242
  #. @context: Archive filter - collection dropdown default
202
243
  #: src/ui/pages/ArchivePage.tsx
203
244
  msgid "All collections"
@@ -208,8 +249,10 @@ msgstr ""
208
249
  msgid "All formats"
209
250
  msgstr ""
210
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'.
211
253
  #. @context: Archive thread filter - threads and single posts
212
254
  #: src/ui/pages/ArchivePage.tsx
255
+ #: src/ui/shared/archive-labels.ts
213
256
  msgid "All posts"
214
257
  msgstr ""
215
258
 
@@ -223,6 +266,11 @@ msgstr ""
223
266
  msgid "All years"
224
267
  msgstr ""
225
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
+
226
274
  #. @context: Alt text for the sample detail article image
227
275
  #: src/ui/pages/ThemeSamplePage.tsx
228
276
  msgid "An abstract editorial layout in warm paper colors"
@@ -249,35 +297,22 @@ msgid "Apple touch icon"
249
297
  msgstr ""
250
298
 
251
299
  #. @context: Archive feed title prefix
252
- #. @context: Archive page title
253
300
  #. @context: Inactive nav link label on sample page
254
301
  #: src/routes/pages/archive.tsx
255
- #: src/ui/pages/ArchivePage.tsx
256
302
  #: src/ui/pages/ThemeSamplePage.tsx
257
303
  msgid "Archive"
258
304
  msgstr ""
259
305
 
260
- #. @context: Built-in navigation label for the archive page
261
- #: src/ui/shared/navigation-labels.ts
262
- msgctxt "nav"
263
- msgid "Archive"
264
- msgstr ""
265
-
266
306
  #. @context: Section heading for the detail article sample on the theme sample page
267
307
  #: src/ui/pages/ThemeSamplePage.tsx
268
308
  msgid "Article detail page"
269
309
  msgstr ""
270
310
 
271
311
  #. @context: Archive media filter - audio
272
- #: src/ui/pages/ArchivePage.tsx
312
+ #: src/lib/filter-dimensions.ts
273
313
  msgid "Audio"
274
314
  msgstr ""
275
315
 
276
- #. @context: Error toast when authentication secret is missing from server config
277
- #: src/routes/auth/setup.tsx
278
- msgid "Auth secret is missing. Check your environment variables."
279
- msgstr ""
280
-
281
316
  #. @context: Error toast when authentication system is unavailable
282
317
  #: src/routes/auth/signin.tsx
283
318
  msgid "Authentication isn't set up. Check your server config."
@@ -293,9 +328,14 @@ msgstr ""
293
328
  msgid "Auto"
294
329
  msgstr ""
295
330
 
296
- #. @context: Compose summary shown near the submit controls when a manual custom link is cleared
297
- #: src/ui/compose/ComposeDialog.tsx
298
- msgid "Auto link"
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}"
299
339
  msgstr ""
300
340
 
301
341
  #. @context: Usage label for the circle tile asset card
@@ -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,6 +452,11 @@ msgstr ""
416
452
  msgid "Clear filter"
417
453
  msgstr ""
418
454
 
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.
456
+ #: src/ui/compose/ComposeDialog.tsx
457
+ msgid "Close"
458
+ msgstr ""
459
+
419
460
  #. @context: Close drawer button label
420
461
  #: src/ui/layouts/SiteLayout.tsx
421
462
  msgid "Close menu"
@@ -427,6 +468,8 @@ msgid "collection"
427
468
  msgstr ""
428
469
 
429
470
  #. @context: Compose collection selector trigger label
471
+ #. @context: Post filter dimension name - collection membership
472
+ #: src/lib/filter-dimensions.ts
430
473
  #: src/ui/compose/ComposeDialog.tsx
431
474
  msgid "Collection"
432
475
  msgstr ""
@@ -466,14 +509,14 @@ msgstr ""
466
509
  msgid "collections"
467
510
  msgstr ""
468
511
 
469
- #. @context: Breadcrumb link to collections page
470
- #. @context: Breadcrumb link to collections page
471
512
  #. @context: Collections page heading
472
513
  #. @context: Collections page heading
473
514
  #. @context: Inactive nav link label on sample page
474
- #: 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
475
517
  #: src/ui/pages/CollectionPage.tsx
476
518
  #: src/ui/pages/CollectionsPage.tsx
519
+ #: src/ui/pages/SmartCollectionPage.tsx
477
520
  #: src/ui/pages/ThemeSamplePage.tsx
478
521
  #: src/ui/shared/CollectionsManager.tsx
479
522
  msgid "Collections"
@@ -485,6 +528,11 @@ msgctxt "nav"
485
528
  msgid "Collections"
486
529
  msgstr ""
487
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
+
488
536
  #. @context: Alert title on theme sample page
489
537
  #: src/ui/pages/ThemeSamplePage.tsx
490
538
  msgid "Color check"
@@ -502,9 +550,19 @@ msgstr ""
502
550
  msgid "Compare it against the theme controls"
503
551
  msgstr ""
504
552
 
505
- #. @context: Setup form submit button
506
- #: src/routes/auth/setup.tsx
507
- msgid "Complete Setup"
553
+ #. @context: Accessible name for the compose dialog
554
+ #: src/ui/compose/ComposeDialog.tsx
555
+ msgid "Compose"
556
+ msgstr ""
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."
508
566
  msgstr ""
509
567
 
510
568
  #. @context: Password reset form field
@@ -517,23 +575,44 @@ msgstr ""
517
575
  msgid "Continue →"
518
576
  msgstr ""
519
577
 
578
+ #. @context: Tooltip on the draft badge, which opens the editor
579
+ #: src/ui/feed/PostStatusBadges.tsx
580
+ msgid "Continue writing this draft"
581
+ msgstr ""
582
+
520
583
  #. @context: Controls section heading on sample page
521
584
  #: src/ui/pages/ThemeSamplePage.tsx
522
585
  msgid "Controls"
523
586
  msgstr ""
524
587
 
525
- #. @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
526
599
  #: src/ui/shared/collection-management-labels.ts
527
- 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."
606
+ msgstr ""
607
+
608
+ #. @context: Smart collection dialog save failure
609
+ #: src/ui/shared/smart-collection-labels.ts
610
+ msgid "Could not save. Try again."
528
611
  msgstr ""
529
612
 
530
- #. @context: Error toast when account creation fails
531
- #. @context: Error toast when account creation fails
532
- #. @context: Error toast when account creation fails
533
- #: src/routes/auth/setup.tsx
534
- #: src/routes/auth/setup.tsx
535
- #: src/routes/auth/setup.tsx
536
- msgid "Couldn't create your account. Check the details and try again."
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."
537
616
  msgstr ""
538
617
 
539
618
  #. @context: Toast shown when edit mode fails to load a post
@@ -546,21 +625,31 @@ msgstr ""
546
625
  msgid "Couldn't publish. Saved as draft."
547
626
  msgstr ""
548
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
+
549
638
  #. @context: Toast when save fails
550
639
  #: src/ui/shared/collection-management-labels.ts
551
640
  msgid "Couldn't save. Try again in a moment."
552
641
  msgstr ""
553
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
+
554
648
  #. @context: Compose collection combobox empty state when no collections exist
555
649
  #: src/ui/compose/ComposeDialog.tsx
556
650
  msgid "Create a collection to get started."
557
651
  msgstr ""
558
652
 
559
- #. @context: Setup page description
560
- #: src/routes/auth/setup.tsx
561
- msgid "Create your admin account."
562
- msgstr ""
563
-
564
653
  #. @context: Thread item label on sample page
565
654
  #: src/ui/pages/ThemeSamplePage.tsx
566
655
  msgid "Current post"
@@ -611,7 +700,9 @@ msgid "Default preview image for social shares and link unfurls."
611
700
  msgstr ""
612
701
 
613
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.
614
704
  #: src/ui/shared/collection-management-labels.ts
705
+ #: src/ui/shared/smart-collection-labels.ts
615
706
  msgid "Delete"
616
707
  msgstr ""
617
708
 
@@ -645,6 +736,11 @@ msgstr ""
645
736
  msgid "Delete this collection permanently? Threads inside won't be removed."
646
737
  msgstr ""
647
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
+
648
744
  #. @context: Hint shown on signin page when demo credentials are pre-filled
649
745
  #: src/routes/auth/signin.tsx
650
746
  msgid "Demo credentials are pre-filled — hit Sign In to continue."
@@ -655,6 +751,11 @@ msgstr ""
655
751
  msgid "Describe this for people with visual impairments..."
656
752
  msgstr ""
657
753
 
754
+ #. @context: Smart collection dialog field
755
+ #: src/ui/shared/smart-collection-labels.ts
756
+ msgid "Description"
757
+ msgstr ""
758
+
658
759
  #. @context: Collection form field
659
760
  #. @context: Field label for a custom collections link description
660
761
  #: src/ui/shared/collection-management-labels.ts
@@ -676,6 +777,11 @@ msgstr ""
676
777
  msgid "Designing a calmer default accent for Jant"
677
778
  msgstr ""
678
779
 
780
+ #. @context: Compose language option that leaves detection to Jant
781
+ #: src/ui/compose/ComposeDialog.tsx
782
+ msgid "Detect"
783
+ msgstr ""
784
+
679
785
  #. @context: Confirm close action sheet - discard changes button for editing published post
680
786
  #. @context: More menu - discard post
681
787
  #: src/ui/compose/ComposeDialog.tsx
@@ -688,6 +794,11 @@ msgstr ""
688
794
  msgid "Discard changes?"
689
795
  msgstr ""
690
796
 
797
+ #. @context: Smart collection dialog section heading
798
+ #: src/ui/shared/smart-collection-labels.ts
799
+ msgid "Display"
800
+ msgstr ""
801
+
691
802
  #. @context: Label for a divider item while organizing collections
692
803
  #: src/ui/shared/CollectionsManager.tsx
693
804
  msgid "Divider"
@@ -756,6 +867,11 @@ msgstr ""
756
867
  msgid "Download the official Jant logo, icons, and preview files."
757
868
  msgstr ""
758
869
 
870
+ #. @context: Post status badge for an unpublished draft, shown to the author only
871
+ #: src/ui/feed/PostStatusBadges.tsx
872
+ msgid "Draft"
873
+ msgstr ""
874
+
759
875
  #. @context: Accessible label for a draft item's more-actions button
760
876
  #: src/ui/compose/ComposeDialog.tsx
761
877
  msgid "Draft actions"
@@ -797,22 +913,26 @@ msgstr ""
797
913
  msgid "Drag collections, links, and dividers into the order you want."
798
914
  msgstr ""
799
915
 
800
- #. @context: Compose dialog header title when editing a post
801
- #. @context: Per-collection edit action
802
916
  #. @context: Per-collection edit action
803
- #. @context: Per-collection edit action
804
- #: src/ui/compose/ComposeDialog.tsx
805
- #: src/ui/pages/CollectionEditorPage.tsx
806
- #: src/ui/pages/CollectionEditorPage.tsx
807
917
  #: src/ui/shared/collection-management-labels.ts
808
918
  msgid "Edit"
809
919
  msgstr ""
810
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
+
811
926
  #. @context: Compose action to reopen the custom link field from the action row summary
812
927
  #: src/ui/compose/ComposeDialog.tsx
813
928
  msgid "Edit custom link"
814
929
  msgstr ""
815
930
 
931
+ #. @context: Action in the draft preview status bar that opens the editor
932
+ #: src/ui/shared/DraftPreviewBar.tsx
933
+ msgid "Edit draft"
934
+ msgstr ""
935
+
816
936
  #. @context: Button to manually edit the collection link
817
937
  #: src/ui/shared/collection-management-labels.ts
818
938
  msgid "Edit link"
@@ -833,17 +953,25 @@ msgstr ""
833
953
  msgid "Edit publish date"
834
954
  msgstr ""
835
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
+
961
+ #. @context: Marker above the composer when changing a post that is already published
962
+ #: src/ui/compose/ComposeDialog.tsx
963
+ msgid "Editing"
964
+ msgstr ""
965
+
836
966
  #. @context: Sample link post title on the theme sample page
837
967
  #: src/ui/pages/ThemeSamplePage.tsx
838
968
  msgid "Editorial interfaces worth borrowing from"
839
969
  msgstr ""
840
970
 
841
971
  #. @context: Setup/signin form field - email
842
- #. @context: Setup/signin form field - email
843
- #: src/routes/auth/setup.tsx
844
972
  #: src/routes/auth/signin.tsx
845
973
  msgid "Email"
846
- msgstr ""
974
+ msgstr "電子郵件"
847
975
 
848
976
  #. @context: Compose toolbar - emoji picker tooltip
849
977
  #: src/ui/compose/ComposeDialog.tsx
@@ -860,6 +988,11 @@ msgstr ""
860
988
  msgid "Enter a valid URL starting with http://, https://, or mailto:."
861
989
  msgstr ""
862
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
+
863
996
  #. @context: Usage label for the brand pack card
864
997
  #: src/ui/pages/BrandPage.tsx
865
998
  msgid "Everything in one download"
@@ -889,9 +1022,11 @@ msgstr ""
889
1022
  #. @context: Browser page title for the featured feed
890
1023
  #. @context: Inactive browse tab label on sample page
891
1024
  #. @context: Page heading for the featured posts feed
1025
+ #. @context: Subscribe page name for the featured posts feed
892
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
893
1028
  #: src/routes/pages/featured.tsx
894
- #: src/ui/pages/ArchivePage.tsx
1029
+ #: src/routes/pages/subscribe.tsx
895
1030
  #: src/ui/pages/FeaturedPage.tsx
896
1031
  #: src/ui/pages/ThemeSamplePage.tsx
897
1032
  #: src/ui/shared/PostFooter.tsx
@@ -916,10 +1051,9 @@ msgstr ""
916
1051
  msgid "Featured posts"
917
1052
  msgstr ""
918
1053
 
919
- #. @context: Built-in navigation label for feed
920
- #: src/ui/shared/navigation-labels.ts
921
- msgctxt "nav"
922
- msgid "Feed"
1054
+ #. @context: Toast after copying a feed URL to the clipboard
1055
+ #: src/ui/pages/SubscribePage.tsx
1056
+ msgid "Feed URL copied."
923
1057
  msgstr ""
924
1058
 
925
1059
  #. @context: Search snippet suffix on sample page
@@ -953,15 +1087,25 @@ msgid "File uploaded."
953
1087
  msgstr ""
954
1088
 
955
1089
  #. @context: Archive media filter - files/documents
956
- #: src/ui/pages/ArchivePage.tsx
1090
+ #: src/lib/filter-dimensions.ts
957
1091
  msgid "Files"
958
1092
  msgstr ""
959
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
+
960
1099
  #. @context: Paragraph mentioning code on the sample detail article
961
1100
  #: src/ui/pages/ThemeSamplePage.tsx
962
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."
963
1102
  msgstr ""
964
1103
 
1104
+ #. @context: Post filter dimension name - note, link, or quote
1105
+ #: src/lib/filter-dimensions.ts
1106
+ msgid "Format"
1107
+ msgstr ""
1108
+
965
1109
  #. @context: Compose dialog - open fullscreen editor
966
1110
  #: src/ui/compose/ComposeDialog.tsx
967
1111
  msgid "Fullscreen"
@@ -982,6 +1126,11 @@ msgstr ""
982
1126
  msgid "Give it a title..."
983
1127
  msgstr ""
984
1128
 
1129
+ #. @context: Smart collection layout option
1130
+ #: src/ui/shared/smart-collection-labels.ts
1131
+ msgid "Grid"
1132
+ msgstr ""
1133
+
985
1134
  #. @context: Table cell in the sample detail article
986
1135
  #: src/ui/pages/ThemeSamplePage.tsx
987
1136
  msgid "Guide the eye without taking over the layout."
@@ -1009,19 +1158,31 @@ msgstr ""
1009
1158
 
1010
1159
  #. @context: Archive visibility filter for posts hidden from Latest
1011
1160
  #. @context: Compose publish settings visibility option
1161
+ #: src/lib/filter-dimensions.ts
1012
1162
  #: src/ui/compose/ComposeDialog.tsx
1013
- #: src/ui/pages/ArchivePage.tsx
1014
1163
  msgid "Hidden from Latest"
1015
1164
  msgstr ""
1016
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
+
1017
1171
  #. @context: Compose dropdown option for hiding a post from the Latest view
1018
1172
  #: src/ui/compose/ComposeDialog.tsx
1019
1173
  msgid "Hide from Latest"
1020
1174
  msgstr ""
1021
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
1022
1182
  #. @context: Collection sort order option
1023
1183
  #. @context: Collection sort order option
1024
1184
  #: src/ui/pages/CollectionPage.tsx
1185
+ #: src/ui/pages/SmartCollectionPage.tsx
1025
1186
  #: src/ui/shared/collection-management-labels.ts
1026
1187
  msgid "Highest rated"
1027
1188
  msgstr ""
@@ -1052,7 +1213,7 @@ msgid "Image unavailable"
1052
1213
  msgstr ""
1053
1214
 
1054
1215
  #. @context: Archive media filter - images
1055
- #: src/ui/pages/ArchivePage.tsx
1216
+ #: src/lib/filter-dimensions.ts
1056
1217
  msgid "Images"
1057
1218
  msgstr ""
1058
1219
 
@@ -1118,6 +1279,11 @@ msgstr ""
1118
1279
  msgid "Journal"
1119
1280
  msgstr ""
1120
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
+
1121
1287
  #. @context: Guidance title on the brand asset page
1122
1288
  #: src/ui/pages/BrandPage.tsx
1123
1289
  msgid "Keep the artwork unchanged."
@@ -1138,10 +1304,31 @@ msgstr ""
1138
1304
  msgid "Label (optional)"
1139
1305
  msgstr ""
1140
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
+
1321
+ #. @context: Tooltip text for the timestamp on an unpublished draft
1322
+ #: src/ui/shared/PostFooter.tsx
1323
+ msgid "Last edited on {date} at {time}"
1324
+ msgstr ""
1325
+
1141
1326
  #. @context: Active browse tab label on sample page
1142
1327
  #. @context: Browser page title for the latest feed
1143
1328
  #. @context: Page heading for the latest posts feed
1329
+ #. @context: Subscribe page name for the latest public posts feed
1144
1330
  #: src/routes/pages/home.tsx
1331
+ #: src/routes/pages/subscribe.tsx
1145
1332
  #: src/ui/pages/HomePage.tsx
1146
1333
  #: src/ui/pages/ThemeSamplePage.tsx
1147
1334
  msgid "Latest"
@@ -1160,6 +1347,13 @@ msgstr ""
1160
1347
  msgid "Latest posts"
1161
1348
  msgstr ""
1162
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
+
1163
1357
  #. @context: Compose publish settings slug help text
1164
1358
  #: src/ui/compose/ComposeDialog.tsx
1165
1359
  msgid "Leave blank to generate one automatically."
@@ -1196,35 +1390,13 @@ msgstr ""
1196
1390
  msgid "Link removed."
1197
1391
  msgstr ""
1198
1392
 
1199
- #. @context: Description for the featured system navigation toggle
1200
- #: src/ui/shared/navigation-labels.ts
1201
- msgid "Link to posts you've marked as featured."
1202
- msgstr ""
1203
-
1204
- #. @context: Description for the archive system navigation toggle
1205
- #: src/ui/shared/navigation-labels.ts
1206
- msgid "Link to the post archive"
1207
- msgstr ""
1208
-
1209
- #. @context: Description for the collections system navigation toggle
1210
- #: src/ui/shared/navigation-labels.ts
1211
- msgid "Link to your collections page"
1212
- msgstr ""
1213
-
1214
- #. @context: Description for the latest system navigation toggle
1215
- #: src/ui/shared/navigation-labels.ts
1216
- msgid "Link to your latest posts. Your homepage shows this feed."
1217
- msgstr ""
1218
-
1219
1393
  #. @context: Toast after saving a custom collections link
1220
1394
  #: src/ui/shared/collection-management-labels.ts
1221
1395
  msgid "Link updated."
1222
1396
  msgstr ""
1223
1397
 
1224
- #. @context: Archive feed title segment for link format filter
1225
1398
  #. @context: Post format label plural - links
1226
- #: src/routes/pages/archive.tsx
1227
- #: src/ui/pages/ArchivePage.tsx
1399
+ #: src/lib/filter-dimensions.ts
1228
1400
  msgid "Links"
1229
1401
  msgstr ""
1230
1402
 
@@ -1233,6 +1405,11 @@ msgstr ""
1233
1405
  msgid "Links should read clearly without glowing against the page."
1234
1406
  msgstr ""
1235
1407
 
1408
+ #. @context: Smart collection layout option
1409
+ #: src/ui/shared/smart-collection-labels.ts
1410
+ msgid "List"
1411
+ msgstr ""
1412
+
1236
1413
  #. @context: Inline link label in the sample note post body
1237
1414
  #. @context: Inline link label in the sample note summary
1238
1415
  #: src/ui/pages/ThemeSamplePage.tsx
@@ -1272,6 +1449,8 @@ msgid "Look at the footer metadata last, to make sure the accent is not fighting
1272
1449
  msgstr ""
1273
1450
 
1274
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
1275
1454
  #: src/ui/layouts/BaseLayout.tsx
1276
1455
  msgid "Main feed"
1277
1456
  msgstr ""
@@ -1282,6 +1461,8 @@ msgid "March 15"
1282
1461
  msgstr ""
1283
1462
 
1284
1463
  #. @context: Compose toolbar - media tooltip
1464
+ #. @context: Post filter dimension name - attached media
1465
+ #: src/lib/filter-dimensions.ts
1285
1466
  #: src/ui/compose/ComposeDialog.tsx
1286
1467
  msgid "Media"
1287
1468
  msgstr ""
@@ -1309,6 +1490,16 @@ msgstr ""
1309
1490
  msgid "More options are available after you create it."
1310
1491
  msgstr ""
1311
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
+
1312
1503
  #. @context: Secondary badge label on sample page
1313
1504
  #. @context: Token label on sample page
1314
1505
  #: src/ui/pages/ThemeSamplePage.tsx
@@ -1327,10 +1518,8 @@ msgid "Navigation and reading states"
1327
1518
  msgstr ""
1328
1519
 
1329
1520
  #. @context: Button to create a collection from collections page
1330
- #. @context: Page title for new collection
1331
- #. @context: Page title for new collection
1332
- #: src/ui/pages/CollectionEditorPage.tsx
1333
- #: src/ui/pages/CollectionEditorPage.tsx
1521
+ #. @context: Title of the dialog that creates a collection
1522
+ #: src/ui/shared/collection-management-labels.ts
1334
1523
  #: src/ui/shared/CollectionsManager.tsx
1335
1524
  msgid "New Collection"
1336
1525
  msgstr ""
@@ -1361,14 +1550,21 @@ msgstr ""
1361
1550
  msgid "New post"
1362
1551
  msgstr ""
1363
1552
 
1364
- #. @context: Compose dialog header title when composing a thread
1365
- #: src/ui/compose/ComposeDialog.tsx
1366
- msgid "New Thread"
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"
1367
1556
  msgstr ""
1368
1557
 
1558
+ #. @context: Archive page meta note explaining the active sort order
1559
+ #: src/ui/pages/ArchivePage.tsx
1560
+ msgid "newest changes first"
1561
+ msgstr ""
1562
+
1563
+ #. @context: Collection sort order option
1369
1564
  #. @context: Collection sort order option
1370
1565
  #. @context: Collection sort order option
1371
1566
  #: src/ui/pages/CollectionPage.tsx
1567
+ #: src/ui/pages/SmartCollectionPage.tsx
1372
1568
  #: src/ui/shared/collection-management-labels.ts
1373
1569
  msgid "Newest first"
1374
1570
  msgstr ""
@@ -1396,6 +1592,11 @@ msgstr ""
1396
1592
  msgid "No collections yet. Start one to organize threads by topic."
1397
1593
  msgstr ""
1398
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
+
1399
1600
  #. @context: Drafts panel empty state
1400
1601
  #: src/ui/compose/ComposeDialog.tsx
1401
1602
  msgid "No drafts yet. Save a draft to find it here."
@@ -1416,6 +1617,11 @@ msgstr ""
1416
1617
  msgid "No threads match these filters. Try adjusting your selection or clear all filters."
1417
1618
  msgstr ""
1418
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
+
1419
1625
  #. @context: Action to dismiss the post-create Collection navigation prompt
1420
1626
  #: src/ui/shared/CollectionsManager.tsx
1421
1627
  msgid "Not now"
@@ -1435,10 +1641,8 @@ msgstr ""
1435
1641
  msgid "note treatment"
1436
1642
  msgstr ""
1437
1643
 
1438
- #. @context: Archive feed title segment for note format filter
1439
1644
  #. @context: Post format label plural - notes
1440
- #: src/routes/pages/archive.tsx
1441
- #: src/ui/pages/ArchivePage.tsx
1645
+ #: src/lib/filter-dimensions.ts
1442
1646
  msgid "Notes"
1443
1647
  msgstr ""
1444
1648
 
@@ -1447,18 +1651,45 @@ msgstr ""
1447
1651
  msgid "Nothing here yet. Add threads to one of these collections to fill this view."
1448
1652
  msgstr ""
1449
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
+
1450
1659
  #. @context: Empty state message on featured page
1451
1660
  #: src/ui/pages/FeaturedPage.tsx
1452
1661
  msgid "Nothing in Featured yet. Mark a post as featured to show it here."
1453
1662
  msgstr ""
1454
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
+
1669
+ #. @context: Value shown on a post's date control when it will publish at the current time
1670
+ #: src/ui/compose/ComposeDialog.tsx
1671
+ msgid "Now"
1672
+ msgstr ""
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
1455
1680
  #. @context: Collection sort order option
1456
1681
  #. @context: Collection sort order option
1457
1682
  #: src/ui/pages/CollectionPage.tsx
1683
+ #: src/ui/pages/SmartCollectionPage.tsx
1458
1684
  #: src/ui/shared/collection-management-labels.ts
1459
1685
  msgid "Oldest first"
1460
1686
  msgstr ""
1461
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
+
1462
1693
  #. @context: Compose publish settings help text for private visibility
1463
1694
  #: src/ui/compose/ComposeDialog.tsx
1464
1695
  msgid "Only visible when signed in."
@@ -1494,6 +1725,21 @@ msgstr ""
1494
1725
  msgid "Open raw SVG"
1495
1726
  msgstr ""
1496
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
+
1497
1743
  #. @context: Menu action to organize collections
1498
1744
  #: src/ui/shared/CollectionsManager.tsx
1499
1745
  msgid "Organize"
@@ -1505,11 +1751,9 @@ msgid "Outline"
1505
1751
  msgstr ""
1506
1752
 
1507
1753
  #. @context: Setup/signin form field - password
1508
- #. @context: Setup/signin form field - password
1509
- #: src/routes/auth/setup.tsx
1510
1754
  #: src/routes/auth/signin.tsx
1511
1755
  msgid "Password"
1512
- msgstr ""
1756
+ msgstr "密碼"
1513
1757
 
1514
1758
  #. @context: Error shown when password reset is blocked in demo mode
1515
1759
  #: src/routes/auth/reset.tsx
@@ -1529,6 +1773,11 @@ msgstr ""
1529
1773
  msgid "Paste a URL..."
1530
1774
  msgstr ""
1531
1775
 
1776
+ #. @context: Post status badge for a pinned post
1777
+ #: src/ui/feed/PostStatusBadges.tsx
1778
+ msgid "Pinned"
1779
+ msgstr ""
1780
+
1532
1781
  #. @context: Compose button - publish post
1533
1782
  #: src/ui/compose/ComposeDialog.tsx
1534
1783
  msgid "Post"
@@ -1549,6 +1798,11 @@ msgstr ""
1549
1798
  msgid "Post privately"
1550
1799
  msgstr ""
1551
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
+
1552
1806
  #. @context: Hover hint for the homepage compose shortcut
1553
1807
  #: src/ui/compose/ComposePrompt.tsx
1554
1808
  msgid "Press N to write"
@@ -1592,15 +1846,17 @@ msgstr ""
1592
1846
 
1593
1847
  #. @context: Archive visibility filter - private posts
1594
1848
  #. @context: Compose publish settings visibility option
1849
+ #. @context: Post status badge for a private post
1850
+ #: src/lib/filter-dimensions.ts
1595
1851
  #: src/ui/compose/ComposeDialog.tsx
1596
- #: src/ui/pages/ArchivePage.tsx
1852
+ #: src/ui/feed/PostStatusBadges.tsx
1597
1853
  msgid "Private"
1598
1854
  msgstr ""
1599
1855
 
1600
1856
  #. @context: Archive visibility filter - public posts
1601
1857
  #. @context: Compose publish settings visibility option
1858
+ #: src/lib/filter-dimensions.ts
1602
1859
  #: src/ui/compose/ComposeDialog.tsx
1603
- #: src/ui/pages/ArchivePage.tsx
1604
1860
  msgid "Public"
1605
1861
  msgstr ""
1606
1862
 
@@ -1611,11 +1867,6 @@ msgstr ""
1611
1867
  msgid "Publish"
1612
1868
  msgstr ""
1613
1869
 
1614
- #. @context: Compose summary shown near the submit controls when an edited post no longer has a custom publish date
1615
- #: src/ui/compose/ComposeDialog.tsx
1616
- msgid "Publish now"
1617
- msgstr ""
1618
-
1619
1870
  #. @context: Compose publish settings panel title
1620
1871
  #: src/ui/compose/ComposeDialog.tsx
1621
1872
  msgid "Publish settings"
@@ -1638,6 +1889,11 @@ msgstr ""
1638
1889
  msgid "Published!"
1639
1890
  msgstr ""
1640
1891
 
1892
+ #. @context: Toast shown while a post is being published
1893
+ #: src/ui/compose/ComposeDialog.tsx
1894
+ msgid "Publishing..."
1895
+ msgstr ""
1896
+
1641
1897
  #. @context: Search highlight text on sample page
1642
1898
  #: src/ui/pages/ThemeSamplePage.tsx
1643
1899
  msgid "quiet design"
@@ -1665,11 +1921,9 @@ msgstr ""
1665
1921
  msgid "Quoted or highlighted passages should feel like annotations, not warnings."
1666
1922
  msgstr ""
1667
1923
 
1668
- #. @context: Archive feed title segment for quote format filter
1669
1924
  #. @context: Placeholder for the custom collections link label
1670
1925
  #. @context: Post format label plural - quotes
1671
- #: src/routes/pages/archive.tsx
1672
- #: src/ui/pages/ArchivePage.tsx
1926
+ #: src/lib/filter-dimensions.ts
1673
1927
  #: src/ui/shared/collection-management-labels.ts
1674
1928
  msgid "Quotes"
1675
1929
  msgstr ""
@@ -1679,6 +1933,21 @@ msgstr ""
1679
1933
  msgid "Rate"
1680
1934
  msgstr ""
1681
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
+
1682
1951
  #. @context: Collapse an expanded untitled note back to its preview in the feed
1683
1952
  #: src/ui/feed/NoteCard.tsx
1684
1953
  msgid "Read less"
@@ -1719,6 +1988,11 @@ msgstr ""
1719
1988
  msgid "Remove attachment"
1720
1989
  msgstr ""
1721
1990
 
1991
+ #. @context: Smart collection dialog condition row button
1992
+ #: src/ui/shared/smart-collection-labels.ts
1993
+ msgid "Remove condition"
1994
+ msgstr ""
1995
+
1722
1996
  #. @context: Tooltip for divider delete button
1723
1997
  #: src/ui/shared/CollectionsManager.tsx
1724
1998
  msgid "Remove Divider"
@@ -1740,16 +2014,16 @@ msgid "Replace image"
1740
2014
  msgstr ""
1741
2015
 
1742
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
1743
2019
  #: src/ui/pages/ArchivePage.tsx
1744
2020
  msgid "Replies"
1745
2021
  msgstr ""
1746
2022
 
1747
2023
  #. @context: Archive tile label for a single thread reply
1748
2024
  #. @context: Compose button - reply to post
1749
- #. @context: Compose dialog header title when replying to a post
1750
2025
  #. @context: Reply button label in the post footer
1751
2026
  #: src/ui/compose/ComposeDialog.tsx
1752
- #: src/ui/compose/ComposeDialog.tsx
1753
2027
  #: src/ui/pages/ArchivePage.tsx
1754
2028
  #: src/ui/shared/PostFooter.tsx
1755
2029
  msgid "Reply"
@@ -1785,8 +2059,18 @@ msgstr ""
1785
2059
  msgid "Reverse logo"
1786
2060
  msgstr ""
1787
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
1788
2070
  #. @context: Tooltip for the RSS feed link on a collection page
1789
2071
  #: src/ui/pages/CollectionPage.tsx
2072
+ #: src/ui/pages/SmartCollectionPage.tsx
2073
+ #: src/ui/shared/CollectionDirectory.tsx
1790
2074
  msgid "RSS feed"
1791
2075
  msgstr ""
1792
2076
 
@@ -1844,6 +2128,11 @@ msgstr ""
1844
2128
  msgid "Save to drafts?"
1845
2129
  msgstr ""
1846
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
+
1847
2136
  #. @context: Search page title
1848
2137
  #. @context: Search submit button
1849
2138
  #: src/ui/pages/SearchPage.tsx
@@ -1883,6 +2172,21 @@ msgstr ""
1883
2172
  msgid "Shared links"
1884
2173
  msgstr ""
1885
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
+
2180
+ #. @context: Archive view option - grid
2181
+ #: src/ui/pages/ArchivePage.tsx
2182
+ msgid "Show as a grid of tiles"
2183
+ msgstr ""
2184
+
2185
+ #. @context: Archive view option - list
2186
+ #: src/ui/pages/ArchivePage.tsx
2187
+ msgid "Show as a list with full posts"
2188
+ msgstr ""
2189
+
1886
2190
  #. @context: Collapse expanded thread ancestor context in the feed
1887
2191
  #. @context: Collapse expanded thread ancestor context in the feed
1888
2192
  #. @context: Collapse reply context
@@ -1901,9 +2205,9 @@ msgstr ""
1901
2205
  msgid "Show more"
1902
2206
  msgstr ""
1903
2207
 
1904
- #. @context: Description for the settings system navigation toggle
1905
- #: src/ui/shared/navigation-labels.ts
1906
- 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"
1907
2211
  msgstr ""
1908
2212
 
1909
2213
  #. @context: Built-in navigation label shown when auth is required
@@ -1926,12 +2230,9 @@ msgstr ""
1926
2230
  msgid "Sign in to start writing."
1927
2231
  msgstr ""
1928
2232
 
1929
- #. @context: Archive feed title segment for hasReplies=0 filter
1930
- #: src/routes/pages/archive.tsx
1931
- msgid "single posts"
1932
- msgstr ""
1933
-
1934
2233
  #. @context: Archive thread filter - posts without replies
2234
+ #. @context: Archive thread filter - posts without replies
2235
+ #: src/lib/filter-dimensions.ts
1935
2236
  #: src/ui/pages/ArchivePage.tsx
1936
2237
  msgid "Single posts"
1937
2238
  msgstr ""
@@ -1941,16 +2242,28 @@ msgstr ""
1941
2242
  msgid "Site accent"
1942
2243
  msgstr ""
1943
2244
 
1944
- #. @context: Setup form field - site name
1945
- #: src/routes/auth/setup.tsx
1946
- msgid "Site Name"
1947
- msgstr ""
1948
-
1949
2245
  #. @context: Description for the favicon asset card
1950
2246
  #: src/ui/pages/BrandPage.tsx
1951
2247
  msgid "Small browser icon used in tabs and bookmarks."
1952
2248
  msgstr ""
1953
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
+
1954
2267
  #. @context: Asset keyword on the public brand asset page
1955
2268
  #: src/ui/pages/BrandPage.tsx
1956
2269
  msgid "Social preview"
@@ -1968,25 +2281,35 @@ msgstr ""
1968
2281
 
1969
2282
  #. @context: Fallback validation error for compose form
1970
2283
  #. @context: Fallback validation error for password reset form
1971
- #. @context: Fallback validation error for setup form
1972
2284
  #. @context: Fallback validation error for sign-in form
1973
2285
  #. @context: Fallback validation error for thread compose form
1974
2286
  #: src/routes/auth/reset.tsx
1975
- #: src/routes/auth/setup.tsx
1976
2287
  #: src/routes/auth/signin.tsx
1977
2288
  #: src/routes/compose.tsx
1978
2289
  #: src/routes/compose.tsx
1979
2290
  msgid "Something doesn't look right. Check the form and try again."
1980
- msgstr ""
2291
+ msgstr "有欄位填寫不正確,檢查後重試。"
1981
2292
 
2293
+ #. @context: Sort menu label on collection detail page
1982
2294
  #. @context: Sort menu label on collection detail page
1983
2295
  #: src/ui/pages/CollectionPage.tsx
2296
+ #: src/ui/pages/SmartCollectionPage.tsx
1984
2297
  msgid "Sort"
1985
2298
  msgstr ""
1986
2299
 
1987
- #. @context: Collection form field
1988
- #: src/ui/shared/collection-management-labels.ts
1989
- msgid "Sort Order"
2300
+ #. @context: Archive sort option - threads that recently gained a post first
2301
+ #: src/ui/pages/ArchivePage.tsx
2302
+ msgid "Sort by when each thread was last added to"
2303
+ msgstr ""
2304
+
2305
+ #. @context: Archive sort option - newest published first
2306
+ #: src/ui/pages/ArchivePage.tsx
2307
+ msgid "Sort by when each thread was published"
2308
+ msgstr ""
2309
+
2310
+ #. @context: Archive sort toggle group label
2311
+ #: src/ui/pages/ArchivePage.tsx
2312
+ msgid "Sort order"
1990
2313
  msgstr ""
1991
2314
 
1992
2315
  #. @context: Compose quote source link placeholder
@@ -2024,6 +2347,24 @@ msgstr ""
2024
2347
  msgid "Stay sturdy and readable."
2025
2348
  msgstr ""
2026
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
+
2027
2368
  #. @context: Compose custom slug helper label for the suggested slug
2028
2369
  #: src/ui/compose/ComposeDialog.tsx
2029
2370
  msgid "Suggested link"
@@ -2078,8 +2419,8 @@ msgstr ""
2078
2419
 
2079
2420
  #. @context: Archive media filter - text file attachments
2080
2421
  #. @context: Attached text panel title
2422
+ #: src/lib/filter-dimensions.ts
2081
2423
  #: src/ui/compose/ComposeDialog.tsx
2082
- #: src/ui/pages/ArchivePage.tsx
2083
2424
  msgid "Text attachment"
2084
2425
  msgstr ""
2085
2426
 
@@ -2113,11 +2454,21 @@ msgstr ""
2113
2454
  msgid "The image should sit quietly inside the article instead of feeling like a card preview."
2114
2455
  msgstr ""
2115
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
+
2116
2462
  #. @context: Blockquote on the theme sample page
2117
2463
  #: src/ui/pages/ThemeSamplePage.tsx
2118
2464
  msgid "The right accent should disappear into the writing until you need it."
2119
2465
  msgstr ""
2120
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
+
2121
2472
  #. @context: Section heading for theme picker pills
2122
2473
  #: src/ui/pages/ThemeSamplePage.tsx
2123
2474
  msgid "Theme"
@@ -2140,6 +2491,11 @@ msgstr ""
2140
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?"
2141
2492
  msgstr ""
2142
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
+
2143
2499
  #. @context: Empty state message
2144
2500
  #: src/ui/pages/CollectionPage.tsx
2145
2501
  msgid "This collection is empty. Add threads from the editor."
@@ -2176,6 +2532,11 @@ msgstr ""
2176
2532
  msgid "This link is reserved. Choose something else."
2177
2533
  msgstr ""
2178
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
+
2179
2540
  #. @context: Explanation in the draft preview status bar
2180
2541
  #: src/ui/shared/DraftPreviewBar.tsx
2181
2542
  msgid "This post isn’t published."
@@ -2196,6 +2557,11 @@ msgstr ""
2196
2557
  msgid "This sign-in link has expired. Return to "
2197
2558
  msgstr ""
2198
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
+
2199
2565
  #. @context: Error shown when a hosted upload would exceed the shared account media limit
2200
2566
  #. @context: Error shown when a hosted upload would exceed the shared account media limit
2201
2567
  #: src/routes/api/upload-multipart.ts
@@ -2212,10 +2578,14 @@ msgstr ""
2212
2578
  #. @context: Archive page summary unit for a single matching thread
2213
2579
  #. @context: Singular thread count label
2214
2580
  #. @context: Singular thread count label
2581
+ #. @context: Singular thread count label
2582
+ #. @context: Singular thread count label on collection detail page
2215
2583
  #. @context: Singular thread count label on collection detail page
2216
2584
  #: src/ui/pages/ArchivePage.tsx
2217
2585
  #: src/ui/pages/ArchivePage.tsx
2218
2586
  #: src/ui/pages/CollectionPage.tsx
2587
+ #: src/ui/pages/SmartCollectionPage.tsx
2588
+ #: src/ui/shared/CollectionDirectory.tsx
2219
2589
  #: src/ui/shared/CollectionDirectory.tsx
2220
2590
  #: src/ui/shared/CollectionsManager.tsx
2221
2591
  msgid "thread"
@@ -2231,22 +2601,26 @@ msgstr ""
2231
2601
  msgid "Thread accents"
2232
2602
  msgstr ""
2233
2603
 
2234
- #. @context: Archive feed title segment for hasReplies=1 filter
2235
2604
  #. @context: Archive month header count unit for multiple threads
2236
2605
  #. @context: Archive page summary unit for multiple matching threads
2237
2606
  #. @context: Plural thread count label
2238
2607
  #. @context: Plural thread count label
2608
+ #. @context: Plural thread count label
2609
+ #. @context: Plural thread count label on collection detail page
2239
2610
  #. @context: Plural thread count label on collection detail page
2240
- #: src/routes/pages/archive.tsx
2241
2611
  #: src/ui/pages/ArchivePage.tsx
2242
2612
  #: src/ui/pages/ArchivePage.tsx
2243
2613
  #: src/ui/pages/CollectionPage.tsx
2614
+ #: src/ui/pages/SmartCollectionPage.tsx
2615
+ #: src/ui/shared/CollectionDirectory.tsx
2244
2616
  #: src/ui/shared/CollectionDirectory.tsx
2245
2617
  #: src/ui/shared/CollectionsManager.tsx
2246
2618
  msgid "threads"
2247
2619
  msgstr ""
2248
2620
 
2249
2621
  #. @context: Archive thread filter - thread roots with replies
2622
+ #. @context: Archive thread filter - thread roots with replies
2623
+ #: src/lib/filter-dimensions.ts
2250
2624
  #: src/ui/pages/ArchivePage.tsx
2251
2625
  msgid "Threads"
2252
2626
  msgstr ""
@@ -2257,18 +2631,22 @@ msgid "Threads can include up to {count} posts."
2257
2631
  msgstr ""
2258
2632
 
2259
2633
  #. @context: Collection form field
2260
- #. @context: Compose note title placeholder
2261
- #. @context: Compose toolbar - title tooltip
2634
+ #. @context: Compose toolbar - show or hide the title field
2262
2635
  #. @context: Input label on sample page
2263
- #: src/ui/compose/ComposeDialog.tsx
2636
+ #. @context: Post filter dimension name - whether a post is titled
2637
+ #. @context: Smart collection dialog field
2638
+ #: src/lib/filter-dimensions.ts
2264
2639
  #: src/ui/compose/ComposeDialog.tsx
2265
2640
  #: src/ui/pages/ThemeSamplePage.tsx
2266
2641
  #: src/ui/shared/collection-management-labels.ts
2642
+ #: src/ui/shared/smart-collection-labels.ts
2267
2643
  msgid "Title"
2268
2644
  msgstr ""
2269
2645
 
2270
2646
  #. @context: Archive filter - notes that have a title
2271
2647
  #. @context: Archive filter - notes that have a title
2648
+ #. @context: Archive filter - notes that have a title
2649
+ #: src/lib/filter-dimensions.ts
2272
2650
  #: src/ui/pages/ArchivePage.tsx
2273
2651
  #: src/ui/pages/ArchivePage.tsx
2274
2652
  msgid "Titled"
@@ -2284,6 +2662,21 @@ msgstr ""
2284
2662
  msgid "Toggle header row"
2285
2663
  msgstr ""
2286
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
+
2287
2680
  #. @context: Usage label for the square logo PNG asset card
2288
2681
  #: src/ui/pages/BrandPage.tsx
2289
2682
  msgid "Transparent square"
@@ -2306,6 +2699,10 @@ msgstr ""
2306
2699
 
2307
2700
  #. @context: Archive filter - notes without a title
2308
2701
  #. @context: Archive filter - notes without a title
2702
+ #. @context: Archive filter - notes without a title
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
2705
+ #: src/ui/compose/ComposeDialog.tsx
2309
2706
  #: src/ui/pages/ArchivePage.tsx
2310
2707
  #: src/ui/pages/ArchivePage.tsx
2311
2708
  msgid "Untitled"
@@ -2374,7 +2771,7 @@ msgid "Use this page to judge buttons, links, cards, forms, thread accents, and
2374
2771
  msgstr ""
2375
2772
 
2376
2773
  #. @context: Archive media filter - video
2377
- #: src/ui/pages/ArchivePage.tsx
2774
+ #: src/lib/filter-dimensions.ts
2378
2775
  msgid "Video"
2379
2776
  msgstr ""
2380
2777
 
@@ -2389,13 +2786,15 @@ msgid "View earlier notes in this thread"
2389
2786
  msgstr ""
2390
2787
 
2391
2788
  #. @context: Compose publish settings section label
2789
+ #. @context: Post filter dimension name - who can see a post
2790
+ #: src/lib/filter-dimensions.ts
2392
2791
  #: src/ui/compose/ComposeDialog.tsx
2393
2792
  msgid "Visibility"
2394
2793
  msgstr ""
2395
2794
 
2396
- #. @context: Setup page welcome heading
2397
- #: src/routes/auth/setup.tsx
2398
- 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"
2399
2798
  msgstr ""
2400
2799
 
2401
2800
  #. @context: Table header in the sample detail article
@@ -2453,24 +2852,20 @@ msgstr ""
2453
2852
  msgid "Why the default accent should feel written, not branded"
2454
2853
  msgstr ""
2455
2854
 
2456
- #. @context: Archive feed title segment for hasMedia=1 filter
2457
- #: src/routes/pages/archive.tsx
2458
- msgid "with media"
2459
- msgstr ""
2460
-
2461
- #. @context: Archive feed title segment for hasTitle=1 filter
2462
- #: src/routes/pages/archive.tsx
2463
- msgid "with title"
2464
- msgstr ""
2465
-
2466
- #. @context: Archive feed title segment for hasMedia=0 filter
2467
- #: src/routes/pages/archive.tsx
2468
- 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"
2469
2862
  msgstr ""
2470
2863
 
2471
- #. @context: Archive feed title segment for hasTitle=0 filter
2472
- #: src/routes/pages/archive.tsx
2473
- 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"
2474
2869
  msgstr ""
2475
2870
 
2476
2871
  #. @context: Compose publish settings hint for quiet reply switch
@@ -2488,6 +2883,11 @@ msgstr ""
2488
2883
  msgid "Wrong email or password. Check your credentials and try again."
2489
2884
  msgstr ""
2490
2885
 
2886
+ #. @context: Post filter dimension name - year of publication
2887
+ #: src/lib/filter-dimensions.ts
2888
+ msgid "Year"
2889
+ msgstr ""
2890
+
2491
2891
  #. @context: Confirm close action sheet title when editing a published post
2492
2892
  #: src/ui/compose/ComposeDialog.tsx
2493
2893
  msgid "You have unsaved changes"