@jant/core 0.3.5 → 0.3.7

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 (81) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +7 -21
  3. package/dist/db/schema.d.ts +36 -0
  4. package/dist/db/schema.d.ts.map +1 -1
  5. package/dist/db/schema.js +2 -0
  6. package/dist/i18n/locales/en.d.ts.map +1 -1
  7. package/dist/i18n/locales/en.js +1 -1
  8. package/dist/i18n/locales/zh-Hans.d.ts.map +1 -1
  9. package/dist/i18n/locales/zh-Hans.js +1 -1
  10. package/dist/i18n/locales/zh-Hant.d.ts.map +1 -1
  11. package/dist/i18n/locales/zh-Hant.js +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/lib/schemas.d.ts +17 -0
  16. package/dist/lib/schemas.d.ts.map +1 -1
  17. package/dist/lib/schemas.js +32 -2
  18. package/dist/lib/sse.d.ts +3 -3
  19. package/dist/lib/sse.d.ts.map +1 -1
  20. package/dist/lib/sse.js +7 -8
  21. package/dist/routes/api/posts.d.ts.map +1 -1
  22. package/dist/routes/api/posts.js +101 -5
  23. package/dist/routes/dash/media.js +38 -0
  24. package/dist/routes/dash/posts.d.ts.map +1 -1
  25. package/dist/routes/dash/posts.js +45 -6
  26. package/dist/routes/feed/rss.d.ts.map +1 -1
  27. package/dist/routes/feed/rss.js +10 -1
  28. package/dist/routes/pages/home.d.ts.map +1 -1
  29. package/dist/routes/pages/home.js +37 -4
  30. package/dist/routes/pages/post.d.ts.map +1 -1
  31. package/dist/routes/pages/post.js +28 -2
  32. package/dist/services/collection.d.ts +1 -0
  33. package/dist/services/collection.d.ts.map +1 -1
  34. package/dist/services/collection.js +13 -0
  35. package/dist/services/media.d.ts +7 -0
  36. package/dist/services/media.d.ts.map +1 -1
  37. package/dist/services/media.js +54 -1
  38. package/dist/theme/components/MediaGallery.d.ts +13 -0
  39. package/dist/theme/components/MediaGallery.d.ts.map +1 -0
  40. package/dist/theme/components/MediaGallery.js +107 -0
  41. package/dist/theme/components/PostForm.d.ts +6 -1
  42. package/dist/theme/components/PostForm.d.ts.map +1 -1
  43. package/dist/theme/components/PostForm.js +158 -2
  44. package/dist/theme/components/index.d.ts +1 -0
  45. package/dist/theme/components/index.d.ts.map +1 -1
  46. package/dist/theme/components/index.js +1 -0
  47. package/dist/types.d.ts +24 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +27 -0
  50. package/package.json +1 -1
  51. package/src/__tests__/helpers/app.ts +6 -1
  52. package/src/__tests__/helpers/db.ts +10 -0
  53. package/src/app.tsx +7 -25
  54. package/src/db/migrations/0002_add_media_attachments.sql +3 -0
  55. package/src/db/schema.ts +2 -0
  56. package/src/i18n/locales/en.po +150 -80
  57. package/src/i18n/locales/en.ts +1 -1
  58. package/src/i18n/locales/zh-Hans.po +150 -80
  59. package/src/i18n/locales/zh-Hans.ts +1 -1
  60. package/src/i18n/locales/zh-Hant.po +150 -80
  61. package/src/i18n/locales/zh-Hant.ts +1 -1
  62. package/src/index.ts +8 -1
  63. package/src/lib/__tests__/schemas.test.ts +89 -1
  64. package/src/lib/__tests__/sse.test.ts +13 -1
  65. package/src/lib/schemas.ts +47 -1
  66. package/src/lib/sse.ts +10 -11
  67. package/src/routes/api/__tests__/posts.test.ts +239 -0
  68. package/src/routes/api/posts.ts +134 -5
  69. package/src/routes/dash/media.tsx +50 -0
  70. package/src/routes/dash/posts.tsx +79 -7
  71. package/src/routes/feed/rss.ts +14 -1
  72. package/src/routes/pages/home.tsx +80 -36
  73. package/src/routes/pages/post.tsx +36 -3
  74. package/src/services/__tests__/collection.test.ts +102 -0
  75. package/src/services/__tests__/media.test.ts +248 -0
  76. package/src/services/collection.ts +19 -0
  77. package/src/services/media.ts +76 -1
  78. package/src/theme/components/MediaGallery.tsx +128 -0
  79. package/src/theme/components/PostForm.tsx +170 -2
  80. package/src/theme/components/index.ts +1 -0
  81. package/src/types.ts +36 -0
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
 
@@ -26,7 +26,7 @@ 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
29
+ #: src/routes/pages/post.tsx:63
30
30
  msgid "← Back to home"
31
31
  msgstr "← Back to home"
32
32
 
@@ -45,20 +45,30 @@ msgstr "301 (Permanent)"
45
45
  msgid "302 (Temporary)"
46
46
  msgstr "302 (Temporary)"
47
47
 
48
+ #. @context: Settings sub-navigation tab
49
+ #: src/routes/dash/settings.tsx:63
50
+ msgid "Account"
51
+ msgstr "Account"
52
+
53
+ #. @context: Button to open media picker
54
+ #: src/theme/components/PostForm.tsx:178
55
+ msgid "Add Media"
56
+ msgstr "Add Media"
57
+
48
58
  #. @context: Archive filter - all types
49
59
  #: src/routes/pages/archive.tsx:115
50
60
  msgid "All"
51
61
  msgstr "All"
52
62
 
53
- #. @context: Dashboard navigation - appearance settings
54
- #: src/theme/layouts/DashLayout.tsx:142
63
+ #. @context: Settings sub-navigation tab
64
+ #: src/routes/dash/settings.tsx:55
55
65
  msgid "Appearance"
56
66
  msgstr "Appearance"
57
67
 
58
68
  #. @context: Archive page title
59
69
  #. @context: Navigation link to archive page
60
70
  #: src/routes/pages/archive.tsx:102
61
- #: src/routes/pages/home.tsx:30
71
+ #: src/routes/pages/home.tsx:40
62
72
  msgid "Archive"
63
73
  msgstr "Archive"
64
74
 
@@ -66,7 +76,7 @@ msgstr "Archive"
66
76
  #. @context: Post type label - article
67
77
  #. @context: Post type option
68
78
  #: src/routes/pages/archive.tsx:28
69
- #: src/theme/components/PostForm.tsx:48
79
+ #: src/theme/components/PostForm.tsx:67
70
80
  #: src/theme/components/TypeBadge.tsx:20
71
81
  msgid "Article"
72
82
  msgstr "Article"
@@ -76,8 +86,13 @@ msgstr "Article"
76
86
  msgid "Articles"
77
87
  msgstr "Articles"
78
88
 
89
+ #. @context: Hint for image post type media requirement
90
+ #: src/theme/components/PostForm.tsx:130
91
+ msgid "At least 1 image required for image posts."
92
+ msgstr "At least 1 image required for image posts."
93
+
79
94
  #. @context: Button to go back to media list
80
- #: src/routes/dash/media.tsx:392
95
+ #: src/routes/dash/media.tsx:245
81
96
  msgid "Back"
82
97
  msgstr "Back"
83
98
 
@@ -99,19 +114,19 @@ msgstr "Back to home"
99
114
  #: src/routes/dash/collections.tsx:345
100
115
  #: src/routes/dash/redirects.tsx:167
101
116
  #: src/theme/components/PageForm.tsx:161
102
- #: src/theme/components/PostForm.tsx:181
117
+ #: src/theme/components/PostForm.tsx:312
103
118
  msgid "Cancel"
104
119
  msgstr "Cancel"
105
120
 
106
121
  #. @context: Button to change password
107
122
  #. @context: Settings section heading
108
- #: src/routes/dash/settings.tsx:128
109
- #: src/routes/dash/settings.tsx:188
123
+ #: src/routes/dash/settings.tsx:392
124
+ #: src/routes/dash/settings.tsx:452
110
125
  msgid "Change Password"
111
126
  msgstr "Change Password"
112
127
 
113
128
  #. @context: Hint to click image for lightbox
114
- #: src/routes/dash/media.tsx:425
129
+ #: src/routes/dash/media.tsx:278
115
130
  msgid "Click image to view full size"
116
131
  msgstr "Click image to view full size"
117
132
 
@@ -122,37 +137,42 @@ msgstr "Click image to view full size"
122
137
  msgid "Collections"
123
138
  msgstr "Collections"
124
139
 
140
+ #. @context: Post form field - assign to collections
141
+ #: src/theme/components/PostForm.tsx:261
142
+ msgid "Collections (optional)"
143
+ msgstr "Collections (optional)"
144
+
125
145
  #. @context: Appearance settings heading
126
- #: src/routes/dash/appearance.tsx:108
146
+ #: src/routes/dash/settings.tsx:301
127
147
  msgid "Color theme"
128
148
  msgstr "Color theme"
129
149
 
130
150
  #. @context: Setup form submit button
131
- #: src/app.tsx:242
151
+ #: src/app.tsx:245
132
152
  msgid "Complete Setup"
133
153
  msgstr "Complete Setup"
134
154
 
135
155
  #. @context: Password form field
136
- #: src/routes/dash/settings.tsx:170
156
+ #: src/routes/dash/settings.tsx:434
137
157
  msgid "Confirm New Password"
138
158
  msgstr "Confirm New Password"
139
159
 
140
160
  #. @context: Password reset form field
141
- #: src/app.tsx:526
161
+ #: src/app.tsx:487
142
162
  msgid "Confirm Password"
143
163
  msgstr "Confirm Password"
144
164
 
145
165
  #. @context: Page form field label - content
146
166
  #. @context: Post form field
147
167
  #: src/theme/components/PageForm.tsx:95
148
- #: src/theme/components/PostForm.tsx:84
168
+ #: src/theme/components/PostForm.tsx:103
149
169
  msgid "Content"
150
170
  msgstr "Content"
151
171
 
152
172
  #. @context: Button to copy Markdown to clipboard
153
173
  #. @context: Button to copy URL to clipboard
154
- #: src/routes/dash/media.tsx:463
155
- #: src/routes/dash/media.tsx:500
174
+ #: src/routes/dash/media.tsx:316
175
+ #: src/routes/dash/media.tsx:353
156
176
  msgid "Copy"
157
177
  msgstr "Copy"
158
178
 
@@ -172,7 +192,7 @@ msgid "Create Redirect"
172
192
  msgstr "Create Redirect"
173
193
 
174
194
  #. @context: Setup page description
175
- #: src/app.tsx:184
195
+ #: src/app.tsx:187
176
196
  msgid "Create your admin account."
177
197
  msgstr "Create your admin account."
178
198
 
@@ -187,12 +207,12 @@ msgid "Create your first post"
187
207
  msgstr "Create your first post"
188
208
 
189
209
  #. @context: Password form field
190
- #: src/routes/dash/settings.tsx:137
210
+ #: src/routes/dash/settings.tsx:401
191
211
  msgid "Current Password"
192
212
  msgstr "Current Password"
193
213
 
194
214
  #. @context: Post form field
195
- #: src/theme/components/PostForm.tsx:154
215
+ #: src/theme/components/PostForm.tsx:285
196
216
  msgid "Custom Path (optional)"
197
217
  msgstr "Custom Path (optional)"
198
218
 
@@ -221,7 +241,7 @@ msgid "Delete Collection"
221
241
  msgstr "Delete Collection"
222
242
 
223
243
  #. @context: Button to delete media
224
- #: src/routes/dash/media.tsx:511
244
+ #: src/routes/dash/media.tsx:364
225
245
  msgid "Delete Media"
226
246
  msgstr "Delete Media"
227
247
 
@@ -231,12 +251,12 @@ msgid "Delete Page"
231
251
  msgstr "Delete Page"
232
252
 
233
253
  #. @context: Warning message before deleting media
234
- #: src/routes/dash/media.tsx:517
254
+ #: src/routes/dash/media.tsx:370
235
255
  msgid "Deleting this media will remove it permanently from storage."
236
256
  msgstr "Deleting this media will remove it permanently from storage."
237
257
 
238
258
  #. @context: Hint shown on signin page when demo credentials are pre-filled
239
- #: src/app.tsx:345
259
+ #: src/app.tsx:336
240
260
  msgid "Demo account pre-filled. Just click Sign In."
241
261
  msgstr "Demo account pre-filled. Just click Sign In."
242
262
 
@@ -247,11 +267,16 @@ msgstr "Demo account pre-filled. Just click Sign In."
247
267
  msgid "Description (optional)"
248
268
  msgstr "Description (optional)"
249
269
 
270
+ #. @context: Close media picker button
271
+ #: src/theme/components/PostForm.tsx:334
272
+ msgid "Done"
273
+ msgstr "Done"
274
+
250
275
  #. @context: Page status option - draft
251
276
  #. @context: Post visibility badge - draft
252
277
  #. @context: Post visibility option
253
278
  #: src/theme/components/PageForm.tsx:132
254
- #: src/theme/components/PostForm.tsx:143
279
+ #: src/theme/components/PostForm.tsx:249
255
280
  #: src/theme/components/VisibilityBadge.tsx:38
256
281
  msgid "Draft"
257
282
  msgstr "Draft"
@@ -261,6 +286,11 @@ msgstr "Draft"
261
286
  msgid "Drafts"
262
287
  msgstr "Drafts"
263
288
 
289
+ #. @context: Source name placeholder
290
+ #: src/theme/components/PostForm.tsx:214
291
+ msgid "e.g. The Verge, John Doe"
292
+ msgstr "e.g. The Verge, John Doe"
293
+
264
294
  #. @context: Button to edit collection
265
295
  #. @context: Button to edit collection
266
296
  #. @context: Button to edit item
@@ -272,7 +302,7 @@ msgstr "Drafts"
272
302
  #: src/routes/dash/collections.tsx:210
273
303
  #: src/routes/dash/pages.tsx:64
274
304
  #: src/routes/dash/pages.tsx:134
275
- #: src/routes/dash/posts.tsx:126
305
+ #: src/routes/dash/posts.tsx:142
276
306
  #: src/theme/components/ActionButtons.tsx:72
277
307
  #: src/theme/components/PostList.tsx:46
278
308
  msgid "Edit"
@@ -289,7 +319,7 @@ msgid "Edit Page"
289
319
  msgstr "Edit Page"
290
320
 
291
321
  #. @context: Page heading
292
- #: src/routes/dash/posts.tsx:155
322
+ #: src/routes/dash/posts.tsx:185
293
323
  msgid "Edit Post"
294
324
  msgstr "Edit Post"
295
325
 
@@ -304,21 +334,21 @@ msgstr "Edit Post"
304
334
 
305
335
  #. @context: Setup/signin form field - email
306
336
  #. @context: Setup/signin form field - email
307
- #: src/app.tsx:213
308
- #: src/app.tsx:359
337
+ #: src/app.tsx:216
338
+ #: src/app.tsx:350
309
339
  msgid "Email"
310
340
  msgstr "Email"
311
341
 
312
342
  #. @context: Password reset page description
313
- #: src/app.tsx:496
343
+ #: src/app.tsx:457
314
344
  msgid "Enter your new password."
315
345
  msgstr "Enter your new password."
316
346
 
317
347
  #. @context: Post visibility badge
318
348
  #. @context: Post visibility badge - featured
319
349
  #. @context: Post visibility option
320
- #: src/routes/pages/home.tsx:75
321
- #: src/theme/components/PostForm.tsx:131
350
+ #: src/routes/pages/home.tsx:90
351
+ #: src/theme/components/PostForm.tsx:237
322
352
  #: src/theme/components/VisibilityBadge.tsx:26
323
353
  msgid "Featured"
324
354
  msgstr "Featured"
@@ -339,7 +369,9 @@ msgid "From Path"
339
369
  msgstr "From Path"
340
370
 
341
371
  #. @context: Settings section heading
342
- #: src/routes/dash/settings.tsx:52
372
+ #. @context: Settings sub-navigation tab
373
+ #: src/routes/dash/settings.tsx:47
374
+ #: src/routes/dash/settings.tsx:130
343
375
  msgid "General"
344
376
  msgstr "General"
345
377
 
@@ -347,7 +379,7 @@ msgstr "General"
347
379
  #. @context: Post type label - image
348
380
  #. @context: Post type option
349
381
  #: src/routes/pages/archive.tsx:37
350
- #: src/theme/components/PostForm.tsx:57
382
+ #: src/theme/components/PostForm.tsx:76
351
383
  #: src/theme/components/TypeBadge.tsx:29
352
384
  msgid "Image"
353
385
  msgstr "Image"
@@ -358,17 +390,17 @@ msgid "Images"
358
390
  msgstr "Images"
359
391
 
360
392
  #. @context: Media upload instructions - auto optimization
361
- #: src/routes/dash/media.tsx:305
393
+ #: src/routes/dash/media.tsx:158
362
394
  msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
363
395
  msgstr "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
364
396
 
365
397
  #. @context: Password reset error heading
366
- #: src/app.tsx:561
398
+ #: src/app.tsx:522
367
399
  msgid "Invalid or Expired Link"
368
400
  msgstr "Invalid or Expired Link"
369
401
 
370
402
  #. @context: Settings form field
371
- #: src/routes/dash/settings.tsx:93
403
+ #: src/routes/dash/settings.tsx:171
372
404
  msgid "Language"
373
405
  msgstr "Language"
374
406
 
@@ -381,7 +413,7 @@ msgstr "Language"
381
413
  #. @context: Post type label - link
382
414
  #. @context: Post type option
383
415
  #: src/routes/pages/archive.tsx:32
384
- #: src/theme/components/PostForm.tsx:51
416
+ #: src/theme/components/PostForm.tsx:70
385
417
  #: src/theme/components/TypeBadge.tsx:24
386
418
  msgid "Link"
387
419
  msgstr "Link"
@@ -396,19 +428,26 @@ msgstr "Links"
396
428
  msgid "Load more"
397
429
  msgstr "Load more"
398
430
 
431
+ #. @context: Loading state for media picker
432
+ #: src/theme/components/PostForm.tsx:345
433
+ msgid "Loading..."
434
+ msgstr "Loading..."
435
+
399
436
  #. @context: Page path validation message
400
437
  #: src/theme/components/PageForm.tsx:76
401
438
  msgid "Lowercase letters, numbers, and hyphens only"
402
439
  msgstr "Lowercase letters, numbers, and hyphens only"
403
440
 
404
441
  #. @context: Media detail section - Markdown snippet
405
- #: src/routes/dash/media.tsx:481
442
+ #: src/routes/dash/media.tsx:334
406
443
  msgid "Markdown"
407
444
  msgstr "Markdown"
408
445
 
409
446
  #. @context: Dashboard navigation - media library
410
447
  #. @context: Media main heading
411
- #: src/routes/dash/media.tsx:285
448
+ #. @context: Post form field - media attachments
449
+ #: src/routes/dash/media.tsx:138
450
+ #: src/theme/components/PostForm.tsx:121
412
451
  #: src/theme/layouts/DashLayout.tsx:105
413
452
  msgid "Media"
414
453
  msgstr "Media"
@@ -423,6 +462,11 @@ msgstr "Media"
423
462
  msgid "My Collection"
424
463
  msgstr "My Collection"
425
464
 
465
+ #. @context: Account settings form field
466
+ #: src/routes/dash/settings.tsx:362
467
+ msgid "Name"
468
+ msgstr "Name"
469
+
426
470
  #. @context: Help text with link
427
471
  #: src/routes/dash/index.tsx:78
428
472
  msgid "Need help? Visit the <0>documentation</0>"
@@ -446,8 +490,8 @@ msgstr "New Page"
446
490
 
447
491
  #. @context: Password form field
448
492
  #. @context: Password reset form field
449
- #: src/app.tsx:510
450
- #: src/routes/dash/settings.tsx:153
493
+ #: src/app.tsx:471
494
+ #: src/routes/dash/settings.tsx:417
451
495
  msgid "New Password"
452
496
  msgstr "New Password"
453
497
 
@@ -482,7 +526,7 @@ msgid "No collections yet."
482
526
  msgstr "No collections yet."
483
527
 
484
528
  #. @context: Empty state message when no media exists
485
- #: src/routes/dash/media.tsx:320
529
+ #: src/routes/dash/media.tsx:173
486
530
  msgid "No media uploaded yet."
487
531
  msgstr "No media uploaded yet."
488
532
 
@@ -505,7 +549,7 @@ msgstr "No posts in this collection."
505
549
 
506
550
  #. @context: Empty state message on home page
507
551
  #. @context: Empty state message when no posts exist
508
- #: src/routes/pages/home.tsx:44
552
+ #: src/routes/pages/home.tsx:54
509
553
  #: src/theme/components/PostList.tsx:25
510
554
  msgid "No posts yet."
511
555
  msgstr "No posts yet."
@@ -524,7 +568,7 @@ msgstr "No results found."
524
568
  #. @context: Post type label - note
525
569
  #. @context: Post type option
526
570
  #: src/routes/pages/archive.tsx:27
527
- #: src/theme/components/PostForm.tsx:45
571
+ #: src/theme/components/PostForm.tsx:64
528
572
  #: src/theme/components/TypeBadge.tsx:19
529
573
  msgid "Note"
530
574
  msgstr "Note"
@@ -569,8 +613,8 @@ msgstr "Pages"
569
613
 
570
614
  #. @context: Setup/signin form field - password
571
615
  #. @context: Setup/signin form field - password
572
- #: src/app.tsx:228
573
- #: src/app.tsx:368
616
+ #: src/app.tsx:231
617
+ #: src/app.tsx:359
574
618
  msgid "Password"
575
619
  msgstr "Password"
576
620
 
@@ -581,18 +625,18 @@ msgstr "Path"
581
625
 
582
626
  #. @context: Link to individual post in thread
583
627
  #. @context: Link to permanent URL of post
584
- #: src/routes/pages/post.tsx:41
628
+ #: src/routes/pages/post.tsx:53
585
629
  #: src/theme/components/ThreadView.tsx:68
586
630
  msgid "Permalink"
587
631
  msgstr "Permalink"
588
632
 
589
633
  #. @context: Default post title
590
- #: src/routes/dash/posts.tsx:115
634
+ #: src/routes/dash/posts.tsx:131
591
635
  msgid "Post"
592
636
  msgstr "Post"
593
637
 
594
638
  #. @context: Post title placeholder
595
- #: src/theme/components/PostForm.tsx:74
639
+ #: src/theme/components/PostForm.tsx:93
596
640
  msgid "Post title..."
597
641
  msgstr "Post title..."
598
642
 
@@ -609,7 +653,7 @@ msgid "Posts in Collection ({count})"
609
653
  msgstr "Posts in Collection ({count})"
610
654
 
611
655
  #. @context: Media detail section - preview
612
- #: src/routes/dash/media.tsx:404
656
+ #: src/routes/dash/media.tsx:257
613
657
  msgid "Preview"
614
658
  msgstr "Preview"
615
659
 
@@ -621,12 +665,17 @@ msgid "Previous"
621
665
  msgstr "Previous"
622
666
 
623
667
  #. @context: Upload status - processing
624
- #: src/routes/dash/media.tsx:107
668
+ #: src/routes/dash/media.tsx:106
625
669
  msgid "Processing..."
626
670
  msgstr "Processing..."
627
671
 
672
+ #. @context: Account settings section heading
673
+ #: src/routes/dash/settings.tsx:353
674
+ msgid "Profile"
675
+ msgstr "Profile"
676
+
628
677
  #. @context: Button to publish new post
629
- #: src/theme/components/PostForm.tsx:175
678
+ #: src/theme/components/PostForm.tsx:306
630
679
  msgid "Publish"
631
680
  msgstr "Publish"
632
681
 
@@ -653,7 +702,7 @@ msgid "Quiet"
653
702
  msgstr "Quiet"
654
703
 
655
704
  #. @context: Post visibility option
656
- #: src/theme/components/PostForm.tsx:125
705
+ #: src/theme/components/PostForm.tsx:231
657
706
  msgid "Quiet (normal)"
658
707
  msgstr "Quiet (normal)"
659
708
 
@@ -661,7 +710,7 @@ msgstr "Quiet (normal)"
661
710
  #. @context: Post type label - quote
662
711
  #. @context: Post type option
663
712
  #: src/routes/pages/archive.tsx:33
664
- #: src/theme/components/PostForm.tsx:54
713
+ #: src/theme/components/PostForm.tsx:73
665
714
  #: src/theme/components/TypeBadge.tsx:25
666
715
  msgid "Quote"
667
716
  msgstr "Quote"
@@ -679,19 +728,26 @@ msgid "Redirects"
679
728
  msgstr "Redirects"
680
729
 
681
730
  #. @context: Button to remove post from collection
731
+ #. @context: Remove media attachment button
682
732
  #: src/routes/dash/collections.tsx:257
733
+ #: src/theme/components/PostForm.tsx:161
683
734
  msgid "Remove"
684
735
  msgstr "Remove"
685
736
 
686
737
  #. @context: Password reset form submit button
687
738
  #. @context: Password reset page heading
688
- #: src/app.tsx:490
689
- #: src/app.tsx:541
739
+ #: src/app.tsx:451
740
+ #: src/app.tsx:502
690
741
  msgid "Reset Password"
691
742
  msgstr "Reset Password"
692
743
 
744
+ #. @context: Button to save profile
745
+ #: src/routes/dash/settings.tsx:378
746
+ msgid "Save Profile"
747
+ msgstr "Save Profile"
748
+
693
749
  #. @context: Button to save settings
694
- #: src/routes/dash/settings.tsx:114
750
+ #: src/routes/dash/settings.tsx:192
695
751
  msgid "Save Settings"
696
752
  msgstr "Save Settings"
697
753
 
@@ -712,9 +768,18 @@ msgstr "Search"
712
768
  msgid "Search posts..."
713
769
  msgstr "Search posts..."
714
770
 
771
+ #. @context: Media picker dialog title
772
+ #: src/theme/components/PostForm.tsx:324
773
+ msgid "Select Media"
774
+ msgstr "Select Media"
775
+
776
+ #. @context: Dashboard heading
777
+ #. @context: Dashboard heading
715
778
  #. @context: Dashboard heading
716
779
  #. @context: Dashboard navigation - site settings
717
- #: src/routes/dash/settings.tsx:41
780
+ #: src/routes/dash/settings.tsx:118
781
+ #: src/routes/dash/settings.tsx:290
782
+ #: src/routes/dash/settings.tsx:341
718
783
  #: src/theme/layouts/DashLayout.tsx:133
719
784
  msgid "Settings"
720
785
  msgstr "Settings"
@@ -726,8 +791,8 @@ msgstr "Settings"
726
791
 
727
792
  #. @context: Sign in form submit button
728
793
  #. @context: Sign in page heading
729
- #: src/app.tsx:336
730
- #: src/app.tsx:381
794
+ #: src/app.tsx:327
795
+ #: src/app.tsx:372
731
796
  msgid "Sign In"
732
797
  msgstr "Sign In"
733
798
 
@@ -737,12 +802,12 @@ msgid "Sign Out"
737
802
  msgstr "Sign Out"
738
803
 
739
804
  #. @context: Settings form field
740
- #: src/routes/dash/settings.tsx:76
805
+ #: src/routes/dash/settings.tsx:154
741
806
  msgid "Site Description"
742
807
  msgstr "Site Description"
743
808
 
744
809
  #. @context: Settings form field
745
- #: src/routes/dash/settings.tsx:61
810
+ #: src/routes/dash/settings.tsx:139
746
811
  msgid "Site Name"
747
812
  msgstr "Site Name"
748
813
 
@@ -753,8 +818,13 @@ msgstr "Site Name"
753
818
  msgid "Slug"
754
819
  msgstr "Slug"
755
820
 
821
+ #. @context: Post form field - name of the source website or author
822
+ #: src/theme/components/PostForm.tsx:204
823
+ msgid "Source Name (optional)"
824
+ msgstr "Source Name (optional)"
825
+
756
826
  #. @context: Post form field
757
- #: src/theme/components/PostForm.tsx:102
827
+ #: src/theme/components/PostForm.tsx:188
758
828
  msgid "Source URL (optional)"
759
829
  msgstr "Source URL (optional)"
760
830
 
@@ -784,12 +854,12 @@ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
784
854
  msgstr "The URL path for this page. Use lowercase letters, numbers, and hyphens."
785
855
 
786
856
  #. @context: Password reset error description
787
- #: src/app.tsx:569
857
+ #: src/app.tsx:530
788
858
  msgid "This password reset link is invalid or has expired. Please generate a new one."
789
859
  msgstr "This password reset link is invalid or has expired. Please generate a new one."
790
860
 
791
861
  #. @context: Appearance settings description
792
- #: src/routes/dash/appearance.tsx:114
862
+ #: src/routes/dash/settings.tsx:307
793
863
  msgid "This will theme both your site and your dashboard. All color themes support dark mode."
794
864
  msgstr "This will theme both your site and your dashboard. All color themes support dark mode."
795
865
 
@@ -818,7 +888,7 @@ msgid "Title"
818
888
  msgstr "Title"
819
889
 
820
890
  #. @context: Post form field
821
- #: src/theme/components/PostForm.tsx:65
891
+ #: src/theme/components/PostForm.tsx:84
822
892
  msgid "Title (optional)"
823
893
  msgstr "Title (optional)"
824
894
 
@@ -830,13 +900,13 @@ msgstr "To Path"
830
900
  #. @context: Post form field - post type
831
901
  #. @context: Redirect form field
832
902
  #: src/routes/dash/redirects.tsx:141
833
- #: src/theme/components/PostForm.tsx:38
903
+ #: src/theme/components/PostForm.tsx:57
834
904
  msgid "Type"
835
905
  msgstr "Type"
836
906
 
837
907
  #. @context: Post visibility badge - unlisted
838
908
  #. @context: Post visibility option
839
- #: src/theme/components/PostForm.tsx:137
909
+ #: src/theme/components/PostForm.tsx:243
840
910
  #: src/theme/components/VisibilityBadge.tsx:34
841
911
  msgid "Unlisted"
842
912
  msgstr "Unlisted"
@@ -849,7 +919,7 @@ msgid "Untitled"
849
919
  msgstr "Untitled"
850
920
 
851
921
  #. @context: Button to update existing post
852
- #: src/theme/components/PostForm.tsx:171
922
+ #: src/theme/components/PostForm.tsx:302
853
923
  msgid "Update"
854
924
  msgstr "Update"
855
925
 
@@ -864,12 +934,12 @@ msgid "Update Page"
864
934
  msgstr "Update Page"
865
935
 
866
936
  #. @context: Button to upload media file
867
- #: src/routes/dash/media.tsx:115
937
+ #: src/routes/dash/media.tsx:114
868
938
  msgid "Upload"
869
939
  msgstr "Upload"
870
940
 
871
941
  #. @context: Upload error message
872
- #: src/routes/dash/media.tsx:119
942
+ #: src/routes/dash/media.tsx:118
873
943
  msgid "Upload failed. Please try again."
874
944
  msgstr "Upload failed. Please try again."
875
945
 
@@ -879,12 +949,12 @@ msgstr "Upload failed. Please try again."
879
949
  #~ msgstr "Upload images via the API: POST /api/upload with a file form field."
880
950
 
881
951
  #. @context: Upload status - uploading
882
- #: src/routes/dash/media.tsx:111
952
+ #: src/routes/dash/media.tsx:110
883
953
  msgid "Uploading..."
884
954
  msgstr "Uploading..."
885
955
 
886
956
  #. @context: Media detail section - URL
887
- #: src/routes/dash/media.tsx:444
957
+ #: src/routes/dash/media.tsx:297
888
958
  msgid "URL"
889
959
  msgstr "URL"
890
960
 
@@ -894,7 +964,7 @@ msgid "URL-safe identifier (lowercase, numbers, hyphens)"
894
964
  msgstr "URL-safe identifier (lowercase, numbers, hyphens)"
895
965
 
896
966
  #. @context: Media URL helper text
897
- #: src/routes/dash/media.tsx:470
967
+ #: src/routes/dash/media.tsx:323
898
968
  msgid "Use this URL to embed the media in your posts."
899
969
  msgstr "Use this URL to embed the media in your posts."
900
970
 
@@ -909,14 +979,14 @@ msgstr "Use this URL to embed the media in your posts."
909
979
  #: src/routes/dash/collections.tsx:215
910
980
  #: src/routes/dash/pages.tsx:73
911
981
  #: src/routes/dash/pages.tsx:143
912
- #: src/routes/dash/posts.tsx:131
982
+ #: src/routes/dash/posts.tsx:147
913
983
  #: src/theme/components/ActionButtons.tsx:76
914
984
  #: src/theme/components/PostList.tsx:51
915
985
  msgid "View"
916
986
  msgstr "View"
917
987
 
918
988
  #. @context: Link to view all posts on archive page
919
- #: src/routes/pages/home.tsx:93
989
+ #: src/routes/pages/home.tsx:109
920
990
  msgid "View all posts →"
921
991
  msgstr "View all posts →"
922
992
 
@@ -926,17 +996,17 @@ msgid "View Site"
926
996
  msgstr "View Site"
927
997
 
928
998
  #. @context: Post form field
929
- #: src/theme/components/PostForm.tsx:118
999
+ #: src/theme/components/PostForm.tsx:224
930
1000
  msgid "Visibility"
931
1001
  msgstr "Visibility"
932
1002
 
933
1003
  #. @context: Setup page welcome heading
934
- #: src/app.tsx:178
1004
+ #: src/app.tsx:181
935
1005
  msgid "Welcome to Jant"
936
1006
  msgstr "Welcome to Jant"
937
1007
 
938
1008
  #. @context: Post content placeholder
939
- #: src/theme/components/PostForm.tsx:89
1009
+ #: src/theme/components/PostForm.tsx:108
940
1010
  msgid "What's on your mind?"
941
1011
  msgstr "What's on your mind?"
942
1012
 
@@ -946,6 +1016,6 @@ msgid "What's this collection about?"
946
1016
  msgstr "What's this collection about?"
947
1017
 
948
1018
  #. @context: Setup form field - user name
949
- #: src/app.tsx:198
1019
+ #: src/app.tsx:201
950
1020
  msgid "Your Name"
951
1021
  msgstr "Your Name"