@jant/core 0.3.24 → 0.3.26

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 (277) hide show
  1. package/dist/app.js +101 -571
  2. package/dist/client.js +1 -0
  3. package/dist/db/schema.js +1 -1
  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 +3 -9
  8. package/dist/lib/avatar-upload.js +134 -0
  9. package/dist/lib/config.js +39 -0
  10. package/dist/lib/constants.js +10 -9
  11. package/dist/lib/favicon.js +102 -0
  12. package/dist/lib/image.js +13 -17
  13. package/dist/lib/media-helpers.js +2 -2
  14. package/dist/lib/nav-reorder.js +1 -1
  15. package/dist/lib/navigation.js +48 -3
  16. package/dist/lib/pagination.js +44 -0
  17. package/dist/lib/render.js +16 -11
  18. package/dist/lib/schemas.js +34 -3
  19. package/dist/lib/theme.js +4 -4
  20. package/dist/lib/timeline.js +24 -48
  21. package/dist/lib/timezones.js +388 -0
  22. package/dist/lib/view.js +3 -3
  23. package/dist/routes/api/collections.js +124 -0
  24. package/dist/routes/api/nav-items.js +104 -0
  25. package/dist/routes/api/pages.js +91 -0
  26. package/dist/routes/api/posts.js +3 -3
  27. package/dist/routes/api/search.js +2 -2
  28. package/dist/routes/api/settings.js +68 -0
  29. package/dist/routes/api/upload.js +3 -3
  30. package/dist/routes/auth/reset.js +221 -0
  31. package/dist/routes/auth/setup.js +194 -0
  32. package/dist/routes/auth/signin.js +176 -0
  33. package/dist/routes/compose.js +48 -0
  34. package/dist/routes/dash/collections.js +24 -416
  35. package/dist/routes/dash/index.js +1 -1
  36. package/dist/routes/dash/media.js +13 -393
  37. package/dist/routes/dash/pages.js +112 -86
  38. package/dist/routes/dash/posts.js +3 -5
  39. package/dist/routes/dash/redirects.js +20 -14
  40. package/dist/routes/dash/settings.js +213 -518
  41. package/dist/routes/feed/rss.js +4 -3
  42. package/dist/routes/feed/sitemap.js +5 -3
  43. package/dist/routes/pages/archive.js +3 -6
  44. package/dist/routes/pages/collection.js +3 -6
  45. package/dist/routes/pages/collections.js +28 -0
  46. package/dist/routes/pages/featured.js +36 -0
  47. package/dist/routes/pages/home.js +33 -49
  48. package/dist/routes/pages/latest.js +45 -0
  49. package/dist/routes/pages/page.js +29 -32
  50. package/dist/routes/pages/post.js +3 -6
  51. package/dist/routes/pages/search.js +3 -6
  52. package/dist/services/page.js +5 -1
  53. package/dist/services/post.js +45 -31
  54. package/dist/services/search.js +1 -1
  55. package/dist/types/bindings.js +3 -0
  56. package/dist/types/config.js +147 -0
  57. package/dist/types/constants.js +27 -0
  58. package/dist/types/entities.js +3 -0
  59. package/dist/types/operations.js +3 -0
  60. package/dist/types/props.js +3 -0
  61. package/dist/types/views.js +5 -0
  62. package/dist/types.js +8 -111
  63. package/dist/{theme → ui}/color-themes.js +33 -33
  64. package/dist/ui/compose/ComposeDialog.js +467 -0
  65. package/dist/ui/compose/ComposePrompt.js +55 -0
  66. package/dist/{theme/components/TypeBadge.js → ui/dash/FormatBadge.js} +1 -2
  67. package/dist/{theme/components → ui/dash}/PageForm.js +21 -15
  68. package/dist/{theme/components → ui/dash}/PostForm.js +22 -43
  69. package/dist/{theme/components → ui/dash}/PostList.js +6 -6
  70. package/dist/{theme/components/VisibilityBadge.js → ui/dash/StatusBadge.js} +1 -2
  71. package/dist/ui/dash/collections/CollectionForm.js +152 -0
  72. package/dist/ui/dash/collections/CollectionsListContent.js +68 -0
  73. package/dist/ui/dash/collections/ViewCollectionContent.js +96 -0
  74. package/dist/{theme/components → ui/dash}/index.js +3 -6
  75. package/dist/ui/dash/media/MediaListContent.js +166 -0
  76. package/dist/ui/dash/media/ViewMediaContent.js +212 -0
  77. package/dist/ui/dash/pages/LinkFormContent.js +130 -0
  78. package/dist/ui/dash/pages/UnifiedPagesContent.js +193 -0
  79. package/dist/ui/dash/settings/AccountContent.js +209 -0
  80. package/dist/ui/dash/settings/AppearanceContent.js +259 -0
  81. package/dist/ui/dash/settings/GeneralContent.js +536 -0
  82. package/dist/ui/dash/settings/SettingsNav.js +41 -0
  83. package/dist/{themes/threads/timeline → ui/feed}/LinkCard.js +6 -2
  84. package/dist/{themes/threads/timeline → ui/feed}/NoteCard.js +11 -6
  85. package/dist/{themes/threads/timeline → ui/feed}/QuoteCard.js +10 -6
  86. package/dist/{themes/threads/timeline → ui/feed}/ThreadPreview.js +7 -9
  87. package/dist/ui/feed/TimelineFeed.js +41 -0
  88. package/dist/ui/feed/TimelineItem.js +27 -0
  89. package/dist/ui/font-themes.js +36 -0
  90. package/dist/{theme → ui}/layouts/BaseLayout.js +34 -2
  91. package/dist/{theme → ui}/layouts/DashLayout.js +0 -8
  92. package/dist/ui/layouts/SiteLayout.js +169 -0
  93. package/dist/{themes/threads → ui}/pages/ArchivePage.js +16 -14
  94. package/dist/{themes/threads → ui}/pages/CollectionPage.js +6 -1
  95. package/dist/ui/pages/CollectionsPage.js +76 -0
  96. package/dist/ui/pages/FeaturedPage.js +24 -0
  97. package/dist/ui/pages/HomePage.js +24 -0
  98. package/dist/{themes/threads → ui}/pages/PostPage.js +13 -8
  99. package/dist/{themes/threads → ui}/pages/SearchPage.js +9 -7
  100. package/dist/{themes/threads → ui}/pages/SinglePage.js +3 -2
  101. package/dist/{theme/components → ui/shared}/MediaGallery.js +1 -1
  102. package/dist/{theme/components → ui/shared}/Pagination.js +41 -2
  103. package/dist/{theme/components → ui/shared}/ThreadView.js +2 -2
  104. package/dist/ui/shared/index.js +5 -0
  105. package/package.json +1 -9
  106. package/src/__tests__/helpers/db.ts +3 -0
  107. package/src/app.tsx +131 -561
  108. package/src/client.ts +1 -0
  109. package/src/db/migrations/0006_rename_slug_to_path.sql +5 -0
  110. package/src/db/migrations/meta/_journal.json +7 -0
  111. package/src/db/schema.ts +1 -1
  112. package/src/i18n/locales/en.po +477 -261
  113. package/src/i18n/locales/en.ts +1 -1
  114. package/src/i18n/locales/zh-Hans.po +477 -261
  115. package/src/i18n/locales/zh-Hans.ts +1 -1
  116. package/src/i18n/locales/zh-Hant.po +477 -261
  117. package/src/i18n/locales/zh-Hant.ts +1 -1
  118. package/src/index.ts +7 -36
  119. package/src/lib/__tests__/config.test.ts +192 -0
  120. package/src/lib/__tests__/favicon.test.ts +151 -0
  121. package/src/lib/__tests__/image.test.ts +2 -6
  122. package/src/lib/__tests__/schemas.test.ts +60 -19
  123. package/src/lib/__tests__/timeline.test.ts +45 -81
  124. package/src/lib/__tests__/timezones.test.ts +61 -0
  125. package/src/lib/__tests__/view.test.ts +15 -9
  126. package/src/lib/avatar-upload.ts +165 -0
  127. package/src/lib/config.ts +47 -0
  128. package/src/lib/constants.ts +19 -10
  129. package/src/lib/favicon.ts +115 -0
  130. package/src/lib/image.ts +13 -21
  131. package/src/lib/media-helpers.ts +2 -2
  132. package/src/lib/nav-reorder.ts +1 -1
  133. package/src/lib/navigation.ts +73 -4
  134. package/src/lib/pagination.ts +50 -0
  135. package/src/lib/render.tsx +22 -15
  136. package/src/lib/schemas.ts +47 -6
  137. package/src/lib/theme.ts +5 -5
  138. package/src/lib/timeline.ts +28 -57
  139. package/src/lib/timezones.ts +325 -0
  140. package/src/lib/view.ts +3 -3
  141. package/src/preset.css +2 -1
  142. package/src/routes/__tests__/compose.test.ts +199 -0
  143. package/src/routes/api/__tests__/collections.test.ts +249 -0
  144. package/src/routes/api/__tests__/nav-items.test.ts +222 -0
  145. package/src/routes/api/__tests__/pages.test.ts +218 -0
  146. package/src/routes/api/__tests__/settings.test.ts +132 -0
  147. package/src/routes/api/collections.ts +143 -0
  148. package/src/routes/api/nav-items.ts +115 -0
  149. package/src/routes/api/pages.ts +101 -0
  150. package/src/routes/api/posts.ts +3 -3
  151. package/src/routes/api/search.ts +2 -2
  152. package/src/routes/api/settings.ts +91 -0
  153. package/src/routes/api/upload.ts +2 -3
  154. package/src/routes/auth/reset.tsx +239 -0
  155. package/src/routes/auth/setup.tsx +189 -0
  156. package/src/routes/auth/signin.tsx +163 -0
  157. package/src/routes/compose.ts +63 -0
  158. package/src/routes/dash/__tests__/pages.test.ts +225 -0
  159. package/src/routes/dash/__tests__/settings-avatar.test.ts +89 -0
  160. package/src/routes/dash/collections.tsx +18 -367
  161. package/src/routes/dash/index.tsx +1 -1
  162. package/src/routes/dash/media.tsx +13 -415
  163. package/src/routes/dash/pages.tsx +131 -98
  164. package/src/routes/dash/posts.tsx +3 -7
  165. package/src/routes/dash/redirects.tsx +22 -16
  166. package/src/routes/dash/settings.tsx +265 -478
  167. package/src/routes/feed/__tests__/rss.test.ts +141 -0
  168. package/src/routes/feed/rss.ts +5 -3
  169. package/src/routes/feed/sitemap.ts +5 -3
  170. package/src/routes/pages/__tests__/collections.test.ts +94 -0
  171. package/src/routes/pages/__tests__/featured.test.ts +94 -0
  172. package/src/routes/pages/archive.tsx +2 -6
  173. package/src/routes/pages/collection.tsx +2 -6
  174. package/src/routes/pages/collections.tsx +36 -0
  175. package/src/routes/pages/featured.tsx +44 -0
  176. package/src/routes/pages/home.tsx +30 -53
  177. package/src/routes/pages/latest.tsx +59 -0
  178. package/src/routes/pages/page.tsx +28 -30
  179. package/src/routes/pages/post.tsx +2 -5
  180. package/src/routes/pages/search.tsx +2 -6
  181. package/src/services/__tests__/page.test.ts +106 -0
  182. package/src/services/__tests__/post.test.ts +114 -15
  183. package/src/services/page.ts +13 -1
  184. package/src/services/post.ts +58 -40
  185. package/src/services/search.ts +2 -2
  186. package/src/styles/components.css +0 -65
  187. package/src/styles/tokens.css +47 -0
  188. package/src/styles/ui.css +475 -0
  189. package/src/types/bindings.ts +30 -0
  190. package/src/types/config.ts +183 -0
  191. package/src/types/constants.ts +26 -0
  192. package/src/types/entities.ts +109 -0
  193. package/src/types/operations.ts +88 -0
  194. package/src/types/props.ts +115 -0
  195. package/src/types/views.ts +172 -0
  196. package/src/types.ts +8 -774
  197. package/src/ui/__tests__/font-themes.test.ts +34 -0
  198. package/src/{theme → ui}/color-themes.ts +34 -34
  199. package/src/ui/compose/ComposeDialog.tsx +414 -0
  200. package/src/ui/compose/ComposePrompt.tsx +55 -0
  201. package/src/{theme/components/TypeBadge.tsx → ui/dash/FormatBadge.tsx} +2 -3
  202. package/src/{theme/components → ui/dash}/PageForm.tsx +25 -19
  203. package/src/{theme/components → ui/dash}/PostForm.tsx +26 -45
  204. package/src/{theme/components → ui/dash}/PostList.tsx +7 -7
  205. package/src/{theme/components/VisibilityBadge.tsx → ui/dash/StatusBadge.tsx} +2 -3
  206. package/src/ui/dash/collections/CollectionForm.tsx +153 -0
  207. package/src/ui/dash/collections/CollectionsListContent.tsx +85 -0
  208. package/src/ui/dash/collections/ViewCollectionContent.tsx +92 -0
  209. package/src/ui/dash/index.ts +10 -0
  210. package/src/ui/dash/media/MediaListContent.tsx +201 -0
  211. package/src/ui/dash/media/ViewMediaContent.tsx +208 -0
  212. package/src/ui/dash/pages/LinkFormContent.tsx +119 -0
  213. package/src/ui/dash/pages/UnifiedPagesContent.tsx +203 -0
  214. package/src/ui/dash/settings/AccountContent.tsx +176 -0
  215. package/src/ui/dash/settings/AppearanceContent.tsx +254 -0
  216. package/src/ui/dash/settings/GeneralContent.tsx +533 -0
  217. package/src/ui/dash/settings/SettingsNav.tsx +56 -0
  218. package/src/{themes/threads/timeline → ui/feed}/LinkCard.tsx +9 -4
  219. package/src/{themes/threads/timeline → ui/feed}/NoteCard.tsx +13 -8
  220. package/src/{themes/threads/timeline → ui/feed}/QuoteCard.tsx +13 -8
  221. package/src/{themes/threads/timeline → ui/feed}/ThreadPreview.tsx +7 -8
  222. package/src/ui/feed/TimelineFeed.tsx +49 -0
  223. package/src/ui/feed/TimelineItem.tsx +45 -0
  224. package/src/ui/font-themes.ts +54 -0
  225. package/src/{theme → ui}/layouts/BaseLayout.tsx +28 -1
  226. package/src/{theme → ui}/layouts/DashLayout.tsx +0 -10
  227. package/src/ui/layouts/SiteLayout.tsx +164 -0
  228. package/src/{themes/threads → ui}/pages/ArchivePage.tsx +22 -17
  229. package/src/{themes/threads → ui}/pages/CollectionPage.tsx +14 -5
  230. package/src/ui/pages/CollectionsPage.tsx +73 -0
  231. package/src/ui/pages/FeaturedPage.tsx +31 -0
  232. package/src/{themes/threads → ui}/pages/HomePage.tsx +11 -15
  233. package/src/{themes/threads → ui}/pages/PostPage.tsx +23 -14
  234. package/src/{themes/threads → ui}/pages/SearchPage.tsx +13 -11
  235. package/src/{themes/threads → ui}/pages/SinglePage.tsx +4 -4
  236. package/src/{theme/components → ui/shared}/MediaGallery.tsx +1 -1
  237. package/src/{theme/components → ui/shared}/Pagination.tsx +67 -4
  238. package/src/{theme/components → ui/shared}/ThreadView.tsx +2 -2
  239. package/src/ui/shared/__tests__/pagination.test.ts +46 -0
  240. package/src/ui/shared/index.ts +12 -0
  241. package/bin/jant.js +0 -185
  242. package/dist/lib/theme-components.js +0 -46
  243. package/dist/routes/dash/navigation.js +0 -289
  244. package/dist/theme/index.js +0 -18
  245. package/dist/theme/layouts/index.js +0 -2
  246. package/dist/themes/threads/ThreadsSiteLayout.js +0 -172
  247. package/dist/themes/threads/index.js +0 -81
  248. package/dist/themes/threads/pages/HomePage.js +0 -25
  249. package/dist/themes/threads/timeline/TimelineFeed.js +0 -58
  250. package/dist/themes/threads/timeline/TimelineItem.js +0 -36
  251. package/dist/themes/threads/timeline/TimelineLoadMore.js +0 -23
  252. package/dist/themes/threads/timeline/groupByDate.js +0 -22
  253. package/dist/themes/threads/timeline/timelineMore.js +0 -107
  254. package/src/lib/__tests__/theme-components.test.ts +0 -105
  255. package/src/lib/theme-components.ts +0 -65
  256. package/src/routes/dash/navigation.tsx +0 -317
  257. package/src/theme/components/index.ts +0 -23
  258. package/src/theme/index.ts +0 -22
  259. package/src/theme/layouts/index.ts +0 -7
  260. package/src/themes/threads/ThreadsSiteLayout.tsx +0 -194
  261. package/src/themes/threads/index.ts +0 -100
  262. package/src/themes/threads/style.css +0 -336
  263. package/src/themes/threads/timeline/TimelineFeed.tsx +0 -62
  264. package/src/themes/threads/timeline/TimelineItem.tsx +0 -67
  265. package/src/themes/threads/timeline/TimelineLoadMore.tsx +0 -35
  266. package/src/themes/threads/timeline/groupByDate.ts +0 -30
  267. package/src/themes/threads/timeline/timelineMore.tsx +0 -130
  268. /package/dist/{theme/components → ui/dash}/ActionButtons.js +0 -0
  269. /package/dist/{theme/components → ui/dash}/CrudPageHeader.js +0 -0
  270. /package/dist/{theme/components → ui/dash}/DangerZone.js +0 -0
  271. /package/dist/{theme/components → ui/dash}/ListItemRow.js +0 -0
  272. /package/dist/{theme/components → ui/shared}/EmptyState.js +0 -0
  273. /package/src/{theme/components → ui/dash}/ActionButtons.tsx +0 -0
  274. /package/src/{theme/components → ui/dash}/CrudPageHeader.tsx +0 -0
  275. /package/src/{theme/components → ui/dash}/DangerZone.tsx +0 -0
  276. /package/src/{theme/components → ui/dash}/ListItemRow.tsx +0 -0
  277. /package/src/{theme/components → ui/shared}/EmptyState.tsx +0 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Configuration System
3
+ *
4
+ * Single Source of Truth for all configuration fields.
5
+ */ /**
6
+ * Configuration Registry - Single Source of Truth
7
+ *
8
+ * All available configuration fields with their metadata.
9
+ * Add new fields here, and they'll automatically work everywhere.
10
+ *
11
+ * Priority logic:
12
+ * - envOnly: false -> User-configurable (DB > ENV > Default)
13
+ * - envOnly: true -> Environment-only (ENV > Default)
14
+ */ export const CONFIG_FIELDS = {
15
+ // User-configurable (can be modified in dashboard)
16
+ SITE_NAME: {
17
+ defaultValue: "Jant",
18
+ envOnly: false
19
+ },
20
+ SITE_DESCRIPTION: {
21
+ defaultValue: "A microblog powered by Jant",
22
+ envOnly: false
23
+ },
24
+ SITE_LANGUAGE: {
25
+ defaultValue: "en",
26
+ envOnly: false
27
+ },
28
+ HOME_DEFAULT_VIEW: {
29
+ defaultValue: "latest",
30
+ envOnly: false
31
+ },
32
+ // Environment-only (deployment/infrastructure config)
33
+ SITE_URL: {
34
+ defaultValue: "",
35
+ envOnly: true
36
+ },
37
+ AUTH_SECRET: {
38
+ defaultValue: "",
39
+ envOnly: true
40
+ },
41
+ R2_PUBLIC_URL: {
42
+ defaultValue: "",
43
+ envOnly: true
44
+ },
45
+ IMAGE_TRANSFORM_URL: {
46
+ defaultValue: "",
47
+ envOnly: true
48
+ },
49
+ DEMO_EMAIL: {
50
+ defaultValue: "",
51
+ envOnly: true
52
+ },
53
+ DEMO_PASSWORD: {
54
+ defaultValue: "",
55
+ envOnly: true
56
+ },
57
+ PAGE_SIZE: {
58
+ defaultValue: "20",
59
+ envOnly: true
60
+ },
61
+ STORAGE_DRIVER: {
62
+ defaultValue: "r2",
63
+ envOnly: true
64
+ },
65
+ S3_ENDPOINT: {
66
+ defaultValue: "",
67
+ envOnly: true
68
+ },
69
+ S3_BUCKET: {
70
+ defaultValue: "",
71
+ envOnly: true
72
+ },
73
+ S3_ACCESS_KEY_ID: {
74
+ defaultValue: "",
75
+ envOnly: true
76
+ },
77
+ S3_SECRET_ACCESS_KEY: {
78
+ defaultValue: "",
79
+ envOnly: true
80
+ },
81
+ S3_REGION: {
82
+ defaultValue: "auto",
83
+ envOnly: true
84
+ },
85
+ S3_PUBLIC_URL: {
86
+ defaultValue: "",
87
+ envOnly: true
88
+ },
89
+ // Internal settings (DB-only, not configurable via env or dashboard)
90
+ THEME: {
91
+ defaultValue: "",
92
+ envOnly: false,
93
+ internal: true
94
+ },
95
+ CUSTOM_CSS: {
96
+ defaultValue: "",
97
+ envOnly: false,
98
+ internal: true
99
+ },
100
+ SITE_AVATAR: {
101
+ defaultValue: "",
102
+ envOnly: false,
103
+ internal: true
104
+ },
105
+ SHOW_HEADER_AVATAR: {
106
+ defaultValue: "",
107
+ envOnly: false,
108
+ internal: true
109
+ },
110
+ SITE_FAVICON_ICO: {
111
+ defaultValue: "",
112
+ envOnly: false,
113
+ internal: true
114
+ },
115
+ SITE_FAVICON_APPLE_TOUCH: {
116
+ defaultValue: "",
117
+ envOnly: false,
118
+ internal: true
119
+ },
120
+ FONT_THEME: {
121
+ defaultValue: "",
122
+ envOnly: false,
123
+ internal: true
124
+ },
125
+ TIME_ZONE: {
126
+ defaultValue: "UTC",
127
+ envOnly: false
128
+ },
129
+ SITE_FOOTER: {
130
+ defaultValue: "",
131
+ envOnly: false
132
+ },
133
+ NOINDEX: {
134
+ defaultValue: "",
135
+ envOnly: false
136
+ },
137
+ ONBOARDING_STATUS: {
138
+ defaultValue: "pending",
139
+ envOnly: false,
140
+ internal: true
141
+ },
142
+ PASSWORD_RESET_TOKEN: {
143
+ defaultValue: "",
144
+ envOnly: false,
145
+ internal: true
146
+ }
147
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Content Type Constants
3
+ */ export const FORMATS = [
4
+ "note",
5
+ "link",
6
+ "quote"
7
+ ];
8
+ export const STATUSES = [
9
+ "draft",
10
+ "published"
11
+ ];
12
+ export const SORT_ORDERS = [
13
+ "newest",
14
+ "oldest",
15
+ "rating_desc",
16
+ "rating_asc"
17
+ ];
18
+ export const NAV_ITEM_TYPES = [
19
+ "page",
20
+ "link"
21
+ ];
22
+ export const MAX_MEDIA_ATTACHMENTS = 20;
23
+ export const MAX_PINNED_POSTS = 3;
24
+ export const STORAGE_DRIVERS = [
25
+ "r2",
26
+ "s3"
27
+ ];
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Entity Types (database-level models)
3
+ */ export { };
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Operation Types (create/update DTOs)
3
+ */ export { };
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Page-Level Props & Feed Data Types
3
+ */ /** Props for the timeline feed wrapper */ export { };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * View Model Types (render-ready, for theme components)
3
+ */ /**
4
+ * Site Layout Props
5
+ */ export { };
package/dist/types.js CHANGED
@@ -1,114 +1,11 @@
1
1
  /**
2
2
  * Jant Type Definitions (v2)
3
- */ // =============================================================================
4
- // Content Types
5
- // =============================================================================
6
- export const FORMATS = [
7
- "note",
8
- "link",
9
- "quote"
10
- ];
11
- export const STATUSES = [
12
- "draft",
13
- "published"
14
- ];
15
- export const SORT_ORDERS = [
16
- "newest",
17
- "oldest",
18
- "rating_desc",
19
- "rating_asc"
20
- ];
21
- export const NAV_ITEM_TYPES = [
22
- "page",
23
- "link"
24
- ];
25
- export const MAX_MEDIA_ATTACHMENTS = 20;
26
- export const MAX_PINNED_POSTS = 3;
27
- export const STORAGE_DRIVERS = [
28
- "r2",
29
- "s3"
30
- ];
31
- // =============================================================================
32
- // Configuration System
33
- // =============================================================================
34
- /**
35
- * Configuration Registry - Single Source of Truth
36
- *
37
- * All available configuration fields with their metadata.
38
- * Add new fields here, and they'll automatically work everywhere.
39
3
  *
40
- * Priority logic:
41
- * - envOnly: false -> User-configurable (DB > ENV > Default)
42
- * - envOnly: true -> Environment-only (ENV > Default)
43
- */ export const CONFIG_FIELDS = {
44
- // User-configurable (can be modified in dashboard)
45
- SITE_NAME: {
46
- defaultValue: "Jant",
47
- envOnly: false
48
- },
49
- SITE_DESCRIPTION: {
50
- defaultValue: "A microblog powered by Jant",
51
- envOnly: false
52
- },
53
- SITE_LANGUAGE: {
54
- defaultValue: "en",
55
- envOnly: false
56
- },
57
- // Environment-only (deployment/infrastructure config)
58
- SITE_URL: {
59
- defaultValue: "",
60
- envOnly: true
61
- },
62
- AUTH_SECRET: {
63
- defaultValue: "",
64
- envOnly: true
65
- },
66
- R2_PUBLIC_URL: {
67
- defaultValue: "",
68
- envOnly: true
69
- },
70
- IMAGE_TRANSFORM_URL: {
71
- defaultValue: "",
72
- envOnly: true
73
- },
74
- DEMO_EMAIL: {
75
- defaultValue: "",
76
- envOnly: true
77
- },
78
- DEMO_PASSWORD: {
79
- defaultValue: "",
80
- envOnly: true
81
- },
82
- PAGE_SIZE: {
83
- defaultValue: "20",
84
- envOnly: true
85
- },
86
- STORAGE_DRIVER: {
87
- defaultValue: "r2",
88
- envOnly: true
89
- },
90
- S3_ENDPOINT: {
91
- defaultValue: "",
92
- envOnly: true
93
- },
94
- S3_BUCKET: {
95
- defaultValue: "",
96
- envOnly: true
97
- },
98
- S3_ACCESS_KEY_ID: {
99
- defaultValue: "",
100
- envOnly: true
101
- },
102
- S3_SECRET_ACCESS_KEY: {
103
- defaultValue: "",
104
- envOnly: true
105
- },
106
- S3_REGION: {
107
- defaultValue: "auto",
108
- envOnly: true
109
- },
110
- S3_PUBLIC_URL: {
111
- defaultValue: "",
112
- envOnly: true
113
- }
114
- };
4
+ * Barrel re-export from focused submodules.
5
+ */ export * from "./types/constants.js";
6
+ export * from "./types/bindings.js";
7
+ export * from "./types/config.js";
8
+ export * from "./types/entities.js";
9
+ export * from "./types/operations.js";
10
+ export * from "./types/views.js";
11
+ export * from "./types/props.js";
@@ -71,9 +71,39 @@
71
71
  };
72
72
  }
73
73
  export const BUILTIN_COLOR_THEMES = [
74
+ defineTheme({
75
+ id: "halloween",
76
+ name: "Halloween",
77
+ preview: {
78
+ lightBg: "#f9f2e3",
79
+ lightText: "#352200",
80
+ lightLink: "#b84400",
81
+ darkBg: "#1e1000",
82
+ darkText: "#dfc390",
83
+ darkLink: "#ff8c00"
84
+ },
85
+ light: {
86
+ bg: "oklch(0.97 0.015 75)",
87
+ fg: "oklch(0.25 0.04 55)",
88
+ primary: "oklch(0.47 0.17 50)",
89
+ primaryFg: "oklch(0.98 0.01 75)",
90
+ muted: "oklch(0.93 0.02 75)",
91
+ mutedFg: "oklch(0.5 0.025 55)",
92
+ border: "oklch(0.88 0.025 75)"
93
+ },
94
+ dark: {
95
+ bg: "oklch(0.16 0.03 50)",
96
+ fg: "oklch(0.85 0.025 75)",
97
+ primary: "oklch(0.72 0.19 55)",
98
+ primaryFg: "oklch(0.14 0.03 50)",
99
+ muted: "oklch(0.22 0.025 50)",
100
+ mutedFg: "oklch(0.62 0.02 75)",
101
+ border: "oklch(0.28 0.025 50)"
102
+ }
103
+ }),
74
104
  {
75
105
  id: "default",
76
- name: "Default",
106
+ name: "Panda",
77
107
  light: {},
78
108
  dark: {},
79
109
  preview: {
@@ -175,36 +205,6 @@ export const BUILTIN_COLOR_THEMES = [
175
205
  border: "oklch(0.3 0 0)"
176
206
  }
177
207
  }),
178
- defineTheme({
179
- id: "halloween",
180
- name: "Halloween",
181
- preview: {
182
- lightBg: "#f9f2e3",
183
- lightText: "#352200",
184
- lightLink: "#cc5500",
185
- darkBg: "#1e1000",
186
- darkText: "#dfc390",
187
- darkLink: "#ff8c00"
188
- },
189
- light: {
190
- bg: "oklch(0.97 0.015 75)",
191
- fg: "oklch(0.25 0.04 55)",
192
- primary: "oklch(0.6 0.2 50)",
193
- primaryFg: "oklch(0.98 0.01 75)",
194
- muted: "oklch(0.93 0.02 75)",
195
- mutedFg: "oklch(0.5 0.025 55)",
196
- border: "oklch(0.88 0.025 75)"
197
- },
198
- dark: {
199
- bg: "oklch(0.16 0.03 50)",
200
- fg: "oklch(0.85 0.025 75)",
201
- primary: "oklch(0.72 0.19 55)",
202
- primaryFg: "oklch(0.14 0.03 50)",
203
- muted: "oklch(0.22 0.025 50)",
204
- mutedFg: "oklch(0.62 0.02 75)",
205
- border: "oklch(0.28 0.025 50)"
206
- }
207
- }),
208
208
  defineTheme({
209
209
  id: "notepad",
210
210
  name: "Notepad",
@@ -241,7 +241,7 @@ export const BUILTIN_COLOR_THEMES = [
241
241
  preview: {
242
242
  lightBg: "#f7eef5",
243
243
  lightText: "#2e1e2c",
244
- lightLink: "#9845c8",
244
+ lightLink: "#7a30a8",
245
245
  darkBg: "#1d1428",
246
246
  darkText: "#d4c2d0",
247
247
  darkLink: "#c080fc"
@@ -249,7 +249,7 @@ export const BUILTIN_COLOR_THEMES = [
249
249
  light: {
250
250
  bg: "oklch(0.97 0.012 325)",
251
251
  fg: "oklch(0.25 0.02 310)",
252
- primary: "oklch(0.55 0.2 300)",
252
+ primary: "oklch(0.45 0.2 300)",
253
253
  primaryFg: "oklch(0.98 0.008 325)",
254
254
  muted: "oklch(0.93 0.016 325)",
255
255
  mutedFg: "oklch(0.52 0.015 310)",