@jant/core 0.3.6 → 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 +81 -37
  57. package/src/i18n/locales/en.ts +1 -1
  58. package/src/i18n/locales/zh-Hans.po +81 -37
  59. package/src/i18n/locales/zh-Hans.ts +1 -1
  60. package/src/i18n/locales/zh-Hant.po +81 -37
  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
 
@@ -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"
@@ -63,7 +68,7 @@ msgstr "Appearance"
63
68
  #. @context: Archive page title
64
69
  #. @context: Navigation link to archive page
65
70
  #: src/routes/pages/archive.tsx:102
66
- #: src/routes/pages/home.tsx:30
71
+ #: src/routes/pages/home.tsx:40
67
72
  msgid "Archive"
68
73
  msgstr "Archive"
69
74
 
@@ -71,7 +76,7 @@ msgstr "Archive"
71
76
  #. @context: Post type label - article
72
77
  #. @context: Post type option
73
78
  #: src/routes/pages/archive.tsx:28
74
- #: src/theme/components/PostForm.tsx:48
79
+ #: src/theme/components/PostForm.tsx:67
75
80
  #: src/theme/components/TypeBadge.tsx:20
76
81
  msgid "Article"
77
82
  msgstr "Article"
@@ -81,6 +86,11 @@ msgstr "Article"
81
86
  msgid "Articles"
82
87
  msgstr "Articles"
83
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
+
84
94
  #. @context: Button to go back to media list
85
95
  #: src/routes/dash/media.tsx:245
86
96
  msgid "Back"
@@ -104,7 +114,7 @@ msgstr "Back to home"
104
114
  #: src/routes/dash/collections.tsx:345
105
115
  #: src/routes/dash/redirects.tsx:167
106
116
  #: src/theme/components/PageForm.tsx:161
107
- #: src/theme/components/PostForm.tsx:181
117
+ #: src/theme/components/PostForm.tsx:312
108
118
  msgid "Cancel"
109
119
  msgstr "Cancel"
110
120
 
@@ -127,6 +137,11 @@ msgstr "Click image to view full size"
127
137
  msgid "Collections"
128
138
  msgstr "Collections"
129
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
+
130
145
  #. @context: Appearance settings heading
131
146
  #: src/routes/dash/settings.tsx:301
132
147
  msgid "Color theme"
@@ -143,14 +158,14 @@ msgid "Confirm New Password"
143
158
  msgstr "Confirm New Password"
144
159
 
145
160
  #. @context: Password reset form field
146
- #: src/app.tsx:505
161
+ #: src/app.tsx:487
147
162
  msgid "Confirm Password"
148
163
  msgstr "Confirm Password"
149
164
 
150
165
  #. @context: Page form field label - content
151
166
  #. @context: Post form field
152
167
  #: src/theme/components/PageForm.tsx:95
153
- #: src/theme/components/PostForm.tsx:84
168
+ #: src/theme/components/PostForm.tsx:103
154
169
  msgid "Content"
155
170
  msgstr "Content"
156
171
 
@@ -197,7 +212,7 @@ msgid "Current Password"
197
212
  msgstr "Current Password"
198
213
 
199
214
  #. @context: Post form field
200
- #: src/theme/components/PostForm.tsx:154
215
+ #: src/theme/components/PostForm.tsx:285
201
216
  msgid "Custom Path (optional)"
202
217
  msgstr "Custom Path (optional)"
203
218
 
@@ -252,11 +267,16 @@ msgstr "Demo account pre-filled. Just click Sign In."
252
267
  msgid "Description (optional)"
253
268
  msgstr "Description (optional)"
254
269
 
270
+ #. @context: Close media picker button
271
+ #: src/theme/components/PostForm.tsx:334
272
+ msgid "Done"
273
+ msgstr "Done"
274
+
255
275
  #. @context: Page status option - draft
256
276
  #. @context: Post visibility badge - draft
257
277
  #. @context: Post visibility option
258
278
  #: src/theme/components/PageForm.tsx:132
259
- #: src/theme/components/PostForm.tsx:143
279
+ #: src/theme/components/PostForm.tsx:249
260
280
  #: src/theme/components/VisibilityBadge.tsx:38
261
281
  msgid "Draft"
262
282
  msgstr "Draft"
@@ -266,6 +286,11 @@ msgstr "Draft"
266
286
  msgid "Drafts"
267
287
  msgstr "Drafts"
268
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
+
269
294
  #. @context: Button to edit collection
270
295
  #. @context: Button to edit collection
271
296
  #. @context: Button to edit item
@@ -277,7 +302,7 @@ msgstr "Drafts"
277
302
  #: src/routes/dash/collections.tsx:210
278
303
  #: src/routes/dash/pages.tsx:64
279
304
  #: src/routes/dash/pages.tsx:134
280
- #: src/routes/dash/posts.tsx:124
305
+ #: src/routes/dash/posts.tsx:142
281
306
  #: src/theme/components/ActionButtons.tsx:72
282
307
  #: src/theme/components/PostList.tsx:46
283
308
  msgid "Edit"
@@ -294,7 +319,7 @@ msgid "Edit Page"
294
319
  msgstr "Edit Page"
295
320
 
296
321
  #. @context: Page heading
297
- #: src/routes/dash/posts.tsx:153
322
+ #: src/routes/dash/posts.tsx:185
298
323
  msgid "Edit Post"
299
324
  msgstr "Edit Post"
300
325
 
@@ -315,15 +340,15 @@ msgid "Email"
315
340
  msgstr "Email"
316
341
 
317
342
  #. @context: Password reset page description
318
- #: src/app.tsx:475
343
+ #: src/app.tsx:457
319
344
  msgid "Enter your new password."
320
345
  msgstr "Enter your new password."
321
346
 
322
347
  #. @context: Post visibility badge
323
348
  #. @context: Post visibility badge - featured
324
349
  #. @context: Post visibility option
325
- #: src/routes/pages/home.tsx:75
326
- #: src/theme/components/PostForm.tsx:131
350
+ #: src/routes/pages/home.tsx:90
351
+ #: src/theme/components/PostForm.tsx:237
327
352
  #: src/theme/components/VisibilityBadge.tsx:26
328
353
  msgid "Featured"
329
354
  msgstr "Featured"
@@ -354,7 +379,7 @@ msgstr "General"
354
379
  #. @context: Post type label - image
355
380
  #. @context: Post type option
356
381
  #: src/routes/pages/archive.tsx:37
357
- #: src/theme/components/PostForm.tsx:57
382
+ #: src/theme/components/PostForm.tsx:76
358
383
  #: src/theme/components/TypeBadge.tsx:29
359
384
  msgid "Image"
360
385
  msgstr "Image"
@@ -370,7 +395,7 @@ msgid "Images are automatically optimized: resized to max 1920px, converted to W
370
395
  msgstr "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
371
396
 
372
397
  #. @context: Password reset error heading
373
- #: src/app.tsx:540
398
+ #: src/app.tsx:522
374
399
  msgid "Invalid or Expired Link"
375
400
  msgstr "Invalid or Expired Link"
376
401
 
@@ -388,7 +413,7 @@ msgstr "Language"
388
413
  #. @context: Post type label - link
389
414
  #. @context: Post type option
390
415
  #: src/routes/pages/archive.tsx:32
391
- #: src/theme/components/PostForm.tsx:51
416
+ #: src/theme/components/PostForm.tsx:70
392
417
  #: src/theme/components/TypeBadge.tsx:24
393
418
  msgid "Link"
394
419
  msgstr "Link"
@@ -403,6 +428,11 @@ msgstr "Links"
403
428
  msgid "Load more"
404
429
  msgstr "Load more"
405
430
 
431
+ #. @context: Loading state for media picker
432
+ #: src/theme/components/PostForm.tsx:345
433
+ msgid "Loading..."
434
+ msgstr "Loading..."
435
+
406
436
  #. @context: Page path validation message
407
437
  #: src/theme/components/PageForm.tsx:76
408
438
  msgid "Lowercase letters, numbers, and hyphens only"
@@ -415,7 +445,9 @@ msgstr "Markdown"
415
445
 
416
446
  #. @context: Dashboard navigation - media library
417
447
  #. @context: Media main heading
448
+ #. @context: Post form field - media attachments
418
449
  #: src/routes/dash/media.tsx:138
450
+ #: src/theme/components/PostForm.tsx:121
419
451
  #: src/theme/layouts/DashLayout.tsx:105
420
452
  msgid "Media"
421
453
  msgstr "Media"
@@ -458,7 +490,7 @@ msgstr "New Page"
458
490
 
459
491
  #. @context: Password form field
460
492
  #. @context: Password reset form field
461
- #: src/app.tsx:489
493
+ #: src/app.tsx:471
462
494
  #: src/routes/dash/settings.tsx:417
463
495
  msgid "New Password"
464
496
  msgstr "New Password"
@@ -517,7 +549,7 @@ msgstr "No posts in this collection."
517
549
 
518
550
  #. @context: Empty state message on home page
519
551
  #. @context: Empty state message when no posts exist
520
- #: src/routes/pages/home.tsx:44
552
+ #: src/routes/pages/home.tsx:54
521
553
  #: src/theme/components/PostList.tsx:25
522
554
  msgid "No posts yet."
523
555
  msgstr "No posts yet."
@@ -536,7 +568,7 @@ msgstr "No results found."
536
568
  #. @context: Post type label - note
537
569
  #. @context: Post type option
538
570
  #: src/routes/pages/archive.tsx:27
539
- #: src/theme/components/PostForm.tsx:45
571
+ #: src/theme/components/PostForm.tsx:64
540
572
  #: src/theme/components/TypeBadge.tsx:19
541
573
  msgid "Note"
542
574
  msgstr "Note"
@@ -593,18 +625,18 @@ msgstr "Path"
593
625
 
594
626
  #. @context: Link to individual post in thread
595
627
  #. @context: Link to permanent URL of post
596
- #: src/routes/pages/post.tsx:41
628
+ #: src/routes/pages/post.tsx:53
597
629
  #: src/theme/components/ThreadView.tsx:68
598
630
  msgid "Permalink"
599
631
  msgstr "Permalink"
600
632
 
601
633
  #. @context: Default post title
602
- #: src/routes/dash/posts.tsx:113
634
+ #: src/routes/dash/posts.tsx:131
603
635
  msgid "Post"
604
636
  msgstr "Post"
605
637
 
606
638
  #. @context: Post title placeholder
607
- #: src/theme/components/PostForm.tsx:74
639
+ #: src/theme/components/PostForm.tsx:93
608
640
  msgid "Post title..."
609
641
  msgstr "Post title..."
610
642
 
@@ -643,7 +675,7 @@ msgid "Profile"
643
675
  msgstr "Profile"
644
676
 
645
677
  #. @context: Button to publish new post
646
- #: src/theme/components/PostForm.tsx:175
678
+ #: src/theme/components/PostForm.tsx:306
647
679
  msgid "Publish"
648
680
  msgstr "Publish"
649
681
 
@@ -670,7 +702,7 @@ msgid "Quiet"
670
702
  msgstr "Quiet"
671
703
 
672
704
  #. @context: Post visibility option
673
- #: src/theme/components/PostForm.tsx:125
705
+ #: src/theme/components/PostForm.tsx:231
674
706
  msgid "Quiet (normal)"
675
707
  msgstr "Quiet (normal)"
676
708
 
@@ -678,7 +710,7 @@ msgstr "Quiet (normal)"
678
710
  #. @context: Post type label - quote
679
711
  #. @context: Post type option
680
712
  #: src/routes/pages/archive.tsx:33
681
- #: src/theme/components/PostForm.tsx:54
713
+ #: src/theme/components/PostForm.tsx:73
682
714
  #: src/theme/components/TypeBadge.tsx:25
683
715
  msgid "Quote"
684
716
  msgstr "Quote"
@@ -696,14 +728,16 @@ msgid "Redirects"
696
728
  msgstr "Redirects"
697
729
 
698
730
  #. @context: Button to remove post from collection
731
+ #. @context: Remove media attachment button
699
732
  #: src/routes/dash/collections.tsx:257
733
+ #: src/theme/components/PostForm.tsx:161
700
734
  msgid "Remove"
701
735
  msgstr "Remove"
702
736
 
703
737
  #. @context: Password reset form submit button
704
738
  #. @context: Password reset page heading
705
- #: src/app.tsx:469
706
- #: src/app.tsx:520
739
+ #: src/app.tsx:451
740
+ #: src/app.tsx:502
707
741
  msgid "Reset Password"
708
742
  msgstr "Reset Password"
709
743
 
@@ -734,6 +768,11 @@ msgstr "Search"
734
768
  msgid "Search posts..."
735
769
  msgstr "Search posts..."
736
770
 
771
+ #. @context: Media picker dialog title
772
+ #: src/theme/components/PostForm.tsx:324
773
+ msgid "Select Media"
774
+ msgstr "Select Media"
775
+
737
776
  #. @context: Dashboard heading
738
777
  #. @context: Dashboard heading
739
778
  #. @context: Dashboard heading
@@ -779,8 +818,13 @@ msgstr "Site Name"
779
818
  msgid "Slug"
780
819
  msgstr "Slug"
781
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
+
782
826
  #. @context: Post form field
783
- #: src/theme/components/PostForm.tsx:102
827
+ #: src/theme/components/PostForm.tsx:188
784
828
  msgid "Source URL (optional)"
785
829
  msgstr "Source URL (optional)"
786
830
 
@@ -810,7 +854,7 @@ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
810
854
  msgstr "The URL path for this page. Use lowercase letters, numbers, and hyphens."
811
855
 
812
856
  #. @context: Password reset error description
813
- #: src/app.tsx:548
857
+ #: src/app.tsx:530
814
858
  msgid "This password reset link is invalid or has expired. Please generate a new one."
815
859
  msgstr "This password reset link is invalid or has expired. Please generate a new one."
816
860
 
@@ -844,7 +888,7 @@ msgid "Title"
844
888
  msgstr "Title"
845
889
 
846
890
  #. @context: Post form field
847
- #: src/theme/components/PostForm.tsx:65
891
+ #: src/theme/components/PostForm.tsx:84
848
892
  msgid "Title (optional)"
849
893
  msgstr "Title (optional)"
850
894
 
@@ -856,13 +900,13 @@ msgstr "To Path"
856
900
  #. @context: Post form field - post type
857
901
  #. @context: Redirect form field
858
902
  #: src/routes/dash/redirects.tsx:141
859
- #: src/theme/components/PostForm.tsx:38
903
+ #: src/theme/components/PostForm.tsx:57
860
904
  msgid "Type"
861
905
  msgstr "Type"
862
906
 
863
907
  #. @context: Post visibility badge - unlisted
864
908
  #. @context: Post visibility option
865
- #: src/theme/components/PostForm.tsx:137
909
+ #: src/theme/components/PostForm.tsx:243
866
910
  #: src/theme/components/VisibilityBadge.tsx:34
867
911
  msgid "Unlisted"
868
912
  msgstr "Unlisted"
@@ -875,7 +919,7 @@ msgid "Untitled"
875
919
  msgstr "Untitled"
876
920
 
877
921
  #. @context: Button to update existing post
878
- #: src/theme/components/PostForm.tsx:171
922
+ #: src/theme/components/PostForm.tsx:302
879
923
  msgid "Update"
880
924
  msgstr "Update"
881
925
 
@@ -935,14 +979,14 @@ msgstr "Use this URL to embed the media in your posts."
935
979
  #: src/routes/dash/collections.tsx:215
936
980
  #: src/routes/dash/pages.tsx:73
937
981
  #: src/routes/dash/pages.tsx:143
938
- #: src/routes/dash/posts.tsx:129
982
+ #: src/routes/dash/posts.tsx:147
939
983
  #: src/theme/components/ActionButtons.tsx:76
940
984
  #: src/theme/components/PostList.tsx:51
941
985
  msgid "View"
942
986
  msgstr "View"
943
987
 
944
988
  #. @context: Link to view all posts on archive page
945
- #: src/routes/pages/home.tsx:93
989
+ #: src/routes/pages/home.tsx:109
946
990
  msgid "View all posts →"
947
991
  msgstr "View all posts →"
948
992
 
@@ -952,7 +996,7 @@ msgid "View Site"
952
996
  msgstr "View Site"
953
997
 
954
998
  #. @context: Post form field
955
- #: src/theme/components/PostForm.tsx:118
999
+ #: src/theme/components/PostForm.tsx:224
956
1000
  msgid "Visibility"
957
1001
  msgstr "Visibility"
958
1002
 
@@ -962,7 +1006,7 @@ msgid "Welcome to Jant"
962
1006
  msgstr "Welcome to Jant"
963
1007
 
964
1008
  #. @context: Post content placeholder
965
- #: src/theme/components/PostForm.tsx:89
1009
+ #: src/theme/components/PostForm.tsx:108
966
1010
  msgid "What's on your mind?"
967
1011
  msgstr "What's on your mind?"
968
1012
 
@@ -1 +1 @@
1
- /*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+7Wr2a\":[\"Edit: \",[\"title\"]],\"+MACwa\":[\"No collections yet.\"],\"+owNNn\":[\"Posts\"],\"+zy2Nq\":[\"Type\"],\"/0D1Xp\":[\"Edit Collection\"],\"/Rj5P4\":[\"Your Name\"],\"07Epll\":[\"This will theme both your site and your dashboard. All color themes support dark mode.\"],\"0JkyS7\":[\"Create your first page\"],\"0a6MpL\":[\"New Redirect\"],\"1CU1Td\":[\"URL-safe identifier (lowercase, numbers, hyphens)\"],\"1DBGsz\":[\"Notes\"],\"2N0qpv\":[\"Post title...\"],\"2q/Q7x\":[\"Visibility\"],\"2rJGtU\":[\"Page title...\"],\"3Yvsaz\":[\"302 (Temporary)\"],\"4/SFQS\":[\"View Site\"],\"40TVQj\":[\"Custom Path (optional)\"],\"4KzVT6\":[\"Delete Page\"],\"4b3oEV\":[\"Content\"],\"4mDPGp\":[\"The URL path for this page. Use lowercase letters, numbers, and hyphens.\"],\"6WdDG7\":[\"Page\"],\"6YtxFj\":[\"Name\"],\"7G4SBz\":[\"Page content (Markdown supported)...\"],\"7Mk+/h\":[\"Update Collection\"],\"7Q1KKN\":[\"From Path\"],\"7aECQB\":[\"Invalid or Expired Link\"],\"7nGhhM\":[\"What's on your mind?\"],\"7p5kLi\":[\"Dashboard\"],\"7vhWI8\":[\"New Password\"],\"8ZsakT\":[\"Password\"],\"90Luob\":[[\"count\"],\" replies\"],\"A1taO8\":[\"Search\"],\"AeXO77\":[\"Account\"],\"AyHO4m\":[\"What's this collection about?\"],\"B373X+\":[\"Edit Post\"],\"B495Gs\":[\"Archive\"],\"BjF0Jv\":[\"Lowercase letters, numbers, and hyphens only\"],\"D9Oea+\":[\"Permalink\"],\"DCKkhU\":[\"Current Password\"],\"DHhJ7s\":[\"Previous\"],\"DoJzLz\":[\"Collections\"],\"E80cJw\":[\"Deleting this media will remove it permanently from storage.\"],\"EEYbdt\":[\"Publish\"],\"EGwzOK\":[\"Complete Setup\"],\"EkH9pt\":[\"Update\"],\"FGrimz\":[\"New Post\"],\"FkMol5\":[\"Featured\"],\"Fxf4jq\":[\"Description (optional)\"],\"GA5A5H\":[\"Delete Collection\"],\"GX2VMa\":[\"Create your admin account.\"],\"GbVAnd\":[\"This password reset link is invalid or has expired. Please generate a new one.\"],\"GorKul\":[\"Welcome to Jant\"],\"GrZ6fH\":[\"New Page\"],\"GxkJXS\":[\"Uploading...\"],\"HfyyXl\":[\"My Blog\"],\"HiETwV\":[\"Quiet (normal)\"],\"Hzi9AA\":[\"No posts found.\"],\"I6gXOa\":[\"Path\"],\"IagCbF\":[\"URL\"],\"J4FNfC\":[\"No posts in this collection.\"],\"JIBC/T\":[\"Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB.\"],\"Jed1wB\":[\"Need help? Visit the <0>documentation</0>\"],\"JiP4aa\":[\"Published pages are accessible via their path. Drafts are not visible.\"],\"K9NcLu\":[\"Use this URL to embed the media in your posts.\"],\"KbS2K9\":[\"Reset Password\"],\"KiJn9B\":[\"Note\"],\"L85WcV\":[\"Slug\"],\"LkvLQe\":[\"No pages yet.\"],\"M1RvTd\":[\"Click image to view full size\"],\"M8kJqa\":[\"Drafts\"],\"M9xgHy\":[\"Redirects\"],\"MHrjPM\":[\"Title\"],\"MZbQHL\":[\"No results found.\"],\"Mhf/H/\":[\"Create Redirect\"],\"MqghUt\":[\"Search posts...\"],\"N40H+G\":[\"All\"],\"O3oNi5\":[\"Email\"],\"OCNZaU\":[\"The path to redirect from\"],\"ODiSoW\":[\"No posts yet.\"],\"ONWvwQ\":[\"Upload\"],\"Pbm2/N\":[\"Create Collection\"],\"RDjuBN\":[\"Setup\"],\"Rj01Fz\":[\"Links\"],\"RwGhWy\":[\"Thread with \",[\"count\"],\" posts\"],\"SJmfuf\":[\"Site Name\"],\"ST+lN2\":[\"No media uploaded yet.\"],\"Tt5T6+\":[\"Articles\"],\"TxE+Mj\":[\"1 reply\"],\"Tz0i8g\":[\"Settings\"],\"U5v6Gh\":[\"Edit Page\"],\"UDMjsP\":[\"Quick Actions\"],\"UGT5vp\":[\"Save Settings\"],\"VUSy8D\":[\"Search failed. Please try again.\"],\"VhMDMg\":[\"Change Password\"],\"WDcQq9\":[\"Unlisted\"],\"Weq9zb\":[\"General\"],\"WmZ/rP\":[\"To Path\"],\"Y+7JGK\":[\"Create Page\"],\"ZQKLI1\":[\"Danger Zone\"],\"ZhhOwV\":[\"Quote\"],\"aAIQg2\":[\"Appearance\"],\"an5hVd\":[\"Images\"],\"b+/jO6\":[\"301 (Permanent)\"],\"bHYIks\":[\"Sign Out\"],\"biOepV\":[\"← Back to home\"],\"cnGeoo\":[\"Delete\"],\"dEgA5A\":[\"Cancel\"],\"e6Jr7Q\":[\"← Back to Collections\"],\"ePK91l\":[\"Edit\"],\"eWLklq\":[\"Quotes\"],\"eneWvv\":[\"Draft\"],\"er8+x7\":[\"Demo account pre-filled. Just click Sign In.\"],\"f6e0Ry\":[\"Article\"],\"fG7BxZ\":[\"Upload images via the API: POST /api/upload with a file form field.\"],\"fttd2R\":[\"My Collection\"],\"hG89Ed\":[\"Image\"],\"hWOZIv\":[\"Enter your new password.\"],\"hXzOVo\":[\"Next\"],\"he3ygx\":[\"Copy\"],\"iH8pgl\":[\"Back\"],\"ig4hg2\":[\"Let's set up your site.\"],\"jpctdh\":[\"View\"],\"k1ifdL\":[\"Processing...\"],\"mTOYla\":[\"View all posts →\"],\"n1ekoW\":[\"Sign In\"],\"oYPBa0\":[\"Update Page\"],\"p2/GCq\":[\"Confirm Password\"],\"pRhYH2\":[\"Posts in Collection (\",[\"count\"],\")\"],\"pZq3aX\":[\"Upload failed. Please try again.\"],\"qMyM2u\":[\"Source URL (optional)\"],\"r1MpXi\":[\"Quiet\"],\"rFmBG3\":[\"Color theme\"],\"rdUucN\":[\"Preview\"],\"rzNUSl\":[\"Thread with 1 post\"],\"sGajR7\":[\"Thread start\"],\"ssqvZi\":[\"Save Profile\"],\"t/YqKh\":[\"Remove\"],\"tfrt7B\":[\"No redirects configured.\"],\"tiq7kl\":[\"Page \",[\"page\"]],\"u2f7vd\":[\"Site Description\"],\"u3wRF+\":[\"Published\"],\"u6Hp4N\":[\"Markdown\"],\"uAQUqI\":[\"Status\"],\"vERlcd\":[\"Profile\"],\"vXIe7J\":[\"Language\"],\"vzU4k9\":[\"New Collection\"],\"wEF6Ix\":[\"The destination path or URL\"],\"wK4OTM\":[\"Title (optional)\"],\"wM5UXj\":[\"Delete Media\"],\"wRR604\":[\"Pages\"],\"wja8aL\":[\"Untitled\"],\"x+doid\":[\"Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped.\"],\"x0mzE0\":[\"Create your first post\"],\"x4RuFo\":[\"Back to home\"],\"xYilR2\":[\"Media\"],\"y28hnO\":[\"Post\"],\"yQ2kGp\":[\"Load more\"],\"yjkELF\":[\"Confirm New Password\"],\"yzF66j\":[\"Link\"],\"z8ajIE\":[\"Found 1 result\"],\"zH6KqE\":[\"Found \",[\"count\"],\" results\"]}")as Messages;
1
+ /*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+7Wr2a\":[\"Edit: \",[\"title\"]],\"+MACwa\":[\"No collections yet.\"],\"+owNNn\":[\"Posts\"],\"+zy2Nq\":[\"Type\"],\"/0D1Xp\":[\"Edit Collection\"],\"/Rj5P4\":[\"Your Name\"],\"07Epll\":[\"This will theme both your site and your dashboard. All color themes support dark mode.\"],\"0JkyS7\":[\"Create your first page\"],\"0a6MpL\":[\"New Redirect\"],\"1CU1Td\":[\"URL-safe identifier (lowercase, numbers, hyphens)\"],\"1DBGsz\":[\"Notes\"],\"1o+wgo\":[\"e.g. The Verge, John Doe\"],\"2N0qpv\":[\"Post title...\"],\"2fUwEY\":[\"Select Media\"],\"2q/Q7x\":[\"Visibility\"],\"2rJGtU\":[\"Page title...\"],\"3Yvsaz\":[\"302 (Temporary)\"],\"4/SFQS\":[\"View Site\"],\"40TVQj\":[\"Custom Path (optional)\"],\"4KzVT6\":[\"Delete Page\"],\"4b3oEV\":[\"Content\"],\"4mDPGp\":[\"The URL path for this page. Use lowercase letters, numbers, and hyphens.\"],\"6WdDG7\":[\"Page\"],\"6YtxFj\":[\"Name\"],\"7G4SBz\":[\"Page content (Markdown supported)...\"],\"7Mk+/h\":[\"Update Collection\"],\"7Q1KKN\":[\"From Path\"],\"7aECQB\":[\"Invalid or Expired Link\"],\"7nGhhM\":[\"What's on your mind?\"],\"7p5kLi\":[\"Dashboard\"],\"7vhWI8\":[\"New Password\"],\"8ZsakT\":[\"Password\"],\"90Luob\":[[\"count\"],\" replies\"],\"A1taO8\":[\"Search\"],\"AeXO77\":[\"Account\"],\"AyHO4m\":[\"What's this collection about?\"],\"B373X+\":[\"Edit Post\"],\"B495Gs\":[\"Archive\"],\"BjF0Jv\":[\"Lowercase letters, numbers, and hyphens only\"],\"D9Oea+\":[\"Permalink\"],\"DCKkhU\":[\"Current Password\"],\"DHhJ7s\":[\"Previous\"],\"DPfwMq\":[\"Done\"],\"DoJzLz\":[\"Collections\"],\"E80cJw\":[\"Deleting this media will remove it permanently from storage.\"],\"EEYbdt\":[\"Publish\"],\"EGwzOK\":[\"Complete Setup\"],\"EkH9pt\":[\"Update\"],\"FGrimz\":[\"New Post\"],\"FkMol5\":[\"Featured\"],\"Fxf4jq\":[\"Description (optional)\"],\"GA5A5H\":[\"Delete Collection\"],\"GX2VMa\":[\"Create your admin account.\"],\"GbVAnd\":[\"This password reset link is invalid or has expired. Please generate a new one.\"],\"GorKul\":[\"Welcome to Jant\"],\"GrZ6fH\":[\"New Page\"],\"GxkJXS\":[\"Uploading...\"],\"HfyyXl\":[\"My Blog\"],\"HiETwV\":[\"Quiet (normal)\"],\"Hzi9AA\":[\"No posts found.\"],\"I6gXOa\":[\"Path\"],\"I8hDlV\":[\"At least 1 image required for image posts.\"],\"IagCbF\":[\"URL\"],\"J4FNfC\":[\"No posts in this collection.\"],\"JIBC/T\":[\"Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB.\"],\"Jed1wB\":[\"Need help? Visit the <0>documentation</0>\"],\"JiP4aa\":[\"Published pages are accessible via their path. Drafts are not visible.\"],\"K9NcLu\":[\"Use this URL to embed the media in your posts.\"],\"KbS2K9\":[\"Reset Password\"],\"KiJn9B\":[\"Note\"],\"L85WcV\":[\"Slug\"],\"LkvLQe\":[\"No pages yet.\"],\"M1RvTd\":[\"Click image to view full size\"],\"M8kJqa\":[\"Drafts\"],\"M9xgHy\":[\"Redirects\"],\"MHrjPM\":[\"Title\"],\"MWBOxm\":[\"Collections (optional)\"],\"MZbQHL\":[\"No results found.\"],\"Mhf/H/\":[\"Create Redirect\"],\"MqghUt\":[\"Search posts...\"],\"N40H+G\":[\"All\"],\"O3oNi5\":[\"Email\"],\"OCNZaU\":[\"The path to redirect from\"],\"ODiSoW\":[\"No posts yet.\"],\"ONWvwQ\":[\"Upload\"],\"Pbm2/N\":[\"Create Collection\"],\"RDjuBN\":[\"Setup\"],\"Rj01Fz\":[\"Links\"],\"RwGhWy\":[\"Thread with \",[\"count\"],\" posts\"],\"SJmfuf\":[\"Site Name\"],\"ST+lN2\":[\"No media uploaded yet.\"],\"Tt5T6+\":[\"Articles\"],\"TxE+Mj\":[\"1 reply\"],\"Tz0i8g\":[\"Settings\"],\"U5v6Gh\":[\"Edit Page\"],\"UDMjsP\":[\"Quick Actions\"],\"UGT5vp\":[\"Save Settings\"],\"VUSy8D\":[\"Search failed. Please try again.\"],\"VhMDMg\":[\"Change Password\"],\"WDcQq9\":[\"Unlisted\"],\"Weq9zb\":[\"General\"],\"WmZ/rP\":[\"To Path\"],\"Y+7JGK\":[\"Create Page\"],\"Z3FXyt\":[\"Loading...\"],\"ZQKLI1\":[\"Danger Zone\"],\"ZhhOwV\":[\"Quote\"],\"aAIQg2\":[\"Appearance\"],\"an5hVd\":[\"Images\"],\"b+/jO6\":[\"301 (Permanent)\"],\"bHYIks\":[\"Sign Out\"],\"biOepV\":[\"← Back to home\"],\"cnGeoo\":[\"Delete\"],\"dEgA5A\":[\"Cancel\"],\"e6Jr7Q\":[\"← Back to Collections\"],\"ePK91l\":[\"Edit\"],\"eWLklq\":[\"Quotes\"],\"eneWvv\":[\"Draft\"],\"er8+x7\":[\"Demo account pre-filled. Just click Sign In.\"],\"f6e0Ry\":[\"Article\"],\"fG7BxZ\":[\"Upload images via the API: POST /api/upload with a file form field.\"],\"fttd2R\":[\"My Collection\"],\"hG89Ed\":[\"Image\"],\"hWOZIv\":[\"Enter your new password.\"],\"hXzOVo\":[\"Next\"],\"he3ygx\":[\"Copy\"],\"iH8pgl\":[\"Back\"],\"ig4hg2\":[\"Let's set up your site.\"],\"jpctdh\":[\"View\"],\"k1ifdL\":[\"Processing...\"],\"mTOYla\":[\"View all posts →\"],\"n1ekoW\":[\"Sign In\"],\"oJFOZk\":[\"Source Name (optional)\"],\"oYPBa0\":[\"Update Page\"],\"p2/GCq\":[\"Confirm Password\"],\"pRhYH2\":[\"Posts in Collection (\",[\"count\"],\")\"],\"pZq3aX\":[\"Upload failed. Please try again.\"],\"qMyM2u\":[\"Source URL (optional)\"],\"qiXmlF\":[\"Add Media\"],\"r1MpXi\":[\"Quiet\"],\"rFmBG3\":[\"Color theme\"],\"rdUucN\":[\"Preview\"],\"rzNUSl\":[\"Thread with 1 post\"],\"sGajR7\":[\"Thread start\"],\"ssqvZi\":[\"Save Profile\"],\"t/YqKh\":[\"Remove\"],\"tfrt7B\":[\"No redirects configured.\"],\"tiq7kl\":[\"Page \",[\"page\"]],\"u2f7vd\":[\"Site Description\"],\"u3wRF+\":[\"Published\"],\"u6Hp4N\":[\"Markdown\"],\"uAQUqI\":[\"Status\"],\"vERlcd\":[\"Profile\"],\"vXIe7J\":[\"Language\"],\"vzU4k9\":[\"New Collection\"],\"wEF6Ix\":[\"The destination path or URL\"],\"wK4OTM\":[\"Title (optional)\"],\"wM5UXj\":[\"Delete Media\"],\"wRR604\":[\"Pages\"],\"wja8aL\":[\"Untitled\"],\"x+doid\":[\"Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped.\"],\"x0mzE0\":[\"Create your first post\"],\"x4RuFo\":[\"Back to home\"],\"xYilR2\":[\"Media\"],\"y28hnO\":[\"Post\"],\"yQ2kGp\":[\"Load more\"],\"yjkELF\":[\"Confirm New Password\"],\"yzF66j\":[\"Link\"],\"z8ajIE\":[\"Found 1 result\"],\"zH6KqE\":[\"Found \",[\"count\"],\" results\"]}")as Messages;