@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 "{count, plural, one {Found # result} other {Found # results}}"
38
38
  msgid "{count} images couldn't be saved to your library — their original links were kept."
39
39
  msgstr "{count} images couldn't be saved to your library — their original links were kept."
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 "{count} of {total} threads"
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 "A calmer accent makes"
65
75
  msgid "A calmer, warmer accent makes the default theme feel quieter and more intentional."
66
76
  msgstr "A calmer, warmer accent makes the default theme feel quieter and more intentional."
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 "A collection needs a title and a link."
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 "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."
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 "A good default accent in Jant should feel like editorial structure, not
84
104
  msgid "A long-form article sample for checking the default palette in a true reading context."
85
105
  msgstr "A long-form article sample for checking the default palette in a true reading context."
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 "A longer introduction to feeds and readers, at aboutfeeds.com"
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 "A reference link for checking whether the accent feels editorial instead
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 "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."
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 "A smart collection needs a title and a link."
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 "Add a custom shortcut to any page or site."
138
168
  msgid "Add a label and URL."
139
169
  msgstr "Add a label and URL."
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 "Add a link to your main RSS feed. Change what /feed returns in General."
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 "Add column after"
173
198
  msgid "Add column before"
174
199
  msgstr "Add column before"
175
200
 
201
+ #. @context: Smart collection dialog button
202
+ #: src/ui/shared/smart-collection-labels.ts
203
+ msgid "Add condition"
204
+ msgstr "Add condition"
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 "Add to Navigation"
198
228
  msgid "Adding…"
199
229
  msgstr "Adding…"
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 "All"
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 "All"
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 "All collections"
208
249
  msgid "All formats"
209
250
  msgstr "All formats"
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 "All posts"
215
258
 
@@ -223,6 +266,11 @@ msgstr "All visibility"
223
266
  msgid "All years"
224
267
  msgstr "All years"
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 "Also available in"
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 "Apple touch icon"
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 "Archive"
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 "Archive"
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 "Article detail page"
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 "Audio"
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 "Auth secret is missing. Check your environment variables."
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,10 +328,15 @@ msgstr "Author (optional)"
293
328
  msgid "Auto"
294
329
  msgstr "Auto"
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"
299
- msgstr "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 "Automatically collects every post."
335
+
336
+ #. @context: Smart collection page — what it gathers. {conditions} is the list of conditions, already joined. A label and a list, not a sentence: the conditions are named in the archive's own words, which are noun fragments like "Titled" or "With media".
337
+ #: src/ui/shared/smart-collection-labels.ts
338
+ msgid "Automatically collects: {conditions}"
339
+ msgstr "Automatically collects: {conditions}"
300
340
 
301
341
  #. @context: Usage label for the circle tile asset card
302
342
  #: src/ui/pages/BrandPage.tsx
@@ -334,13 +374,6 @@ msgstr "Brand pack"
334
374
  msgid "Brand tile"
335
375
  msgstr "Brand tile"
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 "Breadcrumb"
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 "Built-in background"
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 "Buttons can stay steady, but links, thread markers, and subtle emphasis should feel closer to ink on paper than dashboard chrome."
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 "Cancel"
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 "Changing the link breaks the old one immediately."
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 "Circle tile"
416
452
  msgid "Clear filter"
417
453
  msgstr "Clear filter"
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 "Close"
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 "collection"
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 "Collection"
@@ -466,14 +509,14 @@ msgstr "Collection saved."
466
509
  msgid "collections"
467
510
  msgstr "collections"
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 "Collections"
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 "Collections and filtered archive views have their own feeds. Look for this icon on those pages."
535
+
488
536
  #. @context: Alert title on theme sample page
489
537
  #: src/ui/pages/ThemeSamplePage.tsx
490
538
  msgid "Color check"
@@ -502,10 +550,20 @@ msgstr "Combined Collections"
502
550
  msgid "Compare it against the theme controls"
503
551
  msgstr "Compare it against the theme controls"
504
552
 
505
- #. @context: Setup form submit button
506
- #: src/routes/auth/setup.tsx
507
- msgid "Complete Setup"
508
- msgstr "Complete Setup"
553
+ #. @context: Accessible name for the compose dialog
554
+ #: src/ui/compose/ComposeDialog.tsx
555
+ msgid "Compose"
556
+ msgstr "Compose"
557
+
558
+ #. @context: Smart collection dialog section heading
559
+ #: src/ui/shared/smart-collection-labels.ts
560
+ msgid "Conditions"
561
+ msgstr "Conditions"
562
+
563
+ #. @context: One line under the New Smart Collection heading, saying how it differs from an ordinary collection
564
+ #: src/ui/shared/smart-collection-labels.ts
565
+ msgid "Conditions choose what belongs here, not you. Posts you write later join on their own."
566
+ msgstr "Conditions choose what belongs here, not you. Posts you write later join on their own."
509
567
 
510
568
  #. @context: Password reset form field
511
569
  #: src/routes/auth/reset.tsx
@@ -517,25 +575,46 @@ msgstr "Confirm Password"
517
575
  msgid "Continue →"
518
576
  msgstr "Continue →"
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 "Continue writing this draft"
582
+
520
583
  #. @context: Controls section heading on sample page
521
584
  #: src/ui/pages/ThemeSamplePage.tsx
522
585
  msgid "Controls"
523
586
  msgstr "Controls"
524
587
 
588
+ #. @context: Button that copies a feed address to the clipboard
589
+ #: src/ui/pages/SubscribePage.tsx
590
+ msgid "Copy"
591
+ msgstr "Copy"
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 "Could not copy. Select the address and copy it."
597
+
598
+ #. @context: Collection dialog load failure
599
+ #: src/ui/shared/collection-management-labels.ts
600
+ msgid "Could not open this collection. Try again."
601
+ msgstr "Could not open this collection. Try again."
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 "Could not open this smart collection. Try again."
607
+
608
+ #. @context: Smart collection dialog save failure
609
+ #: src/ui/shared/smart-collection-labels.ts
610
+ msgid "Could not save. Try again."
611
+ msgstr "Could not save. Try again."
612
+
525
613
  #. @context: Error after a Collection could not be added to site navigation
526
614
  #: src/ui/shared/collection-management-labels.ts
527
615
  msgid "Couldn't add this collection to navigation. Try again."
528
616
  msgstr "Couldn't add this collection to navigation. Try again."
529
617
 
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."
537
- msgstr "Couldn't create your account. Check the details and try again."
538
-
539
618
  #. @context: Toast shown when edit mode fails to load a post
540
619
  #: src/ui/compose/ComposeDialog.tsx
541
620
  msgid "Couldn't load this post. Try again."
@@ -546,21 +625,31 @@ msgstr "Couldn't load this post. Try again."
546
625
  msgid "Couldn't publish. Saved as draft."
547
626
  msgstr "Couldn't publish. Saved as draft."
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 "Couldn't publish. Try again."
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 "Couldn't reach the server. Try again."
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 "Couldn't save. Try again in a moment."
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 "Counting…"
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 "Create a collection to get started."
558
652
 
559
- #. @context: Setup page description
560
- #: src/routes/auth/setup.tsx
561
- msgid "Create your admin account."
562
- msgstr "Create your admin account."
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 "Default preview image for social shares and link unfurls."
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 "Delete"
617
708
 
@@ -645,6 +736,11 @@ msgstr "Delete table"
645
736
  msgid "Delete this collection permanently? Threads inside won't be removed."
646
737
  msgstr "Delete this collection permanently? Threads inside won't be removed."
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 "Delete this smart collection? Its link stops working."
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 "Demo credentials are pre-filled — hit Sign In to continue."
655
751
  msgid "Describe this for people with visual impairments..."
656
752
  msgstr "Describe this for people with visual impairments..."
657
753
 
754
+ #. @context: Smart collection dialog field
755
+ #: src/ui/shared/smart-collection-labels.ts
756
+ msgid "Description"
757
+ msgstr "Description"
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 "Design"
676
777
  msgid "Designing a calmer default accent for Jant"
677
778
  msgstr "Designing a calmer default accent for Jant"
678
779
 
780
+ #. @context: Compose language option that leaves detection to Jant
781
+ #: src/ui/compose/ComposeDialog.tsx
782
+ msgid "Detect"
783
+ msgstr "Detect"
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 "Discard"
688
794
  msgid "Discard changes?"
689
795
  msgstr "Discard changes?"
690
796
 
797
+ #. @context: Smart collection dialog section heading
798
+ #: src/ui/shared/smart-collection-labels.ts
799
+ msgid "Display"
800
+ msgstr "Display"
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 "Download SVG"
756
867
  msgid "Download the official Jant logo, icons, and preview files."
757
868
  msgstr "Download the official Jant logo, icons, and preview files."
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 "Draft"
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 "Drafts"
797
913
  msgid "Drag collections, links, and dividers into the order you want."
798
914
  msgstr "Drag collections, links, and dividers into the order you want."
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 "Edit"
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 "Edit Collection"
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 "Edit custom link"
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 "Edit draft"
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,14 +953,22 @@ msgstr "Edit post"
833
953
  msgid "Edit publish date"
834
954
  msgstr "Edit publish date"
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 "Edit Smart Collection"
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 "Editing"
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 "Editorial interfaces worth borrowing from"
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
974
  msgstr "Email"
@@ -860,6 +988,11 @@ msgstr "Enter a valid date."
860
988
  msgid "Enter a valid URL starting with http://, https://, or mailto:."
861
989
  msgstr "Enter a valid URL starting with http://, https://, or mailto:."
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 "Every published post, including those kept off the home page."
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 "Favicon"
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,11 +1051,10 @@ msgstr "Featured on {date} at {time}"
916
1051
  msgid "Featured posts"
917
1052
  msgstr "Featured posts"
918
1053
 
919
- #. @context: Built-in navigation label for feed
920
- #: src/ui/shared/navigation-labels.ts
921
- msgctxt "nav"
922
- msgid "Feed"
923
- msgstr "Feed"
1054
+ #. @context: Toast after copying a feed URL to the clipboard
1055
+ #: src/ui/pages/SubscribePage.tsx
1056
+ msgid "Feed URL copied."
1057
+ msgstr "Feed URL copied."
924
1058
 
925
1059
  #. @context: Search snippet suffix on sample page
926
1060
  #: src/ui/pages/ThemeSamplePage.tsx
@@ -953,15 +1087,25 @@ msgid "File uploaded."
953
1087
  msgstr "File uploaded."
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 "Files"
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 "Follow site default"
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 "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."
964
1103
 
1104
+ #. @context: Post filter dimension name - note, link, or quote
1105
+ #: src/lib/filter-dimensions.ts
1106
+ msgid "Format"
1107
+ msgstr "Format"
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 "Generating a link..."
982
1126
  msgid "Give it a title..."
983
1127
  msgstr "Give it a title..."
984
1128
 
1129
+ #. @context: Smart collection layout option
1130
+ #: src/ui/shared/smart-collection-labels.ts
1131
+ msgid "Grid"
1132
+ msgstr "Grid"
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 "Helps screen readers describe the image"
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 "Hidden from Latest"
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 "Hide"
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 "Hide from Latest"
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 "Hide the original"
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 "Highest rated"
@@ -1052,7 +1213,7 @@ msgid "Image unavailable"
1052
1213
  msgstr "Image unavailable"
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 "Images"
1058
1219
 
@@ -1118,6 +1279,11 @@ msgstr "Jant looks best when the accent feels editorial. Buttons can stay sturdy
1118
1279
  msgid "Journal"
1119
1280
  msgstr "Journal"
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 "Keep editing"
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 "Label"
1138
1304
  msgid "Label (optional)"
1139
1305
  msgstr "Label (optional)"
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 "Language"
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 "Language: {language}"
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 "Last edited on {date} at {time}"
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 "Latest"
1160
1347
  msgid "Latest posts"
1161
1348
  msgstr "Latest posts"
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 "Layout"
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 "Link added."
1196
1390
  msgid "Link removed."
1197
1391
  msgstr "Link removed."
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 "Link to posts you've marked as featured."
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 "Link to the post archive"
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 "Link to your collections page"
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 "Link to your latest posts. Your homepage shows this feed."
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 "Link updated."
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 "Links"
1230
1402
 
@@ -1233,6 +1405,11 @@ msgstr "Links"
1233
1405
  msgid "Links should read clearly without glowing against the page."
1234
1406
  msgstr "Links should read clearly without glowing against the page."
1235
1407
 
1408
+ #. @context: Smart collection layout option
1409
+ #: src/ui/shared/smart-collection-labels.ts
1410
+ msgid "List"
1411
+ msgstr "List"
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 "Look at the footer metadata last, to make sure the accent is not fighting the typography."
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 "Main feed"
@@ -1282,6 +1461,8 @@ msgid "March 15"
1282
1461
  msgstr "March 15"
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 "Media"
@@ -1309,6 +1490,16 @@ msgstr "More actions"
1309
1490
  msgid "More options are available after you create it."
1310
1491
  msgstr "More options are available after you create it."
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 "Move attachment earlier"
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 "Move attachment later"
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 "Navigation and reading states"
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 "New Collection"
@@ -1361,14 +1550,21 @@ msgstr "New Password"
1361
1550
  msgid "New post"
1362
1551
  msgstr "New post"
1363
1552
 
1364
- #. @context: Compose dialog header title when composing a thread
1365
- #: src/ui/compose/ComposeDialog.tsx
1366
- msgid "New Thread"
1367
- msgstr "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"
1556
+ msgstr "New Smart Collection"
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 "newest changes first"
1368
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 "Newest first"
@@ -1396,6 +1592,11 @@ msgstr "No collections match that search. Try a different name."
1396
1592
  msgid "No collections yet. Start one to organize threads by topic."
1397
1593
  msgstr "No collections yet. Start one to organize threads by topic."
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 "No conditions yet. Add one to choose what lands here."
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 "No results. Try different keywords."
1416
1617
  msgid "No threads match these filters. Try adjusting your selection or clear all filters."
1417
1618
  msgstr "No threads match these filters. Try adjusting your selection or clear all filters."
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 "Not enough text to tell yet — publishes in {language}"
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 "Note"
1435
1641
  msgid "note treatment"
1436
1642
  msgstr "note treatment"
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 "Notes"
1444
1648
 
@@ -1447,18 +1651,45 @@ msgstr "Notes"
1447
1651
  msgid "Nothing here yet. Add threads to one of these collections to fill this view."
1448
1652
  msgstr "Nothing here yet. Add threads to one of these collections to fill this view."
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 "Nothing in {language} here yet."
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 "Nothing in Featured yet. Mark a post as featured to show it here."
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 "Nothing matches these conditions yet."
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 "Now"
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 "of {total} {unit}"
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 "Oldest first"
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 "Only the posts marked as featured."
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 "Open raw PNG"
1494
1725
  msgid "Open raw SVG"
1495
1726
  msgstr "Open raw SVG"
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 "Open the original in a new tab"
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 "Open the page this feed carries"
1737
+
1738
+ #. @context: Collection editing dialog field
1739
+ #: src/ui/shared/collection-management-labels.ts
1740
+ msgid "Order by"
1741
+ msgstr "Order by"
1742
+
1497
1743
  #. @context: Menu action to organize collections
1498
1744
  #: src/ui/shared/CollectionsManager.tsx
1499
1745
  msgid "Organize"
@@ -1505,8 +1751,6 @@ msgid "Outline"
1505
1751
  msgstr "Outline"
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
1756
  msgstr "Password"
@@ -1532,6 +1776,11 @@ msgstr ""
1532
1776
  msgid "Paste a URL..."
1533
1777
  msgstr "Paste a URL..."
1534
1778
 
1779
+ #. @context: Post status badge for a pinned post
1780
+ #: src/ui/feed/PostStatusBadges.tsx
1781
+ msgid "Pinned"
1782
+ msgstr "Pinned"
1783
+
1535
1784
  #. @context: Compose button - publish post
1536
1785
  #: src/ui/compose/ComposeDialog.tsx
1537
1786
  msgid "Post"
@@ -1552,6 +1801,11 @@ msgstr "Post hidden"
1552
1801
  msgid "Post privately"
1553
1802
  msgstr "Post privately"
1554
1803
 
1804
+ #. @context: Smart collection dialog — conditions are combined with AND
1805
+ #: src/ui/shared/smart-collection-labels.ts
1806
+ msgid "Posts matching all of these"
1807
+ msgstr "Posts matching all of these"
1808
+
1555
1809
  #. @context: Hover hint for the homepage compose shortcut
1556
1810
  #: src/ui/compose/ComposePrompt.tsx
1557
1811
  msgid "Press N to write"
@@ -1595,15 +1849,17 @@ msgstr "Primary logo files"
1595
1849
 
1596
1850
  #. @context: Archive visibility filter - private posts
1597
1851
  #. @context: Compose publish settings visibility option
1852
+ #. @context: Post status badge for a private post
1853
+ #: src/lib/filter-dimensions.ts
1598
1854
  #: src/ui/compose/ComposeDialog.tsx
1599
- #: src/ui/pages/ArchivePage.tsx
1855
+ #: src/ui/feed/PostStatusBadges.tsx
1600
1856
  msgid "Private"
1601
1857
  msgstr "Private"
1602
1858
 
1603
1859
  #. @context: Archive visibility filter - public posts
1604
1860
  #. @context: Compose publish settings visibility option
1861
+ #: src/lib/filter-dimensions.ts
1605
1862
  #: src/ui/compose/ComposeDialog.tsx
1606
- #: src/ui/pages/ArchivePage.tsx
1607
1863
  msgid "Public"
1608
1864
  msgstr "Public"
1609
1865
 
@@ -1614,11 +1870,6 @@ msgstr "Public"
1614
1870
  msgid "Publish"
1615
1871
  msgstr "Publish"
1616
1872
 
1617
- #. @context: Compose summary shown near the submit controls when an edited post no longer has a custom publish date
1618
- #: src/ui/compose/ComposeDialog.tsx
1619
- msgid "Publish now"
1620
- msgstr "Publish now"
1621
-
1622
1873
  #. @context: Compose publish settings panel title
1623
1874
  #: src/ui/compose/ComposeDialog.tsx
1624
1875
  msgid "Publish settings"
@@ -1641,6 +1892,11 @@ msgstr "Published on {date} at {time}"
1641
1892
  msgid "Published!"
1642
1893
  msgstr "Published!"
1643
1894
 
1895
+ #. @context: Toast shown while a post is being published
1896
+ #: src/ui/compose/ComposeDialog.tsx
1897
+ msgid "Publishing..."
1898
+ msgstr "Publishing..."
1899
+
1644
1900
  #. @context: Search highlight text on sample page
1645
1901
  #: src/ui/pages/ThemeSamplePage.tsx
1646
1902
  msgid "quiet design"
@@ -1668,11 +1924,9 @@ msgstr "Quote"
1668
1924
  msgid "Quoted or highlighted passages should feel like annotations, not warnings."
1669
1925
  msgstr "Quoted or highlighted passages should feel like annotations, not warnings."
1670
1926
 
1671
- #. @context: Archive feed title segment for quote format filter
1672
1927
  #. @context: Placeholder for the custom collections link label
1673
1928
  #. @context: Post format label plural - quotes
1674
- #: src/routes/pages/archive.tsx
1675
- #: src/ui/pages/ArchivePage.tsx
1929
+ #: src/lib/filter-dimensions.ts
1676
1930
  #: src/ui/shared/collection-management-labels.ts
1677
1931
  msgid "Quotes"
1678
1932
  msgstr "Quotes"
@@ -1682,6 +1936,21 @@ msgstr "Quotes"
1682
1936
  msgid "Rate"
1683
1937
  msgstr "Rate"
1684
1938
 
1939
+ #. @context: Help text under the compose language field
1940
+ #: src/ui/compose/ComposeDialog.tsx
1941
+ msgid "Read from what you write"
1942
+ msgstr "Read from what you write"
1943
+
1944
+ #. @context: Help text under the compose language field once a language has been detected
1945
+ #: src/ui/compose/ComposeDialog.tsx
1946
+ msgid "Read from what you write — looks like {language}"
1947
+ msgstr "Read from what you write — looks like {language}"
1948
+
1949
+ #. @context: Link out of an empty language view of a collection
1950
+ #: src/ui/pages/CollectionPage.tsx
1951
+ msgid "Read it in {language}"
1952
+ msgstr "Read it in {language}"
1953
+
1685
1954
  #. @context: Collapse an expanded untitled note back to its preview in the feed
1686
1955
  #: src/ui/feed/NoteCard.tsx
1687
1956
  msgid "Read less"
@@ -1722,6 +1991,11 @@ msgstr "References"
1722
1991
  msgid "Remove attachment"
1723
1992
  msgstr "Remove attachment"
1724
1993
 
1994
+ #. @context: Smart collection dialog condition row button
1995
+ #: src/ui/shared/smart-collection-labels.ts
1996
+ msgid "Remove condition"
1997
+ msgstr "Remove condition"
1998
+
1725
1999
  #. @context: Tooltip for divider delete button
1726
2000
  #: src/ui/shared/CollectionsManager.tsx
1727
2001
  msgid "Remove Divider"
@@ -1743,16 +2017,16 @@ msgid "Replace image"
1743
2017
  msgstr "Replace image"
1744
2018
 
1745
2019
  #. @context: Archive tile label for multiple thread replies
2020
+ #. @context: Post filter dimension name - whether a thread has replies
2021
+ #: src/lib/filter-dimensions.ts
1746
2022
  #: src/ui/pages/ArchivePage.tsx
1747
2023
  msgid "Replies"
1748
2024
  msgstr "Replies"
1749
2025
 
1750
2026
  #. @context: Archive tile label for a single thread reply
1751
2027
  #. @context: Compose button - reply to post
1752
- #. @context: Compose dialog header title when replying to a post
1753
2028
  #. @context: Reply button label in the post footer
1754
2029
  #: src/ui/compose/ComposeDialog.tsx
1755
- #: src/ui/compose/ComposeDialog.tsx
1756
2030
  #: src/ui/pages/ArchivePage.tsx
1757
2031
  #: src/ui/shared/PostFooter.tsx
1758
2032
  msgid "Reply"
@@ -1788,8 +2062,18 @@ msgstr "Reset Password"
1788
2062
  msgid "Reverse logo"
1789
2063
  msgstr "Reverse logo"
1790
2064
 
2065
+ #. @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.
2066
+ #: src/ui/shared/navigation-labels.ts
2067
+ msgctxt "nav"
2068
+ msgid "RSS"
2069
+ msgstr "RSS"
2070
+
2071
+ #. @context: Tooltip for the RSS feed icon beside a collection in the collections directory
2072
+ #. @context: Tooltip for the RSS feed link on a collection page
1791
2073
  #. @context: Tooltip for the RSS feed link on a collection page
1792
2074
  #: src/ui/pages/CollectionPage.tsx
2075
+ #: src/ui/pages/SmartCollectionPage.tsx
2076
+ #: src/ui/shared/CollectionDirectory.tsx
1793
2077
  msgid "RSS feed"
1794
2078
  msgstr "RSS feed"
1795
2079
 
@@ -1847,6 +2131,11 @@ msgstr "Save to drafts to edit and post at a later time."
1847
2131
  msgid "Save to drafts?"
1848
2132
  msgstr "Save to drafts?"
1849
2133
 
2134
+ #. @context: Toast shown while a draft or an edited post is being saved
2135
+ #: src/ui/compose/ComposeDialog.tsx
2136
+ msgid "Saving..."
2137
+ msgstr "Saving..."
2138
+
1850
2139
  #. @context: Search page title
1851
2140
  #. @context: Search submit button
1852
2141
  #: src/ui/pages/SearchPage.tsx
@@ -1886,6 +2175,21 @@ msgstr "Settings"
1886
2175
  msgid "Shared links"
1887
2176
  msgstr "Shared links"
1888
2177
 
2178
+ #. @context: Button that brings back the folded-away original while writing its translation
2179
+ #: src/ui/compose/ComposeDialog.tsx
2180
+ msgid "Show"
2181
+ msgstr "Show"
2182
+
2183
+ #. @context: Archive view option - grid
2184
+ #: src/ui/pages/ArchivePage.tsx
2185
+ msgid "Show as a grid of tiles"
2186
+ msgstr "Show as a grid of tiles"
2187
+
2188
+ #. @context: Archive view option - list
2189
+ #: src/ui/pages/ArchivePage.tsx
2190
+ msgid "Show as a list with full posts"
2191
+ msgstr "Show as a list with full posts"
2192
+
1889
2193
  #. @context: Collapse expanded thread ancestor context in the feed
1890
2194
  #. @context: Collapse expanded thread ancestor context in the feed
1891
2195
  #. @context: Collapse reply context
@@ -1904,10 +2208,10 @@ msgstr "Show less"
1904
2208
  msgid "Show more"
1905
2209
  msgstr "Show more"
1906
2210
 
1907
- #. @context: Description for the settings system navigation toggle
1908
- #: src/ui/shared/navigation-labels.ts
1909
- msgid "Shows 'Settings' when logged in, 'Sign in' when logged out"
1910
- msgstr "Shows 'Settings' when logged in, 'Sign in' when logged out"
2211
+ #. @context: Accessible name of the button that brings back the folded-away post being translated
2212
+ #: src/ui/compose/ComposeDialog.tsx
2213
+ msgid "Show the original"
2214
+ msgstr "Show the original"
1911
2215
 
1912
2216
  #. @context: Built-in navigation label shown when auth is required
1913
2217
  #: src/ui/shared/navigation-labels.ts
@@ -1929,12 +2233,9 @@ msgstr "Sign In"
1929
2233
  msgid "Sign in to start writing."
1930
2234
  msgstr "Sign in to start writing."
1931
2235
 
1932
- #. @context: Archive feed title segment for hasReplies=0 filter
1933
- #: src/routes/pages/archive.tsx
1934
- msgid "single posts"
1935
- msgstr "single posts"
1936
-
1937
2236
  #. @context: Archive thread filter - posts without replies
2237
+ #. @context: Archive thread filter - posts without replies
2238
+ #: src/lib/filter-dimensions.ts
1938
2239
  #: src/ui/pages/ArchivePage.tsx
1939
2240
  msgid "Single posts"
1940
2241
  msgstr "Single posts"
@@ -1944,16 +2245,28 @@ msgstr "Single posts"
1944
2245
  msgid "Site accent"
1945
2246
  msgstr "Site accent"
1946
2247
 
1947
- #. @context: Setup form field - site name
1948
- #: src/routes/auth/setup.tsx
1949
- msgid "Site Name"
1950
- msgstr "Site Name"
1951
-
1952
2248
  #. @context: Description for the favicon asset card
1953
2249
  #: src/ui/pages/BrandPage.tsx
1954
2250
  msgid "Small browser icon used in tabs and bookmarks."
1955
2251
  msgstr "Small browser icon used in tabs and bookmarks."
1956
2252
 
2253
+ #. @context: Name of a collection whose members come from conditions
2254
+ #: src/ui/shared/smart-collection-labels.ts
2255
+ msgid "Smart Collection"
2256
+ msgstr "Smart Collection"
2257
+
2258
+ #. @context: Confirmation after deleting a smart collection
2259
+ #. @context: Confirmation after deleting a smart collection
2260
+ #: src/ui/pages/SmartCollectionPage.tsx
2261
+ #: src/ui/shared/CollectionsManager.tsx
2262
+ msgid "Smart collection deleted."
2263
+ msgstr "Smart collection deleted."
2264
+
2265
+ #. @context: Confirmation after saving a smart collection
2266
+ #: src/ui/shared/smart-collection-labels.ts
2267
+ msgid "Smart collection saved."
2268
+ msgstr "Smart collection saved."
2269
+
1957
2270
  #. @context: Asset keyword on the public brand asset page
1958
2271
  #: src/ui/pages/BrandPage.tsx
1959
2272
  msgid "Social preview"
@@ -1971,26 +2284,36 @@ msgstr "Some uploads failed. Saved as draft."
1971
2284
 
1972
2285
  #. @context: Fallback validation error for compose form
1973
2286
  #. @context: Fallback validation error for password reset form
1974
- #. @context: Fallback validation error for setup form
1975
2287
  #. @context: Fallback validation error for sign-in form
1976
2288
  #. @context: Fallback validation error for thread compose form
1977
2289
  #: src/routes/auth/reset.tsx
1978
- #: src/routes/auth/setup.tsx
1979
2290
  #: src/routes/auth/signin.tsx
1980
2291
  #: src/routes/compose.tsx
1981
2292
  #: src/routes/compose.tsx
1982
2293
  msgid "Something doesn't look right. Check the form and try again."
1983
2294
  msgstr "Something doesn't look right. Check the form and try again."
1984
2295
 
2296
+ #. @context: Sort menu label on collection detail page
1985
2297
  #. @context: Sort menu label on collection detail page
1986
2298
  #: src/ui/pages/CollectionPage.tsx
2299
+ #: src/ui/pages/SmartCollectionPage.tsx
1987
2300
  msgid "Sort"
1988
2301
  msgstr "Sort"
1989
2302
 
1990
- #. @context: Collection form field
1991
- #: src/ui/shared/collection-management-labels.ts
1992
- msgid "Sort Order"
1993
- msgstr "Sort Order"
2303
+ #. @context: Archive sort option - threads that recently gained a post first
2304
+ #: src/ui/pages/ArchivePage.tsx
2305
+ msgid "Sort by when each thread was last added to"
2306
+ msgstr "Sort by when each thread was last added to"
2307
+
2308
+ #. @context: Archive sort option - newest published first
2309
+ #: src/ui/pages/ArchivePage.tsx
2310
+ msgid "Sort by when each thread was published"
2311
+ msgstr "Sort by when each thread was published"
2312
+
2313
+ #. @context: Archive sort toggle group label
2314
+ #: src/ui/pages/ArchivePage.tsx
2315
+ msgid "Sort order"
2316
+ msgstr "Sort order"
1994
2317
 
1995
2318
  #. @context: Compose quote source link placeholder
1996
2319
  #: src/ui/compose/ComposeDialog.tsx
@@ -2027,6 +2350,24 @@ msgstr "Start here"
2027
2350
  msgid "Stay sturdy and readable."
2028
2351
  msgstr "Stay sturdy and readable."
2029
2352
 
2353
+ #. @context: Browser page title for the subscribe page
2354
+ #. @context: Page title for the feed subscription page
2355
+ #: src/routes/pages/subscribe.tsx
2356
+ #: src/ui/pages/SubscribePage.tsx
2357
+ msgid "Subscribe"
2358
+ msgstr "Subscribe"
2359
+
2360
+ #. @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.
2361
+ #: src/ui/shared/navigation-labels.ts
2362
+ msgctxt "nav"
2363
+ msgid "Subscribe"
2364
+ msgstr "Subscribe"
2365
+
2366
+ #. @context: Subscribe page note that subscribing is one-sided and how to undo it
2367
+ #: src/ui/pages/SubscribePage.tsx
2368
+ msgid "Subscribing creates no account here. To stop, delete the address from your reader."
2369
+ msgstr "Subscribing creates no account here. To stop, delete the address from your reader."
2370
+
2030
2371
  #. @context: Compose custom slug helper label for the suggested slug
2031
2372
  #: src/ui/compose/ComposeDialog.tsx
2032
2373
  msgid "Suggested link"
@@ -2081,8 +2422,8 @@ msgstr "Text"
2081
2422
 
2082
2423
  #. @context: Archive media filter - text file attachments
2083
2424
  #. @context: Attached text panel title
2425
+ #: src/lib/filter-dimensions.ts
2084
2426
  #: src/ui/compose/ComposeDialog.tsx
2085
- #: src/ui/pages/ArchivePage.tsx
2086
2427
  msgid "Text attachment"
2087
2428
  msgstr "Text attachment"
2088
2429
 
@@ -2116,11 +2457,21 @@ msgstr "The default accent works best when it reads like a fountain-pen underlin
2116
2457
  msgid "The image should sit quietly inside the article instead of feeling like a card preview."
2117
2458
  msgstr "The image should sit quietly inside the article instead of feeling like a card preview."
2118
2459
 
2460
+ #. @context: Accessible name of the scrollable panel holding the post being translated
2461
+ #: src/ui/compose/ComposeDialog.tsx
2462
+ msgid "The original"
2463
+ msgstr "The original"
2464
+
2119
2465
  #. @context: Blockquote on the theme sample page
2120
2466
  #: src/ui/pages/ThemeSamplePage.tsx
2121
2467
  msgid "The right accent should disappear into the writing until you need it."
2122
2468
  msgstr "The right accent should disappear into the writing until you need it."
2123
2469
 
2470
+ #. @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.
2471
+ #: src/routes/pages/subscribe.tsx
2472
+ msgid "The same posts as the home page."
2473
+ msgstr "The same posts as the home page."
2474
+
2124
2475
  #. @context: Section heading for theme picker pills
2125
2476
  #: src/ui/pages/ThemeSamplePage.tsx
2126
2477
  msgid "Theme"
@@ -2143,6 +2494,11 @@ msgstr "These are actual feed components with real footers, summaries, and inlin
2143
2494
  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?"
2144
2495
  msgstr "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?"
2145
2496
 
2497
+ #. @context: Toast shown when the composer cannot write its local draft to browser storage
2498
+ #: src/ui/compose/ComposeDialog.tsx
2499
+ msgid "This browser can't keep a local copy. Save as a draft."
2500
+ msgstr "This browser can't keep a local copy. Save as a draft."
2501
+
2146
2502
  #. @context: Empty state message
2147
2503
  #: src/ui/pages/CollectionPage.tsx
2148
2504
  msgid "This collection is empty. Add threads from the editor."
@@ -2179,6 +2535,11 @@ msgstr "This link is already in use. Choose something else."
2179
2535
  msgid "This link is reserved. Choose something else."
2180
2536
  msgstr "This link is reserved. Choose something else."
2181
2537
 
2538
+ #. @context: Collection editing dialog — the typed collection link is already in use
2539
+ #: src/ui/shared/collection-management-labels.ts
2540
+ msgid "This link is taken. Choose another."
2541
+ msgstr "This link is taken. Choose another."
2542
+
2182
2543
  #. @context: Explanation in the draft preview status bar
2183
2544
  #: src/ui/shared/DraftPreviewBar.tsx
2184
2545
  msgid "This post isn’t published."
@@ -2199,6 +2560,11 @@ msgstr "This reset link is no longer valid. Request a new one to continue."
2199
2560
  msgid "This sign-in link has expired. Return to "
2200
2561
  msgstr "This sign-in link has expired. Return to "
2201
2562
 
2563
+ #. @context: Subscribe page introduction, above the feed addresses. States the format the site serves, then the one action to take.
2564
+ #: src/ui/pages/SubscribePage.tsx
2565
+ msgid "This site publishes Atom feeds. Copy one of these addresses into a feed reader."
2566
+ msgstr "This site publishes Atom feeds. Copy one of these addresses into a feed reader."
2567
+
2202
2568
  #. @context: Error shown when a hosted upload would exceed the shared account media limit
2203
2569
  #. @context: Error shown when a hosted upload would exceed the shared account media limit
2204
2570
  #: src/routes/api/upload-multipart.ts
@@ -2215,10 +2581,14 @@ msgstr "This uses the real single-post detail rendering with a longer article, i
2215
2581
  #. @context: Archive page summary unit for a single matching thread
2216
2582
  #. @context: Singular thread count label
2217
2583
  #. @context: Singular thread count label
2584
+ #. @context: Singular thread count label
2585
+ #. @context: Singular thread count label on collection detail page
2218
2586
  #. @context: Singular thread count label on collection detail page
2219
2587
  #: src/ui/pages/ArchivePage.tsx
2220
2588
  #: src/ui/pages/ArchivePage.tsx
2221
2589
  #: src/ui/pages/CollectionPage.tsx
2590
+ #: src/ui/pages/SmartCollectionPage.tsx
2591
+ #: src/ui/shared/CollectionDirectory.tsx
2222
2592
  #: src/ui/shared/CollectionDirectory.tsx
2223
2593
  #: src/ui/shared/CollectionsManager.tsx
2224
2594
  msgid "thread"
@@ -2234,22 +2604,26 @@ msgstr "Thread accent"
2234
2604
  msgid "Thread accents"
2235
2605
  msgstr "Thread accents"
2236
2606
 
2237
- #. @context: Archive feed title segment for hasReplies=1 filter
2238
2607
  #. @context: Archive month header count unit for multiple threads
2239
2608
  #. @context: Archive page summary unit for multiple matching threads
2240
2609
  #. @context: Plural thread count label
2241
2610
  #. @context: Plural thread count label
2611
+ #. @context: Plural thread count label
2612
+ #. @context: Plural thread count label on collection detail page
2242
2613
  #. @context: Plural thread count label on collection detail page
2243
- #: src/routes/pages/archive.tsx
2244
2614
  #: src/ui/pages/ArchivePage.tsx
2245
2615
  #: src/ui/pages/ArchivePage.tsx
2246
2616
  #: src/ui/pages/CollectionPage.tsx
2617
+ #: src/ui/pages/SmartCollectionPage.tsx
2618
+ #: src/ui/shared/CollectionDirectory.tsx
2247
2619
  #: src/ui/shared/CollectionDirectory.tsx
2248
2620
  #: src/ui/shared/CollectionsManager.tsx
2249
2621
  msgid "threads"
2250
2622
  msgstr "threads"
2251
2623
 
2252
2624
  #. @context: Archive thread filter - thread roots with replies
2625
+ #. @context: Archive thread filter - thread roots with replies
2626
+ #: src/lib/filter-dimensions.ts
2253
2627
  #: src/ui/pages/ArchivePage.tsx
2254
2628
  msgid "Threads"
2255
2629
  msgstr "Threads"
@@ -2260,18 +2634,22 @@ msgid "Threads can include up to {count} posts."
2260
2634
  msgstr "Threads can include up to {count} posts."
2261
2635
 
2262
2636
  #. @context: Collection form field
2263
- #. @context: Compose note title placeholder
2264
- #. @context: Compose toolbar - title tooltip
2637
+ #. @context: Compose toolbar - show or hide the title field
2265
2638
  #. @context: Input label on sample page
2266
- #: src/ui/compose/ComposeDialog.tsx
2639
+ #. @context: Post filter dimension name - whether a post is titled
2640
+ #. @context: Smart collection dialog field
2641
+ #: src/lib/filter-dimensions.ts
2267
2642
  #: src/ui/compose/ComposeDialog.tsx
2268
2643
  #: src/ui/pages/ThemeSamplePage.tsx
2269
2644
  #: src/ui/shared/collection-management-labels.ts
2645
+ #: src/ui/shared/smart-collection-labels.ts
2270
2646
  msgid "Title"
2271
2647
  msgstr "Title"
2272
2648
 
2273
2649
  #. @context: Archive filter - notes that have a title
2274
2650
  #. @context: Archive filter - notes that have a title
2651
+ #. @context: Archive filter - notes that have a title
2652
+ #: src/lib/filter-dimensions.ts
2275
2653
  #: src/ui/pages/ArchivePage.tsx
2276
2654
  #: src/ui/pages/ArchivePage.tsx
2277
2655
  msgid "Titled"
@@ -2287,6 +2665,21 @@ msgstr "to make sure both still feel like they belong to the same product."
2287
2665
  msgid "Toggle header row"
2288
2666
  msgstr "Toggle header row"
2289
2667
 
2668
+ #. @context: Divider between the original post and the editor writing its translation, when the target language is not known yet
2669
+ #: src/ui/compose/ComposeDialog.tsx
2670
+ msgid "Translating"
2671
+ msgstr "Translating"
2672
+
2673
+ #. @context: Divider between the original post above and the editor below, naming the language being written
2674
+ #: src/ui/compose/ComposeDialog.tsx
2675
+ msgid "Translating into {language}"
2676
+ msgstr "Translating into {language}"
2677
+
2678
+ #. @context: Compose banner shown while writing a translation of an existing post
2679
+ #: src/ui/compose/ComposeDialog.tsx
2680
+ msgid "Translation of “{title}”"
2681
+ msgstr "Translation of “{title}”"
2682
+
2290
2683
  #. @context: Usage label for the square logo PNG asset card
2291
2684
  #: src/ui/pages/BrandPage.tsx
2292
2685
  msgid "Transparent square"
@@ -2309,6 +2702,10 @@ msgstr "Type the quote..."
2309
2702
 
2310
2703
  #. @context: Archive filter - notes without a title
2311
2704
  #. @context: Archive filter - notes without a title
2705
+ #. @context: Archive filter - notes without a title
2706
+ #. @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.
2707
+ #: src/lib/filter-dimensions.ts
2708
+ #: src/ui/compose/ComposeDialog.tsx
2312
2709
  #: src/ui/pages/ArchivePage.tsx
2313
2710
  #: src/ui/pages/ArchivePage.tsx
2314
2711
  msgid "Untitled"
@@ -2377,7 +2774,7 @@ msgid "Use this page to judge buttons, links, cards, forms, thread accents, and
2377
2774
  msgstr "Use this page to judge buttons, links, cards, forms, thread accents, and quiet surfaces before changing a theme globally."
2378
2775
 
2379
2776
  #. @context: Archive media filter - video
2380
- #: src/ui/pages/ArchivePage.tsx
2777
+ #: src/lib/filter-dimensions.ts
2381
2778
  msgid "Video"
2382
2779
  msgstr "Video"
2383
2780
 
@@ -2392,14 +2789,16 @@ msgid "View earlier notes in this thread"
2392
2789
  msgstr "View earlier notes in this thread"
2393
2790
 
2394
2791
  #. @context: Compose publish settings section label
2792
+ #. @context: Post filter dimension name - who can see a post
2793
+ #: src/lib/filter-dimensions.ts
2395
2794
  #: src/ui/compose/ComposeDialog.tsx
2396
2795
  msgid "Visibility"
2397
2796
  msgstr "Visibility"
2398
2797
 
2399
- #. @context: Setup page welcome heading
2400
- #: src/routes/auth/setup.tsx
2401
- msgid "Welcome to Jant"
2402
- msgstr "Welcome to Jant"
2798
+ #. @context: Subscribe page heading over the explanation of feed readers, for readers who have not used one
2799
+ #: src/ui/pages/SubscribePage.tsx
2800
+ msgid "What a feed reader does"
2801
+ msgstr "What a feed reader does"
2403
2802
 
2404
2803
  #. @context: Table header in the sample detail article
2405
2804
  #: src/ui/pages/ThemeSamplePage.tsx
@@ -2456,25 +2855,21 @@ msgstr "White logo on the Jant green square tile for platforms and layouts that
2456
2855
  msgid "Why the default accent should feel written, not branded"
2457
2856
  msgstr "Why the default accent should feel written, not branded"
2458
2857
 
2459
- #. @context: Archive feed title segment for hasMedia=1 filter
2460
- #: src/routes/pages/archive.tsx
2461
- msgid "with media"
2462
- msgstr "with media"
2463
-
2464
- #. @context: Archive feed title segment for hasTitle=1 filter
2465
- #: src/routes/pages/archive.tsx
2466
- msgid "with title"
2467
- msgstr "with title"
2468
-
2469
- #. @context: Archive feed title segment for hasMedia=0 filter
2470
- #: src/routes/pages/archive.tsx
2471
- msgid "without media"
2472
- msgstr "without media"
2858
+ #. @context: Archive filter - posts carrying any media attachment
2859
+ #. @context: Archive filter - posts carrying any media attachment
2860
+ #. @context: Archive filter - posts carrying any media attachment
2861
+ #: src/lib/filter-dimensions.ts
2862
+ #: src/ui/pages/ArchivePage.tsx
2863
+ #: src/ui/shared/smart-collection-labels.ts
2864
+ msgid "With media"
2865
+ msgstr "With media"
2473
2866
 
2474
- #. @context: Archive feed title segment for hasTitle=0 filter
2475
- #: src/routes/pages/archive.tsx
2476
- msgid "without title"
2477
- msgstr "without title"
2867
+ #. @context: Archive filter - posts with no media attachment
2868
+ #. @context: Archive filter - posts with no media attachment
2869
+ #: src/lib/filter-dimensions.ts
2870
+ #: src/ui/shared/smart-collection-labels.ts
2871
+ msgid "Without media"
2872
+ msgstr "Without media"
2478
2873
 
2479
2874
  #. @context: Compose publish settings hint for quiet reply switch
2480
2875
  #: src/ui/compose/ComposeDialog.tsx
@@ -2491,6 +2886,11 @@ msgstr "Write your first post to get started."
2491
2886
  msgid "Wrong email or password. Check your credentials and try again."
2492
2887
  msgstr "Wrong email or password. Check your credentials and try again."
2493
2888
 
2889
+ #. @context: Post filter dimension name - year of publication
2890
+ #: src/lib/filter-dimensions.ts
2891
+ msgid "Year"
2892
+ msgstr "Year"
2893
+
2494
2894
  #. @context: Confirm close action sheet title when editing a published post
2495
2895
  #: src/ui/compose/ComposeDialog.tsx
2496
2896
  msgid "You have unsaved changes"