@jant/core 0.3.27 → 0.3.29

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 (314) hide show
  1. package/bin/reset-password.js +22 -0
  2. package/dist/client/client.css +1 -0
  3. package/dist/client/client.js +31561 -0
  4. package/dist/index.js +15209 -15
  5. package/package.json +25 -15
  6. package/src/__tests__/helpers/app.ts +19 -3
  7. package/src/__tests__/helpers/db.ts +44 -0
  8. package/src/__tests__/helpers/lingui-core-macro-mock.ts +33 -0
  9. package/src/app.tsx +111 -174
  10. package/src/client.ts +13 -0
  11. package/src/db/migrations/0007_post_collections_m2m.sql +94 -0
  12. package/src/db/migrations/0008_add_collection_dividers.sql +8 -0
  13. package/src/db/migrations/0009_drop_collection_show_divider.sql +2 -0
  14. package/src/db/migrations/0010_add_performance_indexes.sql +16 -0
  15. package/src/db/schema.ts +24 -4
  16. package/src/i18n/locales/en.po +810 -385
  17. package/src/i18n/locales/en.ts +1 -1
  18. package/src/i18n/locales/zh-Hans.po +733 -522
  19. package/src/i18n/locales/zh-Hans.ts +1 -1
  20. package/src/i18n/locales/zh-Hant.po +733 -522
  21. package/src/i18n/locales/zh-Hant.ts +1 -1
  22. package/src/i18n/middleware.ts +7 -11
  23. package/src/index.ts +1 -1
  24. package/src/lib/__tests__/icons.test.ts +178 -0
  25. package/src/lib/__tests__/resolve-config.test.ts +184 -0
  26. package/src/lib/__tests__/schemas.test.ts +12 -6
  27. package/src/lib/__tests__/theme.test.ts +62 -0
  28. package/src/lib/__tests__/timezones.test.ts +1 -1
  29. package/src/lib/__tests__/url.test.ts +12 -0
  30. package/src/lib/__tests__/view.test.ts +1 -5
  31. package/src/lib/avatar-upload.ts +18 -10
  32. package/src/lib/collection-form-bridge.ts +52 -0
  33. package/src/lib/collections-reorder.ts +28 -0
  34. package/src/lib/compose-bridge.ts +251 -0
  35. package/src/lib/errors.ts +116 -0
  36. package/src/lib/excerpt.ts +1 -1
  37. package/src/lib/favicon.ts +3 -5
  38. package/src/lib/html.ts +22 -0
  39. package/src/lib/icon-catalog.ts +181 -0
  40. package/src/lib/icons.ts +202 -0
  41. package/src/lib/navigation.ts +18 -33
  42. package/src/lib/pagination.ts +3 -2
  43. package/src/lib/post-form-bridge.ts +136 -0
  44. package/src/lib/render.tsx +11 -4
  45. package/src/lib/resolve-config.ts +157 -0
  46. package/src/lib/schemas.ts +76 -12
  47. package/src/lib/settings-bridge.ts +139 -0
  48. package/src/lib/storage.ts +37 -16
  49. package/src/lib/theme.ts +5 -7
  50. package/src/lib/timeline.ts +4 -8
  51. package/src/lib/toast.ts +134 -0
  52. package/src/lib/upload.ts +71 -0
  53. package/src/lib/url.ts +9 -1
  54. package/src/lib/version.ts +16 -0
  55. package/src/lib/view.ts +9 -10
  56. package/src/middleware/__tests__/auth.test.ts +6 -28
  57. package/src/middleware/__tests__/onboarding.test.ts +1 -1
  58. package/src/middleware/auth.ts +6 -12
  59. package/src/middleware/config.ts +51 -0
  60. package/src/middleware/error-handler.ts +56 -0
  61. package/src/middleware/onboarding.ts +1 -1
  62. package/src/preset.css +6 -0
  63. package/src/routes/__tests__/compose.test.ts +104 -17
  64. package/src/routes/api/__tests__/collections.test.ts +93 -2
  65. package/src/routes/api/__tests__/posts.test.ts +2 -1
  66. package/src/routes/api/__tests__/settings.test.ts +1 -1
  67. package/src/routes/api/collections.ts +64 -68
  68. package/src/routes/api/nav-items.ts +21 -59
  69. package/src/routes/api/pages.ts +18 -46
  70. package/src/routes/api/posts.ts +64 -86
  71. package/src/routes/api/search.ts +6 -4
  72. package/src/routes/api/settings.ts +8 -24
  73. package/src/routes/api/upload.ts +55 -53
  74. package/src/routes/auth/__tests__/setup.test.ts +118 -0
  75. package/src/routes/auth/reset.tsx +17 -66
  76. package/src/routes/auth/setup.tsx +67 -11
  77. package/src/routes/auth/signin.tsx +44 -8
  78. package/src/routes/compose.tsx +194 -0
  79. package/src/routes/dash/__tests__/font-theme.test.ts +110 -0
  80. package/src/routes/dash/__tests__/pages.test.ts +2 -2
  81. package/src/routes/dash/__tests__/settings-avatar.test.ts +23 -12
  82. package/src/routes/dash/appearance.tsx +173 -0
  83. package/src/routes/dash/collections.tsx +80 -14
  84. package/src/routes/dash/index.tsx +12 -14
  85. package/src/routes/dash/media.tsx +46 -49
  86. package/src/routes/dash/pages.tsx +85 -37
  87. package/src/routes/dash/posts.tsx +60 -23
  88. package/src/routes/dash/redirects.tsx +43 -33
  89. package/src/routes/dash/settings.tsx +234 -214
  90. package/src/routes/feed/__tests__/rss.test.ts +7 -3
  91. package/src/routes/feed/rss.ts +11 -16
  92. package/src/routes/feed/sitemap.ts +15 -9
  93. package/src/routes/pages/__tests__/collections.test.ts +9 -8
  94. package/src/routes/pages/archive.tsx +2 -2
  95. package/src/routes/pages/collection.tsx +76 -9
  96. package/src/routes/pages/collections.tsx +3 -1
  97. package/src/routes/pages/featured.tsx +2 -2
  98. package/src/routes/pages/home.tsx +3 -3
  99. package/src/routes/pages/latest.tsx +2 -2
  100. package/src/routes/pages/page.tsx +2 -2
  101. package/src/routes/pages/post.tsx +2 -2
  102. package/src/routes/pages/search.tsx +2 -2
  103. package/src/services/__tests__/collection.test.ts +324 -34
  104. package/src/services/__tests__/media.test.ts +1 -1
  105. package/src/services/__tests__/page.test.ts +116 -1
  106. package/src/services/auth.ts +88 -0
  107. package/src/services/collection.ts +169 -30
  108. package/src/services/index.ts +8 -3
  109. package/src/services/media.ts +39 -12
  110. package/src/services/navigation.ts +17 -5
  111. package/src/services/page.ts +24 -4
  112. package/src/services/post.ts +87 -19
  113. package/src/services/search.ts +0 -1
  114. package/src/services/settings.ts +21 -13
  115. package/src/style.css +3 -0
  116. package/src/styles/components.css +42 -1
  117. package/src/styles/tokens.css +4 -0
  118. package/src/styles/ui.css +902 -73
  119. package/src/types/app-context.ts +25 -0
  120. package/src/types/bindings.ts +1 -0
  121. package/src/types/config.ts +60 -23
  122. package/src/types/entities.ts +12 -2
  123. package/src/types/lingui-react-macro.d.ts +3 -3
  124. package/src/types/operations.ts +2 -4
  125. package/src/types/views.ts +1 -3
  126. package/src/ui/__tests__/font-themes.test.ts +27 -8
  127. package/src/ui/color-themes.ts +1 -1
  128. package/src/ui/components/__tests__/jant-collection-form.test.ts +153 -0
  129. package/src/ui/components/__tests__/jant-compose-dialog.test.ts +512 -0
  130. package/src/ui/components/__tests__/jant-compose-editor.test.ts +272 -0
  131. package/src/ui/components/__tests__/jant-post-form.test.ts +172 -0
  132. package/src/ui/components/__tests__/jant-settings-avatar.test.ts +235 -0
  133. package/src/ui/components/__tests__/jant-settings-general.test.ts +319 -0
  134. package/src/ui/components/collection-types.ts +45 -0
  135. package/src/ui/components/compose-types.ts +75 -0
  136. package/src/ui/components/jant-collection-form.ts +512 -0
  137. package/src/ui/components/jant-compose-dialog.ts +494 -0
  138. package/src/ui/components/jant-compose-editor.ts +799 -0
  139. package/src/ui/components/jant-post-form.ts +290 -0
  140. package/src/ui/components/jant-settings-avatar.ts +231 -0
  141. package/src/ui/components/jant-settings-general.ts +436 -0
  142. package/src/ui/components/post-form-template.ts +260 -0
  143. package/src/ui/components/post-form-types.ts +87 -0
  144. package/src/ui/components/settings-types.ts +62 -0
  145. package/src/ui/compose/ComposeDialog.tsx +141 -385
  146. package/src/ui/compose/ComposePrompt.tsx +3 -3
  147. package/src/ui/dash/PostList.tsx +55 -61
  148. package/src/ui/dash/appearance/AdvancedContent.tsx +80 -0
  149. package/src/ui/dash/appearance/AppearanceNav.tsx +56 -0
  150. package/src/ui/dash/appearance/ColorThemeContent.tsx +129 -0
  151. package/src/ui/dash/appearance/FontThemeContent.tsx +98 -0
  152. package/src/ui/dash/collections/CollectionForm.tsx +130 -117
  153. package/src/ui/dash/collections/CollectionsListContent.tsx +102 -41
  154. package/src/ui/dash/collections/IconPickerGrid.tsx +50 -0
  155. package/src/ui/dash/collections/ViewCollectionContent.tsx +14 -3
  156. package/src/ui/dash/index.ts +1 -1
  157. package/src/ui/dash/posts/PostForm.tsx +248 -0
  158. package/src/ui/dash/settings/AccountContent.tsx +69 -80
  159. package/src/ui/dash/settings/GeneralContent.tsx +159 -478
  160. package/src/ui/dash/settings/SettingsNav.tsx +4 -4
  161. package/src/ui/font-themes.ts +115 -32
  162. package/src/ui/layouts/BaseLayout.tsx +49 -19
  163. package/src/ui/layouts/DashLayout.tsx +14 -9
  164. package/src/ui/layouts/SiteLayout.tsx +38 -23
  165. package/src/ui/pages/CollectionPage.tsx +12 -2
  166. package/src/ui/pages/CollectionsPage.tsx +27 -27
  167. package/src/ui/pages/HomePage.tsx +15 -6
  168. package/src/ui/pages/SearchPage.tsx +1 -2
  169. package/src/ui/shared/CollectionsSidebar.tsx +59 -0
  170. package/src/ui/shared/Pagination.tsx +2 -2
  171. package/dist/app.js +0 -267
  172. package/dist/auth.js +0 -39
  173. package/dist/client.js +0 -13
  174. package/dist/db/index.js +0 -10
  175. package/dist/db/schema.js +0 -224
  176. package/dist/i18n/Trans.js +0 -24
  177. package/dist/i18n/context.js +0 -58
  178. package/dist/i18n/detect.js +0 -26
  179. package/dist/i18n/i18n.js +0 -49
  180. package/dist/i18n/index.js +0 -44
  181. package/dist/i18n/locales/en.js +0 -1
  182. package/dist/i18n/locales/zh-Hans.js +0 -1
  183. package/dist/i18n/locales/zh-Hant.js +0 -1
  184. package/dist/i18n/locales.js +0 -13
  185. package/dist/i18n/middleware.js +0 -30
  186. package/dist/lib/avatar-upload.js +0 -134
  187. package/dist/lib/config.js +0 -143
  188. package/dist/lib/constants.js +0 -50
  189. package/dist/lib/excerpt.js +0 -76
  190. package/dist/lib/favicon.js +0 -102
  191. package/dist/lib/feed.js +0 -123
  192. package/dist/lib/image-processor.js +0 -187
  193. package/dist/lib/image.js +0 -97
  194. package/dist/lib/index.js +0 -7
  195. package/dist/lib/markdown.js +0 -83
  196. package/dist/lib/media-helpers.js +0 -49
  197. package/dist/lib/media-upload.js +0 -104
  198. package/dist/lib/nav-reorder.js +0 -27
  199. package/dist/lib/navigation.js +0 -79
  200. package/dist/lib/pagination.js +0 -44
  201. package/dist/lib/render.js +0 -53
  202. package/dist/lib/schemas.js +0 -174
  203. package/dist/lib/sqid.js +0 -72
  204. package/dist/lib/sse.js +0 -218
  205. package/dist/lib/storage.js +0 -164
  206. package/dist/lib/theme.js +0 -65
  207. package/dist/lib/time.js +0 -159
  208. package/dist/lib/timeline.js +0 -95
  209. package/dist/lib/timezones.js +0 -388
  210. package/dist/lib/url.js +0 -89
  211. package/dist/lib/view.js +0 -217
  212. package/dist/middleware/auth.js +0 -52
  213. package/dist/middleware/onboarding.js +0 -41
  214. package/dist/routes/api/collections.js +0 -124
  215. package/dist/routes/api/nav-items.js +0 -104
  216. package/dist/routes/api/pages.js +0 -91
  217. package/dist/routes/api/posts.js +0 -218
  218. package/dist/routes/api/search.js +0 -48
  219. package/dist/routes/api/settings.js +0 -68
  220. package/dist/routes/api/upload.js +0 -246
  221. package/dist/routes/auth/reset.js +0 -221
  222. package/dist/routes/auth/setup.js +0 -194
  223. package/dist/routes/auth/signin.js +0 -176
  224. package/dist/routes/compose.js +0 -48
  225. package/dist/routes/dash/collections.js +0 -115
  226. package/dist/routes/dash/index.js +0 -118
  227. package/dist/routes/dash/media.js +0 -106
  228. package/dist/routes/dash/pages.js +0 -294
  229. package/dist/routes/dash/posts.js +0 -244
  230. package/dist/routes/dash/redirects.js +0 -257
  231. package/dist/routes/dash/settings.js +0 -379
  232. package/dist/routes/feed/rss.js +0 -62
  233. package/dist/routes/feed/sitemap.js +0 -49
  234. package/dist/routes/pages/archive.js +0 -62
  235. package/dist/routes/pages/collection.js +0 -34
  236. package/dist/routes/pages/collections.js +0 -28
  237. package/dist/routes/pages/featured.js +0 -36
  238. package/dist/routes/pages/home.js +0 -64
  239. package/dist/routes/pages/latest.js +0 -45
  240. package/dist/routes/pages/page.js +0 -68
  241. package/dist/routes/pages/post.js +0 -44
  242. package/dist/routes/pages/search.js +0 -54
  243. package/dist/services/collection.js +0 -109
  244. package/dist/services/index.js +0 -24
  245. package/dist/services/media.js +0 -117
  246. package/dist/services/navigation.js +0 -91
  247. package/dist/services/page.js +0 -84
  248. package/dist/services/post.js +0 -229
  249. package/dist/services/redirect.js +0 -48
  250. package/dist/services/search.js +0 -67
  251. package/dist/services/settings.js +0 -68
  252. package/dist/types/bindings.js +0 -3
  253. package/dist/types/config.js +0 -147
  254. package/dist/types/constants.js +0 -27
  255. package/dist/types/entities.js +0 -3
  256. package/dist/types/lingui-react-macro.d.js +0 -9
  257. package/dist/types/operations.js +0 -3
  258. package/dist/types/props.js +0 -3
  259. package/dist/types/sortablejs.d.js +0 -5
  260. package/dist/types/views.js +0 -5
  261. package/dist/types.js +0 -11
  262. package/dist/ui/color-themes.js +0 -268
  263. package/dist/ui/compose/ComposeDialog.js +0 -467
  264. package/dist/ui/compose/ComposePrompt.js +0 -55
  265. package/dist/ui/dash/ActionButtons.js +0 -46
  266. package/dist/ui/dash/CrudPageHeader.js +0 -22
  267. package/dist/ui/dash/DangerZone.js +0 -36
  268. package/dist/ui/dash/FormatBadge.js +0 -27
  269. package/dist/ui/dash/ListItemRow.js +0 -21
  270. package/dist/ui/dash/PageForm.js +0 -195
  271. package/dist/ui/dash/PostForm.js +0 -395
  272. package/dist/ui/dash/PostList.js +0 -83
  273. package/dist/ui/dash/StatusBadge.js +0 -46
  274. package/dist/ui/dash/collections/CollectionForm.js +0 -152
  275. package/dist/ui/dash/collections/CollectionsListContent.js +0 -68
  276. package/dist/ui/dash/collections/ViewCollectionContent.js +0 -96
  277. package/dist/ui/dash/index.js +0 -10
  278. package/dist/ui/dash/media/MediaListContent.js +0 -166
  279. package/dist/ui/dash/media/ViewMediaContent.js +0 -212
  280. package/dist/ui/dash/pages/LinkFormContent.js +0 -130
  281. package/dist/ui/dash/pages/UnifiedPagesContent.js +0 -193
  282. package/dist/ui/dash/settings/AccountContent.js +0 -209
  283. package/dist/ui/dash/settings/AppearanceContent.js +0 -259
  284. package/dist/ui/dash/settings/GeneralContent.js +0 -536
  285. package/dist/ui/dash/settings/SettingsNav.js +0 -41
  286. package/dist/ui/feed/LinkCard.js +0 -72
  287. package/dist/ui/feed/NoteCard.js +0 -58
  288. package/dist/ui/feed/QuoteCard.js +0 -63
  289. package/dist/ui/feed/ThreadPreview.js +0 -48
  290. package/dist/ui/feed/TimelineFeed.js +0 -41
  291. package/dist/ui/feed/TimelineItem.js +0 -27
  292. package/dist/ui/font-themes.js +0 -36
  293. package/dist/ui/layouts/BaseLayout.js +0 -153
  294. package/dist/ui/layouts/DashLayout.js +0 -141
  295. package/dist/ui/layouts/SiteLayout.js +0 -169
  296. package/dist/ui/pages/ArchivePage.js +0 -143
  297. package/dist/ui/pages/CollectionPage.js +0 -70
  298. package/dist/ui/pages/CollectionsPage.js +0 -76
  299. package/dist/ui/pages/FeaturedPage.js +0 -24
  300. package/dist/ui/pages/HomePage.js +0 -24
  301. package/dist/ui/pages/PostPage.js +0 -55
  302. package/dist/ui/pages/SearchPage.js +0 -122
  303. package/dist/ui/pages/SinglePage.js +0 -23
  304. package/dist/ui/shared/EmptyState.js +0 -27
  305. package/dist/ui/shared/MediaGallery.js +0 -35
  306. package/dist/ui/shared/Pagination.js +0 -195
  307. package/dist/ui/shared/ThreadView.js +0 -108
  308. package/dist/ui/shared/index.js +0 -5
  309. package/dist/vendor/datastar.js +0 -1606
  310. package/src/lib/__tests__/config.test.ts +0 -192
  311. package/src/lib/config.ts +0 -167
  312. package/src/routes/compose.ts +0 -63
  313. package/src/ui/dash/PostForm.tsx +0 -360
  314. package/src/ui/dash/settings/AppearanceContent.tsx +0 -254
@@ -14,134 +14,195 @@ msgstr ""
14
14
  "Plural-Forms: \n"
15
15
 
16
16
  #. @context: Archive post reply indicator - plural
17
- #: src/theme/pages/ArchivePage.tsx:168
17
+ #: src/theme/pages/ArchivePage.tsx
18
18
  #~ msgid "{count} replies"
19
19
  #~ msgstr "{count} replies"
20
20
 
21
21
  #. @context: Custom CSS textarea placeholder
22
- #: src/ui/dash/settings/AppearanceContent.tsx:218
22
+ #: src/ui/dash/appearance/AdvancedContent.tsx
23
23
  msgid "/* Your custom CSS here */"
24
24
  msgstr "/* Your custom CSS here */"
25
25
 
26
26
  #. @context: Navigation link
27
- #: src/ui/dash/collections/ViewCollectionContent.tsx:84
27
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
28
28
  msgid "← Back to Collections"
29
29
  msgstr "← Back to Collections"
30
30
 
31
31
  #. @context: Navigation link
32
32
  #. @context: Navigation link
33
- #: src/routes/pages/collection.tsx:76
34
- #: src/routes/pages/post.tsx:63
33
+ #: src/routes/pages/collection.tsx
34
+ #: src/routes/pages/post.tsx
35
35
  #~ msgid "← Back to home"
36
36
  #~ msgstr "← Back to home"
37
37
 
38
+ #. @context: Add alt text label under attachment thumbnail
39
+ #: src/ui/compose/ComposeDialog.tsx
40
+ msgid "+ ALT"
41
+ msgstr "+ ALT"
42
+
38
43
  #. @context: Archive post reply indicator - single
39
- #: src/theme/pages/ArchivePage.tsx:163
44
+ #: src/theme/pages/ArchivePage.tsx
40
45
  #~ msgid "1 reply"
41
46
  #~ msgstr "1 reply"
42
47
 
43
48
  #. @context: Redirect type option
44
- #: src/routes/dash/redirects.tsx:146
49
+ #: src/routes/dash/redirects.tsx
45
50
  msgid "301 (Permanent)"
46
51
  msgstr "301 (Permanent)"
47
52
 
48
53
  #. @context: Redirect type option
49
- #: src/routes/dash/redirects.tsx:152
54
+ #: src/routes/dash/redirects.tsx
50
55
  msgid "302 (Temporary)"
51
56
  msgstr "302 (Temporary)"
52
57
 
53
58
  #. @context: Settings form field for site description
54
- #: src/ui/dash/settings/GeneralContent.tsx:324
59
+ #: src/ui/dash/settings/GeneralContent.tsx
55
60
  msgid "About this blog"
56
61
  msgstr "About this blog"
57
62
 
58
63
  #. @context: Settings sub-navigation tab
59
- #: src/ui/dash/settings/SettingsNav.tsx:31
64
+ #: src/ui/dash/settings/SettingsNav.tsx
60
65
  msgid "Account"
61
66
  msgstr "Account"
62
67
 
68
+ #. @context: Add more attachments button
69
+ #: src/ui/compose/ComposeDialog.tsx
70
+ msgid "Add"
71
+ msgstr "Add"
72
+
73
+ #. @context: Alt text panel title
74
+ #: src/ui/compose/ComposeDialog.tsx
75
+ msgid "Add alt text"
76
+ msgstr "Add alt text"
77
+
63
78
  #. @context: Custom CSS settings description
64
- #: src/ui/dash/settings/AppearanceContent.tsx:208
79
+ #: src/ui/dash/appearance/AdvancedContent.tsx
65
80
  msgid "Add custom CSS to override any styles. Use data attributes like [data-page], [data-post], [data-format] to target specific elements."
66
81
  msgstr "Add custom CSS to override any styles. Use data attributes like [data-page], [data-post], [data-format] to target specific elements."
67
82
 
68
83
  #. @context: Button to add a navigation link
69
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:28
84
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
70
85
  msgid "Add Link"
71
86
  msgstr "Add Link"
72
87
 
73
88
  #. @context: Button to open media picker
74
- #. @context: Compose toolbar - add media
75
- #: src/ui/compose/ComposeDialog.tsx:219
76
- #: src/ui/dash/PostForm.tsx:211
89
+ #: src/ui/dash/posts/PostForm.tsx
77
90
  msgid "Add Media"
78
91
  msgstr "Add Media"
79
92
 
80
93
  #. @context: Button to add page to navigation
81
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:163
94
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
82
95
  msgid "Add to nav"
83
96
  msgstr "Add to nav"
84
97
 
98
+ #. @context: Appearance sub-navigation tab
99
+ #: src/ui/dash/appearance/AppearanceNav.tsx
100
+ msgid "Advanced"
101
+ msgstr "Advanced"
102
+
85
103
  #. @context: Archive filter - all formats
86
- #: src/ui/pages/ArchivePage.tsx:71
104
+ #: src/ui/pages/ArchivePage.tsx
87
105
  msgid "All"
88
106
  msgstr "All"
89
107
 
90
108
  #. @context: Empty state when all pages are in nav
91
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:146
109
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
92
110
  msgid "All pages are in your navigation."
93
111
  msgstr "All pages are in your navigation."
94
112
 
95
- #. @context: Settings sub-navigation tab
96
- #: src/ui/dash/settings/SettingsNav.tsx:23
113
+ #. @context: Hint text in alt text panel
114
+ #: src/ui/compose/ComposeDialog.tsx
115
+ msgid "Alt text improves accessibility"
116
+ msgstr "Alt text improves accessibility"
117
+
118
+ #. @context: Dashboard heading
119
+ #. @context: Dashboard heading
120
+ #. @context: Dashboard heading
121
+ #. @context: Dashboard navigation - appearance settings
122
+ #: src/ui/dash/appearance/AdvancedContent.tsx
123
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
124
+ #: src/ui/dash/appearance/FontThemeContent.tsx
125
+ #: src/ui/layouts/DashLayout.tsx
97
126
  msgid "Appearance"
98
127
  msgstr "Appearance"
99
128
 
100
129
  #. @context: Archive page title
101
- #: src/ui/pages/ArchivePage.tsx:55
130
+ #: src/ui/pages/ArchivePage.tsx
102
131
  msgid "Archive"
103
132
  msgstr "Archive"
104
133
 
105
134
  #. @context: Confirmation dialog when deleting a post from the list
106
- #: src/ui/dash/PostList.tsx:60
135
+ #: src/ui/dash/PostList.tsx
107
136
  msgid "Are you sure you want to delete this post? This cannot be undone."
108
137
  msgstr "Are you sure you want to delete this post? This cannot be undone."
109
138
 
110
139
  #. @context: Post type badge - article
111
140
  #. @context: Post type label - article
112
141
  #. @context: Post type option
113
- #: src/theme/components/PostForm.tsx:74
114
- #: src/theme/components/TypeBadge.tsx:20
115
- #: src/themes/threads/pages/ArchivePage.tsx:17
142
+ #: src/theme/components/PostForm.tsx
143
+ #: src/theme/components/TypeBadge.tsx
144
+ #: src/themes/threads/pages/ArchivePage.tsx
116
145
  #~ msgid "Article"
117
146
  #~ msgstr "Article"
118
147
 
119
148
  #. @context: Post type label plural - articles
120
- #: src/themes/threads/pages/ArchivePage.tsx:42
149
+ #: src/themes/threads/pages/ArchivePage.tsx
121
150
  #~ msgid "Articles"
122
151
  #~ msgstr "Articles"
123
152
 
124
153
  #. @context: Hint for image post type media requirement
125
- #: src/theme/components/PostForm.tsx:137
154
+ #: src/theme/components/PostForm.tsx
126
155
  #~ msgid "At least 1 image required for image posts."
127
156
  #~ msgstr "At least 1 image required for image posts."
128
157
 
158
+ #. @context: Attached text badge label
159
+ #: src/ui/compose/ComposeDialog.tsx
160
+ #~ msgid "Attached text"
161
+ #~ msgstr "Attached text"
162
+
163
+ #. @context: Attached text panel title
164
+ #: src/ui/compose/ComposeDialog.tsx
165
+ msgid "Attached Text"
166
+ msgstr "Attached Text"
167
+
168
+ #. @context: Error toast when authentication system is unavailable
169
+ #: src/routes/auth/signin.tsx
170
+ msgid "Auth not configured"
171
+ msgstr "Auth not configured"
172
+
173
+ #. @context: Error toast when authentication secret is missing from server config
174
+ #: src/routes/auth/setup.tsx
175
+ msgid "AUTH_SECRET not configured"
176
+ msgstr "AUTH_SECRET not configured"
177
+
178
+ #. @context: Compose quote author placeholder
179
+ #: src/ui/compose/ComposeDialog.tsx
180
+ msgid "Author (optional)"
181
+ msgstr "Author (optional)"
182
+
183
+ #. @context: Toast after saving avatar display preference
184
+ #. @context: Toast after saving avatar display preference
185
+ #: src/routes/dash/settings.tsx
186
+ #: src/routes/dash/settings.tsx
187
+ msgid "Avatar display setting saved successfully."
188
+ msgstr "Avatar display setting saved successfully."
189
+
129
190
  #. @context: Button to go back to media list
130
- #: src/ui/dash/media/ViewMediaContent.tsx:57
191
+ #: src/ui/dash/media/ViewMediaContent.tsx
131
192
  msgid "Back"
132
193
  msgstr "Back"
133
194
 
134
195
  #. @context: Navigation link back to home page
135
196
  #. @context: Navigation link back to home page
136
197
  #. @context: Navigation link back to home page
137
- #: src/routes/pages/archive.tsx:209
138
- #: src/routes/pages/page.tsx:37
139
- #: src/routes/pages/search.tsx:144
198
+ #: src/routes/pages/archive.tsx
199
+ #: src/routes/pages/page.tsx
200
+ #: src/routes/pages/search.tsx
140
201
  #~ msgid "Back to home"
141
202
  #~ msgstr "Back to home"
142
203
 
143
204
  #. @context: Settings section heading for avatar
144
- #: src/ui/dash/settings/GeneralContent.tsx:160
205
+ #: src/ui/dash/settings/GeneralContent.tsx
145
206
  msgid "Blog Avatar"
146
207
  msgstr "Blog Avatar"
147
208
 
@@ -151,243 +212,302 @@ msgstr "Blog Avatar"
151
212
  #. @context: Button to cancel form
152
213
  #. @context: Button to cancel form
153
214
  #. @context: Button to cancel unsaved changes and revert to original values
154
- #: src/routes/dash/redirects.tsx:183
155
- #: src/ui/dash/collections/CollectionForm.tsx:144
156
- #: src/ui/dash/PageForm.tsx:177
157
- #: src/ui/dash/pages/LinkFormContent.tsx:110
158
- #: src/ui/dash/PostForm.tsx:318
159
- #: src/ui/dash/settings/GeneralContent.tsx:86
215
+ #. @context: Close compose dialog
216
+ #: src/routes/dash/redirects.tsx
217
+ #: src/ui/compose/ComposeDialog.tsx
218
+ #: src/ui/dash/collections/CollectionForm.tsx
219
+ #: src/ui/dash/PageForm.tsx
220
+ #: src/ui/dash/pages/LinkFormContent.tsx
221
+ #: src/ui/dash/posts/PostForm.tsx
222
+ #: src/ui/dash/settings/GeneralContent.tsx
160
223
  msgid "Cancel"
161
224
  msgstr "Cancel"
162
225
 
163
226
  #. @context: Button to change password
164
227
  #. @context: Settings section heading
165
- #: src/ui/dash/settings/AccountContent.tsx:88
166
- #: src/ui/dash/settings/AccountContent.tsx:167
228
+ #: src/ui/dash/settings/AccountContent.tsx
229
+ #: src/ui/dash/settings/AccountContent.tsx
167
230
  msgid "Change Password"
168
231
  msgstr "Change Password"
169
232
 
170
233
  #. @context: Font theme settings description
171
- #: src/ui/dash/settings/AppearanceContent.tsx:153
172
- msgid "Choose a font for your site. All options use system fonts for fast loading."
173
- msgstr "Choose a font for your site. All options use system fonts for fast loading."
234
+ #: src/ui/dash/settings/AppearanceContent.tsx
235
+ #~ msgid "Choose a font for your site. All options use system fonts for fast loading."
236
+ #~ msgstr "Choose a font for your site. All options use system fonts for fast loading."
237
+
238
+ #. @context: Font theme settings description
239
+ #: src/ui/dash/appearance/FontThemeContent.tsx
240
+ msgid "Choose a font pairing for your site. All options use system fonts for fast loading."
241
+ msgstr "Choose a font pairing for your site. All options use system fonts for fast loading."
242
+
243
+ #. @context: Button to open icon picker
244
+ #. @context: Icon picker dialog title
245
+ #: src/ui/dash/collections/CollectionForm.tsx
246
+ #: src/ui/dash/collections/CollectionForm.tsx
247
+ msgid "Choose Icon"
248
+ msgstr "Choose Icon"
174
249
 
175
250
  #. @context: Hint to click image for lightbox
176
- #: src/ui/dash/media/ViewMediaContent.tsx:90
251
+ #: src/ui/dash/media/ViewMediaContent.tsx
177
252
  msgid "Click image to view full size"
178
253
  msgstr "Click image to view full size"
179
254
 
180
- #. @context: Compose collection field
181
- #. @context: Compose toolbar - toggle collection
182
- #: src/ui/compose/ComposeDialog.tsx:191
183
- #: src/ui/compose/ComposeDialog.tsx:272
255
+ #. @context: Button to close icon picker
256
+ #: src/ui/dash/collections/CollectionForm.tsx
257
+ msgid "Close"
258
+ msgstr "Close"
259
+
260
+ #. @context: Compose collection selector trigger label
261
+ #: src/ui/compose/ComposeDialog.tsx
184
262
  msgid "Collection"
185
263
  msgstr "Collection"
186
264
 
187
265
  #. @context: Post form field - assign to collection
188
- #: src/ui/dash/PostForm.tsx:264
189
- msgid "Collection (optional)"
190
- msgstr "Collection (optional)"
266
+ #: src/ui/dash/PostForm.tsx
267
+ #~ msgid "Collection (optional)"
268
+ #~ msgstr "Collection (optional)"
191
269
 
192
270
  #. @context: Collections page heading
193
271
  #. @context: Dashboard heading
194
272
  #. @context: Dashboard navigation - collections management
195
- #: src/ui/dash/collections/CollectionsListContent.tsx:24
196
- #: src/ui/layouts/DashLayout.tsx:114
197
- #: src/ui/pages/CollectionsPage.tsx:18
273
+ #. @context: Sidebar heading for collections nav
274
+ #: src/ui/dash/collections/CollectionsListContent.tsx
275
+ #: src/ui/layouts/DashLayout.tsx
276
+ #: src/ui/pages/CollectionsPage.tsx
277
+ #: src/ui/shared/CollectionsSidebar.tsx
198
278
  msgid "Collections"
199
279
  msgstr "Collections"
200
280
 
201
281
  #. @context: Post form field - assign to collections
202
- #: src/theme/components/PostForm.tsx:273
203
- #~ msgid "Collections (optional)"
204
- #~ msgstr "Collections (optional)"
282
+ #: src/ui/dash/posts/PostForm.tsx
283
+ msgid "Collections (optional)"
284
+ msgstr "Collections (optional)"
205
285
 
206
286
  #. @context: Appearance settings heading
207
- #: src/ui/dash/settings/AppearanceContent.tsx:112
287
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
208
288
  msgid "Color theme"
209
289
  msgstr "Color theme"
210
290
 
291
+ #. @context: Appearance sub-navigation tab
292
+ #: src/ui/dash/appearance/AppearanceNav.tsx
293
+ msgid "Color Theme"
294
+ msgstr "Color Theme"
295
+
211
296
  #. @context: Setup form submit button
212
- #: src/routes/auth/setup.tsx:108
297
+ #: src/routes/auth/setup.tsx
213
298
  msgid "Complete Setup"
214
299
  msgstr "Complete Setup"
215
300
 
216
301
  #. @context: Password form field
217
- #: src/ui/dash/settings/AccountContent.tsx:130
302
+ #: src/ui/dash/settings/AccountContent.tsx
218
303
  msgid "Confirm New Password"
219
304
  msgstr "Confirm New Password"
220
305
 
221
306
  #. @context: Password reset form field
222
- #: src/routes/auth/reset.tsx:70
307
+ #: src/routes/auth/reset.tsx
223
308
  msgid "Confirm Password"
224
309
  msgstr "Confirm Password"
225
310
 
226
311
  #. @context: Page form field label - content
227
312
  #. @context: Post form field
228
- #: src/ui/dash/PageForm.tsx:96
229
- #: src/ui/dash/PostForm.tsx:104
313
+ #: src/ui/dash/PageForm.tsx
314
+ #: src/ui/dash/posts/PostForm.tsx
230
315
  msgid "Content"
231
316
  msgstr "Content"
232
317
 
233
318
  #. @context: Button to copy Markdown to clipboard
234
319
  #. @context: Button to copy URL to clipboard
235
- #: src/ui/dash/media/ViewMediaContent.tsx:128
236
- #: src/ui/dash/media/ViewMediaContent.tsx:165
320
+ #: src/ui/dash/media/ViewMediaContent.tsx
321
+ #: src/ui/dash/media/ViewMediaContent.tsx
237
322
  msgid "Copy"
238
323
  msgstr "Copy"
239
324
 
240
325
  #. @context: Button to save new collection
241
- #: src/ui/dash/collections/CollectionForm.tsx:36
326
+ #: src/ui/dash/collections/CollectionForm.tsx
242
327
  msgid "Create Collection"
243
328
  msgstr "Create Collection"
244
329
 
245
330
  #. @context: Button to save new navigation link
246
- #: src/ui/dash/pages/LinkFormContent.tsx:104
331
+ #: src/ui/dash/pages/LinkFormContent.tsx
247
332
  msgid "Create Link"
248
333
  msgstr "Create Link"
249
334
 
250
335
  #. @context: Button to create new page
251
- #: src/ui/dash/PageForm.tsx:171
336
+ #: src/ui/dash/PageForm.tsx
252
337
  msgid "Create Page"
253
338
  msgstr "Create Page"
254
339
 
255
340
  #. @context: Button to save new redirect
256
- #: src/routes/dash/redirects.tsx:177
341
+ #: src/routes/dash/redirects.tsx
257
342
  msgid "Create Redirect"
258
343
  msgstr "Create Redirect"
259
344
 
260
345
  #. @context: Setup page description
261
- #: src/routes/auth/setup.tsx:33
346
+ #: src/routes/auth/setup.tsx
262
347
  msgid "Create your admin account."
263
348
  msgstr "Create your admin account."
264
349
 
265
350
  #. @context: Button in empty state to create first page
266
- #: src/routes/dash/pages.tsx:48
351
+ #: src/routes/dash/pages.tsx
267
352
  #~ msgid "Create your first page"
268
353
  #~ msgstr "Create your first page"
269
354
 
270
355
  #. @context: Button in empty state to create first post
271
- #: src/ui/dash/PostList.tsx:29
356
+ #: src/ui/dash/PostList.tsx
272
357
  msgid "Create your first post"
273
358
  msgstr "Create your first post"
274
359
 
275
360
  #. @context: Password form field
276
- #: src/ui/dash/settings/AccountContent.tsx:97
361
+ #: src/ui/dash/settings/AccountContent.tsx
277
362
  msgid "Current Password"
278
363
  msgstr "Current Password"
279
364
 
365
+ #. @context: Error toast when current password verification fails
366
+ #: src/routes/dash/settings.tsx
367
+ msgid "Current password is incorrect."
368
+ msgstr "Current password is incorrect."
369
+
280
370
  #. @context: Appearance settings heading for custom CSS
281
- #: src/ui/dash/settings/AppearanceContent.tsx:202
371
+ #: src/ui/dash/appearance/AdvancedContent.tsx
282
372
  msgid "Custom CSS"
283
373
  msgstr "Custom CSS"
284
374
 
375
+ #. @context: Toast after saving custom CSS
376
+ #: src/routes/dash/appearance.tsx
377
+ msgid "Custom CSS saved successfully."
378
+ msgstr "Custom CSS saved successfully."
379
+
285
380
  #. @context: Post form field
286
- #: src/theme/components/PostForm.tsx:297
381
+ #: src/theme/components/PostForm.tsx
287
382
  #~ msgid "Custom Path (optional)"
288
383
  #~ msgstr "Custom Path (optional)"
289
384
 
290
385
  #. @context: Post form field
291
- #: src/theme/components/PostForm.tsx:293
386
+ #: src/theme/components/PostForm.tsx
292
387
  #~ msgid "Custom Slug (optional)"
293
388
  #~ msgstr "Custom Slug (optional)"
294
389
 
295
390
  #. @context: Slug help text
296
- #: src/theme/components/PostForm.tsx:306
391
+ #: src/theme/components/PostForm.tsx
297
392
  #~ msgid "Custom URL path. Leave empty to use default /p/ID format."
298
393
  #~ msgstr "Custom URL path. Leave empty to use default /p/ID format."
299
394
 
300
395
  #. @context: Section heading for dangerous/destructive actions
301
- #: src/ui/dash/DangerZone.tsx:55
396
+ #: src/ui/dash/DangerZone.tsx
302
397
  msgid "Danger Zone"
303
398
  msgstr "Danger Zone"
304
399
 
305
400
  #. @context: Dashboard main heading
306
401
  #. @context: Dashboard navigation - main dashboard page
307
- #: src/routes/dash/index.tsx:36
308
- #: src/ui/layouts/DashLayout.tsx:78
402
+ #: src/routes/dash/index.tsx
403
+ #: src/ui/layouts/DashLayout.tsx
309
404
  msgid "Dashboard"
310
405
  msgstr "Dashboard"
311
406
 
312
407
  #. @context: Settings form field
313
- #: src/ui/dash/settings/GeneralContent.tsx:374
408
+ #: src/ui/dash/settings/GeneralContent.tsx
314
409
  msgid "Default Homepage View"
315
410
  msgstr "Default Homepage View"
316
411
 
317
412
  #. @context: Button to delete item
318
413
  #. @context: Button to delete link
319
414
  #. @context: Button to delete redirect
320
- #: src/routes/dash/redirects.tsx:60
321
- #: src/ui/dash/ActionButtons.tsx:80
322
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:98
415
+ #: src/routes/dash/redirects.tsx
416
+ #: src/ui/dash/ActionButtons.tsx
417
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
323
418
  msgid "Delete"
324
419
  msgstr "Delete"
325
420
 
326
421
  #. @context: Button to delete collection
327
- #: src/routes/dash/collections.tsx:363
422
+ #: src/routes/dash/collections.tsx
328
423
  #~ msgid "Delete Collection"
329
424
  #~ msgstr "Delete Collection"
330
425
 
331
426
  #. @context: Button to delete media
332
- #: src/ui/dash/media/ViewMediaContent.tsx:176
427
+ #: src/ui/dash/media/ViewMediaContent.tsx
333
428
  msgid "Delete Media"
334
429
  msgstr "Delete Media"
335
430
 
336
431
  #. @context: Button to delete page
337
- #: src/routes/dash/pages.tsx:77
432
+ #: src/routes/dash/pages.tsx
338
433
  msgid "Delete Page"
339
434
  msgstr "Delete Page"
340
435
 
341
436
  #. @context: Warning message before deleting media
342
- #: src/ui/dash/media/ViewMediaContent.tsx:182
437
+ #: src/ui/dash/media/ViewMediaContent.tsx
343
438
  msgid "Deleting this media will remove it permanently from storage."
344
439
  msgstr "Deleting this media will remove it permanently from storage."
345
440
 
346
441
  #. @context: Hint shown on signin page when demo credentials are pre-filled
347
- #: src/routes/auth/signin.tsx:40
442
+ #: src/routes/auth/signin.tsx
348
443
  msgid "Demo account pre-filled. Just click Sign In."
349
444
  msgstr "Demo account pre-filled. Just click Sign In."
350
445
 
446
+ #. @context: Alt text textarea placeholder
447
+ #: src/ui/compose/ComposeDialog.tsx
448
+ msgid "Describe this for people with visual impairments..."
449
+ msgstr "Describe this for people with visual impairments..."
450
+
351
451
  #. @context: Collection form field
352
- #: src/ui/dash/collections/CollectionForm.tsx:102
452
+ #: src/ui/dash/collections/CollectionForm.tsx
353
453
  msgid "Description (optional)"
354
454
  msgstr "Description (optional)"
355
455
 
456
+ #. @context: More menu - discard post
457
+ #: src/ui/compose/ComposeDialog.tsx
458
+ msgid "Discard"
459
+ msgstr "Discard"
460
+
356
461
  #. @context: Checkbox to show avatar in the site header
357
- #: src/ui/dash/settings/GeneralContent.tsx:274
462
+ #: src/ui/dash/settings/GeneralContent.tsx
358
463
  msgid "Display avatar in my site header"
359
464
  msgstr "Display avatar in my site header"
360
465
 
361
466
  #. @context: Navigation label help text
362
- #: src/ui/dash/pages/LinkFormContent.tsx:52
467
+ #: src/ui/dash/pages/LinkFormContent.tsx
363
468
  msgid "Display text for the link"
364
469
  msgstr "Display text for the link"
365
470
 
471
+ #. @context: Help text for site description field
472
+ #: src/ui/dash/settings/GeneralContent.tsx
473
+ msgid "Displayed above your blog posts on the home page. Also used as the meta description. Markdown supported."
474
+ msgstr "Displayed above your blog posts on the home page. Also used as the meta description. Markdown supported."
475
+
476
+ #. @context: Help text for site footer field
477
+ #: src/ui/dash/settings/GeneralContent.tsx
478
+ msgid "Displayed at the bottom of all posts and pages. Markdown supported."
479
+ msgstr "Displayed at the bottom of all posts and pages. Markdown supported."
480
+
481
+ #. @context: Close attached text panel
366
482
  #. @context: Close media picker button
367
- #. @context: Close media picker button
368
- #: src/ui/compose/ComposeDialog.tsx:394
369
- #: src/ui/dash/PostForm.tsx:340
483
+ #: src/ui/compose/ComposeDialog.tsx
484
+ #: src/ui/dash/posts/PostForm.tsx
370
485
  msgid "Done"
371
486
  msgstr "Done"
372
487
 
373
- #. @context: Compose button - save as draft
374
488
  #. @context: Page status option - draft
375
489
  #. @context: Post status badge - draft
376
490
  #. @context: Post status option
377
- #: src/ui/compose/ComposeDialog.tsx:340
378
- #: src/ui/dash/PageForm.tsx:133
379
- #: src/ui/dash/PostForm.tsx:234
380
- #: src/ui/dash/StatusBadge.tsx:34
491
+ #: src/ui/dash/PageForm.tsx
492
+ #: src/ui/dash/posts/PostForm.tsx
493
+ #: src/ui/dash/StatusBadge.tsx
381
494
  msgid "Draft"
382
495
  msgstr "Draft"
383
496
 
497
+ #. @context: Toast after saving a draft post
498
+ #. @context: Toast after saving a draft post
499
+ #: src/routes/compose.tsx
500
+ #: src/routes/compose.tsx
501
+ msgid "Draft saved."
502
+ msgstr "Draft saved."
503
+
384
504
  #. @context: Post status label
385
- #: src/routes/dash/index.tsx:55
505
+ #: src/routes/dash/index.tsx
386
506
  msgid "Drafts"
387
507
  msgstr "Drafts"
388
508
 
389
509
  #. @context: Source name placeholder
390
- #: src/theme/components/PostForm.tsx:226
510
+ #: src/theme/components/PostForm.tsx
391
511
  #~ msgid "e.g. The Verge, John Doe"
392
512
  #~ msgstr "e.g. The Verge, John Doe"
393
513
 
@@ -400,159 +520,264 @@ msgstr "Drafts"
400
520
  #. @context: Button to edit page
401
521
  #. @context: Button to edit post
402
522
  #. @context: Button to edit post
403
- #: src/routes/dash/pages.tsx:55
404
- #: src/routes/dash/posts.tsx:140
405
- #: src/ui/dash/ActionButtons.tsx:72
406
- #: src/ui/dash/collections/CollectionsListContent.tsx:55
407
- #: src/ui/dash/collections/ViewCollectionContent.tsx:33
408
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:72
409
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:93
410
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:170
411
- #: src/ui/dash/PostList.tsx:50
523
+ #: src/routes/dash/pages.tsx
524
+ #: src/routes/dash/posts.tsx
525
+ #: src/ui/dash/ActionButtons.tsx
526
+ #: src/ui/dash/collections/CollectionsListContent.tsx
527
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
528
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
529
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
530
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
531
+ #: src/ui/dash/PostList.tsx
412
532
  msgid "Edit"
413
533
  msgstr "Edit"
414
534
 
415
535
  #. @context: Page heading
416
- #: src/ui/dash/collections/CollectionForm.tsx:28
536
+ #: src/ui/dash/collections/CollectionForm.tsx
417
537
  msgid "Edit Collection"
418
538
  msgstr "Edit Collection"
419
539
 
420
540
  #. @context: Page heading
421
- #: src/ui/dash/pages/LinkFormContent.tsx:17
541
+ #: src/ui/dash/pages/LinkFormContent.tsx
422
542
  msgid "Edit Link"
423
543
  msgstr "Edit Link"
424
544
 
425
545
  #. @context: Edit page main heading
426
- #: src/routes/dash/pages.tsx:93
546
+ #: src/routes/dash/pages.tsx
427
547
  msgid "Edit Page"
428
548
  msgstr "Edit Page"
429
549
 
430
550
  #. @context: Page heading
431
- #: src/routes/dash/posts.tsx:183
551
+ #: src/routes/dash/posts.tsx
432
552
  msgid "Edit Post"
433
553
  msgstr "Edit Post"
434
554
 
435
555
  #. @context: Edit page page title
436
556
  #. @context: Page title for editing collection
437
557
  #. @context: Page title for editing post
438
- #: src/routes/dash/collections.tsx:213
439
- #: src/routes/dash/pages.tsx:203
440
- #: src/routes/dash/posts.tsx:122
558
+ #: src/routes/dash/collections.tsx
559
+ #: src/routes/dash/pages.tsx
560
+ #: src/routes/dash/posts.tsx
441
561
  #~ msgid "Edit: {title}"
442
562
  #~ msgstr "Edit: {title}"
443
563
 
444
564
  #. @context: Setup/signin form field - email
445
565
  #. @context: Setup/signin form field - email
446
- #: src/routes/auth/setup.tsx:64
447
- #: src/routes/auth/signin.tsx:55
566
+ #: src/routes/auth/setup.tsx
567
+ #: src/routes/auth/signin.tsx
448
568
  msgid "Email"
449
569
  msgstr "Email"
450
570
 
571
+ #. @context: Collection icon placeholder
572
+ #: src/ui/dash/collections/CollectionForm.tsx
573
+ #~ msgid "Emoji or icon name"
574
+ #~ msgstr "Emoji or icon name"
575
+
451
576
  #. @context: Password reset page description
452
- #: src/routes/auth/reset.tsx:39
577
+ #: src/routes/auth/reset.tsx
453
578
  msgid "Enter your new password."
454
579
  msgstr "Enter your new password."
455
580
 
581
+ #. @context: Plural entry count label
582
+ #: src/ui/pages/CollectionsPage.tsx
583
+ msgid "entries"
584
+ msgstr "entries"
585
+
586
+ #. @context: Singular entry count label
587
+ #: src/ui/pages/CollectionsPage.tsx
588
+ msgid "entry"
589
+ msgstr "entry"
590
+
591
+ #. @context: Error toast when account creation fails
592
+ #. @context: Error toast when account creation fails
593
+ #: src/routes/auth/setup.tsx
594
+ #: src/routes/auth/setup.tsx
595
+ msgid "Failed to create account"
596
+ msgstr "Failed to create account"
597
+
598
+ #. @context: Toast when post save fails
599
+ #: src/ui/dash/posts/PostForm.tsx
600
+ msgid "Failed to save post. Please try again."
601
+ msgstr "Failed to save post. Please try again."
602
+
603
+ #. @context: Error toast when profile update fails
604
+ #: src/routes/dash/settings.tsx
605
+ msgid "Failed to update profile."
606
+ msgstr "Failed to update profile."
607
+
456
608
  #. @context: Archive filter - featured posts
457
609
  #. @context: Browse filter for featured posts
458
- #. @context: Compose checkbox - mark as featured
459
610
  #. @context: Homepage view option - show featured posts
460
611
  #. @context: Post badge - featured
461
612
  #. @context: Post form checkbox - mark as featured
462
- #: src/ui/compose/ComposeDialog.tsx:305
463
- #: src/ui/dash/PostForm.tsx:246
464
- #: src/ui/dash/settings/GeneralContent.tsx:398
465
- #: src/ui/dash/StatusBadge.tsx:45
466
- #: src/ui/layouts/SiteLayout.tsx:55
467
- #: src/ui/pages/ArchivePage.tsx:92
613
+ #: src/ui/dash/posts/PostForm.tsx
614
+ #: src/ui/dash/settings/GeneralContent.tsx
615
+ #: src/ui/dash/StatusBadge.tsx
616
+ #: src/ui/layouts/SiteLayout.tsx
617
+ #: src/ui/pages/ArchivePage.tsx
468
618
  msgid "Featured"
469
619
  msgstr "Featured"
470
620
 
471
621
  #. @context: Appearance settings heading for font theme
472
- #: src/ui/dash/settings/AppearanceContent.tsx:147
622
+ #: src/ui/dash/appearance/FontThemeContent.tsx
473
623
  msgid "Font theme"
474
624
  msgstr "Font theme"
475
625
 
626
+ #. @context: Appearance sub-navigation tab
627
+ #: src/ui/dash/appearance/AppearanceNav.tsx
628
+ msgid "Font Theme"
629
+ msgstr "Font Theme"
630
+
631
+ #. @context: Toast after saving site footer
632
+ #. @context: Toast after saving site footer
633
+ #: src/routes/dash/settings.tsx
634
+ #: src/routes/dash/settings.tsx
635
+ #~ msgid "Footer saved successfully."
636
+ #~ msgstr "Footer saved successfully."
637
+
476
638
  #. @context: Post form field - post format
477
- #: src/ui/dash/PostForm.tsx:64
639
+ #: src/ui/dash/posts/PostForm.tsx
478
640
  msgid "Format"
479
641
  msgstr "Format"
480
642
 
481
643
  #. @context: Search results count - multiple
482
- #: src/ui/pages/SearchPage.tsx:73
483
- msgid "Found {count} results"
484
- msgstr "Found {count} results"
644
+ #. placeholder {0}: String(results.length)
645
+ #: src/ui/pages/SearchPage.tsx
646
+ msgid "Found {0} results"
647
+ msgstr "Found {0} results"
648
+
649
+ #. @context: Search results count - multiple
650
+ #: src/ui/pages/SearchPage.tsx
651
+ #~ msgid "Found {count} results"
652
+ #~ msgstr "Found {count} results"
485
653
 
486
654
  #. @context: Search results count - single
487
- #: src/ui/pages/SearchPage.tsx:69
655
+ #: src/ui/pages/SearchPage.tsx
488
656
  msgid "Found 1 result"
489
657
  msgstr "Found 1 result"
490
658
 
491
659
  #. @context: Redirect form field
492
- #: src/routes/dash/redirects.tsx:98
660
+ #: src/routes/dash/redirects.tsx
493
661
  msgid "From Path"
494
662
  msgstr "From Path"
495
663
 
496
664
  #. @context: Settings section heading
497
665
  #. @context: Settings sub-navigation tab
498
- #: src/ui/dash/settings/GeneralContent.tsx:299
499
- #: src/ui/dash/settings/SettingsNav.tsx:15
666
+ #: src/ui/dash/settings/GeneralContent.tsx
667
+ #: src/ui/dash/settings/SettingsNav.tsx
500
668
  msgid "General"
501
669
  msgstr "General"
502
670
 
671
+ #. @context: Compose link title placeholder
672
+ #: src/ui/compose/ComposeDialog.tsx
673
+ msgid "Give it a title..."
674
+ msgstr "Give it a title..."
675
+
676
+ #. @context: Collection sort order option
677
+ #: src/ui/dash/collections/CollectionForm.tsx
678
+ msgid "Highest rated"
679
+ msgstr "Highest rated"
680
+
681
+ #. @context: Collection form field
682
+ #: src/ui/dash/collections/CollectionForm.tsx
683
+ msgid "Icon (optional)"
684
+ msgstr "Icon (optional)"
685
+
503
686
  #. @context: Post type badge - image
504
687
  #. @context: Post type label - image
505
688
  #. @context: Post type option
506
- #: src/theme/components/PostForm.tsx:83
507
- #: src/theme/components/TypeBadge.tsx:29
508
- #: src/themes/threads/pages/ArchivePage.tsx:26
689
+ #: src/theme/components/PostForm.tsx
690
+ #: src/theme/components/TypeBadge.tsx
691
+ #: src/themes/threads/pages/ArchivePage.tsx
509
692
  #~ msgid "Image"
510
693
  #~ msgstr "Image"
511
694
 
512
695
  #. @context: Post type label plural - images
513
- #: src/themes/threads/pages/ArchivePage.tsx:54
696
+ #: src/themes/threads/pages/ArchivePage.tsx
514
697
  #~ msgid "Images"
515
698
  #~ msgstr "Images"
516
699
 
517
700
  #. @context: Media upload instructions - auto optimization
518
- #: src/ui/dash/media/MediaListContent.tsx:147
701
+ #: src/ui/dash/media/MediaListContent.tsx
519
702
  msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
520
703
  msgstr "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
521
704
 
705
+ #. @context: Error toast when sign-in credentials are wrong
706
+ #: src/routes/auth/signin.tsx
707
+ msgid "Invalid email or password"
708
+ msgstr "Invalid email or password"
709
+
710
+ #. @context: Error toast when selected font theme is not valid
711
+ #: src/routes/dash/appearance.tsx
712
+ msgid "Invalid font theme selected."
713
+ msgstr "Invalid font theme selected."
714
+
715
+ #. @context: Fallback validation error for compose form
716
+ #. @context: Fallback validation error for page form
717
+ #. @context: Fallback validation error for page form
718
+ #. @context: Fallback validation error for password reset form
719
+ #. @context: Fallback validation error for setup form
720
+ #. @context: Fallback validation error for sign-in form
721
+ #: src/routes/auth/reset.tsx
722
+ #: src/routes/auth/setup.tsx
723
+ #: src/routes/auth/signin.tsx
724
+ #: src/routes/compose.tsx
725
+ #: src/routes/dash/pages.tsx
726
+ #: src/routes/dash/pages.tsx
727
+ msgid "Invalid input"
728
+ msgstr "Invalid input"
729
+
522
730
  #. @context: Password reset error heading
523
- #: src/routes/auth/reset.tsx:120
731
+ #: src/routes/auth/reset.tsx
524
732
  msgid "Invalid or Expired Link"
525
733
  msgstr "Invalid or Expired Link"
526
734
 
735
+ #. @context: Error toast when reorder request is malformed
736
+ #: src/routes/dash/pages.tsx
737
+ msgid "Invalid request"
738
+ msgstr "Invalid request"
739
+
740
+ #. @context: Error toast when selected theme is not valid
741
+ #: src/routes/dash/appearance.tsx
742
+ msgid "Invalid theme selected."
743
+ msgstr "Invalid theme selected."
744
+
527
745
  #. @context: Checkbox for allowing search engine indexing
528
- #: src/ui/dash/settings/GeneralContent.tsx:515
746
+ #: src/ui/dash/settings/GeneralContent.tsx
529
747
  msgid "It's OK for search engines to index my site"
530
748
  msgstr "It's OK for search engines to index my site"
531
749
 
532
750
  #. @context: Navigation link form field
533
- #: src/ui/dash/pages/LinkFormContent.tsx:39
751
+ #: src/ui/dash/pages/LinkFormContent.tsx
534
752
  msgid "Label"
535
753
  msgstr "Label"
536
754
 
755
+ #. @context: Error toast when nav link fields are empty
756
+ #. @context: Error toast when nav link fields are empty
757
+ #: src/routes/dash/pages.tsx
758
+ #: src/routes/dash/pages.tsx
759
+ msgid "Label and URL are required"
760
+ msgstr "Label and URL are required"
761
+
537
762
  #. @context: Settings form field
538
- #: src/ui/dash/settings/GeneralContent.tsx:350
763
+ #: src/ui/dash/settings/GeneralContent.tsx
539
764
  msgid "Language"
540
765
  msgstr "Language"
541
766
 
542
767
  #. @context: Browse filter for latest posts
543
768
  #. @context: Homepage view option - show latest posts
544
- #: src/ui/dash/settings/GeneralContent.tsx:388
545
- #: src/ui/layouts/SiteLayout.tsx:48
769
+ #: src/ui/dash/settings/GeneralContent.tsx
770
+ #: src/ui/layouts/SiteLayout.tsx
546
771
  msgid "Latest"
547
772
  msgstr "Latest"
548
773
 
549
774
  #. @context: Setup page description
550
- #: src/app.tsx:130
775
+ #: src/app.tsx
551
776
  #~ msgid "Let's set up your site."
552
777
  #~ msgstr "Let's set up your site."
553
778
 
554
779
  #. @context: Nav item type badge
555
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:123
780
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
556
781
  msgid "link"
557
782
  msgstr "link"
558
783
 
@@ -560,359 +785,447 @@ msgstr "link"
560
785
  #. @context: Post format badge - link
561
786
  #. @context: Post format label - link
562
787
  #. @context: Post format option
563
- #: src/ui/compose/ComposeDialog.tsx:101
564
- #: src/ui/dash/FormatBadge.tsx:20
565
- #: src/ui/dash/PostForm.tsx:74
566
- #: src/ui/pages/ArchivePage.tsx:17
788
+ #: src/ui/compose/ComposeDialog.tsx
789
+ #: src/ui/dash/FormatBadge.tsx
790
+ #: src/ui/dash/posts/PostForm.tsx
791
+ #: src/ui/pages/ArchivePage.tsx
567
792
  msgid "Link"
568
793
  msgstr "Link"
569
794
 
570
795
  #. @context: Post format label plural - links
571
- #: src/ui/pages/ArchivePage.tsx:33
796
+ #: src/ui/pages/ArchivePage.tsx
572
797
  msgid "Links"
573
798
  msgstr "Links"
574
799
 
575
800
  #. @context: Pagination button - load more items
576
- #: src/ui/shared/Pagination.tsx:104
801
+ #: src/ui/shared/Pagination.tsx
577
802
  msgid "Load more"
578
803
  msgstr "Load more"
579
804
 
580
805
  #. @context: Loading state for media picker
581
- #. @context: Loading state for media picker
582
- #: src/ui/compose/ComposeDialog.tsx:405
583
- #: src/ui/dash/PostForm.tsx:351
806
+ #: src/ui/dash/posts/PostForm.tsx
584
807
  msgid "Loading..."
585
808
  msgstr "Loading..."
586
809
 
587
810
  #. @context: Page slug validation message
588
- #: src/ui/dash/PageForm.tsx:77
811
+ #: src/ui/dash/PageForm.tsx
589
812
  msgid "Lowercase letters, numbers, and hyphens only"
590
813
  msgstr "Lowercase letters, numbers, and hyphens only"
591
814
 
815
+ #. @context: Collection sort order option
816
+ #: src/ui/dash/collections/CollectionForm.tsx
817
+ msgid "Lowest rated"
818
+ msgstr "Lowest rated"
819
+
592
820
  #. @context: Media detail section - Markdown snippet
593
- #: src/ui/dash/media/ViewMediaContent.tsx:146
821
+ #: src/ui/dash/media/ViewMediaContent.tsx
594
822
  msgid "Markdown"
595
823
  msgstr "Markdown"
596
824
 
597
- #. @context: Placeholder for footer textarea
598
- #: src/ui/dash/settings/GeneralContent.tsx:466
825
+ #. @context: Placeholder hint for markdown-enabled textareas
826
+ #: src/ui/dash/settings/GeneralContent.tsx
599
827
  msgid "Markdown supported"
600
828
  msgstr "Markdown supported"
601
829
 
830
+ #. @context: Compose toolbar - media tooltip
602
831
  #. @context: Dashboard navigation - media library
603
832
  #. @context: Media main heading
604
833
  #. @context: Post form field - media attachments
605
- #: src/ui/dash/media/MediaListContent.tsx:127
606
- #: src/ui/dash/PostForm.tsx:158
607
- #: src/ui/layouts/DashLayout.tsx:105
834
+ #: src/ui/compose/ComposeDialog.tsx
835
+ #: src/ui/dash/media/MediaListContent.tsx
836
+ #: src/ui/dash/posts/PostForm.tsx
837
+ #: src/ui/layouts/DashLayout.tsx
608
838
  msgid "Media"
609
839
  msgstr "Media"
610
840
 
841
+ #. @context: Header more button tooltip
842
+ #: src/ui/compose/ComposeDialog.tsx
843
+ #~ msgid "More options"
844
+ #~ msgstr "More options"
845
+
611
846
  #. @context: Setup site name placeholder
612
- #: src/app.tsx:137
847
+ #: src/app.tsx
613
848
  #~ msgid "My Blog"
614
849
  #~ msgstr "My Blog"
615
850
 
616
851
  #. @context: Collection title placeholder
617
- #: src/ui/dash/collections/CollectionForm.tsx:70
852
+ #: src/ui/dash/collections/CollectionForm.tsx
618
853
  msgid "My Collection"
619
854
  msgstr "My Collection"
620
855
 
621
856
  #. @context: Account settings form field
622
- #: src/ui/dash/settings/AccountContent.tsx:38
857
+ #: src/ui/dash/settings/AccountContent.tsx
623
858
  msgid "Name"
624
859
  msgstr "Name"
625
860
 
861
+ #. @context: Error toast when display name is empty
862
+ #: src/routes/dash/settings.tsx
863
+ msgid "Name is required."
864
+ msgstr "Name is required."
865
+
626
866
  #. @context: Dashboard heading
627
867
  #. @context: Dashboard navigation - navigation links management
628
- #: src/routes/dash/navigation.tsx:29
629
- #: src/theme/layouts/DashLayout.tsx:133
868
+ #: src/routes/dash/navigation.tsx
869
+ #: src/theme/layouts/DashLayout.tsx
630
870
  #~ msgid "Navigation"
631
871
  #~ msgstr "Navigation"
632
872
 
633
873
  #. @context: Help text with link
634
- #: src/routes/dash/index.tsx:78
874
+ #: src/routes/dash/index.tsx
635
875
  msgid "Need help? Visit the <0>documentation</0>"
636
876
  msgstr "Need help? Visit the <0>documentation</0>"
637
877
 
638
878
  #. @context: Button to create new collection
639
879
  #. @context: Button to create new collection
640
880
  #. @context: Page heading
641
- #: src/ui/dash/collections/CollectionForm.tsx:29
642
- #: src/ui/dash/collections/CollectionsListContent.tsx:28
643
- #: src/ui/dash/collections/CollectionsListContent.tsx:41
881
+ #: src/ui/dash/collections/CollectionForm.tsx
882
+ #: src/ui/dash/collections/CollectionsListContent.tsx
883
+ #: src/ui/dash/collections/CollectionsListContent.tsx
644
884
  msgid "New Collection"
645
885
  msgstr "New Collection"
646
886
 
887
+ #. @context: Button to add divider between collections
888
+ #: src/ui/dash/collections/CollectionsListContent.tsx
889
+ msgid "New Divider"
890
+ msgstr "New Divider"
891
+
647
892
  #. @context: Page heading
648
- #: src/ui/dash/pages/LinkFormContent.tsx:18
893
+ #: src/ui/dash/pages/LinkFormContent.tsx
649
894
  msgid "New Link"
650
895
  msgstr "New Link"
651
896
 
652
897
  #. @context: Button to create new page
653
898
  #. @context: New page main heading
654
- #: src/routes/dash/pages.tsx:31
655
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:34
899
+ #: src/routes/dash/pages.tsx
900
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
656
901
  msgid "New Page"
657
902
  msgstr "New Page"
658
903
 
659
904
  #. @context: Password form field
660
905
  #. @context: Password reset form field
661
- #: src/routes/auth/reset.tsx:54
662
- #: src/ui/dash/settings/AccountContent.tsx:113
906
+ #: src/routes/auth/reset.tsx
907
+ #: src/ui/dash/settings/AccountContent.tsx
663
908
  msgid "New Password"
664
909
  msgstr "New Password"
665
910
 
666
911
  #. @context: Button to create new post
667
912
  #. @context: Button to create new post
668
- #. @context: Compose dialog title
669
913
  #. @context: Page heading
670
- #: src/routes/dash/index.tsx:68
671
- #: src/routes/dash/posts.tsx:30
672
- #: src/routes/dash/posts.tsx:46
673
- #: src/ui/compose/ComposeDialog.tsx:66
914
+ #: src/routes/dash/index.tsx
915
+ #: src/routes/dash/posts.tsx
916
+ #: src/routes/dash/posts.tsx
674
917
  msgid "New Post"
675
918
  msgstr "New Post"
676
919
 
677
920
  #. @context: Button to create new redirect
678
921
  #. @context: Button to create new redirect
679
922
  #. @context: Page heading
680
- #: src/routes/dash/redirects.tsx:33
681
- #: src/routes/dash/redirects.tsx:46
682
- #: src/routes/dash/redirects.tsx:87
923
+ #: src/routes/dash/redirects.tsx
924
+ #: src/routes/dash/redirects.tsx
925
+ #: src/routes/dash/redirects.tsx
683
926
  msgid "New Redirect"
684
927
  msgstr "New Redirect"
685
928
 
929
+ #. @context: Collection sort order option
930
+ #: src/ui/dash/collections/CollectionForm.tsx
931
+ msgid "Newest first"
932
+ msgstr "Newest first"
933
+
686
934
  #. @context: Pagination button - next page
687
935
  #. @context: Pagination button - next page
688
- #: src/ui/shared/Pagination.tsx:50
689
- #: src/ui/shared/Pagination.tsx:167
936
+ #: src/ui/shared/Pagination.tsx
937
+ #: src/ui/shared/Pagination.tsx
690
938
  msgid "Next"
691
939
  msgstr "Next"
692
940
 
941
+ #. @context: Compose collection combobox empty state
942
+ #: src/ui/compose/ComposeDialog.tsx
943
+ msgid "No collections found."
944
+ msgstr "No collections found."
945
+
693
946
  #. @context: Empty state message
694
947
  #. @context: Empty state message on collections page
695
- #: src/ui/dash/collections/CollectionsListContent.tsx:37
696
- #: src/ui/pages/CollectionsPage.tsx:28
948
+ #: src/ui/dash/collections/CollectionsListContent.tsx
949
+ #: src/ui/pages/CollectionsPage.tsx
697
950
  msgid "No collections yet."
698
951
  msgstr "No collections yet."
699
952
 
700
953
  #. @context: Empty state message on featured page
701
- #: src/ui/pages/FeaturedPage.tsx:20
954
+ #: src/ui/pages/FeaturedPage.tsx
702
955
  msgid "No featured posts yet."
703
956
  msgstr "No featured posts yet."
704
957
 
958
+ #. @context: Error when no file was selected for upload
959
+ #: src/routes/api/upload.ts
960
+ msgid "No file provided"
961
+ msgstr "No file provided"
962
+
963
+ #. @context: Error toast when no file was selected for upload
964
+ #: src/routes/dash/settings.tsx
965
+ msgid "No file provided."
966
+ msgstr "No file provided."
967
+
968
+ #. @context: Post form media empty state
969
+ #: src/ui/dash/posts/PostForm.tsx
970
+ msgid "No media selected yet."
971
+ msgstr "No media selected yet."
972
+
705
973
  #. @context: Empty state message when no media exists
706
- #: src/ui/dash/media/MediaListContent.tsx:162
974
+ #: src/ui/dash/media/MediaListContent.tsx
707
975
  msgid "No media uploaded yet."
708
976
  msgstr "No media uploaded yet."
709
977
 
710
978
  #. @context: Empty state message
711
- #: src/routes/dash/navigation.tsx:42
979
+ #: src/routes/dash/navigation.tsx
712
980
  #~ msgid "No navigation links configured."
713
981
  #~ msgstr "No navigation links configured."
714
982
 
715
983
  #. @context: Empty state for navigation section
716
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:52
984
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
717
985
  msgid "No navigation links yet. Add pages to navigation or create links."
718
986
  msgstr "No navigation links yet. Add pages to navigation or create links."
719
987
 
720
988
  #. @context: Empty state message when no pages exist
721
- #: src/routes/dash/pages.tsx:44
989
+ #: src/routes/dash/pages.tsx
722
990
  #~ msgid "No pages yet."
723
991
  #~ msgstr "No pages yet."
724
992
 
725
993
  #. @context: Archive empty state
726
- #: src/ui/pages/ArchivePage.tsx:103
994
+ #: src/ui/pages/ArchivePage.tsx
727
995
  msgid "No posts found."
728
996
  msgstr "No posts found."
729
997
 
730
998
  #. @context: Empty state message
731
999
  #. @context: Empty state message
732
- #: src/ui/dash/collections/ViewCollectionContent.tsx:56
733
- #: src/ui/pages/CollectionPage.tsx:29
1000
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
1001
+ #: src/ui/pages/CollectionPage.tsx
734
1002
  msgid "No posts in this collection."
735
1003
  msgstr "No posts in this collection."
736
1004
 
737
1005
  #. @context: Empty state message on home page
738
1006
  #. @context: Empty state message when no posts exist
739
- #: src/ui/dash/PostList.tsx:25
740
- #: src/ui/pages/HomePage.tsx:23
1007
+ #: src/ui/dash/PostList.tsx
1008
+ #: src/ui/pages/HomePage.tsx
741
1009
  msgid "No posts yet."
742
1010
  msgstr "No posts yet."
743
1011
 
744
1012
  #. @context: Empty state message
745
- #: src/routes/dash/redirects.tsx:42
1013
+ #: src/routes/dash/redirects.tsx
746
1014
  msgid "No redirects configured."
747
1015
  msgstr "No redirects configured."
748
1016
 
749
1017
  #. @context: Search empty results
750
- #: src/ui/pages/SearchPage.tsx:64
1018
+ #: src/ui/pages/SearchPage.tsx
751
1019
  msgid "No results found."
752
1020
  msgstr "No results found."
753
1021
 
754
- #. @context: No collection selected
755
- #. @context: No collection selected
756
1022
  #. @context: No rating selected
757
- #: src/ui/compose/ComposeDialog.tsx:174
758
- #: src/ui/compose/ComposeDialog.tsx:198
759
- #: src/ui/dash/PostForm.tsx:271
760
- msgid "None"
761
- msgstr "None"
1023
+ #: src/ui/compose/ComposeDialog.tsx
1024
+ #~ msgid "None"
1025
+ #~ msgstr "None"
762
1026
 
763
1027
  #. @context: Compose format tab
764
1028
  #. @context: Post format badge - note
765
1029
  #. @context: Post format label - note
766
1030
  #. @context: Post format option
767
- #: src/ui/compose/ComposeDialog.tsx:90
768
- #: src/ui/dash/FormatBadge.tsx:19
769
- #: src/ui/dash/PostForm.tsx:71
770
- #: src/ui/pages/ArchivePage.tsx:16
1031
+ #: src/ui/compose/ComposeDialog.tsx
1032
+ #: src/ui/dash/FormatBadge.tsx
1033
+ #: src/ui/dash/posts/PostForm.tsx
1034
+ #: src/ui/pages/ArchivePage.tsx
771
1035
  msgid "Note"
772
1036
  msgstr "Note"
773
1037
 
774
1038
  #. @context: Post format label plural - notes
775
- #: src/ui/pages/ArchivePage.tsx:29
1039
+ #: src/ui/pages/ArchivePage.tsx
776
1040
  msgid "Notes"
777
1041
  msgstr "Notes"
778
1042
 
1043
+ #. @context: Collection sort order option
1044
+ #: src/ui/dash/collections/CollectionForm.tsx
1045
+ msgid "Oldest first"
1046
+ msgstr "Oldest first"
1047
+
1048
+ #. @context: Toast after saving navigation item order
1049
+ #: src/routes/dash/pages.tsx
1050
+ msgid "Order saved"
1051
+ msgstr "Order saved"
1052
+
779
1053
  #. @context: Section heading for pages not in navigation
780
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:139
1054
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
781
1055
  msgid "Other pages"
782
1056
  msgstr "Other pages"
783
1057
 
784
1058
  #. @context: Nav item type badge
785
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:119
1059
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
786
1060
  msgid "page"
787
1061
  msgstr "page"
788
1062
 
789
1063
  #. @context: Default page heading when untitled
790
- #: src/routes/dash/pages.tsx:46
1064
+ #: src/routes/dash/pages.tsx
791
1065
  msgid "Page"
792
1066
  msgstr "Page"
793
1067
 
794
1068
  #. @context: Pagination - current page indicator
795
- #: src/ui/shared/Pagination.tsx:227
1069
+ #: src/ui/shared/Pagination.tsx
796
1070
  msgid "Page {page}"
797
1071
  msgstr "Page {page}"
798
1072
 
799
1073
  #. @context: Page content placeholder
800
- #: src/ui/dash/PageForm.tsx:104
1074
+ #: src/ui/dash/PageForm.tsx
801
1075
  msgid "Page content (Markdown supported)..."
802
1076
  msgstr "Page content (Markdown supported)..."
803
1077
 
804
1078
  #. @context: Page title placeholder
805
- #: src/ui/dash/PageForm.tsx:53
1079
+ #: src/ui/dash/PageForm.tsx
806
1080
  msgid "Page title..."
807
1081
  msgstr "Page title..."
808
1082
 
809
1083
  #. @context: Dashboard navigation - pages management
810
1084
  #. @context: Pages main heading
811
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:21
812
- #: src/ui/layouts/DashLayout.tsx:96
1085
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1086
+ #: src/ui/layouts/DashLayout.tsx
813
1087
  msgid "Pages"
814
1088
  msgstr "Pages"
815
1089
 
816
1090
  #. @context: Setup/signin form field - password
817
1091
  #. @context: Setup/signin form field - password
818
- #: src/routes/auth/setup.tsx:79
819
- #: src/routes/auth/signin.tsx:64
1092
+ #: src/routes/auth/setup.tsx
1093
+ #: src/routes/auth/signin.tsx
820
1094
  msgid "Password"
821
1095
  msgstr "Password"
822
1096
 
1097
+ #. @context: Toast after changing account password
1098
+ #: src/routes/dash/settings.tsx
1099
+ msgid "Password changed successfully."
1100
+ msgstr "Password changed successfully."
1101
+
1102
+ #. @context: Error toast when new password and confirmation differ
1103
+ #: src/routes/dash/settings.tsx
1104
+ msgid "Passwords do not match."
1105
+ msgstr "Passwords do not match."
1106
+
1107
+ #. @context: Attached text placeholder
1108
+ #: src/ui/compose/ComposeDialog.tsx
1109
+ msgid ""
1110
+ "Paste a long article, AI response, or any text...\n"
1111
+ "\n"
1112
+ "Markdown formatting will be preserved."
1113
+ msgstr ""
1114
+ "Paste a long article, AI response, or any text...\n"
1115
+ "\n"
1116
+ "Markdown formatting will be preserved."
1117
+
1118
+ #. @context: Compose link URL placeholder
1119
+ #: src/ui/compose/ComposeDialog.tsx
1120
+ msgid "Paste a URL..."
1121
+ msgstr "Paste a URL..."
1122
+
823
1123
  #. @context: Page form field label - URL path
824
- #: src/theme/components/PageForm.tsx:64
1124
+ #: src/theme/components/PageForm.tsx
825
1125
  #~ msgid "Path"
826
1126
  #~ msgstr "Path"
827
1127
 
828
1128
  #. @context: Navigation URL help text
829
- #: src/ui/dash/pages/LinkFormContent.tsx:74
1129
+ #: src/ui/dash/pages/LinkFormContent.tsx
830
1130
  msgid "Path (e.g. /archive) or full URL (e.g. https://example.com)"
831
1131
  msgstr "Path (e.g. /archive) or full URL (e.g. https://example.com)"
832
1132
 
833
1133
  #. @context: Link to individual post in thread
834
1134
  #. @context: Link to permanent URL of post
835
- #: src/ui/pages/PostPage.tsx:48
836
- #: src/ui/shared/ThreadView.tsx:71
1135
+ #: src/ui/pages/PostPage.tsx
1136
+ #: src/ui/shared/ThreadView.tsx
837
1137
  msgid "Permalink"
838
1138
  msgstr "Permalink"
839
1139
 
840
- #. @context: Compose checkbox - pin to top
841
1140
  #. @context: Post badge - pinned
842
1141
  #. @context: Post form checkbox - pin to top
843
- #: src/ui/compose/ComposeDialog.tsx:312
844
- #: src/ui/dash/PostForm.tsx:253
845
- #: src/ui/dash/StatusBadge.tsx:53
1142
+ #: src/ui/dash/posts/PostForm.tsx
1143
+ #: src/ui/dash/StatusBadge.tsx
846
1144
  msgid "Pinned"
847
1145
  msgstr "Pinned"
848
1146
 
849
1147
  #. @context: Singular post count label
850
- #: src/ui/pages/CollectionsPage.tsx:56
851
- msgid "post"
852
- msgstr "post"
1148
+ #: src/ui/pages/CollectionsPage.tsx
1149
+ #~ msgid "post"
1150
+ #~ msgstr "post"
853
1151
 
854
1152
  #. @context: Compose button - publish post
855
1153
  #. @context: Compose prompt post button
856
1154
  #. @context: Default post title
857
- #: src/routes/dash/posts.tsx:128
858
- #: src/ui/compose/ComposeDialog.tsx:365
859
- #: src/ui/compose/ComposePrompt.tsx:48
1155
+ #: src/routes/dash/posts.tsx
1156
+ #: src/ui/compose/ComposeDialog.tsx
1157
+ #: src/ui/compose/ComposePrompt.tsx
860
1158
  msgid "Post"
861
1159
  msgstr "Post"
862
1160
 
1161
+ #. @context: Toast after creating post
1162
+ #: src/ui/dash/posts/PostForm.tsx
1163
+ msgid "Post published successfully."
1164
+ msgstr "Post published successfully."
1165
+
863
1166
  #. @context: Post title placeholder
864
- #: src/ui/dash/PostForm.tsx:94
1167
+ #: src/ui/dash/posts/PostForm.tsx
865
1168
  msgid "Post title..."
866
1169
  msgstr "Post title..."
867
1170
 
1171
+ #. @context: Toast after editing post
1172
+ #: src/ui/dash/posts/PostForm.tsx
1173
+ msgid "Post updated successfully."
1174
+ msgstr "Post updated successfully."
1175
+
868
1176
  #. @context: Compose loading text while posting
869
- #: src/ui/compose/ComposeDialog.tsx:345
1177
+ #: src/ui/compose/ComposeDialog.tsx
870
1178
  #~ msgid "Posting..."
871
1179
  #~ msgstr "Posting..."
872
1180
 
873
1181
  #. @context: Plural post count label
874
- #: src/ui/pages/CollectionsPage.tsx:60
875
- msgid "posts"
876
- msgstr "posts"
1182
+ #: src/ui/pages/CollectionsPage.tsx
1183
+ #~ msgid "posts"
1184
+ #~ msgstr "posts"
877
1185
 
878
1186
  #. @context: Dashboard heading
879
1187
  #. @context: Dashboard navigation - posts management
880
- #: src/routes/dash/posts.tsx:29
881
- #: src/ui/layouts/DashLayout.tsx:87
1188
+ #: src/routes/dash/posts.tsx
1189
+ #: src/ui/layouts/DashLayout.tsx
882
1190
  msgid "Posts"
883
1191
  msgstr "Posts"
884
1192
 
885
1193
  #. @context: Collection posts section heading
886
- #: src/ui/dash/collections/ViewCollectionContent.tsx:18
1194
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
887
1195
  msgid "Posts in Collection ({count})"
888
1196
  msgstr "Posts in Collection ({count})"
889
1197
 
890
1198
  #. @context: Media detail section - preview
891
- #: src/ui/dash/media/ViewMediaContent.tsx:69
1199
+ #: src/ui/dash/media/ViewMediaContent.tsx
892
1200
  msgid "Preview"
893
1201
  msgstr "Preview"
894
1202
 
895
1203
  #. @context: Pagination button - previous page
896
1204
  #. @context: Pagination button - previous page
897
- #: src/ui/shared/Pagination.tsx:46
898
- #: src/ui/shared/Pagination.tsx:163
1205
+ #: src/ui/shared/Pagination.tsx
1206
+ #: src/ui/shared/Pagination.tsx
899
1207
  msgid "Previous"
900
1208
  msgstr "Previous"
901
1209
 
902
1210
  #. @context: Avatar upload button text while generating favicon variants
903
1211
  #. @context: Upload status - processing
904
- #: src/ui/dash/media/MediaListContent.tsx:95
905
- #: src/ui/dash/settings/GeneralContent.tsx:215
1212
+ #: src/ui/dash/media/MediaListContent.tsx
1213
+ #: src/ui/dash/settings/GeneralContent.tsx
906
1214
  msgid "Processing..."
907
1215
  msgstr "Processing..."
908
1216
 
909
1217
  #. @context: Account settings section heading
910
- #: src/ui/dash/settings/AccountContent.tsx:29
1218
+ #: src/ui/dash/settings/AccountContent.tsx
911
1219
  msgid "Profile"
912
1220
  msgstr "Profile"
913
1221
 
1222
+ #. @context: Toast after saving user profile
1223
+ #: src/routes/dash/settings.tsx
1224
+ msgid "Profile saved successfully."
1225
+ msgstr "Profile saved successfully."
1226
+
914
1227
  #. @context: Button to publish new post
915
- #: src/ui/dash/PostForm.tsx:312
1228
+ #: src/ui/dash/posts/PostForm.tsx
916
1229
  msgid "Publish"
917
1230
  msgstr "Publish"
918
1231
 
@@ -920,35 +1233,40 @@ msgstr "Publish"
920
1233
  #. @context: Post status badge - published
921
1234
  #. @context: Post status label
922
1235
  #. @context: Post status option
923
- #: src/routes/dash/index.tsx:45
924
- #: src/ui/dash/PageForm.tsx:127
925
- #: src/ui/dash/PostForm.tsx:228
926
- #: src/ui/dash/StatusBadge.tsx:30
1236
+ #: src/routes/dash/index.tsx
1237
+ #: src/ui/dash/PageForm.tsx
1238
+ #: src/ui/dash/posts/PostForm.tsx
1239
+ #: src/ui/dash/StatusBadge.tsx
927
1240
  msgid "Published"
928
1241
  msgstr "Published"
929
1242
 
930
1243
  #. @context: Page status helper text
931
- #: src/theme/components/PageForm.tsx:140
1244
+ #: src/theme/components/PageForm.tsx
932
1245
  #~ msgid "Published pages are accessible via their path. Drafts are not visible."
933
1246
  #~ msgstr "Published pages are accessible via their path. Drafts are not visible."
934
1247
 
935
1248
  #. @context: Page status helper text
936
- #: src/ui/dash/PageForm.tsx:140
1249
+ #: src/ui/dash/PageForm.tsx
937
1250
  msgid "Published pages are accessible via their slug. Drafts are not visible."
938
1251
  msgstr "Published pages are accessible via their slug. Drafts are not visible."
939
1252
 
1253
+ #. @context: Toast shown after successful deferred publish
1254
+ #: src/ui/compose/ComposeDialog.tsx
1255
+ msgid "Published!"
1256
+ msgstr "Published!"
1257
+
940
1258
  #. @context: Dashboard section title
941
- #: src/routes/dash/index.tsx:62
1259
+ #: src/routes/dash/index.tsx
942
1260
  msgid "Quick Actions"
943
1261
  msgstr "Quick Actions"
944
1262
 
945
1263
  #. @context: Post visibility badge - normal
946
- #: src/theme/components/VisibilityBadge.tsx:30
1264
+ #: src/theme/components/VisibilityBadge.tsx
947
1265
  #~ msgid "Quiet"
948
1266
  #~ msgstr "Quiet"
949
1267
 
950
1268
  #. @context: Post visibility option
951
- #: src/theme/components/PostForm.tsx:243
1269
+ #: src/theme/components/PostForm.tsx
952
1270
  #~ msgid "Quiet (normal)"
953
1271
  #~ msgstr "Quiet (normal)"
954
1272
 
@@ -956,426 +1274,533 @@ msgstr "Quick Actions"
956
1274
  #. @context: Post format badge - quote
957
1275
  #. @context: Post format label - quote
958
1276
  #. @context: Post format option
959
- #: src/ui/compose/ComposeDialog.tsx:112
960
- #: src/ui/dash/FormatBadge.tsx:21
961
- #: src/ui/dash/PostForm.tsx:77
962
- #: src/ui/pages/ArchivePage.tsx:18
1277
+ #: src/ui/compose/ComposeDialog.tsx
1278
+ #: src/ui/dash/FormatBadge.tsx
1279
+ #: src/ui/dash/posts/PostForm.tsx
1280
+ #: src/ui/pages/ArchivePage.tsx
963
1281
  msgid "Quote"
964
1282
  msgstr "Quote"
965
1283
 
966
1284
  #. @context: Post form field - quoted text
967
- #: src/ui/dash/PostForm.tsx:137
1285
+ #: src/ui/dash/posts/PostForm.tsx
968
1286
  msgid "Quote Text"
969
1287
  msgstr "Quote Text"
970
1288
 
971
1289
  #. @context: Post format label plural - quotes
972
- #: src/ui/pages/ArchivePage.tsx:37
1290
+ #: src/ui/pages/ArchivePage.tsx
973
1291
  msgid "Quotes"
974
1292
  msgstr "Quotes"
975
1293
 
976
1294
  #. @context: Compose rating field
977
1295
  #. @context: Compose toolbar - toggle rating
978
- #: src/ui/compose/ComposeDialog.tsx:167
979
- #: src/ui/compose/ComposeDialog.tsx:246
980
- msgid "Rating"
981
- msgstr "Rating"
1296
+ #: src/ui/compose/ComposeDialog.tsx
1297
+ #: src/ui/compose/ComposeDialog.tsx
1298
+ #~ msgid "Rating"
1299
+ #~ msgstr "Rating"
982
1300
 
983
- #. @context: Dashboard heading
984
- #. @context: Dashboard navigation - URL redirects
985
- #: src/routes/dash/redirects.tsx:29
986
- #: src/ui/layouts/DashLayout.tsx:124
1301
+ #. @context: Settings section heading
1302
+ #. @context: Settings sub-navigation tab
1303
+ #: src/routes/dash/redirects.tsx
1304
+ #: src/ui/dash/settings/SettingsNav.tsx
987
1305
  msgid "Redirects"
988
1306
  msgstr "Redirects"
989
1307
 
1308
+ #. @context: Button to remove icon
990
1309
  #. @context: Button to remove the blog avatar
991
1310
  #. @context: Remove media attachment button
992
- #: src/ui/dash/PostForm.tsx:194
993
- #: src/ui/dash/settings/GeneralContent.tsx:243
1311
+ #: src/ui/dash/collections/CollectionForm.tsx
1312
+ #: src/ui/dash/posts/PostForm.tsx
1313
+ #: src/ui/dash/settings/GeneralContent.tsx
994
1314
  msgid "Remove"
995
1315
  msgstr "Remove"
996
1316
 
1317
+ #. @context: Button to delete a divider
1318
+ #: src/ui/dash/collections/CollectionsListContent.tsx
1319
+ msgid "Remove divider"
1320
+ msgstr "Remove divider"
1321
+
997
1322
  #. @context: Password reset form submit button
998
1323
  #. @context: Password reset page heading
999
- #: src/routes/auth/reset.tsx:33
1000
- #: src/routes/auth/reset.tsx:100
1324
+ #: src/routes/auth/reset.tsx
1325
+ #: src/routes/auth/reset.tsx
1001
1326
  msgid "Reset Password"
1002
1327
  msgstr "Reset Password"
1003
1328
 
1004
1329
  #. @context: Button to save settings
1005
- #: src/ui/dash/settings/GeneralContent.tsx:74
1330
+ #: src/ui/dash/settings/GeneralContent.tsx
1006
1331
  msgid "Save"
1007
1332
  msgstr "Save"
1008
1333
 
1334
+ #. @context: More menu - save draft
1335
+ #: src/ui/compose/ComposeDialog.tsx
1336
+ msgid "Save as draft"
1337
+ msgstr "Save as draft"
1338
+
1339
+ #. @context: Header draft button tooltip
1340
+ #: src/ui/compose/ComposeDialog.tsx
1341
+ msgid "Save as Draft"
1342
+ msgstr "Save as Draft"
1343
+
1009
1344
  #. @context: Button to save edited navigation link
1010
- #: src/ui/dash/pages/LinkFormContent.tsx:100
1345
+ #: src/ui/dash/pages/LinkFormContent.tsx
1011
1346
  msgid "Save Changes"
1012
1347
  msgstr "Save Changes"
1013
1348
 
1014
1349
  #. @context: Button to save custom CSS
1015
- #: src/ui/dash/settings/AppearanceContent.tsx:246
1350
+ #: src/ui/dash/appearance/AdvancedContent.tsx
1016
1351
  msgid "Save CSS"
1017
1352
  msgstr "Save CSS"
1018
1353
 
1019
1354
  #. @context: Button to save profile
1020
- #: src/ui/dash/settings/AccountContent.tsx:73
1355
+ #: src/ui/dash/settings/AccountContent.tsx
1021
1356
  msgid "Save Profile"
1022
1357
  msgstr "Save Profile"
1023
1358
 
1024
1359
  #. @context: Button to save settings
1025
- #: src/ui/dash/settings/GeneralContent.tsx:142
1360
+ #: src/ui/dash/settings/GeneralContent.tsx
1026
1361
  #~ msgid "Save Settings"
1027
1362
  #~ msgstr "Save Settings"
1028
1363
 
1364
+ #. @context: Compose toolbar - score tooltip
1365
+ #: src/ui/compose/ComposeDialog.tsx
1366
+ msgid "Score"
1367
+ msgstr "Score"
1368
+
1029
1369
  #. @context: Search icon link in browse nav
1030
1370
  #. @context: Search page title
1031
1371
  #. @context: Search submit button
1032
- #: src/ui/layouts/SiteLayout.tsx:67
1033
- #: src/ui/pages/SearchPage.tsx:20
1034
- #: src/ui/pages/SearchPage.tsx:44
1372
+ #: src/ui/layouts/SiteLayout.tsx
1373
+ #: src/ui/pages/SearchPage.tsx
1374
+ #: src/ui/pages/SearchPage.tsx
1035
1375
  msgid "Search"
1036
1376
  msgstr "Search"
1037
1377
 
1038
1378
  #. @context: Search error message
1039
- #: src/routes/pages/search.tsx:49
1379
+ #: src/routes/pages/search.tsx
1040
1380
  #~ msgid "Search failed. Please try again."
1041
1381
  #~ msgstr "Search failed. Please try again."
1042
1382
 
1383
+ #. @context: Icon picker search placeholder
1384
+ #: src/ui/dash/collections/CollectionForm.tsx
1385
+ msgid "Search icons..."
1386
+ msgstr "Search icons..."
1387
+
1043
1388
  #. @context: Search input placeholder
1044
- #: src/ui/pages/SearchPage.tsx:36
1389
+ #: src/ui/pages/SearchPage.tsx
1045
1390
  msgid "Search posts..."
1046
1391
  msgstr "Search posts..."
1047
1392
 
1393
+ #. @context: Compose collection combobox search placeholder
1394
+ #: src/ui/compose/ComposeDialog.tsx
1395
+ msgid "Search..."
1396
+ msgstr "Search..."
1397
+
1048
1398
  #. @context: Media picker dialog title
1049
- #. @context: Media picker dialog title
1050
- #: src/ui/compose/ComposeDialog.tsx:384
1051
- #: src/ui/dash/PostForm.tsx:330
1399
+ #: src/ui/dash/posts/PostForm.tsx
1052
1400
  msgid "Select Media"
1053
1401
  msgstr "Select Media"
1054
1402
 
1055
1403
  #. @context: Settings section heading for SEO
1056
- #: src/ui/dash/settings/GeneralContent.tsx:498
1404
+ #: src/ui/dash/settings/GeneralContent.tsx
1057
1405
  msgid "SEO"
1058
1406
  msgstr "SEO"
1059
1407
 
1408
+ #. @context: Toast after saving SEO settings
1409
+ #. @context: Toast after saving SEO settings
1410
+ #: src/routes/dash/settings.tsx
1411
+ #: src/routes/dash/settings.tsx
1412
+ msgid "SEO settings saved successfully."
1413
+ msgstr "SEO settings saved successfully."
1414
+
1415
+ #. @context: Dashboard heading
1060
1416
  #. @context: Dashboard heading
1061
1417
  #. @context: Dashboard heading
1062
1418
  #. @context: Dashboard heading
1063
1419
  #. @context: Dashboard navigation - site settings
1064
- #: src/ui/dash/settings/AccountContent.tsx:16
1065
- #: src/ui/dash/settings/AppearanceContent.tsx:101
1066
- #: src/ui/dash/settings/GeneralContent.tsx:151
1067
- #: src/ui/layouts/DashLayout.tsx:133
1420
+ #: src/routes/dash/redirects.tsx
1421
+ #: src/routes/dash/redirects.tsx
1422
+ #: src/ui/dash/settings/AccountContent.tsx
1423
+ #: src/ui/dash/settings/GeneralContent.tsx
1424
+ #: src/ui/layouts/DashLayout.tsx
1068
1425
  msgid "Settings"
1069
1426
  msgstr "Settings"
1070
1427
 
1428
+ #. @context: Toast after saving general settings
1429
+ #. @context: Toast after saving general settings
1430
+ #: src/routes/dash/settings.tsx
1431
+ #: src/routes/dash/settings.tsx
1432
+ msgid "Settings saved successfully."
1433
+ msgstr "Settings saved successfully."
1434
+
1071
1435
  #. @context: Setup page title
1072
- #: src/app.tsx:125
1436
+ #: src/app.tsx
1073
1437
  #~ msgid "Setup"
1074
1438
  #~ msgstr "Setup"
1075
1439
 
1076
1440
  #. @context: Link to show remaining thread replies
1077
1441
  #. placeholder {0}: remainingCount === 1 ? "reply" : "replies"
1078
- #: src/ui/feed/ThreadPreview.tsx:37
1442
+ #: src/ui/feed/ThreadPreview.tsx
1079
1443
  msgid "Show {remainingCount} more {0}"
1080
1444
  msgstr "Show {remainingCount} more {0}"
1081
1445
 
1082
1446
  #. @context: Sign in form submit button
1083
1447
  #. @context: Sign in page heading
1084
- #: src/routes/auth/signin.tsx:31
1085
- #: src/routes/auth/signin.tsx:92
1448
+ #: src/routes/auth/signin.tsx
1449
+ #: src/routes/auth/signin.tsx
1086
1450
  msgid "Sign In"
1087
1451
  msgstr "Sign In"
1088
1452
 
1089
1453
  #. @context: Dashboard header link to sign out
1090
- #: src/ui/layouts/DashLayout.tsx:63
1454
+ #: src/ui/layouts/DashLayout.tsx
1091
1455
  msgid "Sign Out"
1092
1456
  msgstr "Sign Out"
1093
1457
 
1094
1458
  #. @context: Settings form field
1095
- #: src/ui/dash/settings/GeneralContent.tsx:72
1459
+ #: src/ui/dash/settings/GeneralContent.tsx
1096
1460
  #~ msgid "Site Description"
1097
1461
  #~ msgstr "Site Description"
1098
1462
 
1099
1463
  #. @context: Settings section heading for site footer
1100
- #: src/ui/dash/settings/GeneralContent.tsx:454
1464
+ #: src/ui/dash/settings/GeneralContent.tsx
1101
1465
  msgid "Site Footer"
1102
1466
  msgstr "Site Footer"
1103
1467
 
1104
1468
  #. @context: Settings form field
1105
- #: src/ui/dash/settings/GeneralContent.tsx:308
1469
+ #: src/ui/dash/settings/GeneralContent.tsx
1106
1470
  msgid "Site Name"
1107
1471
  msgstr "Site Name"
1108
1472
 
1109
1473
  #. @context: Collection form field
1110
1474
  #. @context: Page form field label - URL slug
1111
- #: src/ui/dash/collections/CollectionForm.tsx:80
1112
- #: src/ui/dash/PageForm.tsx:64
1475
+ #: src/ui/dash/collections/CollectionForm.tsx
1476
+ #: src/ui/dash/PageForm.tsx
1113
1477
  msgid "Slug"
1114
1478
  msgstr "Slug"
1115
1479
 
1480
+ #. @context: Collection form field
1481
+ #: src/ui/dash/collections/CollectionForm.tsx
1482
+ msgid "Sort Order"
1483
+ msgstr "Sort Order"
1484
+
1485
+ #. @context: Compose quote source link placeholder
1486
+ #: src/ui/compose/ComposeDialog.tsx
1487
+ msgid "Source link (optional)"
1488
+ msgstr "Source link (optional)"
1489
+
1116
1490
  #. @context: Post form field - name of the source website or author
1117
- #: src/theme/components/PostForm.tsx:216
1491
+ #: src/theme/components/PostForm.tsx
1118
1492
  #~ msgid "Source Name (optional)"
1119
1493
  #~ msgstr "Source Name (optional)"
1120
1494
 
1121
1495
  #. @context: Post form field
1122
- #: src/theme/components/PostForm.tsx:200
1496
+ #: src/theme/components/PostForm.tsx
1123
1497
  #~ msgid "Source URL (optional)"
1124
1498
  #~ msgstr "Source URL (optional)"
1125
1499
 
1126
1500
  #. @context: Page form field label - publish status
1127
1501
  #. @context: Post form field
1128
- #: src/ui/dash/PageForm.tsx:117
1129
- #: src/ui/dash/PostForm.tsx:221
1502
+ #: src/ui/dash/PageForm.tsx
1503
+ #: src/ui/dash/posts/PostForm.tsx
1130
1504
  msgid "Status"
1131
1505
  msgstr "Status"
1132
1506
 
1507
+ #. @context: Error when file storage is not set up
1508
+ #: src/routes/api/upload.ts
1509
+ msgid "Storage not configured"
1510
+ msgstr "Storage not configured"
1511
+
1512
+ #. @context: Error toast when file storage is not set up
1513
+ #: src/routes/dash/settings.tsx
1514
+ msgid "Storage not configured."
1515
+ msgstr "Storage not configured."
1516
+
1517
+ #. @context: Attached text panel hint
1518
+ #: src/ui/compose/ComposeDialog.tsx
1519
+ msgid "Supplementary content attached to your post"
1520
+ msgstr "Supplementary content attached to your post"
1521
+
1133
1522
  #. @context: Media upload instructions - supported formats
1134
- #: src/routes/dash/media.tsx:67
1523
+ #: src/routes/dash/media.tsx
1135
1524
  #~ msgid "Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB."
1136
1525
  #~ msgstr "Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB."
1137
1526
 
1138
1527
  #. @context: Redirect to path help text
1139
- #: src/routes/dash/redirects.tsx:133
1528
+ #: src/routes/dash/redirects.tsx
1140
1529
  msgid "The destination path or URL"
1141
1530
  msgstr "The destination path or URL"
1142
1531
 
1143
1532
  #. @context: Redirect from path help text
1144
- #: src/routes/dash/redirects.tsx:111
1533
+ #: src/routes/dash/redirects.tsx
1145
1534
  msgid "The path to redirect from"
1146
1535
  msgstr "The path to redirect from"
1147
1536
 
1148
- #. @context: Compose quote text placeholder
1537
+ #. @context: Font theme preview sentence for body text
1538
+ #. @context: Font theme preview sentence for headings
1539
+ #: src/ui/dash/appearance/FontThemeContent.tsx
1540
+ #: src/ui/dash/appearance/FontThemeContent.tsx
1541
+ msgid "The quick brown fox jumps over the lazy dog."
1542
+ msgstr "The quick brown fox jumps over the lazy dog."
1543
+
1149
1544
  #. @context: Quote text placeholder
1150
- #: src/ui/compose/ComposeDialog.tsx:156
1151
- #: src/ui/dash/PostForm.tsx:145
1545
+ #: src/ui/dash/posts/PostForm.tsx
1152
1546
  msgid "The text being quoted..."
1153
1547
  msgstr "The text being quoted..."
1154
1548
 
1155
1549
  #. @context: Page slug helper text
1156
- #: src/ui/dash/PageForm.tsx:85
1550
+ #: src/ui/dash/PageForm.tsx
1157
1551
  msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
1158
1552
  msgstr "The URL path for this page. Use lowercase letters, numbers, and hyphens."
1159
1553
 
1160
1554
  #. @context: Help text for site description field
1161
- #: src/ui/dash/settings/GeneralContent.tsx:340
1162
- msgid "This is displayed above your blog posts on your default home page. This is also used for the meta description on your home page."
1163
- msgstr "This is displayed above your blog posts on your default home page. This is also used for the meta description on your home page."
1555
+ #: src/ui/dash/settings/GeneralContent.tsx
1556
+ #~ msgid "This is displayed above your blog posts on your default home page. This is also used for the meta description on your home page."
1557
+ #~ msgstr "This is displayed above your blog posts on your default home page. This is also used for the meta description on your home page."
1164
1558
 
1165
1559
  #. @context: Help text for site footer field
1166
- #: src/ui/dash/settings/GeneralContent.tsx:474
1167
- msgid "This is displayed at the bottom of all of your posts and pages. Markdown is supported."
1168
- msgstr "This is displayed at the bottom of all of your posts and pages. Markdown is supported."
1560
+ #: src/ui/dash/settings/GeneralContent.tsx
1561
+ #~ msgid "This is displayed at the bottom of all of your posts and pages. Markdown is supported."
1562
+ #~ msgstr "This is displayed at the bottom of all of your posts and pages. Markdown is supported."
1169
1563
 
1170
1564
  #. @context: Help text for avatar upload
1171
- #: src/ui/dash/settings/GeneralContent.tsx:253
1565
+ #: src/ui/dash/settings/GeneralContent.tsx
1172
1566
  msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square image at least 180x180 pixels."
1173
1567
  msgstr "This is used for your favicon and apple-touch-icon. For best results, upload a square image at least 180x180 pixels."
1174
1568
 
1175
1569
  #. @context: Help text for avatar upload
1176
- #: src/ui/dash/settings/GeneralContent.tsx:238
1570
+ #: src/ui/dash/settings/GeneralContent.tsx
1177
1571
  #~ msgid "This is used for your favicon."
1178
1572
  #~ msgstr "This is used for your favicon."
1179
1573
 
1180
1574
  #. @context: Password reset error description
1181
- #: src/routes/auth/reset.tsx:128
1575
+ #: src/routes/auth/reset.tsx
1182
1576
  msgid "This password reset link is invalid or has expired. Please generate a new one."
1183
1577
  msgstr "This password reset link is invalid or has expired. Please generate a new one."
1184
1578
 
1185
1579
  #. @context: Appearance settings description
1186
- #: src/ui/dash/settings/AppearanceContent.tsx:118
1580
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1187
1581
  msgid "This will theme both your site and your dashboard. All color themes support dark mode."
1188
1582
  msgstr "This will theme both your site and your dashboard. All color themes support dark mode."
1189
1583
 
1190
1584
  #. @context: Thread view indicator - first post in thread
1191
- #: src/ui/shared/ThreadView.tsx:60
1585
+ #: src/ui/shared/ThreadView.tsx
1192
1586
  msgid "Thread start"
1193
1587
  msgstr "Thread start"
1194
1588
 
1195
1589
  #. @context: Thread view header - multiple posts
1196
- #: src/ui/shared/ThreadView.tsx:105
1590
+ #: src/ui/shared/ThreadView.tsx
1197
1591
  msgid "Thread with {count} posts"
1198
1592
  msgstr "Thread with {count} posts"
1199
1593
 
1200
1594
  #. @context: Thread view header - single post
1201
- #: src/ui/shared/ThreadView.tsx:101
1595
+ #: src/ui/shared/ThreadView.tsx
1202
1596
  msgid "Thread with 1 post"
1203
1597
  msgstr "Thread with 1 post"
1204
1598
 
1205
1599
  #. @context: Settings form field
1206
- #: src/ui/dash/settings/GeneralContent.tsx:409
1600
+ #: src/ui/dash/settings/GeneralContent.tsx
1207
1601
  msgid "Time Zone"
1208
1602
  msgstr "Time Zone"
1209
1603
 
1210
1604
  #. @context: Collection form field
1605
+ #. @context: Compose note title placeholder
1606
+ #. @context: Compose toolbar - title tooltip
1211
1607
  #. @context: Page form field label - title
1212
- #: src/ui/dash/collections/CollectionForm.tsx:57
1213
- #: src/ui/dash/PageForm.tsx:44
1608
+ #: src/ui/compose/ComposeDialog.tsx
1609
+ #: src/ui/compose/ComposeDialog.tsx
1610
+ #: src/ui/dash/collections/CollectionForm.tsx
1611
+ #: src/ui/dash/PageForm.tsx
1214
1612
  msgid "Title"
1215
1613
  msgstr "Title"
1216
1614
 
1217
- #. @context: Compose title placeholder
1218
1615
  #. @context: Post form field
1219
- #: src/ui/compose/ComposeDialog.tsx:124
1220
- #: src/ui/dash/PostForm.tsx:85
1616
+ #: src/ui/dash/posts/PostForm.tsx
1221
1617
  msgid "Title (optional)"
1222
1618
  msgstr "Title (optional)"
1223
1619
 
1224
1620
  #. @context: Redirect form field
1225
- #: src/routes/dash/redirects.tsx:120
1621
+ #: src/routes/dash/redirects.tsx
1226
1622
  msgid "To Path"
1227
1623
  msgstr "To Path"
1228
1624
 
1229
1625
  #. @context: Redirect form field
1230
- #: src/routes/dash/redirects.tsx:142
1626
+ #: src/routes/dash/redirects.tsx
1231
1627
  msgid "Type"
1232
1628
  msgstr "Type"
1233
1629
 
1630
+ #. @context: Compose quote text placeholder
1631
+ #: src/ui/compose/ComposeDialog.tsx
1632
+ msgid "Type the quote..."
1633
+ msgstr "Type the quote..."
1634
+
1234
1635
  #. @context: Button to remove page from navigation
1235
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:82
1636
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1236
1637
  msgid "Un-nav"
1237
1638
  msgstr "Un-nav"
1238
1639
 
1239
1640
  #. @context: Post visibility badge - unlisted
1240
1641
  #. @context: Post visibility option
1241
- #: src/theme/components/PostForm.tsx:255
1242
- #: src/theme/components/VisibilityBadge.tsx:34
1642
+ #: src/theme/components/PostForm.tsx
1643
+ #: src/theme/components/VisibilityBadge.tsx
1243
1644
  #~ msgid "Unlisted"
1244
1645
  #~ msgstr "Unlisted"
1245
1646
 
1246
1647
  #. @context: Default title for untitled page
1247
1648
  #. @context: Default title for untitled post
1248
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:190
1249
- #: src/ui/dash/PostList.tsx:86
1649
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1650
+ #: src/ui/dash/PostList.tsx
1250
1651
  msgid "Untitled"
1251
1652
  msgstr "Untitled"
1252
1653
 
1253
1654
  #. @context: Button to update existing post
1254
- #: src/ui/dash/PostForm.tsx:308
1655
+ #: src/ui/dash/posts/PostForm.tsx
1255
1656
  msgid "Update"
1256
1657
  msgstr "Update"
1257
1658
 
1258
1659
  #. @context: Button to save collection changes
1259
- #: src/ui/dash/collections/CollectionForm.tsx:32
1660
+ #: src/ui/dash/collections/CollectionForm.tsx
1260
1661
  msgid "Update Collection"
1261
1662
  msgstr "Update Collection"
1262
1663
 
1263
1664
  #. @context: Button to update existing page
1264
- #: src/ui/dash/PageForm.tsx:167
1665
+ #: src/ui/dash/PageForm.tsx
1265
1666
  msgid "Update Page"
1266
1667
  msgstr "Update Page"
1267
1668
 
1268
1669
  #. @context: Button to upload media file
1269
- #: src/ui/dash/media/MediaListContent.tsx:103
1670
+ #: src/ui/dash/media/MediaListContent.tsx
1270
1671
  msgid "Upload"
1271
1672
  msgstr "Upload"
1272
1673
 
1273
1674
  #. @context: Button to upload avatar image
1274
- #: src/ui/dash/settings/GeneralContent.tsx:205
1675
+ #: src/ui/dash/settings/GeneralContent.tsx
1275
1676
  msgid "Upload Avatar"
1276
1677
  msgstr "Upload Avatar"
1277
1678
 
1278
1679
  #. @context: Error message when avatar upload fails
1680
+ #. @context: Error toast when avatar upload fails
1681
+ #. @context: Error when file upload fails
1279
1682
  #. @context: Upload error message
1280
- #: src/ui/dash/media/MediaListContent.tsx:107
1281
- #: src/ui/dash/settings/GeneralContent.tsx:225
1683
+ #: src/routes/api/upload.ts
1684
+ #: src/routes/dash/settings.tsx
1685
+ #: src/ui/dash/media/MediaListContent.tsx
1686
+ #: src/ui/dash/settings/GeneralContent.tsx
1282
1687
  msgid "Upload failed. Please try again."
1283
1688
  msgstr "Upload failed. Please try again."
1284
1689
 
1285
1690
  #. @context: Media upload instructions - API usage
1286
- #: src/routes/dash/media.tsx:64
1691
+ #: src/routes/dash/media.tsx
1287
1692
  #~ msgid "Upload images via the API: POST /api/upload with a file form field."
1288
1693
  #~ msgstr "Upload images via the API: POST /api/upload with a file form field."
1289
1694
 
1695
+ #. @context: Toast after successful file upload
1696
+ #: src/routes/api/upload.ts
1697
+ msgid "Upload successful!"
1698
+ msgstr "Upload successful!"
1699
+
1290
1700
  #. @context: Avatar upload button text while uploading
1701
+ #. @context: Toast shown during background upload
1291
1702
  #. @context: Upload status - uploading
1292
- #: src/ui/dash/media/MediaListContent.tsx:99
1293
- #: src/ui/dash/settings/GeneralContent.tsx:220
1703
+ #: src/ui/compose/ComposeDialog.tsx
1704
+ #: src/ui/dash/media/MediaListContent.tsx
1705
+ #: src/ui/dash/settings/GeneralContent.tsx
1294
1706
  msgid "Uploading..."
1295
1707
  msgstr "Uploading..."
1296
1708
 
1297
1709
  #. @context: Media detail section - URL
1298
1710
  #. @context: Navigation link form field
1299
- #: src/ui/dash/media/ViewMediaContent.tsx:109
1300
- #: src/ui/dash/pages/LinkFormContent.tsx:61
1711
+ #: src/ui/dash/media/ViewMediaContent.tsx
1712
+ #: src/ui/dash/pages/LinkFormContent.tsx
1301
1713
  msgid "URL"
1302
1714
  msgstr "URL"
1303
1715
 
1304
1716
  #. @context: Post form field - source URL
1305
- #: src/ui/dash/PostForm.tsx:121
1717
+ #: src/ui/dash/posts/PostForm.tsx
1306
1718
  msgid "URL (optional)"
1307
1719
  msgstr "URL (optional)"
1308
1720
 
1309
1721
  #. @context: Collection path help text
1310
- #: src/ui/dash/collections/CollectionForm.tsx:92
1311
- msgid "URL-safe identifier (lowercase, numbers, hyphens)"
1312
- msgstr "URL-safe identifier (lowercase, numbers, hyphens)"
1722
+ #: src/ui/dash/collections/CollectionForm.tsx
1723
+ #~ msgid "URL-safe identifier (lowercase, numbers, hyphens)"
1724
+ #~ msgstr "URL-safe identifier (lowercase, numbers, hyphens)"
1725
+
1726
+ #. @context: Collection path help text
1727
+ #: src/ui/dash/collections/CollectionForm.tsx
1728
+ msgid "URL-safe identifier (lowercase, numbers, hyphens). For CJK titles, slug will be auto-generated on the server."
1729
+ msgstr "URL-safe identifier (lowercase, numbers, hyphens). For CJK titles, slug will be auto-generated on the server."
1313
1730
 
1314
1731
  #. @context: Media URL helper text
1315
- #: src/ui/dash/media/ViewMediaContent.tsx:135
1732
+ #: src/ui/dash/media/ViewMediaContent.tsx
1316
1733
  msgid "Use this URL to embed the media in your posts."
1317
1734
  msgstr "Use this URL to embed the media in your posts."
1318
1735
 
1319
- #. @context: Button to view collection
1320
1736
  #. @context: Button to view collection
1321
1737
  #. @context: Button to view item on public site
1322
1738
  #. @context: Button to view page on public site
1323
1739
  #. @context: Button to view page on public site
1324
1740
  #. @context: Button to view post
1325
1741
  #. @context: Button to view post on public site
1326
- #: src/routes/dash/pages.tsx:60
1327
- #: src/routes/dash/posts.tsx:145
1328
- #: src/ui/dash/ActionButtons.tsx:76
1329
- #: src/ui/dash/collections/CollectionsListContent.tsx:60
1330
- #: src/ui/dash/collections/ViewCollectionContent.tsx:38
1331
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:177
1332
- #: src/ui/dash/PostList.tsx:55
1742
+ #: src/routes/dash/pages.tsx
1743
+ #: src/routes/dash/posts.tsx
1744
+ #: src/ui/dash/ActionButtons.tsx
1745
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
1746
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1747
+ #: src/ui/dash/PostList.tsx
1333
1748
  msgid "View"
1334
1749
  msgstr "View"
1335
1750
 
1336
1751
  #. @context: Link to view all posts on archive page
1337
- #: src/routes/pages/home.tsx:109
1752
+ #: src/routes/pages/home.tsx
1338
1753
  #~ msgid "View all posts →"
1339
1754
  #~ msgstr "View all posts →"
1340
1755
 
1341
1756
  #. @context: Dashboard header link to view the public site
1342
- #: src/ui/layouts/DashLayout.tsx:53
1757
+ #: src/ui/layouts/DashLayout.tsx
1343
1758
  msgid "View Site"
1344
1759
  msgstr "View Site"
1345
1760
 
1346
1761
  #. @context: Post form field
1347
- #: src/theme/components/PostForm.tsx:236
1762
+ #: src/theme/components/PostForm.tsx
1348
1763
  #~ msgid "Visibility"
1349
1764
  #~ msgstr "Visibility"
1350
1765
 
1351
1766
  #. @context: Setup page welcome heading
1352
- #: src/routes/auth/setup.tsx:27
1767
+ #: src/routes/auth/setup.tsx
1353
1768
  msgid "Welcome to Jant"
1354
1769
  msgstr "Welcome to Jant"
1355
1770
 
1356
1771
  #. @context: Compose prompt placeholder text
1357
- #: src/ui/compose/ComposePrompt.tsx:37
1358
- msgid "What's new?"
1359
- msgstr "What's new?"
1772
+ #: src/ui/compose/ComposePrompt.tsx
1773
+ #~ msgid "What's new?"
1774
+ #~ msgstr "What's new?"
1360
1775
 
1361
- #. @context: Compose body placeholder
1776
+ #. @context: Compose prompt placeholder text
1362
1777
  #. @context: Post content placeholder
1363
- #: src/ui/compose/ComposeDialog.tsx:134
1364
- #: src/ui/dash/PostForm.tsx:109
1778
+ #: src/ui/compose/ComposePrompt.tsx
1779
+ #: src/ui/dash/posts/PostForm.tsx
1365
1780
  msgid "What's on your mind?"
1366
1781
  msgstr "What's on your mind?"
1367
1782
 
1783
+ #. @context: Compose body placeholder
1784
+ #: src/ui/compose/ComposeDialog.tsx
1785
+ msgid "What's on your mind..."
1786
+ msgstr "What's on your mind..."
1787
+
1368
1788
  #. @context: Collection description placeholder
1369
- #: src/ui/dash/collections/CollectionForm.tsx:114
1789
+ #: src/ui/dash/collections/CollectionForm.tsx
1370
1790
  msgid "What's this collection about?"
1371
1791
  msgstr "What's this collection about?"
1372
1792
 
1373
1793
  #. @context: Setup form field - user name
1374
- #: src/routes/auth/setup.tsx:49
1794
+ #: src/routes/auth/setup.tsx
1375
1795
  msgid "Your Name"
1376
1796
  msgstr "Your Name"
1377
1797
 
1378
1798
  #. @context: Section heading for navigation items
1379
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:45
1799
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1380
1800
  msgid "Your site navigation"
1381
1801
  msgstr "Your site navigation"
1802
+
1803
+ #. @context: Compose thoughts placeholder
1804
+ #: src/ui/compose/ComposeDialog.tsx
1805
+ msgid "Your thoughts (optional)"
1806
+ msgstr "Your thoughts (optional)"