@jant/core 0.3.6 → 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 (264) hide show
  1. package/dist/app.js +11 -21
  2. package/dist/client.js +1 -0
  3. package/dist/db/schema.js +15 -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/index.js +1 -1
  8. package/dist/lib/image.js +3 -3
  9. package/dist/lib/media-helpers.js +43 -0
  10. package/dist/lib/nav-reorder.js +27 -0
  11. package/dist/lib/navigation.js +35 -0
  12. package/dist/lib/schemas.js +32 -2
  13. package/dist/lib/sse.js +7 -8
  14. package/dist/lib/theme-components.js +49 -0
  15. package/dist/routes/api/posts.js +101 -5
  16. package/dist/routes/api/timeline.js +115 -0
  17. package/dist/routes/api/upload.js +9 -5
  18. package/dist/routes/dash/media.js +38 -0
  19. package/dist/routes/dash/navigation.js +274 -0
  20. package/dist/routes/dash/posts.js +45 -6
  21. package/dist/routes/feed/rss.js +10 -1
  22. package/dist/routes/pages/archive.js +14 -27
  23. package/dist/routes/pages/collection.js +10 -19
  24. package/dist/routes/pages/home.js +88 -98
  25. package/dist/routes/pages/page.js +19 -38
  26. package/dist/routes/pages/post.js +61 -48
  27. package/dist/routes/pages/search.js +13 -26
  28. package/dist/services/collection.js +13 -0
  29. package/dist/services/index.js +3 -1
  30. package/dist/services/media.js +55 -2
  31. package/dist/services/navigation.js +115 -0
  32. package/dist/services/post.js +26 -1
  33. package/dist/theme/components/MediaGallery.js +107 -0
  34. package/dist/theme/components/PostForm.js +158 -2
  35. package/dist/theme/components/PostList.js +5 -0
  36. package/dist/theme/components/index.js +3 -0
  37. package/dist/theme/components/timeline/ArticleCard.js +50 -0
  38. package/dist/theme/components/timeline/ImageCard.js +86 -0
  39. package/dist/theme/components/timeline/LinkCard.js +62 -0
  40. package/dist/theme/components/timeline/NoteCard.js +37 -0
  41. package/dist/theme/components/timeline/QuoteCard.js +51 -0
  42. package/dist/theme/components/timeline/ThreadPreview.js +52 -0
  43. package/dist/theme/components/timeline/TimelineFeed.js +43 -0
  44. package/dist/theme/components/timeline/TimelineItem.js +25 -0
  45. package/dist/theme/components/timeline/index.js +8 -0
  46. package/dist/theme/layouts/DashLayout.js +8 -0
  47. package/dist/theme/layouts/SiteLayout.js +160 -0
  48. package/dist/theme/layouts/index.js +1 -0
  49. package/dist/types/sortablejs.d.js +5 -0
  50. package/dist/types.js +27 -0
  51. package/package.json +3 -2
  52. package/src/__tests__/helpers/app.ts +6 -1
  53. package/src/__tests__/helpers/db.ts +20 -0
  54. package/src/app.tsx +11 -25
  55. package/src/client.ts +1 -0
  56. package/src/db/migrations/0002_add_media_attachments.sql +3 -0
  57. package/src/db/migrations/0003_add_navigation_links.sql +8 -0
  58. package/src/db/migrations/meta/0003_snapshot.json +821 -0
  59. package/src/db/migrations/meta/_journal.json +14 -0
  60. package/src/db/schema.ts +15 -0
  61. package/src/i18n/locales/en.po +170 -58
  62. package/src/i18n/locales/en.ts +1 -1
  63. package/src/i18n/locales/zh-Hans.po +162 -71
  64. package/src/i18n/locales/zh-Hans.ts +1 -1
  65. package/src/i18n/locales/zh-Hant.po +162 -71
  66. package/src/i18n/locales/zh-Hant.ts +1 -1
  67. package/src/index.ts +13 -1
  68. package/src/lib/__tests__/schemas.test.ts +89 -1
  69. package/src/lib/__tests__/sse.test.ts +13 -1
  70. package/src/lib/__tests__/theme-components.test.ts +107 -0
  71. package/src/lib/image.ts +3 -3
  72. package/src/lib/media-helpers.ts +54 -0
  73. package/src/lib/nav-reorder.ts +26 -0
  74. package/src/lib/navigation.ts +46 -0
  75. package/src/lib/schemas.ts +47 -1
  76. package/src/lib/sse.ts +10 -11
  77. package/src/lib/theme-components.ts +76 -0
  78. package/src/routes/api/__tests__/posts.test.ts +239 -0
  79. package/src/routes/api/__tests__/timeline.test.ts +242 -0
  80. package/src/routes/api/posts.ts +134 -5
  81. package/src/routes/api/timeline.tsx +145 -0
  82. package/src/routes/api/upload.ts +9 -5
  83. package/src/routes/dash/media.tsx +50 -0
  84. package/src/routes/dash/navigation.tsx +306 -0
  85. package/src/routes/dash/posts.tsx +79 -7
  86. package/src/routes/feed/rss.ts +14 -1
  87. package/src/routes/pages/archive.tsx +15 -23
  88. package/src/routes/pages/collection.tsx +8 -15
  89. package/src/routes/pages/home.tsx +121 -88
  90. package/src/routes/pages/page.tsx +17 -30
  91. package/src/routes/pages/post.tsx +64 -40
  92. package/src/routes/pages/search.tsx +18 -22
  93. package/src/services/__tests__/collection.test.ts +102 -0
  94. package/src/services/__tests__/media.test.ts +282 -7
  95. package/src/services/__tests__/navigation.test.ts +213 -0
  96. package/src/services/__tests__/post-timeline.test.ts +220 -0
  97. package/src/services/collection.ts +19 -0
  98. package/src/services/index.ts +7 -0
  99. package/src/services/media.ts +78 -2
  100. package/src/services/navigation.ts +165 -0
  101. package/src/services/post.ts +48 -1
  102. package/src/styles/components.css +59 -0
  103. package/src/theme/components/MediaGallery.tsx +128 -0
  104. package/src/theme/components/PostForm.tsx +170 -2
  105. package/src/theme/components/PostList.tsx +7 -0
  106. package/src/theme/components/index.ts +13 -0
  107. package/src/theme/components/timeline/ArticleCard.tsx +57 -0
  108. package/src/theme/components/timeline/ImageCard.tsx +80 -0
  109. package/src/theme/components/timeline/LinkCard.tsx +66 -0
  110. package/src/theme/components/timeline/NoteCard.tsx +41 -0
  111. package/src/theme/components/timeline/QuoteCard.tsx +55 -0
  112. package/src/theme/components/timeline/ThreadPreview.tsx +49 -0
  113. package/src/theme/components/timeline/TimelineFeed.tsx +52 -0
  114. package/src/theme/components/timeline/TimelineItem.tsx +39 -0
  115. package/src/theme/components/timeline/index.ts +8 -0
  116. package/src/theme/layouts/DashLayout.tsx +10 -0
  117. package/src/theme/layouts/SiteLayout.tsx +184 -0
  118. package/src/theme/layouts/index.ts +1 -0
  119. package/src/types/sortablejs.d.ts +23 -0
  120. package/src/types.ts +97 -0
  121. package/dist/app.d.ts +0 -38
  122. package/dist/app.d.ts.map +0 -1
  123. package/dist/auth.d.ts +0 -25
  124. package/dist/auth.d.ts.map +0 -1
  125. package/dist/db/index.d.ts +0 -10
  126. package/dist/db/index.d.ts.map +0 -1
  127. package/dist/db/schema.d.ts +0 -1507
  128. package/dist/db/schema.d.ts.map +0 -1
  129. package/dist/i18n/Trans.d.ts +0 -25
  130. package/dist/i18n/Trans.d.ts.map +0 -1
  131. package/dist/i18n/context.d.ts +0 -69
  132. package/dist/i18n/context.d.ts.map +0 -1
  133. package/dist/i18n/detect.d.ts +0 -20
  134. package/dist/i18n/detect.d.ts.map +0 -1
  135. package/dist/i18n/i18n.d.ts +0 -32
  136. package/dist/i18n/i18n.d.ts.map +0 -1
  137. package/dist/i18n/index.d.ts +0 -41
  138. package/dist/i18n/index.d.ts.map +0 -1
  139. package/dist/i18n/locales/en.d.ts +0 -3
  140. package/dist/i18n/locales/en.d.ts.map +0 -1
  141. package/dist/i18n/locales/zh-Hans.d.ts +0 -3
  142. package/dist/i18n/locales/zh-Hans.d.ts.map +0 -1
  143. package/dist/i18n/locales/zh-Hant.d.ts +0 -3
  144. package/dist/i18n/locales/zh-Hant.d.ts.map +0 -1
  145. package/dist/i18n/locales.d.ts +0 -11
  146. package/dist/i18n/locales.d.ts.map +0 -1
  147. package/dist/i18n/middleware.d.ts +0 -21
  148. package/dist/i18n/middleware.d.ts.map +0 -1
  149. package/dist/index.d.ts +0 -16
  150. package/dist/index.d.ts.map +0 -1
  151. package/dist/lib/config.d.ts +0 -83
  152. package/dist/lib/config.d.ts.map +0 -1
  153. package/dist/lib/constants.d.ts +0 -37
  154. package/dist/lib/constants.d.ts.map +0 -1
  155. package/dist/lib/image.d.ts +0 -73
  156. package/dist/lib/image.d.ts.map +0 -1
  157. package/dist/lib/index.d.ts +0 -9
  158. package/dist/lib/index.d.ts.map +0 -1
  159. package/dist/lib/markdown.d.ts +0 -60
  160. package/dist/lib/markdown.d.ts.map +0 -1
  161. package/dist/lib/schemas.d.ts +0 -113
  162. package/dist/lib/schemas.d.ts.map +0 -1
  163. package/dist/lib/sqid.d.ts +0 -60
  164. package/dist/lib/sqid.d.ts.map +0 -1
  165. package/dist/lib/sse.d.ts +0 -192
  166. package/dist/lib/sse.d.ts.map +0 -1
  167. package/dist/lib/theme.d.ts +0 -44
  168. package/dist/lib/theme.d.ts.map +0 -1
  169. package/dist/lib/time.d.ts +0 -90
  170. package/dist/lib/time.d.ts.map +0 -1
  171. package/dist/lib/url.d.ts +0 -82
  172. package/dist/lib/url.d.ts.map +0 -1
  173. package/dist/middleware/auth.d.ts +0 -24
  174. package/dist/middleware/auth.d.ts.map +0 -1
  175. package/dist/middleware/onboarding.d.ts +0 -26
  176. package/dist/middleware/onboarding.d.ts.map +0 -1
  177. package/dist/routes/api/posts.d.ts +0 -13
  178. package/dist/routes/api/posts.d.ts.map +0 -1
  179. package/dist/routes/api/search.d.ts +0 -13
  180. package/dist/routes/api/search.d.ts.map +0 -1
  181. package/dist/routes/api/upload.d.ts +0 -16
  182. package/dist/routes/api/upload.d.ts.map +0 -1
  183. package/dist/routes/dash/collections.d.ts +0 -13
  184. package/dist/routes/dash/collections.d.ts.map +0 -1
  185. package/dist/routes/dash/index.d.ts +0 -15
  186. package/dist/routes/dash/index.d.ts.map +0 -1
  187. package/dist/routes/dash/media.d.ts +0 -16
  188. package/dist/routes/dash/media.d.ts.map +0 -1
  189. package/dist/routes/dash/pages.d.ts +0 -15
  190. package/dist/routes/dash/pages.d.ts.map +0 -1
  191. package/dist/routes/dash/posts.d.ts +0 -13
  192. package/dist/routes/dash/posts.d.ts.map +0 -1
  193. package/dist/routes/dash/redirects.d.ts +0 -13
  194. package/dist/routes/dash/redirects.d.ts.map +0 -1
  195. package/dist/routes/dash/settings.d.ts +0 -15
  196. package/dist/routes/dash/settings.d.ts.map +0 -1
  197. package/dist/routes/feed/rss.d.ts +0 -13
  198. package/dist/routes/feed/rss.d.ts.map +0 -1
  199. package/dist/routes/feed/sitemap.d.ts +0 -13
  200. package/dist/routes/feed/sitemap.d.ts.map +0 -1
  201. package/dist/routes/pages/archive.d.ts +0 -15
  202. package/dist/routes/pages/archive.d.ts.map +0 -1
  203. package/dist/routes/pages/collection.d.ts +0 -13
  204. package/dist/routes/pages/collection.d.ts.map +0 -1
  205. package/dist/routes/pages/home.d.ts +0 -13
  206. package/dist/routes/pages/home.d.ts.map +0 -1
  207. package/dist/routes/pages/page.d.ts +0 -15
  208. package/dist/routes/pages/page.d.ts.map +0 -1
  209. package/dist/routes/pages/post.d.ts +0 -13
  210. package/dist/routes/pages/post.d.ts.map +0 -1
  211. package/dist/routes/pages/search.d.ts +0 -13
  212. package/dist/routes/pages/search.d.ts.map +0 -1
  213. package/dist/services/collection.d.ts +0 -31
  214. package/dist/services/collection.d.ts.map +0 -1
  215. package/dist/services/index.d.ts +0 -28
  216. package/dist/services/index.d.ts.map +0 -1
  217. package/dist/services/media.d.ts +0 -27
  218. package/dist/services/media.d.ts.map +0 -1
  219. package/dist/services/post.d.ts +0 -31
  220. package/dist/services/post.d.ts.map +0 -1
  221. package/dist/services/redirect.d.ts +0 -15
  222. package/dist/services/redirect.d.ts.map +0 -1
  223. package/dist/services/search.d.ts +0 -26
  224. package/dist/services/search.d.ts.map +0 -1
  225. package/dist/services/settings.d.ts +0 -18
  226. package/dist/services/settings.d.ts.map +0 -1
  227. package/dist/theme/color-themes.d.ts +0 -30
  228. package/dist/theme/color-themes.d.ts.map +0 -1
  229. package/dist/theme/components/ActionButtons.d.ts +0 -43
  230. package/dist/theme/components/ActionButtons.d.ts.map +0 -1
  231. package/dist/theme/components/CrudPageHeader.d.ts +0 -23
  232. package/dist/theme/components/CrudPageHeader.d.ts.map +0 -1
  233. package/dist/theme/components/DangerZone.d.ts +0 -36
  234. package/dist/theme/components/DangerZone.d.ts.map +0 -1
  235. package/dist/theme/components/EmptyState.d.ts +0 -27
  236. package/dist/theme/components/EmptyState.d.ts.map +0 -1
  237. package/dist/theme/components/ListItemRow.d.ts +0 -15
  238. package/dist/theme/components/ListItemRow.d.ts.map +0 -1
  239. package/dist/theme/components/PageForm.d.ts +0 -14
  240. package/dist/theme/components/PageForm.d.ts.map +0 -1
  241. package/dist/theme/components/Pagination.d.ts +0 -46
  242. package/dist/theme/components/Pagination.d.ts.map +0 -1
  243. package/dist/theme/components/PostForm.d.ts +0 -11
  244. package/dist/theme/components/PostForm.d.ts.map +0 -1
  245. package/dist/theme/components/PostList.d.ts +0 -10
  246. package/dist/theme/components/PostList.d.ts.map +0 -1
  247. package/dist/theme/components/ThreadView.d.ts +0 -15
  248. package/dist/theme/components/ThreadView.d.ts.map +0 -1
  249. package/dist/theme/components/TypeBadge.d.ts +0 -12
  250. package/dist/theme/components/TypeBadge.d.ts.map +0 -1
  251. package/dist/theme/components/VisibilityBadge.d.ts +0 -12
  252. package/dist/theme/components/VisibilityBadge.d.ts.map +0 -1
  253. package/dist/theme/components/index.d.ts +0 -13
  254. package/dist/theme/components/index.d.ts.map +0 -1
  255. package/dist/theme/index.d.ts +0 -21
  256. package/dist/theme/index.d.ts.map +0 -1
  257. package/dist/theme/layouts/BaseLayout.d.ts +0 -23
  258. package/dist/theme/layouts/BaseLayout.d.ts.map +0 -1
  259. package/dist/theme/layouts/DashLayout.d.ts +0 -17
  260. package/dist/theme/layouts/DashLayout.d.ts.map +0 -1
  261. package/dist/theme/layouts/index.d.ts +0 -3
  262. package/dist/theme/layouts/index.d.ts.map +0 -1
  263. package/dist/types.d.ts +0 -213
  264. 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
@@ -55,6 +55,8 @@ export const media = sqliteTable("media", {
55
55
  width: integer("width"),
56
56
  height: integer("height"),
57
57
  alt: text("alt"),
58
+ position: integer("position").notNull().default(0),
59
+ blurhash: text("blurhash"),
58
60
  createdAt: integer("created_at").notNull(),
59
61
  });
60
62
 
@@ -101,6 +103,19 @@ export const redirects = sqliteTable("redirects", {
101
103
  createdAt: integer("created_at").notNull(),
102
104
  });
103
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
+
104
119
  // =============================================================================
105
120
  // Settings (Key-Value)
106
121
  // =============================================================================
@@ -26,9 +26,9 @@ msgstr "← Back to Collections"
26
26
  #. @context: Navigation link
27
27
  #. @context: Navigation link
28
28
  #: src/routes/pages/collection.tsx:76
29
- #: src/routes/pages/post.tsx:51
30
- msgid "← Back to home"
31
- msgstr "← Back to home"
29
+ #: src/routes/pages/post.tsx:63
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
@@ -50,6 +50,11 @@ msgstr "302 (Temporary)"
50
50
  msgid "Account"
51
51
  msgstr "Account"
52
52
 
53
+ #. @context: Button to open media picker
54
+ #: src/theme/components/PostForm.tsx:178
55
+ msgid "Add Media"
56
+ msgstr "Add Media"
57
+
53
58
  #. @context: Archive filter - all types
54
59
  #: src/routes/pages/archive.tsx:115
55
60
  msgid "All"
@@ -61,17 +66,20 @@ msgid "Appearance"
61
66
  msgstr "Appearance"
62
67
 
63
68
  #. @context: Archive page title
64
- #. @context: Navigation link to archive page
65
69
  #: src/routes/pages/archive.tsx:102
66
- #: src/routes/pages/home.tsx:30
67
70
  msgid "Archive"
68
71
  msgstr "Archive"
69
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
+
70
78
  #. @context: Post type badge - article
71
79
  #. @context: Post type label - article
72
80
  #. @context: Post type option
73
81
  #: src/routes/pages/archive.tsx:28
74
- #: src/theme/components/PostForm.tsx:48
82
+ #: src/theme/components/PostForm.tsx:67
75
83
  #: src/theme/components/TypeBadge.tsx:20
76
84
  msgid "Article"
77
85
  msgstr "Article"
@@ -81,6 +89,11 @@ msgstr "Article"
81
89
  msgid "Articles"
82
90
  msgstr "Articles"
83
91
 
92
+ #. @context: Hint for image post type media requirement
93
+ #: src/theme/components/PostForm.tsx:130
94
+ msgid "At least 1 image required for image posts."
95
+ msgstr "At least 1 image required for image posts."
96
+
84
97
  #. @context: Button to go back to media list
85
98
  #: src/routes/dash/media.tsx:245
86
99
  msgid "Back"
@@ -92,19 +105,21 @@ msgstr "Back"
92
105
  #: src/routes/pages/archive.tsx:209
93
106
  #: src/routes/pages/page.tsx:37
94
107
  #: src/routes/pages/search.tsx:144
95
- msgid "Back to home"
96
- msgstr "Back to home"
108
+ #~ msgid "Back to home"
109
+ #~ msgstr "Back to home"
97
110
 
98
111
  #. @context: Button to cancel and go back
99
112
  #. @context: Button to cancel form
100
113
  #. @context: Button to cancel form
101
114
  #. @context: Button to cancel form
102
115
  #. @context: Button to cancel form
116
+ #. @context: Button to cancel form
103
117
  #: src/routes/dash/collections.tsx:176
104
118
  #: src/routes/dash/collections.tsx:345
119
+ #: src/routes/dash/navigation.tsx:182
105
120
  #: src/routes/dash/redirects.tsx:167
106
121
  #: src/theme/components/PageForm.tsx:161
107
- #: src/theme/components/PostForm.tsx:181
122
+ #: src/theme/components/PostForm.tsx:312
108
123
  msgid "Cancel"
109
124
  msgstr "Cancel"
110
125
 
@@ -127,13 +142,18 @@ msgstr "Click image to view full size"
127
142
  msgid "Collections"
128
143
  msgstr "Collections"
129
144
 
145
+ #. @context: Post form field - assign to collections
146
+ #: src/theme/components/PostForm.tsx:261
147
+ msgid "Collections (optional)"
148
+ msgstr "Collections (optional)"
149
+
130
150
  #. @context: Appearance settings heading
131
151
  #: src/routes/dash/settings.tsx:301
132
152
  msgid "Color theme"
133
153
  msgstr "Color theme"
134
154
 
135
155
  #. @context: Setup form submit button
136
- #: src/app.tsx:245
156
+ #: src/app.tsx:248
137
157
  msgid "Complete Setup"
138
158
  msgstr "Complete Setup"
139
159
 
@@ -143,14 +163,14 @@ msgid "Confirm New Password"
143
163
  msgstr "Confirm New Password"
144
164
 
145
165
  #. @context: Password reset form field
146
- #: src/app.tsx:505
166
+ #: src/app.tsx:490
147
167
  msgid "Confirm Password"
148
168
  msgstr "Confirm Password"
149
169
 
150
170
  #. @context: Page form field label - content
151
171
  #. @context: Post form field
152
172
  #: src/theme/components/PageForm.tsx:95
153
- #: src/theme/components/PostForm.tsx:84
173
+ #: src/theme/components/PostForm.tsx:103
154
174
  msgid "Content"
155
175
  msgstr "Content"
156
176
 
@@ -166,6 +186,11 @@ msgstr "Copy"
166
186
  msgid "Create Collection"
167
187
  msgstr "Create Collection"
168
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
+
169
194
  #. @context: Button to create new page
170
195
  #: src/theme/components/PageForm.tsx:155
171
196
  msgid "Create Page"
@@ -177,7 +202,7 @@ msgid "Create Redirect"
177
202
  msgstr "Create Redirect"
178
203
 
179
204
  #. @context: Setup page description
180
- #: src/app.tsx:187
205
+ #: src/app.tsx:190
181
206
  msgid "Create your admin account."
182
207
  msgstr "Create your admin account."
183
208
 
@@ -197,7 +222,7 @@ msgid "Current Password"
197
222
  msgstr "Current Password"
198
223
 
199
224
  #. @context: Post form field
200
- #: src/theme/components/PostForm.tsx:154
225
+ #: src/theme/components/PostForm.tsx:285
201
226
  msgid "Custom Path (optional)"
202
227
  msgstr "Custom Path (optional)"
203
228
 
@@ -214,7 +239,9 @@ msgid "Dashboard"
214
239
  msgstr "Dashboard"
215
240
 
216
241
  #. @context: Button to delete item
242
+ #. @context: Button to delete navigation link
217
243
  #. @context: Button to delete redirect
244
+ #: src/routes/dash/navigation.tsx:66
218
245
  #: src/routes/dash/redirects.tsx:60
219
246
  #: src/theme/components/ActionButtons.tsx:80
220
247
  msgid "Delete"
@@ -241,7 +268,7 @@ msgid "Deleting this media will remove it permanently from storage."
241
268
  msgstr "Deleting this media will remove it permanently from storage."
242
269
 
243
270
  #. @context: Hint shown on signin page when demo credentials are pre-filled
244
- #: src/app.tsx:336
271
+ #: src/app.tsx:339
245
272
  msgid "Demo account pre-filled. Just click Sign In."
246
273
  msgstr "Demo account pre-filled. Just click Sign In."
247
274
 
@@ -252,11 +279,21 @@ msgstr "Demo account pre-filled. Just click Sign In."
252
279
  msgid "Description (optional)"
253
280
  msgstr "Description (optional)"
254
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
+
287
+ #. @context: Close media picker button
288
+ #: src/theme/components/PostForm.tsx:334
289
+ msgid "Done"
290
+ msgstr "Done"
291
+
255
292
  #. @context: Page status option - draft
256
293
  #. @context: Post visibility badge - draft
257
294
  #. @context: Post visibility option
258
295
  #: src/theme/components/PageForm.tsx:132
259
- #: src/theme/components/PostForm.tsx:143
296
+ #: src/theme/components/PostForm.tsx:249
260
297
  #: src/theme/components/VisibilityBadge.tsx:38
261
298
  msgid "Draft"
262
299
  msgstr "Draft"
@@ -266,18 +303,25 @@ msgstr "Draft"
266
303
  msgid "Drafts"
267
304
  msgstr "Drafts"
268
305
 
306
+ #. @context: Source name placeholder
307
+ #: src/theme/components/PostForm.tsx:214
308
+ msgid "e.g. The Verge, John Doe"
309
+ msgstr "e.g. The Verge, John Doe"
310
+
269
311
  #. @context: Button to edit collection
270
312
  #. @context: Button to edit collection
271
313
  #. @context: Button to edit item
314
+ #. @context: Button to edit navigation link
272
315
  #. @context: Button to edit page
273
316
  #. @context: Button to edit page
274
317
  #. @context: Button to edit post
275
318
  #. @context: Button to edit post
276
319
  #: src/routes/dash/collections.tsx:66
277
320
  #: src/routes/dash/collections.tsx:210
321
+ #: src/routes/dash/navigation.tsx:61
278
322
  #: src/routes/dash/pages.tsx:64
279
323
  #: src/routes/dash/pages.tsx:134
280
- #: src/routes/dash/posts.tsx:124
324
+ #: src/routes/dash/posts.tsx:142
281
325
  #: src/theme/components/ActionButtons.tsx:72
282
326
  #: src/theme/components/PostList.tsx:46
283
327
  msgid "Edit"
@@ -288,13 +332,18 @@ msgstr "Edit"
288
332
  msgid "Edit Collection"
289
333
  msgstr "Edit Collection"
290
334
 
335
+ #. @context: Page heading
336
+ #: src/routes/dash/navigation.tsx:105
337
+ msgid "Edit Link"
338
+ msgstr "Edit Link"
339
+
291
340
  #. @context: Edit page main heading
292
341
  #: src/routes/dash/pages.tsx:176
293
342
  msgid "Edit Page"
294
343
  msgstr "Edit Page"
295
344
 
296
345
  #. @context: Page heading
297
- #: src/routes/dash/posts.tsx:153
346
+ #: src/routes/dash/posts.tsx:185
298
347
  msgid "Edit Post"
299
348
  msgstr "Edit Post"
300
349
 
@@ -309,21 +358,19 @@ msgstr "Edit Post"
309
358
 
310
359
  #. @context: Setup/signin form field - email
311
360
  #. @context: Setup/signin form field - email
312
- #: src/app.tsx:216
313
- #: src/app.tsx:350
361
+ #: src/app.tsx:219
362
+ #: src/app.tsx:353
314
363
  msgid "Email"
315
364
  msgstr "Email"
316
365
 
317
366
  #. @context: Password reset page description
318
- #: src/app.tsx:475
367
+ #: src/app.tsx:460
319
368
  msgid "Enter your new password."
320
369
  msgstr "Enter your new password."
321
370
 
322
- #. @context: Post visibility badge
323
371
  #. @context: Post visibility badge - featured
324
372
  #. @context: Post visibility option
325
- #: src/routes/pages/home.tsx:75
326
- #: src/theme/components/PostForm.tsx:131
373
+ #: src/theme/components/PostForm.tsx:237
327
374
  #: src/theme/components/VisibilityBadge.tsx:26
328
375
  msgid "Featured"
329
376
  msgstr "Featured"
@@ -354,7 +401,7 @@ msgstr "General"
354
401
  #. @context: Post type label - image
355
402
  #. @context: Post type option
356
403
  #: src/routes/pages/archive.tsx:37
357
- #: src/theme/components/PostForm.tsx:57
404
+ #: src/theme/components/PostForm.tsx:76
358
405
  #: src/theme/components/TypeBadge.tsx:29
359
406
  msgid "Image"
360
407
  msgstr "Image"
@@ -370,10 +417,15 @@ msgid "Images are automatically optimized: resized to max 1920px, converted to W
370
417
  msgstr "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
371
418
 
372
419
  #. @context: Password reset error heading
373
- #: src/app.tsx:540
420
+ #: src/app.tsx:525
374
421
  msgid "Invalid or Expired Link"
375
422
  msgstr "Invalid or Expired Link"
376
423
 
424
+ #. @context: Navigation link form field
425
+ #: src/routes/dash/navigation.tsx:126
426
+ msgid "Label"
427
+ msgstr "Label"
428
+
377
429
  #. @context: Settings form field
378
430
  #: src/routes/dash/settings.tsx:171
379
431
  msgid "Language"
@@ -388,7 +440,7 @@ msgstr "Language"
388
440
  #. @context: Post type label - link
389
441
  #. @context: Post type option
390
442
  #: src/routes/pages/archive.tsx:32
391
- #: src/theme/components/PostForm.tsx:51
443
+ #: src/theme/components/PostForm.tsx:70
392
444
  #: src/theme/components/TypeBadge.tsx:24
393
445
  msgid "Link"
394
446
  msgstr "Link"
@@ -398,11 +450,18 @@ msgstr "Link"
398
450
  msgid "Links"
399
451
  msgstr "Links"
400
452
 
453
+ #. @context: Button to load more posts in timeline
401
454
  #. @context: Pagination button - load more items
402
455
  #: src/theme/components/Pagination.tsx:103
456
+ #: src/theme/components/timeline/TimelineFeed.tsx:43
403
457
  msgid "Load more"
404
458
  msgstr "Load more"
405
459
 
460
+ #. @context: Loading state for media picker
461
+ #: src/theme/components/PostForm.tsx:345
462
+ msgid "Loading..."
463
+ msgstr "Loading..."
464
+
406
465
  #. @context: Page path validation message
407
466
  #: src/theme/components/PageForm.tsx:76
408
467
  msgid "Lowercase letters, numbers, and hyphens only"
@@ -415,7 +474,9 @@ msgstr "Markdown"
415
474
 
416
475
  #. @context: Dashboard navigation - media library
417
476
  #. @context: Media main heading
477
+ #. @context: Post form field - media attachments
418
478
  #: src/routes/dash/media.tsx:138
479
+ #: src/theme/components/PostForm.tsx:121
419
480
  #: src/theme/layouts/DashLayout.tsx:105
420
481
  msgid "Media"
421
482
  msgstr "Media"
@@ -435,6 +496,13 @@ msgstr "My Collection"
435
496
  msgid "Name"
436
497
  msgstr "Name"
437
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
+
438
506
  #. @context: Help text with link
439
507
  #: src/routes/dash/index.tsx:78
440
508
  msgid "Need help? Visit the <0>documentation</0>"
@@ -449,6 +517,15 @@ msgstr "Need help? Visit the <0>documentation</0>"
449
517
  msgid "New Collection"
450
518
  msgstr "New Collection"
451
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
+
452
529
  #. @context: Button to create new page
453
530
  #. @context: New page main heading
454
531
  #: src/routes/dash/pages.tsx:37
@@ -458,7 +535,7 @@ msgstr "New Page"
458
535
 
459
536
  #. @context: Password form field
460
537
  #. @context: Password reset form field
461
- #: src/app.tsx:489
538
+ #: src/app.tsx:474
462
539
  #: src/routes/dash/settings.tsx:417
463
540
  msgid "New Password"
464
541
  msgstr "New Password"
@@ -498,6 +575,11 @@ msgstr "No collections yet."
498
575
  msgid "No media uploaded yet."
499
576
  msgstr "No media uploaded yet."
500
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
+
501
583
  #. @context: Empty state message when no pages exist
502
584
  #: src/routes/dash/pages.tsx:46
503
585
  msgid "No pages yet."
@@ -517,7 +599,7 @@ msgstr "No posts in this collection."
517
599
 
518
600
  #. @context: Empty state message on home page
519
601
  #. @context: Empty state message when no posts exist
520
- #: src/routes/pages/home.tsx:44
602
+ #: src/routes/pages/home.tsx:42
521
603
  #: src/theme/components/PostList.tsx:25
522
604
  msgid "No posts yet."
523
605
  msgstr "No posts yet."
@@ -536,7 +618,7 @@ msgstr "No results found."
536
618
  #. @context: Post type label - note
537
619
  #. @context: Post type option
538
620
  #: src/routes/pages/archive.tsx:27
539
- #: src/theme/components/PostForm.tsx:45
621
+ #: src/theme/components/PostForm.tsx:64
540
622
  #: src/theme/components/TypeBadge.tsx:19
541
623
  msgid "Note"
542
624
  msgstr "Note"
@@ -581,8 +663,8 @@ msgstr "Pages"
581
663
 
582
664
  #. @context: Setup/signin form field - password
583
665
  #. @context: Setup/signin form field - password
584
- #: src/app.tsx:231
585
- #: src/app.tsx:359
666
+ #: src/app.tsx:234
667
+ #: src/app.tsx:362
586
668
  msgid "Password"
587
669
  msgstr "Password"
588
670
 
@@ -591,20 +673,25 @@ msgstr "Password"
591
673
  msgid "Path"
592
674
  msgstr "Path"
593
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
+
594
681
  #. @context: Link to individual post in thread
595
682
  #. @context: Link to permanent URL of post
596
- #: src/routes/pages/post.tsx:41
683
+ #: src/routes/pages/post.tsx:52
597
684
  #: src/theme/components/ThreadView.tsx:68
598
685
  msgid "Permalink"
599
686
  msgstr "Permalink"
600
687
 
601
688
  #. @context: Default post title
602
- #: src/routes/dash/posts.tsx:113
689
+ #: src/routes/dash/posts.tsx:131
603
690
  msgid "Post"
604
691
  msgstr "Post"
605
692
 
606
693
  #. @context: Post title placeholder
607
- #: src/theme/components/PostForm.tsx:74
694
+ #: src/theme/components/PostForm.tsx:93
608
695
  msgid "Post title..."
609
696
  msgstr "Post title..."
610
697
 
@@ -643,7 +730,7 @@ msgid "Profile"
643
730
  msgstr "Profile"
644
731
 
645
732
  #. @context: Button to publish new post
646
- #: src/theme/components/PostForm.tsx:175
733
+ #: src/theme/components/PostForm.tsx:306
647
734
  msgid "Publish"
648
735
  msgstr "Publish"
649
736
 
@@ -670,7 +757,7 @@ msgid "Quiet"
670
757
  msgstr "Quiet"
671
758
 
672
759
  #. @context: Post visibility option
673
- #: src/theme/components/PostForm.tsx:125
760
+ #: src/theme/components/PostForm.tsx:231
674
761
  msgid "Quiet (normal)"
675
762
  msgstr "Quiet (normal)"
676
763
 
@@ -678,7 +765,7 @@ msgstr "Quiet (normal)"
678
765
  #. @context: Post type label - quote
679
766
  #. @context: Post type option
680
767
  #: src/routes/pages/archive.tsx:33
681
- #: src/theme/components/PostForm.tsx:54
768
+ #: src/theme/components/PostForm.tsx:73
682
769
  #: src/theme/components/TypeBadge.tsx:25
683
770
  msgid "Quote"
684
771
  msgstr "Quote"
@@ -696,17 +783,24 @@ msgid "Redirects"
696
783
  msgstr "Redirects"
697
784
 
698
785
  #. @context: Button to remove post from collection
786
+ #. @context: Remove media attachment button
699
787
  #: src/routes/dash/collections.tsx:257
788
+ #: src/theme/components/PostForm.tsx:161
700
789
  msgid "Remove"
701
790
  msgstr "Remove"
702
791
 
703
792
  #. @context: Password reset form submit button
704
793
  #. @context: Password reset page heading
705
- #: src/app.tsx:469
706
- #: src/app.tsx:520
794
+ #: src/app.tsx:454
795
+ #: src/app.tsx:505
707
796
  msgid "Reset Password"
708
797
  msgstr "Reset Password"
709
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
+
710
804
  #. @context: Button to save profile
711
805
  #: src/routes/dash/settings.tsx:378
712
806
  msgid "Save Profile"
@@ -734,6 +828,11 @@ msgstr "Search"
734
828
  msgid "Search posts..."
735
829
  msgstr "Search posts..."
736
830
 
831
+ #. @context: Media picker dialog title
832
+ #: src/theme/components/PostForm.tsx:324
833
+ msgid "Select Media"
834
+ msgstr "Select Media"
835
+
737
836
  #. @context: Dashboard heading
738
837
  #. @context: Dashboard heading
739
838
  #. @context: Dashboard heading
@@ -741,7 +840,7 @@ msgstr "Search posts..."
741
840
  #: src/routes/dash/settings.tsx:118
742
841
  #: src/routes/dash/settings.tsx:290
743
842
  #: src/routes/dash/settings.tsx:341
744
- #: src/theme/layouts/DashLayout.tsx:133
843
+ #: src/theme/layouts/DashLayout.tsx:143
745
844
  msgid "Settings"
746
845
  msgstr "Settings"
747
846
 
@@ -750,10 +849,16 @@ msgstr "Settings"
750
849
  #~ msgid "Setup"
751
850
  #~ msgstr "Setup"
752
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
+
753
858
  #. @context: Sign in form submit button
754
859
  #. @context: Sign in page heading
755
- #: src/app.tsx:327
756
- #: src/app.tsx:372
860
+ #: src/app.tsx:330
861
+ #: src/app.tsx:375
757
862
  msgid "Sign In"
758
863
  msgstr "Sign In"
759
864
 
@@ -779,8 +884,13 @@ msgstr "Site Name"
779
884
  msgid "Slug"
780
885
  msgstr "Slug"
781
886
 
887
+ #. @context: Post form field - name of the source website or author
888
+ #: src/theme/components/PostForm.tsx:204
889
+ msgid "Source Name (optional)"
890
+ msgstr "Source Name (optional)"
891
+
782
892
  #. @context: Post form field
783
- #: src/theme/components/PostForm.tsx:102
893
+ #: src/theme/components/PostForm.tsx:188
784
894
  msgid "Source URL (optional)"
785
895
  msgstr "Source URL (optional)"
786
896
 
@@ -810,7 +920,7 @@ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
810
920
  msgstr "The URL path for this page. Use lowercase letters, numbers, and hyphens."
811
921
 
812
922
  #. @context: Password reset error description
813
- #: src/app.tsx:548
923
+ #: src/app.tsx:533
814
924
  msgid "This password reset link is invalid or has expired. Please generate a new one."
815
925
  msgstr "This password reset link is invalid or has expired. Please generate a new one."
816
926
 
@@ -844,7 +954,7 @@ msgid "Title"
844
954
  msgstr "Title"
845
955
 
846
956
  #. @context: Post form field
847
- #: src/theme/components/PostForm.tsx:65
957
+ #: src/theme/components/PostForm.tsx:84
848
958
  msgid "Title (optional)"
849
959
  msgstr "Title (optional)"
850
960
 
@@ -856,13 +966,13 @@ msgstr "To Path"
856
966
  #. @context: Post form field - post type
857
967
  #. @context: Redirect form field
858
968
  #: src/routes/dash/redirects.tsx:141
859
- #: src/theme/components/PostForm.tsx:38
969
+ #: src/theme/components/PostForm.tsx:57
860
970
  msgid "Type"
861
971
  msgstr "Type"
862
972
 
863
973
  #. @context: Post visibility badge - unlisted
864
974
  #. @context: Post visibility option
865
- #: src/theme/components/PostForm.tsx:137
975
+ #: src/theme/components/PostForm.tsx:243
866
976
  #: src/theme/components/VisibilityBadge.tsx:34
867
977
  msgid "Unlisted"
868
978
  msgstr "Unlisted"
@@ -870,12 +980,12 @@ msgstr "Unlisted"
870
980
  #. @context: Default title for untitled page
871
981
  #. @context: Default title for untitled post
872
982
  #: src/routes/dash/pages.tsx:91
873
- #: src/theme/components/PostList.tsx:71
983
+ #: src/theme/components/PostList.tsx:78
874
984
  msgid "Untitled"
875
985
  msgstr "Untitled"
876
986
 
877
987
  #. @context: Button to update existing post
878
- #: src/theme/components/PostForm.tsx:171
988
+ #: src/theme/components/PostForm.tsx:302
879
989
  msgid "Update"
880
990
  msgstr "Update"
881
991
 
@@ -910,7 +1020,9 @@ msgid "Uploading..."
910
1020
  msgstr "Uploading..."
911
1021
 
912
1022
  #. @context: Media detail section - URL
1023
+ #. @context: Navigation link form field
913
1024
  #: src/routes/dash/media.tsx:297
1025
+ #: src/routes/dash/navigation.tsx:148
914
1026
  msgid "URL"
915
1027
  msgstr "URL"
916
1028
 
@@ -935,16 +1047,16 @@ msgstr "Use this URL to embed the media in your posts."
935
1047
  #: src/routes/dash/collections.tsx:215
936
1048
  #: src/routes/dash/pages.tsx:73
937
1049
  #: src/routes/dash/pages.tsx:143
938
- #: src/routes/dash/posts.tsx:129
1050
+ #: src/routes/dash/posts.tsx:147
939
1051
  #: src/theme/components/ActionButtons.tsx:76
940
1052
  #: src/theme/components/PostList.tsx:51
941
1053
  msgid "View"
942
1054
  msgstr "View"
943
1055
 
944
1056
  #. @context: Link to view all posts on archive page
945
- #: src/routes/pages/home.tsx:93
946
- msgid "View all posts →"
947
- msgstr "View all posts →"
1057
+ #: src/routes/pages/home.tsx:109
1058
+ #~ msgid "View all posts →"
1059
+ #~ msgstr "View all posts →"
948
1060
 
949
1061
  #. @context: Dashboard header link to view the public site
950
1062
  #: src/theme/layouts/DashLayout.tsx:53
@@ -952,17 +1064,17 @@ msgid "View Site"
952
1064
  msgstr "View Site"
953
1065
 
954
1066
  #. @context: Post form field
955
- #: src/theme/components/PostForm.tsx:118
1067
+ #: src/theme/components/PostForm.tsx:224
956
1068
  msgid "Visibility"
957
1069
  msgstr "Visibility"
958
1070
 
959
1071
  #. @context: Setup page welcome heading
960
- #: src/app.tsx:181
1072
+ #: src/app.tsx:184
961
1073
  msgid "Welcome to Jant"
962
1074
  msgstr "Welcome to Jant"
963
1075
 
964
1076
  #. @context: Post content placeholder
965
- #: src/theme/components/PostForm.tsx:89
1077
+ #: src/theme/components/PostForm.tsx:108
966
1078
  msgid "What's on your mind?"
967
1079
  msgstr "What's on your mind?"
968
1080
 
@@ -972,6 +1084,6 @@ msgid "What's this collection about?"
972
1084
  msgstr "What's this collection about?"
973
1085
 
974
1086
  #. @context: Setup form field - user name
975
- #: src/app.tsx:201
1087
+ #: src/app.tsx:204
976
1088
  msgid "Your Name"
977
1089
  msgstr "Your Name"