@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
@@ -26,7 +26,7 @@ msgstr "← 返回收藏夾"
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 "← 返回首頁"
32
32
 
@@ -45,20 +45,30 @@ msgstr "301(永久)"
45
45
  msgid "302 (Temporary)"
46
46
  msgstr "302(臨時)"
47
47
 
48
+ #. @context: Settings sub-navigation tab
49
+ #: src/routes/dash/settings.tsx:63
50
+ msgid "Account"
51
+ msgstr "帳戶"
52
+
53
+ #. @context: Button to open media picker
54
+ #: src/theme/components/PostForm.tsx:178
55
+ msgid "Add Media"
56
+ msgstr ""
57
+
48
58
  #. @context: Archive filter - all types
49
59
  #: src/routes/pages/archive.tsx:115
50
60
  msgid "All"
51
61
  msgstr "所有"
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 "外觀"
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 "檔案館"
64
74
 
@@ -66,7 +76,7 @@ msgstr "檔案館"
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 "文章"
@@ -76,8 +86,13 @@ msgstr "文章"
76
86
  msgid "Articles"
77
87
  msgstr "文章"
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 ""
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 "返回"
83
98
 
@@ -99,19 +114,19 @@ msgstr "回到首頁"
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 "取消"
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 "更改密碼"
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 "點擊圖片以查看完整大小"
117
132
 
@@ -122,37 +137,42 @@ msgstr "點擊圖片以查看完整大小"
122
137
  msgid "Collections"
123
138
  msgstr "收藏夾"
124
139
 
140
+ #. @context: Post form field - assign to collections
141
+ #: src/theme/components/PostForm.tsx:261
142
+ msgid "Collections (optional)"
143
+ msgstr ""
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 "顏色主題"
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 "完成設置"
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 "確認新密碼"
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 "確認密碼"
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 "內容"
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 "複製"
158
178
 
@@ -172,7 +192,7 @@ msgid "Create Redirect"
172
192
  msgstr "建立重定向"
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 "建立您的管理員帳戶。"
178
198
 
@@ -187,12 +207,12 @@ msgid "Create your first post"
187
207
  msgstr "創建你的第一篇帖子"
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 "當前密碼"
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 "自訂路徑(選填)"
198
218
 
@@ -221,7 +241,7 @@ msgid "Delete Collection"
221
241
  msgstr "刪除收藏夾"
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 "刪除媒體"
227
247
 
@@ -231,12 +251,12 @@ msgid "Delete Page"
231
251
  msgstr "刪除頁面"
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 "刪除此媒體將永久從存儲中移除它。"
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 "示範帳戶已預填。只需點擊登入。"
242
262
 
@@ -247,11 +267,16 @@ msgstr "示範帳戶已預填。只需點擊登入。"
247
267
  msgid "Description (optional)"
248
268
  msgstr "描述(可選)"
249
269
 
270
+ #. @context: Close media picker button
271
+ #: src/theme/components/PostForm.tsx:334
272
+ msgid "Done"
273
+ msgstr ""
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 "草稿"
@@ -261,6 +286,11 @@ msgstr "草稿"
261
286
  msgid "Drafts"
262
287
  msgstr "草稿"
263
288
 
289
+ #. @context: Source name placeholder
290
+ #: src/theme/components/PostForm.tsx:214
291
+ msgid "e.g. The Verge, John Doe"
292
+ msgstr ""
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 "草稿"
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,27 +319,27 @@ msgid "Edit Page"
289
319
  msgstr "編輯頁面"
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 "編輯文章"
295
325
 
296
326
  #. @context: Setup/signin form field - email
297
327
  #. @context: Setup/signin form field - email
298
- #: src/app.tsx:213
299
- #: src/app.tsx:359
328
+ #: src/app.tsx:216
329
+ #: src/app.tsx:350
300
330
  msgid "Email"
301
331
  msgstr "電子郵件"
302
332
 
303
333
  #. @context: Password reset page description
304
- #: src/app.tsx:496
334
+ #: src/app.tsx:457
305
335
  msgid "Enter your new password."
306
336
  msgstr "請輸入您的新密碼。"
307
337
 
308
338
  #. @context: Post visibility badge
309
339
  #. @context: Post visibility badge - featured
310
340
  #. @context: Post visibility option
311
- #: src/routes/pages/home.tsx:75
312
- #: src/theme/components/PostForm.tsx:131
341
+ #: src/routes/pages/home.tsx:90
342
+ #: src/theme/components/PostForm.tsx:237
313
343
  #: src/theme/components/VisibilityBadge.tsx:26
314
344
  msgid "Featured"
315
345
  msgstr "精選"
@@ -330,7 +360,9 @@ msgid "From Path"
330
360
  msgstr "來源路徑"
331
361
 
332
362
  #. @context: Settings section heading
333
- #: src/routes/dash/settings.tsx:52
363
+ #. @context: Settings sub-navigation tab
364
+ #: src/routes/dash/settings.tsx:47
365
+ #: src/routes/dash/settings.tsx:130
334
366
  msgid "General"
335
367
  msgstr "一般設定"
336
368
 
@@ -338,7 +370,7 @@ msgstr "一般設定"
338
370
  #. @context: Post type label - image
339
371
  #. @context: Post type option
340
372
  #: src/routes/pages/archive.tsx:37
341
- #: src/theme/components/PostForm.tsx:57
373
+ #: src/theme/components/PostForm.tsx:76
342
374
  #: src/theme/components/TypeBadge.tsx:29
343
375
  msgid "Image"
344
376
  msgstr "圖片"
@@ -349,17 +381,17 @@ msgid "Images"
349
381
  msgstr "圖片"
350
382
 
351
383
  #. @context: Media upload instructions - auto optimization
352
- #: src/routes/dash/media.tsx:305
384
+ #: src/routes/dash/media.tsx:158
353
385
  msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
354
386
  msgstr "圖片會自動優化:調整大小至最大 1920 像素,轉換為 WebP 格式,並去除元數據。"
355
387
 
356
388
  #. @context: Password reset error heading
357
- #: src/app.tsx:561
389
+ #: src/app.tsx:522
358
390
  msgid "Invalid or Expired Link"
359
391
  msgstr "無效或已過期的連結"
360
392
 
361
393
  #. @context: Settings form field
362
- #: src/routes/dash/settings.tsx:93
394
+ #: src/routes/dash/settings.tsx:171
363
395
  msgid "Language"
364
396
  msgstr "語言"
365
397
 
@@ -367,7 +399,7 @@ msgstr "語言"
367
399
  #. @context: Post type label - link
368
400
  #. @context: Post type option
369
401
  #: src/routes/pages/archive.tsx:32
370
- #: src/theme/components/PostForm.tsx:51
402
+ #: src/theme/components/PostForm.tsx:70
371
403
  #: src/theme/components/TypeBadge.tsx:24
372
404
  msgid "Link"
373
405
  msgstr "連結"
@@ -382,19 +414,26 @@ msgstr "連結"
382
414
  msgid "Load more"
383
415
  msgstr "載入更多"
384
416
 
417
+ #. @context: Loading state for media picker
418
+ #: src/theme/components/PostForm.tsx:345
419
+ msgid "Loading..."
420
+ msgstr ""
421
+
385
422
  #. @context: Page path validation message
386
423
  #: src/theme/components/PageForm.tsx:76
387
424
  msgid "Lowercase letters, numbers, and hyphens only"
388
425
  msgstr "僅限小寫字母、數字和連字符"
389
426
 
390
427
  #. @context: Media detail section - Markdown snippet
391
- #: src/routes/dash/media.tsx:481
428
+ #: src/routes/dash/media.tsx:334
392
429
  msgid "Markdown"
393
430
  msgstr "Markdown"
394
431
 
395
432
  #. @context: Dashboard navigation - media library
396
433
  #. @context: Media main heading
397
- #: src/routes/dash/media.tsx:285
434
+ #. @context: Post form field - media attachments
435
+ #: src/routes/dash/media.tsx:138
436
+ #: src/theme/components/PostForm.tsx:121
398
437
  #: src/theme/layouts/DashLayout.tsx:105
399
438
  msgid "Media"
400
439
  msgstr "媒體"
@@ -404,6 +443,11 @@ msgstr "媒體"
404
443
  msgid "My Collection"
405
444
  msgstr "我的收藏"
406
445
 
446
+ #. @context: Account settings form field
447
+ #: src/routes/dash/settings.tsx:362
448
+ msgid "Name"
449
+ msgstr "名稱"
450
+
407
451
  #. @context: Help text with link
408
452
  #: src/routes/dash/index.tsx:78
409
453
  msgid "Need help? Visit the <0>documentation</0>"
@@ -427,8 +471,8 @@ msgstr "新頁面"
427
471
 
428
472
  #. @context: Password form field
429
473
  #. @context: Password reset form field
430
- #: src/app.tsx:510
431
- #: src/routes/dash/settings.tsx:153
474
+ #: src/app.tsx:471
475
+ #: src/routes/dash/settings.tsx:417
432
476
  msgid "New Password"
433
477
  msgstr "新密碼"
434
478
 
@@ -463,7 +507,7 @@ msgid "No collections yet."
463
507
  msgstr "尚未有任何收藏。"
464
508
 
465
509
  #. @context: Empty state message when no media exists
466
- #: src/routes/dash/media.tsx:320
510
+ #: src/routes/dash/media.tsx:173
467
511
  msgid "No media uploaded yet."
468
512
  msgstr "尚未上傳任何媒體。"
469
513
 
@@ -486,7 +530,7 @@ msgstr "此集合中沒有帖子。"
486
530
 
487
531
  #. @context: Empty state message on home page
488
532
  #. @context: Empty state message when no posts exist
489
- #: src/routes/pages/home.tsx:44
533
+ #: src/routes/pages/home.tsx:54
490
534
  #: src/theme/components/PostList.tsx:25
491
535
  msgid "No posts yet."
492
536
  msgstr "尚未有帖子。"
@@ -505,7 +549,7 @@ msgstr "未找到結果。"
505
549
  #. @context: Post type label - note
506
550
  #. @context: Post type option
507
551
  #: src/routes/pages/archive.tsx:27
508
- #: src/theme/components/PostForm.tsx:45
552
+ #: src/theme/components/PostForm.tsx:64
509
553
  #: src/theme/components/TypeBadge.tsx:19
510
554
  msgid "Note"
511
555
  msgstr "備註"
@@ -550,8 +594,8 @@ msgstr "頁面"
550
594
 
551
595
  #. @context: Setup/signin form field - password
552
596
  #. @context: Setup/signin form field - password
553
- #: src/app.tsx:228
554
- #: src/app.tsx:368
597
+ #: src/app.tsx:231
598
+ #: src/app.tsx:359
555
599
  msgid "Password"
556
600
  msgstr "密碼"
557
601
 
@@ -562,18 +606,18 @@ msgstr "路徑"
562
606
 
563
607
  #. @context: Link to individual post in thread
564
608
  #. @context: Link to permanent URL of post
565
- #: src/routes/pages/post.tsx:41
609
+ #: src/routes/pages/post.tsx:53
566
610
  #: src/theme/components/ThreadView.tsx:68
567
611
  msgid "Permalink"
568
612
  msgstr "永久鏈接"
569
613
 
570
614
  #. @context: Default post title
571
- #: src/routes/dash/posts.tsx:115
615
+ #: src/routes/dash/posts.tsx:131
572
616
  msgid "Post"
573
617
  msgstr "文章"
574
618
 
575
619
  #. @context: Post title placeholder
576
- #: src/theme/components/PostForm.tsx:74
620
+ #: src/theme/components/PostForm.tsx:93
577
621
  msgid "Post title..."
578
622
  msgstr "文章標題..."
579
623
 
@@ -590,7 +634,7 @@ msgid "Posts in Collection ({count})"
590
634
  msgstr "收藏中的帖子 ({count})"
591
635
 
592
636
  #. @context: Media detail section - preview
593
- #: src/routes/dash/media.tsx:404
637
+ #: src/routes/dash/media.tsx:257
594
638
  msgid "Preview"
595
639
  msgstr "預覽"
596
640
 
@@ -602,12 +646,17 @@ msgid "Previous"
602
646
  msgstr "上一頁"
603
647
 
604
648
  #. @context: Upload status - processing
605
- #: src/routes/dash/media.tsx:107
649
+ #: src/routes/dash/media.tsx:106
606
650
  msgid "Processing..."
607
651
  msgstr "處理中..."
608
652
 
653
+ #. @context: Account settings section heading
654
+ #: src/routes/dash/settings.tsx:353
655
+ msgid "Profile"
656
+ msgstr "個人資料"
657
+
609
658
  #. @context: Button to publish new post
610
- #: src/theme/components/PostForm.tsx:175
659
+ #: src/theme/components/PostForm.tsx:306
611
660
  msgid "Publish"
612
661
  msgstr "發佈"
613
662
 
@@ -634,7 +683,7 @@ msgid "Quiet"
634
683
  msgstr "安靜"
635
684
 
636
685
  #. @context: Post visibility option
637
- #: src/theme/components/PostForm.tsx:125
686
+ #: src/theme/components/PostForm.tsx:231
638
687
  msgid "Quiet (normal)"
639
688
  msgstr "安靜(正常)"
640
689
 
@@ -642,7 +691,7 @@ msgstr "安靜(正常)"
642
691
  #. @context: Post type label - quote
643
692
  #. @context: Post type option
644
693
  #: src/routes/pages/archive.tsx:33
645
- #: src/theme/components/PostForm.tsx:54
694
+ #: src/theme/components/PostForm.tsx:73
646
695
  #: src/theme/components/TypeBadge.tsx:25
647
696
  msgid "Quote"
648
697
  msgstr "引用"
@@ -660,19 +709,26 @@ msgid "Redirects"
660
709
  msgstr "重定向"
661
710
 
662
711
  #. @context: Button to remove post from collection
712
+ #. @context: Remove media attachment button
663
713
  #: src/routes/dash/collections.tsx:257
714
+ #: src/theme/components/PostForm.tsx:161
664
715
  msgid "Remove"
665
716
  msgstr "移除"
666
717
 
667
718
  #. @context: Password reset form submit button
668
719
  #. @context: Password reset page heading
669
- #: src/app.tsx:490
670
- #: src/app.tsx:541
720
+ #: src/app.tsx:451
721
+ #: src/app.tsx:502
671
722
  msgid "Reset Password"
672
723
  msgstr "重設密碼"
673
724
 
725
+ #. @context: Button to save profile
726
+ #: src/routes/dash/settings.tsx:378
727
+ msgid "Save Profile"
728
+ msgstr "保存個人資料"
729
+
674
730
  #. @context: Button to save settings
675
- #: src/routes/dash/settings.tsx:114
731
+ #: src/routes/dash/settings.tsx:192
676
732
  msgid "Save Settings"
677
733
  msgstr "保存設定"
678
734
 
@@ -688,17 +744,26 @@ msgstr "搜尋"
688
744
  msgid "Search posts..."
689
745
  msgstr "搜尋帖子..."
690
746
 
747
+ #. @context: Media picker dialog title
748
+ #: src/theme/components/PostForm.tsx:324
749
+ msgid "Select Media"
750
+ msgstr ""
751
+
752
+ #. @context: Dashboard heading
753
+ #. @context: Dashboard heading
691
754
  #. @context: Dashboard heading
692
755
  #. @context: Dashboard navigation - site settings
693
- #: src/routes/dash/settings.tsx:41
756
+ #: src/routes/dash/settings.tsx:118
757
+ #: src/routes/dash/settings.tsx:290
758
+ #: src/routes/dash/settings.tsx:341
694
759
  #: src/theme/layouts/DashLayout.tsx:133
695
760
  msgid "Settings"
696
761
  msgstr "設定"
697
762
 
698
763
  #. @context: Sign in form submit button
699
764
  #. @context: Sign in page heading
700
- #: src/app.tsx:336
701
- #: src/app.tsx:381
765
+ #: src/app.tsx:327
766
+ #: src/app.tsx:372
702
767
  msgid "Sign In"
703
768
  msgstr "登入"
704
769
 
@@ -708,12 +773,12 @@ msgid "Sign Out"
708
773
  msgstr "登出"
709
774
 
710
775
  #. @context: Settings form field
711
- #: src/routes/dash/settings.tsx:76
776
+ #: src/routes/dash/settings.tsx:154
712
777
  msgid "Site Description"
713
778
  msgstr "網站描述"
714
779
 
715
780
  #. @context: Settings form field
716
- #: src/routes/dash/settings.tsx:61
781
+ #: src/routes/dash/settings.tsx:139
717
782
  msgid "Site Name"
718
783
  msgstr "網站名稱"
719
784
 
@@ -724,8 +789,13 @@ msgstr "網站名稱"
724
789
  msgid "Slug"
725
790
  msgstr "縮略名"
726
791
 
792
+ #. @context: Post form field - name of the source website or author
793
+ #: src/theme/components/PostForm.tsx:204
794
+ msgid "Source Name (optional)"
795
+ msgstr ""
796
+
727
797
  #. @context: Post form field
728
- #: src/theme/components/PostForm.tsx:102
798
+ #: src/theme/components/PostForm.tsx:188
729
799
  msgid "Source URL (optional)"
730
800
  msgstr "來源網址(選填)"
731
801
 
@@ -750,12 +820,12 @@ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
750
820
  msgstr "此頁面的 URL 路徑。使用小寫字母、數字和連字符。"
751
821
 
752
822
  #. @context: Password reset error description
753
- #: src/app.tsx:569
823
+ #: src/app.tsx:530
754
824
  msgid "This password reset link is invalid or has expired. Please generate a new one."
755
825
  msgstr "此密碼重設連結無效或已過期。請生成一個新的連結。"
756
826
 
757
827
  #. @context: Appearance settings description
758
- #: src/routes/dash/appearance.tsx:114
828
+ #: src/routes/dash/settings.tsx:307
759
829
  msgid "This will theme both your site and your dashboard. All color themes support dark mode."
760
830
  msgstr "這將為您的網站和儀表板設置主題。所有顏色主題都支持深色模式。"
761
831
 
@@ -784,7 +854,7 @@ msgid "Title"
784
854
  msgstr "標題"
785
855
 
786
856
  #. @context: Post form field
787
- #: src/theme/components/PostForm.tsx:65
857
+ #: src/theme/components/PostForm.tsx:84
788
858
  msgid "Title (optional)"
789
859
  msgstr "標題(選填)"
790
860
 
@@ -796,13 +866,13 @@ msgstr "到路徑"
796
866
  #. @context: Post form field - post type
797
867
  #. @context: Redirect form field
798
868
  #: src/routes/dash/redirects.tsx:141
799
- #: src/theme/components/PostForm.tsx:38
869
+ #: src/theme/components/PostForm.tsx:57
800
870
  msgid "Type"
801
871
  msgstr "類型"
802
872
 
803
873
  #. @context: Post visibility badge - unlisted
804
874
  #. @context: Post visibility option
805
- #: src/theme/components/PostForm.tsx:137
875
+ #: src/theme/components/PostForm.tsx:243
806
876
  #: src/theme/components/VisibilityBadge.tsx:34
807
877
  msgid "Unlisted"
808
878
  msgstr "不公開"
@@ -815,7 +885,7 @@ msgid "Untitled"
815
885
  msgstr "無標題"
816
886
 
817
887
  #. @context: Button to update existing post
818
- #: src/theme/components/PostForm.tsx:171
888
+ #: src/theme/components/PostForm.tsx:302
819
889
  msgid "Update"
820
890
  msgstr "更新"
821
891
 
@@ -830,22 +900,22 @@ msgid "Update Page"
830
900
  msgstr "更新頁面"
831
901
 
832
902
  #. @context: Button to upload media file
833
- #: src/routes/dash/media.tsx:115
903
+ #: src/routes/dash/media.tsx:114
834
904
  msgid "Upload"
835
905
  msgstr "上傳"
836
906
 
837
907
  #. @context: Upload error message
838
- #: src/routes/dash/media.tsx:119
908
+ #: src/routes/dash/media.tsx:118
839
909
  msgid "Upload failed. Please try again."
840
910
  msgstr "上傳失敗。請再試一次。"
841
911
 
842
912
  #. @context: Upload status - uploading
843
- #: src/routes/dash/media.tsx:111
913
+ #: src/routes/dash/media.tsx:110
844
914
  msgid "Uploading..."
845
915
  msgstr "上傳中..."
846
916
 
847
917
  #. @context: Media detail section - URL
848
- #: src/routes/dash/media.tsx:444
918
+ #: src/routes/dash/media.tsx:297
849
919
  msgid "URL"
850
920
  msgstr "網址"
851
921
 
@@ -855,7 +925,7 @@ msgid "URL-safe identifier (lowercase, numbers, hyphens)"
855
925
  msgstr "網址安全識別碼(小寫、數字、連字符)"
856
926
 
857
927
  #. @context: Media URL helper text
858
- #: src/routes/dash/media.tsx:470
928
+ #: src/routes/dash/media.tsx:323
859
929
  msgid "Use this URL to embed the media in your posts."
860
930
  msgstr "使用此 URL 將媒體嵌入到您的帖子中。"
861
931
 
@@ -870,14 +940,14 @@ msgstr "使用此 URL 將媒體嵌入到您的帖子中。"
870
940
  #: src/routes/dash/collections.tsx:215
871
941
  #: src/routes/dash/pages.tsx:73
872
942
  #: src/routes/dash/pages.tsx:143
873
- #: src/routes/dash/posts.tsx:131
943
+ #: src/routes/dash/posts.tsx:147
874
944
  #: src/theme/components/ActionButtons.tsx:76
875
945
  #: src/theme/components/PostList.tsx:51
876
946
  msgid "View"
877
947
  msgstr "查看"
878
948
 
879
949
  #. @context: Link to view all posts on archive page
880
- #: src/routes/pages/home.tsx:93
950
+ #: src/routes/pages/home.tsx:109
881
951
  msgid "View all posts →"
882
952
  msgstr "查看所有文章 →"
883
953
 
@@ -887,17 +957,17 @@ msgid "View Site"
887
957
  msgstr "查看網站"
888
958
 
889
959
  #. @context: Post form field
890
- #: src/theme/components/PostForm.tsx:118
960
+ #: src/theme/components/PostForm.tsx:224
891
961
  msgid "Visibility"
892
962
  msgstr "可見性"
893
963
 
894
964
  #. @context: Setup page welcome heading
895
- #: src/app.tsx:178
965
+ #: src/app.tsx:181
896
966
  msgid "Welcome to Jant"
897
967
  msgstr "歡迎來到 Jant"
898
968
 
899
969
  #. @context: Post content placeholder
900
- #: src/theme/components/PostForm.tsx:89
970
+ #: src/theme/components/PostForm.tsx:108
901
971
  msgid "What's on your mind?"
902
972
  msgstr "你在想什麼?"
903
973
 
@@ -907,6 +977,6 @@ msgid "What's this collection about?"
907
977
  msgstr "這個收藏是關於什麼的?"
908
978
 
909
979
  #. @context: Setup form field - user name
910
- #: src/app.tsx:198
980
+ #: src/app.tsx:201
911
981
  msgid "Your Name"
912
982
  msgstr "您的姓名"