@jant/core 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/app.js +4 -0
  2. package/dist/client.js +1 -0
  3. package/dist/db/schema.js +13 -0
  4. package/dist/i18n/locales/en.js +1 -1
  5. package/dist/i18n/locales/zh-Hans.js +1 -1
  6. package/dist/i18n/locales/zh-Hant.js +1 -1
  7. package/dist/lib/image.js +3 -3
  8. package/dist/lib/media-helpers.js +43 -0
  9. package/dist/lib/nav-reorder.js +27 -0
  10. package/dist/lib/navigation.js +35 -0
  11. package/dist/lib/theme-components.js +49 -0
  12. package/dist/routes/api/timeline.js +115 -0
  13. package/dist/routes/api/upload.js +9 -5
  14. package/dist/routes/dash/navigation.js +274 -0
  15. package/dist/routes/pages/archive.js +14 -27
  16. package/dist/routes/pages/collection.js +10 -19
  17. package/dist/routes/pages/home.js +83 -126
  18. package/dist/routes/pages/page.js +19 -38
  19. package/dist/routes/pages/post.js +38 -51
  20. package/dist/routes/pages/search.js +13 -26
  21. package/dist/services/index.js +3 -1
  22. package/dist/services/media.js +1 -1
  23. package/dist/services/navigation.js +115 -0
  24. package/dist/services/post.js +26 -1
  25. package/dist/theme/components/PostList.js +5 -0
  26. package/dist/theme/components/index.js +2 -0
  27. package/dist/theme/components/timeline/ArticleCard.js +50 -0
  28. package/dist/theme/components/timeline/ImageCard.js +86 -0
  29. package/dist/theme/components/timeline/LinkCard.js +62 -0
  30. package/dist/theme/components/timeline/NoteCard.js +37 -0
  31. package/dist/theme/components/timeline/QuoteCard.js +51 -0
  32. package/dist/theme/components/timeline/ThreadPreview.js +52 -0
  33. package/dist/theme/components/timeline/TimelineFeed.js +43 -0
  34. package/dist/theme/components/timeline/TimelineItem.js +25 -0
  35. package/dist/theme/components/timeline/index.js +8 -0
  36. package/dist/theme/layouts/DashLayout.js +8 -0
  37. package/dist/theme/layouts/SiteLayout.js +160 -0
  38. package/dist/theme/layouts/index.js +1 -0
  39. package/dist/types/sortablejs.d.js +5 -0
  40. package/package.json +3 -2
  41. package/src/__tests__/helpers/db.ts +10 -0
  42. package/src/app.tsx +4 -0
  43. package/src/client.ts +1 -0
  44. package/src/db/migrations/0003_add_navigation_links.sql +8 -0
  45. package/src/db/migrations/meta/0003_snapshot.json +821 -0
  46. package/src/db/migrations/meta/_journal.json +14 -0
  47. package/src/db/schema.ts +13 -0
  48. package/src/i18n/locales/en.po +100 -32
  49. package/src/i18n/locales/en.ts +1 -1
  50. package/src/i18n/locales/zh-Hans.po +102 -55
  51. package/src/i18n/locales/zh-Hans.ts +1 -1
  52. package/src/i18n/locales/zh-Hant.po +102 -55
  53. package/src/i18n/locales/zh-Hant.ts +1 -1
  54. package/src/index.ts +5 -0
  55. package/src/lib/__tests__/theme-components.test.ts +107 -0
  56. package/src/lib/image.ts +3 -3
  57. package/src/lib/media-helpers.ts +54 -0
  58. package/src/lib/nav-reorder.ts +26 -0
  59. package/src/lib/navigation.ts +46 -0
  60. package/src/lib/theme-components.ts +76 -0
  61. package/src/routes/api/__tests__/posts.test.ts +8 -8
  62. package/src/routes/api/__tests__/timeline.test.ts +242 -0
  63. package/src/routes/api/timeline.tsx +145 -0
  64. package/src/routes/api/upload.ts +9 -5
  65. package/src/routes/dash/navigation.tsx +306 -0
  66. package/src/routes/pages/archive.tsx +15 -23
  67. package/src/routes/pages/collection.tsx +8 -15
  68. package/src/routes/pages/home.tsx +111 -122
  69. package/src/routes/pages/page.tsx +17 -30
  70. package/src/routes/pages/post.tsx +33 -42
  71. package/src/routes/pages/search.tsx +18 -22
  72. package/src/services/__tests__/media.test.ts +34 -7
  73. package/src/services/__tests__/navigation.test.ts +213 -0
  74. package/src/services/__tests__/post-timeline.test.ts +220 -0
  75. package/src/services/index.ts +7 -0
  76. package/src/services/media.ts +2 -1
  77. package/src/services/navigation.ts +165 -0
  78. package/src/services/post.ts +48 -1
  79. package/src/styles/components.css +59 -0
  80. package/src/theme/components/PostList.tsx +7 -0
  81. package/src/theme/components/index.ts +12 -0
  82. package/src/theme/components/timeline/ArticleCard.tsx +57 -0
  83. package/src/theme/components/timeline/ImageCard.tsx +80 -0
  84. package/src/theme/components/timeline/LinkCard.tsx +66 -0
  85. package/src/theme/components/timeline/NoteCard.tsx +41 -0
  86. package/src/theme/components/timeline/QuoteCard.tsx +55 -0
  87. package/src/theme/components/timeline/ThreadPreview.tsx +49 -0
  88. package/src/theme/components/timeline/TimelineFeed.tsx +52 -0
  89. package/src/theme/components/timeline/TimelineItem.tsx +39 -0
  90. package/src/theme/components/timeline/index.ts +8 -0
  91. package/src/theme/layouts/DashLayout.tsx +10 -0
  92. package/src/theme/layouts/SiteLayout.tsx +184 -0
  93. package/src/theme/layouts/index.ts +1 -0
  94. package/src/types/sortablejs.d.ts +23 -0
  95. package/src/types.ts +61 -0
  96. package/dist/app.d.ts +0 -38
  97. package/dist/app.d.ts.map +0 -1
  98. package/dist/auth.d.ts +0 -25
  99. package/dist/auth.d.ts.map +0 -1
  100. package/dist/db/index.d.ts +0 -10
  101. package/dist/db/index.d.ts.map +0 -1
  102. package/dist/db/schema.d.ts +0 -1543
  103. package/dist/db/schema.d.ts.map +0 -1
  104. package/dist/i18n/Trans.d.ts +0 -25
  105. package/dist/i18n/Trans.d.ts.map +0 -1
  106. package/dist/i18n/context.d.ts +0 -69
  107. package/dist/i18n/context.d.ts.map +0 -1
  108. package/dist/i18n/detect.d.ts +0 -20
  109. package/dist/i18n/detect.d.ts.map +0 -1
  110. package/dist/i18n/i18n.d.ts +0 -32
  111. package/dist/i18n/i18n.d.ts.map +0 -1
  112. package/dist/i18n/index.d.ts +0 -41
  113. package/dist/i18n/index.d.ts.map +0 -1
  114. package/dist/i18n/locales/en.d.ts +0 -3
  115. package/dist/i18n/locales/en.d.ts.map +0 -1
  116. package/dist/i18n/locales/zh-Hans.d.ts +0 -3
  117. package/dist/i18n/locales/zh-Hans.d.ts.map +0 -1
  118. package/dist/i18n/locales/zh-Hant.d.ts +0 -3
  119. package/dist/i18n/locales/zh-Hant.d.ts.map +0 -1
  120. package/dist/i18n/locales.d.ts +0 -11
  121. package/dist/i18n/locales.d.ts.map +0 -1
  122. package/dist/i18n/middleware.d.ts +0 -21
  123. package/dist/i18n/middleware.d.ts.map +0 -1
  124. package/dist/index.d.ts +0 -16
  125. package/dist/index.d.ts.map +0 -1
  126. package/dist/lib/config.d.ts +0 -83
  127. package/dist/lib/config.d.ts.map +0 -1
  128. package/dist/lib/constants.d.ts +0 -37
  129. package/dist/lib/constants.d.ts.map +0 -1
  130. package/dist/lib/image.d.ts +0 -73
  131. package/dist/lib/image.d.ts.map +0 -1
  132. package/dist/lib/index.d.ts +0 -9
  133. package/dist/lib/index.d.ts.map +0 -1
  134. package/dist/lib/markdown.d.ts +0 -60
  135. package/dist/lib/markdown.d.ts.map +0 -1
  136. package/dist/lib/schemas.d.ts +0 -130
  137. package/dist/lib/schemas.d.ts.map +0 -1
  138. package/dist/lib/sqid.d.ts +0 -60
  139. package/dist/lib/sqid.d.ts.map +0 -1
  140. package/dist/lib/sse.d.ts +0 -192
  141. package/dist/lib/sse.d.ts.map +0 -1
  142. package/dist/lib/theme.d.ts +0 -44
  143. package/dist/lib/theme.d.ts.map +0 -1
  144. package/dist/lib/time.d.ts +0 -90
  145. package/dist/lib/time.d.ts.map +0 -1
  146. package/dist/lib/url.d.ts +0 -82
  147. package/dist/lib/url.d.ts.map +0 -1
  148. package/dist/middleware/auth.d.ts +0 -24
  149. package/dist/middleware/auth.d.ts.map +0 -1
  150. package/dist/middleware/onboarding.d.ts +0 -26
  151. package/dist/middleware/onboarding.d.ts.map +0 -1
  152. package/dist/routes/api/posts.d.ts +0 -13
  153. package/dist/routes/api/posts.d.ts.map +0 -1
  154. package/dist/routes/api/search.d.ts +0 -13
  155. package/dist/routes/api/search.d.ts.map +0 -1
  156. package/dist/routes/api/upload.d.ts +0 -16
  157. package/dist/routes/api/upload.d.ts.map +0 -1
  158. package/dist/routes/dash/collections.d.ts +0 -13
  159. package/dist/routes/dash/collections.d.ts.map +0 -1
  160. package/dist/routes/dash/index.d.ts +0 -15
  161. package/dist/routes/dash/index.d.ts.map +0 -1
  162. package/dist/routes/dash/media.d.ts +0 -16
  163. package/dist/routes/dash/media.d.ts.map +0 -1
  164. package/dist/routes/dash/pages.d.ts +0 -15
  165. package/dist/routes/dash/pages.d.ts.map +0 -1
  166. package/dist/routes/dash/posts.d.ts +0 -13
  167. package/dist/routes/dash/posts.d.ts.map +0 -1
  168. package/dist/routes/dash/redirects.d.ts +0 -13
  169. package/dist/routes/dash/redirects.d.ts.map +0 -1
  170. package/dist/routes/dash/settings.d.ts +0 -15
  171. package/dist/routes/dash/settings.d.ts.map +0 -1
  172. package/dist/routes/feed/rss.d.ts +0 -13
  173. package/dist/routes/feed/rss.d.ts.map +0 -1
  174. package/dist/routes/feed/sitemap.d.ts +0 -13
  175. package/dist/routes/feed/sitemap.d.ts.map +0 -1
  176. package/dist/routes/pages/archive.d.ts +0 -15
  177. package/dist/routes/pages/archive.d.ts.map +0 -1
  178. package/dist/routes/pages/collection.d.ts +0 -13
  179. package/dist/routes/pages/collection.d.ts.map +0 -1
  180. package/dist/routes/pages/home.d.ts +0 -13
  181. package/dist/routes/pages/home.d.ts.map +0 -1
  182. package/dist/routes/pages/page.d.ts +0 -15
  183. package/dist/routes/pages/page.d.ts.map +0 -1
  184. package/dist/routes/pages/post.d.ts +0 -13
  185. package/dist/routes/pages/post.d.ts.map +0 -1
  186. package/dist/routes/pages/search.d.ts +0 -13
  187. package/dist/routes/pages/search.d.ts.map +0 -1
  188. package/dist/services/collection.d.ts +0 -32
  189. package/dist/services/collection.d.ts.map +0 -1
  190. package/dist/services/index.d.ts +0 -28
  191. package/dist/services/index.d.ts.map +0 -1
  192. package/dist/services/media.d.ts +0 -34
  193. package/dist/services/media.d.ts.map +0 -1
  194. package/dist/services/post.d.ts +0 -31
  195. package/dist/services/post.d.ts.map +0 -1
  196. package/dist/services/redirect.d.ts +0 -15
  197. package/dist/services/redirect.d.ts.map +0 -1
  198. package/dist/services/search.d.ts +0 -26
  199. package/dist/services/search.d.ts.map +0 -1
  200. package/dist/services/settings.d.ts +0 -18
  201. package/dist/services/settings.d.ts.map +0 -1
  202. package/dist/theme/color-themes.d.ts +0 -30
  203. package/dist/theme/color-themes.d.ts.map +0 -1
  204. package/dist/theme/components/ActionButtons.d.ts +0 -43
  205. package/dist/theme/components/ActionButtons.d.ts.map +0 -1
  206. package/dist/theme/components/CrudPageHeader.d.ts +0 -23
  207. package/dist/theme/components/CrudPageHeader.d.ts.map +0 -1
  208. package/dist/theme/components/DangerZone.d.ts +0 -36
  209. package/dist/theme/components/DangerZone.d.ts.map +0 -1
  210. package/dist/theme/components/EmptyState.d.ts +0 -27
  211. package/dist/theme/components/EmptyState.d.ts.map +0 -1
  212. package/dist/theme/components/ListItemRow.d.ts +0 -15
  213. package/dist/theme/components/ListItemRow.d.ts.map +0 -1
  214. package/dist/theme/components/MediaGallery.d.ts +0 -13
  215. package/dist/theme/components/MediaGallery.d.ts.map +0 -1
  216. package/dist/theme/components/PageForm.d.ts +0 -14
  217. package/dist/theme/components/PageForm.d.ts.map +0 -1
  218. package/dist/theme/components/Pagination.d.ts +0 -46
  219. package/dist/theme/components/Pagination.d.ts.map +0 -1
  220. package/dist/theme/components/PostForm.d.ts +0 -16
  221. package/dist/theme/components/PostForm.d.ts.map +0 -1
  222. package/dist/theme/components/PostList.d.ts +0 -10
  223. package/dist/theme/components/PostList.d.ts.map +0 -1
  224. package/dist/theme/components/ThreadView.d.ts +0 -15
  225. package/dist/theme/components/ThreadView.d.ts.map +0 -1
  226. package/dist/theme/components/TypeBadge.d.ts +0 -12
  227. package/dist/theme/components/TypeBadge.d.ts.map +0 -1
  228. package/dist/theme/components/VisibilityBadge.d.ts +0 -12
  229. package/dist/theme/components/VisibilityBadge.d.ts.map +0 -1
  230. package/dist/theme/components/index.d.ts +0 -14
  231. package/dist/theme/components/index.d.ts.map +0 -1
  232. package/dist/theme/index.d.ts +0 -21
  233. package/dist/theme/index.d.ts.map +0 -1
  234. package/dist/theme/layouts/BaseLayout.d.ts +0 -23
  235. package/dist/theme/layouts/BaseLayout.d.ts.map +0 -1
  236. package/dist/theme/layouts/DashLayout.d.ts +0 -17
  237. package/dist/theme/layouts/DashLayout.d.ts.map +0 -1
  238. package/dist/theme/layouts/index.d.ts +0 -3
  239. package/dist/theme/layouts/index.d.ts.map +0 -1
  240. package/dist/types.d.ts +0 -237
  241. package/dist/types.d.ts.map +0 -1
@@ -15,6 +15,20 @@
15
15
  "when": 1770564499812,
16
16
  "tag": "0001_add_search_fts",
17
17
  "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 2,
21
+ "version": "6",
22
+ "when": 1770746168872,
23
+ "tag": "0002_add_media_attachments",
24
+ "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "6",
29
+ "when": 1770746168873,
30
+ "tag": "0003_add_navigation_links",
31
+ "breakpoints": true
18
32
  }
19
33
  ]
20
34
  }
package/src/db/schema.ts CHANGED
@@ -103,6 +103,19 @@ export const redirects = sqliteTable("redirects", {
103
103
  createdAt: integer("created_at").notNull(),
104
104
  });
105
105
 
106
+ // =============================================================================
107
+ // Navigation Links
108
+ // =============================================================================
109
+
110
+ export const navigationLinks = sqliteTable("navigation_links", {
111
+ id: integer("id").primaryKey({ autoIncrement: true }),
112
+ label: text("label").notNull(),
113
+ url: text("url").notNull(),
114
+ position: integer("position").notNull().default(0),
115
+ createdAt: integer("created_at").notNull(),
116
+ updatedAt: integer("updated_at").notNull(),
117
+ });
118
+
106
119
  // =============================================================================
107
120
  // Settings (Key-Value)
108
121
  // =============================================================================
@@ -27,8 +27,8 @@ msgstr "← Back to Collections"
27
27
  #. @context: Navigation link
28
28
  #: src/routes/pages/collection.tsx:76
29
29
  #: src/routes/pages/post.tsx:63
30
- msgid "← Back to home"
31
- msgstr "← Back to home"
30
+ #~ msgid "← Back to home"
31
+ #~ msgstr "← Back to home"
32
32
 
33
33
  #. @context: Archive post reply indicator - single
34
34
  #: src/routes/pages/archive.tsx:175
@@ -66,12 +66,15 @@ msgid "Appearance"
66
66
  msgstr "Appearance"
67
67
 
68
68
  #. @context: Archive page title
69
- #. @context: Navigation link to archive page
70
69
  #: src/routes/pages/archive.tsx:102
71
- #: src/routes/pages/home.tsx:40
72
70
  msgid "Archive"
73
71
  msgstr "Archive"
74
72
 
73
+ #. @context: Confirmation dialog when deleting a post from the list
74
+ #: src/theme/components/PostList.tsx:56
75
+ msgid "Are you sure you want to delete this post? This cannot be undone."
76
+ msgstr "Are you sure you want to delete this post? This cannot be undone."
77
+
75
78
  #. @context: Post type badge - article
76
79
  #. @context: Post type label - article
77
80
  #. @context: Post type option
@@ -102,16 +105,18 @@ msgstr "Back"
102
105
  #: src/routes/pages/archive.tsx:209
103
106
  #: src/routes/pages/page.tsx:37
104
107
  #: src/routes/pages/search.tsx:144
105
- msgid "Back to home"
106
- msgstr "Back to home"
108
+ #~ msgid "Back to home"
109
+ #~ msgstr "Back to home"
107
110
 
108
111
  #. @context: Button to cancel and go back
109
112
  #. @context: Button to cancel form
110
113
  #. @context: Button to cancel form
111
114
  #. @context: Button to cancel form
112
115
  #. @context: Button to cancel form
116
+ #. @context: Button to cancel form
113
117
  #: src/routes/dash/collections.tsx:176
114
118
  #: src/routes/dash/collections.tsx:345
119
+ #: src/routes/dash/navigation.tsx:182
115
120
  #: src/routes/dash/redirects.tsx:167
116
121
  #: src/theme/components/PageForm.tsx:161
117
122
  #: src/theme/components/PostForm.tsx:312
@@ -148,7 +153,7 @@ msgid "Color theme"
148
153
  msgstr "Color theme"
149
154
 
150
155
  #. @context: Setup form submit button
151
- #: src/app.tsx:245
156
+ #: src/app.tsx:248
152
157
  msgid "Complete Setup"
153
158
  msgstr "Complete Setup"
154
159
 
@@ -158,7 +163,7 @@ msgid "Confirm New Password"
158
163
  msgstr "Confirm New Password"
159
164
 
160
165
  #. @context: Password reset form field
161
- #: src/app.tsx:487
166
+ #: src/app.tsx:490
162
167
  msgid "Confirm Password"
163
168
  msgstr "Confirm Password"
164
169
 
@@ -181,6 +186,11 @@ msgstr "Copy"
181
186
  msgid "Create Collection"
182
187
  msgstr "Create Collection"
183
188
 
189
+ #. @context: Button to save new navigation link
190
+ #: src/routes/dash/navigation.tsx:176
191
+ msgid "Create Link"
192
+ msgstr "Create Link"
193
+
184
194
  #. @context: Button to create new page
185
195
  #: src/theme/components/PageForm.tsx:155
186
196
  msgid "Create Page"
@@ -192,7 +202,7 @@ msgid "Create Redirect"
192
202
  msgstr "Create Redirect"
193
203
 
194
204
  #. @context: Setup page description
195
- #: src/app.tsx:187
205
+ #: src/app.tsx:190
196
206
  msgid "Create your admin account."
197
207
  msgstr "Create your admin account."
198
208
 
@@ -229,7 +239,9 @@ msgid "Dashboard"
229
239
  msgstr "Dashboard"
230
240
 
231
241
  #. @context: Button to delete item
242
+ #. @context: Button to delete navigation link
232
243
  #. @context: Button to delete redirect
244
+ #: src/routes/dash/navigation.tsx:66
233
245
  #: src/routes/dash/redirects.tsx:60
234
246
  #: src/theme/components/ActionButtons.tsx:80
235
247
  msgid "Delete"
@@ -256,7 +268,7 @@ msgid "Deleting this media will remove it permanently from storage."
256
268
  msgstr "Deleting this media will remove it permanently from storage."
257
269
 
258
270
  #. @context: Hint shown on signin page when demo credentials are pre-filled
259
- #: src/app.tsx:336
271
+ #: src/app.tsx:339
260
272
  msgid "Demo account pre-filled. Just click Sign In."
261
273
  msgstr "Demo account pre-filled. Just click Sign In."
262
274
 
@@ -267,6 +279,11 @@ msgstr "Demo account pre-filled. Just click Sign In."
267
279
  msgid "Description (optional)"
268
280
  msgstr "Description (optional)"
269
281
 
282
+ #. @context: Navigation label help text
283
+ #: src/routes/dash/navigation.tsx:139
284
+ msgid "Display text for the link"
285
+ msgstr "Display text for the link"
286
+
270
287
  #. @context: Close media picker button
271
288
  #: src/theme/components/PostForm.tsx:334
272
289
  msgid "Done"
@@ -294,12 +311,14 @@ msgstr "e.g. The Verge, John Doe"
294
311
  #. @context: Button to edit collection
295
312
  #. @context: Button to edit collection
296
313
  #. @context: Button to edit item
314
+ #. @context: Button to edit navigation link
297
315
  #. @context: Button to edit page
298
316
  #. @context: Button to edit page
299
317
  #. @context: Button to edit post
300
318
  #. @context: Button to edit post
301
319
  #: src/routes/dash/collections.tsx:66
302
320
  #: src/routes/dash/collections.tsx:210
321
+ #: src/routes/dash/navigation.tsx:61
303
322
  #: src/routes/dash/pages.tsx:64
304
323
  #: src/routes/dash/pages.tsx:134
305
324
  #: src/routes/dash/posts.tsx:142
@@ -313,6 +332,11 @@ msgstr "Edit"
313
332
  msgid "Edit Collection"
314
333
  msgstr "Edit Collection"
315
334
 
335
+ #. @context: Page heading
336
+ #: src/routes/dash/navigation.tsx:105
337
+ msgid "Edit Link"
338
+ msgstr "Edit Link"
339
+
316
340
  #. @context: Edit page main heading
317
341
  #: src/routes/dash/pages.tsx:176
318
342
  msgid "Edit Page"
@@ -334,20 +358,18 @@ msgstr "Edit Post"
334
358
 
335
359
  #. @context: Setup/signin form field - email
336
360
  #. @context: Setup/signin form field - email
337
- #: src/app.tsx:216
338
- #: src/app.tsx:350
361
+ #: src/app.tsx:219
362
+ #: src/app.tsx:353
339
363
  msgid "Email"
340
364
  msgstr "Email"
341
365
 
342
366
  #. @context: Password reset page description
343
- #: src/app.tsx:457
367
+ #: src/app.tsx:460
344
368
  msgid "Enter your new password."
345
369
  msgstr "Enter your new password."
346
370
 
347
- #. @context: Post visibility badge
348
371
  #. @context: Post visibility badge - featured
349
372
  #. @context: Post visibility option
350
- #: src/routes/pages/home.tsx:90
351
373
  #: src/theme/components/PostForm.tsx:237
352
374
  #: src/theme/components/VisibilityBadge.tsx:26
353
375
  msgid "Featured"
@@ -395,10 +417,15 @@ msgid "Images are automatically optimized: resized to max 1920px, converted to W
395
417
  msgstr "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
396
418
 
397
419
  #. @context: Password reset error heading
398
- #: src/app.tsx:522
420
+ #: src/app.tsx:525
399
421
  msgid "Invalid or Expired Link"
400
422
  msgstr "Invalid or Expired Link"
401
423
 
424
+ #. @context: Navigation link form field
425
+ #: src/routes/dash/navigation.tsx:126
426
+ msgid "Label"
427
+ msgstr "Label"
428
+
402
429
  #. @context: Settings form field
403
430
  #: src/routes/dash/settings.tsx:171
404
431
  msgid "Language"
@@ -423,8 +450,10 @@ msgstr "Link"
423
450
  msgid "Links"
424
451
  msgstr "Links"
425
452
 
453
+ #. @context: Button to load more posts in timeline
426
454
  #. @context: Pagination button - load more items
427
455
  #: src/theme/components/Pagination.tsx:103
456
+ #: src/theme/components/timeline/TimelineFeed.tsx:43
428
457
  msgid "Load more"
429
458
  msgstr "Load more"
430
459
 
@@ -467,6 +496,13 @@ msgstr "My Collection"
467
496
  msgid "Name"
468
497
  msgstr "Name"
469
498
 
499
+ #. @context: Dashboard heading
500
+ #. @context: Dashboard navigation - navigation links management
501
+ #: src/routes/dash/navigation.tsx:29
502
+ #: src/theme/layouts/DashLayout.tsx:133
503
+ msgid "Navigation"
504
+ msgstr "Navigation"
505
+
470
506
  #. @context: Help text with link
471
507
  #: src/routes/dash/index.tsx:78
472
508
  msgid "Need help? Visit the <0>documentation</0>"
@@ -481,6 +517,15 @@ msgstr "Need help? Visit the <0>documentation</0>"
481
517
  msgid "New Collection"
482
518
  msgstr "New Collection"
483
519
 
520
+ #. @context: Button to create new navigation link
521
+ #. @context: Button to create new navigation link
522
+ #. @context: Page heading
523
+ #: src/routes/dash/navigation.tsx:33
524
+ #: src/routes/dash/navigation.tsx:46
525
+ #: src/routes/dash/navigation.tsx:106
526
+ msgid "New Link"
527
+ msgstr "New Link"
528
+
484
529
  #. @context: Button to create new page
485
530
  #. @context: New page main heading
486
531
  #: src/routes/dash/pages.tsx:37
@@ -490,7 +535,7 @@ msgstr "New Page"
490
535
 
491
536
  #. @context: Password form field
492
537
  #. @context: Password reset form field
493
- #: src/app.tsx:471
538
+ #: src/app.tsx:474
494
539
  #: src/routes/dash/settings.tsx:417
495
540
  msgid "New Password"
496
541
  msgstr "New Password"
@@ -530,6 +575,11 @@ msgstr "No collections yet."
530
575
  msgid "No media uploaded yet."
531
576
  msgstr "No media uploaded yet."
532
577
 
578
+ #. @context: Empty state message
579
+ #: src/routes/dash/navigation.tsx:42
580
+ msgid "No navigation links configured."
581
+ msgstr "No navigation links configured."
582
+
533
583
  #. @context: Empty state message when no pages exist
534
584
  #: src/routes/dash/pages.tsx:46
535
585
  msgid "No pages yet."
@@ -549,7 +599,7 @@ msgstr "No posts in this collection."
549
599
 
550
600
  #. @context: Empty state message on home page
551
601
  #. @context: Empty state message when no posts exist
552
- #: src/routes/pages/home.tsx:54
602
+ #: src/routes/pages/home.tsx:42
553
603
  #: src/theme/components/PostList.tsx:25
554
604
  msgid "No posts yet."
555
605
  msgstr "No posts yet."
@@ -613,8 +663,8 @@ msgstr "Pages"
613
663
 
614
664
  #. @context: Setup/signin form field - password
615
665
  #. @context: Setup/signin form field - password
616
- #: src/app.tsx:231
617
- #: src/app.tsx:359
666
+ #: src/app.tsx:234
667
+ #: src/app.tsx:362
618
668
  msgid "Password"
619
669
  msgstr "Password"
620
670
 
@@ -623,9 +673,14 @@ msgstr "Password"
623
673
  msgid "Path"
624
674
  msgstr "Path"
625
675
 
676
+ #. @context: Navigation URL help text
677
+ #: src/routes/dash/navigation.tsx:161
678
+ msgid "Path (e.g. /archive) or full URL (e.g. https://example.com)"
679
+ msgstr "Path (e.g. /archive) or full URL (e.g. https://example.com)"
680
+
626
681
  #. @context: Link to individual post in thread
627
682
  #. @context: Link to permanent URL of post
628
- #: src/routes/pages/post.tsx:53
683
+ #: src/routes/pages/post.tsx:52
629
684
  #: src/theme/components/ThreadView.tsx:68
630
685
  msgid "Permalink"
631
686
  msgstr "Permalink"
@@ -736,11 +791,16 @@ msgstr "Remove"
736
791
 
737
792
  #. @context: Password reset form submit button
738
793
  #. @context: Password reset page heading
739
- #: src/app.tsx:451
740
- #: src/app.tsx:502
794
+ #: src/app.tsx:454
795
+ #: src/app.tsx:505
741
796
  msgid "Reset Password"
742
797
  msgstr "Reset Password"
743
798
 
799
+ #. @context: Button to save edited navigation link
800
+ #: src/routes/dash/navigation.tsx:172
801
+ msgid "Save Changes"
802
+ msgstr "Save Changes"
803
+
744
804
  #. @context: Button to save profile
745
805
  #: src/routes/dash/settings.tsx:378
746
806
  msgid "Save Profile"
@@ -780,7 +840,7 @@ msgstr "Select Media"
780
840
  #: src/routes/dash/settings.tsx:118
781
841
  #: src/routes/dash/settings.tsx:290
782
842
  #: src/routes/dash/settings.tsx:341
783
- #: src/theme/layouts/DashLayout.tsx:133
843
+ #: src/theme/layouts/DashLayout.tsx:143
784
844
  msgid "Settings"
785
845
  msgstr "Settings"
786
846
 
@@ -789,10 +849,16 @@ msgstr "Settings"
789
849
  #~ msgid "Setup"
790
850
  #~ msgstr "Setup"
791
851
 
852
+ #. @context: Link to show remaining thread replies
853
+ #. placeholder {0}: remainingCount === 1 ? "reply" : "replies"
854
+ #: src/theme/components/timeline/ThreadPreview.tsx:38
855
+ msgid "Show {remainingCount} more {0}"
856
+ msgstr "Show {remainingCount} more {0}"
857
+
792
858
  #. @context: Sign in form submit button
793
859
  #. @context: Sign in page heading
794
- #: src/app.tsx:327
795
- #: src/app.tsx:372
860
+ #: src/app.tsx:330
861
+ #: src/app.tsx:375
796
862
  msgid "Sign In"
797
863
  msgstr "Sign In"
798
864
 
@@ -854,7 +920,7 @@ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
854
920
  msgstr "The URL path for this page. Use lowercase letters, numbers, and hyphens."
855
921
 
856
922
  #. @context: Password reset error description
857
- #: src/app.tsx:530
923
+ #: src/app.tsx:533
858
924
  msgid "This password reset link is invalid or has expired. Please generate a new one."
859
925
  msgstr "This password reset link is invalid or has expired. Please generate a new one."
860
926
 
@@ -914,7 +980,7 @@ msgstr "Unlisted"
914
980
  #. @context: Default title for untitled page
915
981
  #. @context: Default title for untitled post
916
982
  #: src/routes/dash/pages.tsx:91
917
- #: src/theme/components/PostList.tsx:71
983
+ #: src/theme/components/PostList.tsx:78
918
984
  msgid "Untitled"
919
985
  msgstr "Untitled"
920
986
 
@@ -954,7 +1020,9 @@ msgid "Uploading..."
954
1020
  msgstr "Uploading..."
955
1021
 
956
1022
  #. @context: Media detail section - URL
1023
+ #. @context: Navigation link form field
957
1024
  #: src/routes/dash/media.tsx:297
1025
+ #: src/routes/dash/navigation.tsx:148
958
1026
  msgid "URL"
959
1027
  msgstr "URL"
960
1028
 
@@ -987,8 +1055,8 @@ msgstr "View"
987
1055
 
988
1056
  #. @context: Link to view all posts on archive page
989
1057
  #: src/routes/pages/home.tsx:109
990
- msgid "View all posts →"
991
- msgstr "View all posts →"
1058
+ #~ msgid "View all posts →"
1059
+ #~ msgstr "View all posts →"
992
1060
 
993
1061
  #. @context: Dashboard header link to view the public site
994
1062
  #: src/theme/layouts/DashLayout.tsx:53
@@ -1001,7 +1069,7 @@ msgid "Visibility"
1001
1069
  msgstr "Visibility"
1002
1070
 
1003
1071
  #. @context: Setup page welcome heading
1004
- #: src/app.tsx:181
1072
+ #: src/app.tsx:184
1005
1073
  msgid "Welcome to Jant"
1006
1074
  msgstr "Welcome to Jant"
1007
1075
 
@@ -1016,6 +1084,6 @@ msgid "What's this collection about?"
1016
1084
  msgstr "What's this collection about?"
1017
1085
 
1018
1086
  #. @context: Setup form field - user name
1019
- #: src/app.tsx:201
1087
+ #: src/app.tsx:204
1020
1088
  msgid "Your Name"
1021
1089
  msgstr "Your Name"
@@ -1 +1 @@
1
- /*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+7Wr2a\":[\"Edit: \",[\"title\"]],\"+MACwa\":[\"No collections yet.\"],\"+owNNn\":[\"Posts\"],\"+zy2Nq\":[\"Type\"],\"/0D1Xp\":[\"Edit Collection\"],\"/Rj5P4\":[\"Your Name\"],\"07Epll\":[\"This will theme both your site and your dashboard. All color themes support dark mode.\"],\"0JkyS7\":[\"Create your first page\"],\"0a6MpL\":[\"New Redirect\"],\"1CU1Td\":[\"URL-safe identifier (lowercase, numbers, hyphens)\"],\"1DBGsz\":[\"Notes\"],\"1o+wgo\":[\"e.g. The Verge, John Doe\"],\"2N0qpv\":[\"Post title...\"],\"2fUwEY\":[\"Select Media\"],\"2q/Q7x\":[\"Visibility\"],\"2rJGtU\":[\"Page title...\"],\"3Yvsaz\":[\"302 (Temporary)\"],\"4/SFQS\":[\"View Site\"],\"40TVQj\":[\"Custom Path (optional)\"],\"4KzVT6\":[\"Delete Page\"],\"4b3oEV\":[\"Content\"],\"4mDPGp\":[\"The URL path for this page. Use lowercase letters, numbers, and hyphens.\"],\"6WdDG7\":[\"Page\"],\"6YtxFj\":[\"Name\"],\"7G4SBz\":[\"Page content (Markdown supported)...\"],\"7Mk+/h\":[\"Update Collection\"],\"7Q1KKN\":[\"From Path\"],\"7aECQB\":[\"Invalid or Expired Link\"],\"7nGhhM\":[\"What's on your mind?\"],\"7p5kLi\":[\"Dashboard\"],\"7vhWI8\":[\"New Password\"],\"8ZsakT\":[\"Password\"],\"90Luob\":[[\"count\"],\" replies\"],\"A1taO8\":[\"Search\"],\"AeXO77\":[\"Account\"],\"AyHO4m\":[\"What's this collection about?\"],\"B373X+\":[\"Edit Post\"],\"B495Gs\":[\"Archive\"],\"BjF0Jv\":[\"Lowercase letters, numbers, and hyphens only\"],\"D9Oea+\":[\"Permalink\"],\"DCKkhU\":[\"Current Password\"],\"DHhJ7s\":[\"Previous\"],\"DPfwMq\":[\"Done\"],\"DoJzLz\":[\"Collections\"],\"E80cJw\":[\"Deleting this media will remove it permanently from storage.\"],\"EEYbdt\":[\"Publish\"],\"EGwzOK\":[\"Complete Setup\"],\"EkH9pt\":[\"Update\"],\"FGrimz\":[\"New Post\"],\"FkMol5\":[\"Featured\"],\"Fxf4jq\":[\"Description (optional)\"],\"GA5A5H\":[\"Delete Collection\"],\"GX2VMa\":[\"Create your admin account.\"],\"GbVAnd\":[\"This password reset link is invalid or has expired. Please generate a new one.\"],\"GorKul\":[\"Welcome to Jant\"],\"GrZ6fH\":[\"New Page\"],\"GxkJXS\":[\"Uploading...\"],\"HfyyXl\":[\"My Blog\"],\"HiETwV\":[\"Quiet (normal)\"],\"Hzi9AA\":[\"No posts found.\"],\"I6gXOa\":[\"Path\"],\"I8hDlV\":[\"At least 1 image required for image posts.\"],\"IagCbF\":[\"URL\"],\"J4FNfC\":[\"No posts in this collection.\"],\"JIBC/T\":[\"Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB.\"],\"Jed1wB\":[\"Need help? Visit the <0>documentation</0>\"],\"JiP4aa\":[\"Published pages are accessible via their path. Drafts are not visible.\"],\"K9NcLu\":[\"Use this URL to embed the media in your posts.\"],\"KbS2K9\":[\"Reset Password\"],\"KiJn9B\":[\"Note\"],\"L85WcV\":[\"Slug\"],\"LkvLQe\":[\"No pages yet.\"],\"M1RvTd\":[\"Click image to view full size\"],\"M8kJqa\":[\"Drafts\"],\"M9xgHy\":[\"Redirects\"],\"MHrjPM\":[\"Title\"],\"MWBOxm\":[\"Collections (optional)\"],\"MZbQHL\":[\"No results found.\"],\"Mhf/H/\":[\"Create Redirect\"],\"MqghUt\":[\"Search posts...\"],\"N40H+G\":[\"All\"],\"O3oNi5\":[\"Email\"],\"OCNZaU\":[\"The path to redirect from\"],\"ODiSoW\":[\"No posts yet.\"],\"ONWvwQ\":[\"Upload\"],\"Pbm2/N\":[\"Create Collection\"],\"RDjuBN\":[\"Setup\"],\"Rj01Fz\":[\"Links\"],\"RwGhWy\":[\"Thread with \",[\"count\"],\" posts\"],\"SJmfuf\":[\"Site Name\"],\"ST+lN2\":[\"No media uploaded yet.\"],\"Tt5T6+\":[\"Articles\"],\"TxE+Mj\":[\"1 reply\"],\"Tz0i8g\":[\"Settings\"],\"U5v6Gh\":[\"Edit Page\"],\"UDMjsP\":[\"Quick Actions\"],\"UGT5vp\":[\"Save Settings\"],\"VUSy8D\":[\"Search failed. Please try again.\"],\"VhMDMg\":[\"Change Password\"],\"WDcQq9\":[\"Unlisted\"],\"Weq9zb\":[\"General\"],\"WmZ/rP\":[\"To Path\"],\"Y+7JGK\":[\"Create Page\"],\"Z3FXyt\":[\"Loading...\"],\"ZQKLI1\":[\"Danger Zone\"],\"ZhhOwV\":[\"Quote\"],\"aAIQg2\":[\"Appearance\"],\"an5hVd\":[\"Images\"],\"b+/jO6\":[\"301 (Permanent)\"],\"bHYIks\":[\"Sign Out\"],\"biOepV\":[\"← Back to home\"],\"cnGeoo\":[\"Delete\"],\"dEgA5A\":[\"Cancel\"],\"e6Jr7Q\":[\"← Back to Collections\"],\"ePK91l\":[\"Edit\"],\"eWLklq\":[\"Quotes\"],\"eneWvv\":[\"Draft\"],\"er8+x7\":[\"Demo account pre-filled. Just click Sign In.\"],\"f6e0Ry\":[\"Article\"],\"fG7BxZ\":[\"Upload images via the API: POST /api/upload with a file form field.\"],\"fttd2R\":[\"My Collection\"],\"hG89Ed\":[\"Image\"],\"hWOZIv\":[\"Enter your new password.\"],\"hXzOVo\":[\"Next\"],\"he3ygx\":[\"Copy\"],\"iH8pgl\":[\"Back\"],\"ig4hg2\":[\"Let's set up your site.\"],\"jpctdh\":[\"View\"],\"k1ifdL\":[\"Processing...\"],\"mTOYla\":[\"View all posts →\"],\"n1ekoW\":[\"Sign In\"],\"oJFOZk\":[\"Source Name (optional)\"],\"oYPBa0\":[\"Update Page\"],\"p2/GCq\":[\"Confirm Password\"],\"pRhYH2\":[\"Posts in Collection (\",[\"count\"],\")\"],\"pZq3aX\":[\"Upload failed. Please try again.\"],\"qMyM2u\":[\"Source URL (optional)\"],\"qiXmlF\":[\"Add Media\"],\"r1MpXi\":[\"Quiet\"],\"rFmBG3\":[\"Color theme\"],\"rdUucN\":[\"Preview\"],\"rzNUSl\":[\"Thread with 1 post\"],\"sGajR7\":[\"Thread start\"],\"ssqvZi\":[\"Save Profile\"],\"t/YqKh\":[\"Remove\"],\"tfrt7B\":[\"No redirects configured.\"],\"tiq7kl\":[\"Page \",[\"page\"]],\"u2f7vd\":[\"Site Description\"],\"u3wRF+\":[\"Published\"],\"u6Hp4N\":[\"Markdown\"],\"uAQUqI\":[\"Status\"],\"vERlcd\":[\"Profile\"],\"vXIe7J\":[\"Language\"],\"vzU4k9\":[\"New Collection\"],\"wEF6Ix\":[\"The destination path or URL\"],\"wK4OTM\":[\"Title (optional)\"],\"wM5UXj\":[\"Delete Media\"],\"wRR604\":[\"Pages\"],\"wja8aL\":[\"Untitled\"],\"x+doid\":[\"Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped.\"],\"x0mzE0\":[\"Create your first post\"],\"x4RuFo\":[\"Back to home\"],\"xYilR2\":[\"Media\"],\"y28hnO\":[\"Post\"],\"yQ2kGp\":[\"Load more\"],\"yjkELF\":[\"Confirm New Password\"],\"yzF66j\":[\"Link\"],\"z8ajIE\":[\"Found 1 result\"],\"zH6KqE\":[\"Found \",[\"count\"],\" results\"]}")as Messages;
1
+ /*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+7Wr2a\":[\"Edit: \",[\"title\"]],\"+MACwa\":[\"No collections yet.\"],\"+bHzpy\":[\"Display text for the link\"],\"+owNNn\":[\"Posts\"],\"+zy2Nq\":[\"Type\"],\"/0D1Xp\":[\"Edit Collection\"],\"/Rj5P4\":[\"Your Name\"],\"07Epll\":[\"This will theme both your site and your dashboard. All color themes support dark mode.\"],\"0JkyS7\":[\"Create your first page\"],\"0a6MpL\":[\"New Redirect\"],\"1CU1Td\":[\"URL-safe identifier (lowercase, numbers, hyphens)\"],\"1DBGsz\":[\"Notes\"],\"1o+wgo\":[\"e.g. The Verge, John Doe\"],\"2N0qpv\":[\"Post title...\"],\"2fUwEY\":[\"Select Media\"],\"2q/Q7x\":[\"Visibility\"],\"2rJGtU\":[\"Page title...\"],\"3Yvsaz\":[\"302 (Temporary)\"],\"4/SFQS\":[\"View Site\"],\"40TVQj\":[\"Custom Path (optional)\"],\"4KzVT6\":[\"Delete Page\"],\"4b3oEV\":[\"Content\"],\"4mDPGp\":[\"The URL path for this page. Use lowercase letters, numbers, and hyphens.\"],\"6WdDG7\":[\"Page\"],\"6YtxFj\":[\"Name\"],\"7G4SBz\":[\"Page content (Markdown supported)...\"],\"7Mk+/h\":[\"Update Collection\"],\"7Q1KKN\":[\"From Path\"],\"7aECQB\":[\"Invalid or Expired Link\"],\"7nGhhM\":[\"What's on your mind?\"],\"7p5kLi\":[\"Dashboard\"],\"7vhWI8\":[\"New Password\"],\"87a/t/\":[\"Label\"],\"8ZsakT\":[\"Password\"],\"90Luob\":[[\"count\"],\" replies\"],\"A1taO8\":[\"Search\"],\"AeXO77\":[\"Account\"],\"AyHO4m\":[\"What's this collection about?\"],\"B373X+\":[\"Edit Post\"],\"B495Gs\":[\"Archive\"],\"BjF0Jv\":[\"Lowercase letters, numbers, and hyphens only\"],\"D9Oea+\":[\"Permalink\"],\"DCKkhU\":[\"Current Password\"],\"DHhJ7s\":[\"Previous\"],\"DPfwMq\":[\"Done\"],\"DoJzLz\":[\"Collections\"],\"E80cJw\":[\"Deleting this media will remove it permanently from storage.\"],\"EEYbdt\":[\"Publish\"],\"EGwzOK\":[\"Complete Setup\"],\"EkH9pt\":[\"Update\"],\"FGrimz\":[\"New Post\"],\"FkMol5\":[\"Featured\"],\"Fxf4jq\":[\"Description (optional)\"],\"GA5A5H\":[\"Delete Collection\"],\"GX2VMa\":[\"Create your admin account.\"],\"GbVAnd\":[\"This password reset link is invalid or has expired. Please generate a new one.\"],\"GorKul\":[\"Welcome to Jant\"],\"GrZ6fH\":[\"New Page\"],\"GxkJXS\":[\"Uploading...\"],\"HfyyXl\":[\"My Blog\"],\"HiETwV\":[\"Quiet (normal)\"],\"Hzi9AA\":[\"No posts found.\"],\"I6gXOa\":[\"Path\"],\"I8hDlV\":[\"At least 1 image required for image posts.\"],\"IUwGEM\":[\"Save Changes\"],\"IagCbF\":[\"URL\"],\"J4FNfC\":[\"No posts in this collection.\"],\"JIBC/T\":[\"Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB.\"],\"Jed1wB\":[\"Need help? Visit the <0>documentation</0>\"],\"JiP4aa\":[\"Published pages are accessible via their path. Drafts are not visible.\"],\"K9NcLu\":[\"Use this URL to embed the media in your posts.\"],\"KbS2K9\":[\"Reset Password\"],\"KiJn9B\":[\"Note\"],\"KmGXnO\":[\"Are you sure you want to delete this post? This cannot be undone.\"],\"L85WcV\":[\"Slug\"],\"LkvLQe\":[\"No pages yet.\"],\"M1RvTd\":[\"Click image to view full size\"],\"M8kJqa\":[\"Drafts\"],\"M9xgHy\":[\"Redirects\"],\"MHrjPM\":[\"Title\"],\"MWBOxm\":[\"Collections (optional)\"],\"MZbQHL\":[\"No results found.\"],\"Mhf/H/\":[\"Create Redirect\"],\"MqghUt\":[\"Search posts...\"],\"N40H+G\":[\"All\"],\"O3oNi5\":[\"Email\"],\"OCNZaU\":[\"The path to redirect from\"],\"ODiSoW\":[\"No posts yet.\"],\"ONWvwQ\":[\"Upload\"],\"Pbm2/N\":[\"Create Collection\"],\"QEbNBb\":[\"Path (e.g. /archive) or full URL (e.g. https://example.com)\"],\"RDjuBN\":[\"Setup\"],\"Rj01Fz\":[\"Links\"],\"RwGhWy\":[\"Thread with \",[\"count\"],\" posts\"],\"SJmfuf\":[\"Site Name\"],\"ST+lN2\":[\"No media uploaded yet.\"],\"Tt5T6+\":[\"Articles\"],\"TxE+Mj\":[\"1 reply\"],\"Tz0i8g\":[\"Settings\"],\"U5v6Gh\":[\"Edit Page\"],\"UDMjsP\":[\"Quick Actions\"],\"UGT5vp\":[\"Save Settings\"],\"UxKoFf\":[\"Navigation\"],\"VUSy8D\":[\"Search failed. Please try again.\"],\"VhMDMg\":[\"Change Password\"],\"WDcQq9\":[\"Unlisted\"],\"Weq9zb\":[\"General\"],\"WmZ/rP\":[\"To Path\"],\"Y+7JGK\":[\"Create Page\"],\"Z3FXyt\":[\"Loading...\"],\"ZQKLI1\":[\"Danger Zone\"],\"ZhhOwV\":[\"Quote\"],\"aAIQg2\":[\"Appearance\"],\"aaGV/9\":[\"New Link\"],\"an5hVd\":[\"Images\"],\"b+/jO6\":[\"301 (Permanent)\"],\"bHYIks\":[\"Sign Out\"],\"biOepV\":[\"← Back to home\"],\"cnGeoo\":[\"Delete\"],\"dEgA5A\":[\"Cancel\"],\"e6Jr7Q\":[\"← Back to Collections\"],\"ePK91l\":[\"Edit\"],\"eWLklq\":[\"Quotes\"],\"eneWvv\":[\"Draft\"],\"er8+x7\":[\"Demo account pre-filled. Just click Sign In.\"],\"f6e0Ry\":[\"Article\"],\"fG7BxZ\":[\"Upload images via the API: POST /api/upload with a file form field.\"],\"fttd2R\":[\"My Collection\"],\"gDx5MG\":[\"Edit Link\"],\"hG89Ed\":[\"Image\"],\"hWOZIv\":[\"Enter your new password.\"],\"hXzOVo\":[\"Next\"],\"he3ygx\":[\"Copy\"],\"iH8pgl\":[\"Back\"],\"ig4hg2\":[\"Let's set up your site.\"],\"jpctdh\":[\"View\"],\"k1ifdL\":[\"Processing...\"],\"kd7eBB\":[\"Create Link\"],\"mTOYla\":[\"View all posts →\"],\"n1ekoW\":[\"Sign In\"],\"oJFOZk\":[\"Source Name (optional)\"],\"oYPBa0\":[\"Update Page\"],\"p2/GCq\":[\"Confirm Password\"],\"pRhYH2\":[\"Posts in Collection (\",[\"count\"],\")\"],\"pZq3aX\":[\"Upload failed. Please try again.\"],\"qMyM2u\":[\"Source URL (optional)\"],\"qiXmlF\":[\"Add Media\"],\"r1MpXi\":[\"Quiet\"],\"rFmBG3\":[\"Color theme\"],\"rdUucN\":[\"Preview\"],\"rzNUSl\":[\"Thread with 1 post\"],\"sGajR7\":[\"Thread start\"],\"smzF8S\":[\"Show \",[\"remainingCount\"],\" more \",[\"0\"]],\"ssqvZi\":[\"Save Profile\"],\"t/YqKh\":[\"Remove\"],\"tfrt7B\":[\"No redirects configured.\"],\"tiq7kl\":[\"Page \",[\"page\"]],\"u2f7vd\":[\"Site Description\"],\"u3wRF+\":[\"Published\"],\"u6Hp4N\":[\"Markdown\"],\"uAQUqI\":[\"Status\"],\"vERlcd\":[\"Profile\"],\"vXIe7J\":[\"Language\"],\"vzU4k9\":[\"New Collection\"],\"wEF6Ix\":[\"The destination path or URL\"],\"wK4OTM\":[\"Title (optional)\"],\"wM5UXj\":[\"Delete Media\"],\"wRR604\":[\"Pages\"],\"wdGjkd\":[\"No navigation links configured.\"],\"wja8aL\":[\"Untitled\"],\"x+doid\":[\"Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped.\"],\"x0mzE0\":[\"Create your first post\"],\"x4RuFo\":[\"Back to home\"],\"xYilR2\":[\"Media\"],\"y28hnO\":[\"Post\"],\"yQ2kGp\":[\"Load more\"],\"yjkELF\":[\"Confirm New Password\"],\"yzF66j\":[\"Link\"],\"z8ajIE\":[\"Found 1 result\"],\"zH6KqE\":[\"Found \",[\"count\"],\" results\"]}")as Messages;