@jant/core 0.2.17 → 0.2.18

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 +1 -0
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +319 -115
  4. package/dist/i18n/context.d.ts +2 -2
  5. package/dist/i18n/context.js +1 -1
  6. package/dist/i18n/i18n.d.ts +1 -1
  7. package/dist/i18n/i18n.js +1 -1
  8. package/dist/i18n/index.d.ts +1 -1
  9. package/dist/i18n/index.js +1 -1
  10. package/dist/i18n/locales/en.d.ts.map +1 -1
  11. package/dist/i18n/locales/en.js +1 -1
  12. package/dist/i18n/locales/zh-Hans.d.ts.map +1 -1
  13. package/dist/i18n/locales/zh-Hans.js +1 -1
  14. package/dist/i18n/locales/zh-Hant.d.ts.map +1 -1
  15. package/dist/i18n/locales/zh-Hant.js +1 -1
  16. package/dist/lib/config.d.ts +44 -10
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/config.js +69 -44
  19. package/dist/lib/constants.d.ts +2 -1
  20. package/dist/lib/constants.d.ts.map +1 -1
  21. package/dist/lib/constants.js +5 -2
  22. package/dist/lib/sse.d.ts +15 -0
  23. package/dist/lib/sse.d.ts.map +1 -1
  24. package/dist/lib/sse.js +13 -0
  25. package/dist/lib/theme.d.ts +44 -0
  26. package/dist/lib/theme.d.ts.map +1 -0
  27. package/dist/lib/theme.js +65 -0
  28. package/dist/routes/dash/appearance.d.ts +13 -0
  29. package/dist/routes/dash/appearance.d.ts.map +1 -0
  30. package/dist/routes/dash/appearance.js +164 -0
  31. package/dist/routes/dash/settings.d.ts.map +1 -1
  32. package/dist/routes/dash/settings.js +38 -37
  33. package/dist/services/settings.d.ts +1 -0
  34. package/dist/services/settings.d.ts.map +1 -1
  35. package/dist/services/settings.js +3 -0
  36. package/dist/theme/color-themes.d.ts +30 -0
  37. package/dist/theme/color-themes.d.ts.map +1 -0
  38. package/dist/theme/color-themes.js +268 -0
  39. package/dist/theme/layouts/BaseLayout.d.ts +5 -0
  40. package/dist/theme/layouts/BaseLayout.d.ts.map +1 -1
  41. package/dist/theme/layouts/BaseLayout.js +70 -3
  42. package/dist/theme/layouts/DashLayout.d.ts +2 -0
  43. package/dist/theme/layouts/DashLayout.d.ts.map +1 -1
  44. package/dist/theme/layouts/DashLayout.js +10 -1
  45. package/dist/theme/layouts/index.d.ts +1 -1
  46. package/dist/theme/layouts/index.d.ts.map +1 -1
  47. package/dist/types.d.ts +53 -1
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +52 -0
  50. package/package.json +1 -1
  51. package/src/app.tsx +272 -55
  52. package/src/db/migrations/{0000_solid_moon_knight.sql → 0000_square_wallflower.sql} +3 -3
  53. package/src/db/migrations/meta/0000_snapshot.json +9 -9
  54. package/src/db/migrations/meta/_journal.json +2 -30
  55. package/src/i18n/context.tsx +2 -2
  56. package/src/i18n/i18n.ts +1 -1
  57. package/src/i18n/index.ts +1 -1
  58. package/src/i18n/locales/en.po +328 -252
  59. package/src/i18n/locales/en.ts +1 -1
  60. package/src/i18n/locales/zh-Hans.po +315 -278
  61. package/src/i18n/locales/zh-Hans.ts +1 -1
  62. package/src/i18n/locales/zh-Hant.po +315 -278
  63. package/src/i18n/locales/zh-Hant.ts +1 -1
  64. package/src/lib/config.ts +73 -47
  65. package/src/lib/constants.ts +3 -0
  66. package/src/lib/sse.ts +38 -0
  67. package/src/lib/theme.ts +86 -0
  68. package/src/preset.css +9 -0
  69. package/src/routes/dash/appearance.tsx +180 -0
  70. package/src/routes/dash/settings.tsx +50 -52
  71. package/src/services/settings.ts +5 -0
  72. package/src/styles/components.css +93 -0
  73. package/src/theme/color-themes.ts +321 -0
  74. package/src/theme/layouts/BaseLayout.tsx +61 -1
  75. package/src/theme/layouts/DashLayout.tsx +13 -2
  76. package/src/theme/layouts/index.ts +5 -1
  77. package/src/types.ts +62 -1
  78. package/src/db/migrations/0001_add_search_fts.sql +0 -40
  79. package/src/db/migrations/0002_collection_path.sql +0 -2
  80. package/src/db/migrations/0003_collection_path_nullable.sql +0 -21
  81. package/src/db/migrations/0004_media_uuid.sql +0 -35
@@ -8,11 +8,16 @@
8
8
  */
9
9
  import type { FC, PropsWithChildren } from "hono/jsx";
10
10
  import type { Context } from "hono";
11
+ export interface ToastProps {
12
+ message: string;
13
+ type?: "success" | "error";
14
+ }
11
15
  export interface BaseLayoutProps {
12
16
  title: string;
13
17
  description?: string;
14
18
  lang?: string;
15
19
  c?: Context;
20
+ toast?: ToastProps;
16
21
  }
17
22
  export declare const BaseLayout: FC<PropsWithChildren<BaseLayoutProps>>;
18
23
  //# sourceMappingURL=BaseLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseLayout.d.ts","sourceRoot":"","sources":["../../../src/theme/layouts/BaseLayout.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,OAAO,CAAC;CACb;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CA2B7D,CAAC"}
1
+ {"version":3,"file":"BaseLayout.d.ts","sourceRoot":"","sources":["../../../src/theme/layouts/BaseLayout.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAiF7D,CAAC"}
@@ -8,7 +8,7 @@
8
8
  */ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
9
9
  import { Script, Link, ViteClient } from "vite-ssr-components/hono";
10
10
  import { I18nProvider } from "../../i18n/index.js";
11
- export const BaseLayout = ({ title, description, lang, c, children })=>{
11
+ export const BaseLayout = ({ title, description, lang, c, toast, children })=>{
12
12
  // Read lang from Hono context if available, otherwise use prop or default
13
13
  const resolvedLang = lang ?? (c ? c.get("lang") : "en");
14
14
  // Automatically wrap with I18nProvider if Context is provided
@@ -16,6 +16,8 @@ export const BaseLayout = ({ title, description, lang, c, children })=>{
16
16
  c: c,
17
17
  children: children
18
18
  }) : children;
19
+ // Read theme style from Hono context if available
20
+ const themeStyle = c ? c.get("themeStyle") : undefined;
19
21
  return /*#__PURE__*/ _jsxs("html", {
20
22
  lang: resolvedLang,
21
23
  children: [
@@ -40,14 +42,79 @@ export const BaseLayout = ({ title, description, lang, c, children })=>{
40
42
  href: "/src/style.css",
41
43
  rel: "stylesheet"
42
44
  }),
45
+ themeStyle && /*#__PURE__*/ _jsx("style", {
46
+ children: themeStyle
47
+ }),
43
48
  /*#__PURE__*/ _jsx(Script, {
44
49
  src: "/src/client.ts"
45
50
  })
46
51
  ]
47
52
  }),
48
- /*#__PURE__*/ _jsx("body", {
53
+ /*#__PURE__*/ _jsxs("body", {
49
54
  class: "bg-background text-foreground antialiased",
50
- children: content
55
+ children: [
56
+ content,
57
+ /*#__PURE__*/ _jsx("div", {
58
+ id: "toast-container",
59
+ class: "toast-container",
60
+ children: toast && /*#__PURE__*/ _jsxs("div", {
61
+ class: `toast ${toast.type === "error" ? "toast-error" : "toast-success"}`,
62
+ "data-init": "history.replaceState({}, '', location.pathname); setTimeout(() => { el.classList.add('toast-out'); el.addEventListener('animationend', () => el.remove()) }, 3000)",
63
+ children: [
64
+ toast.type === "error" ? /*#__PURE__*/ _jsxs("svg", {
65
+ xmlns: "http://www.w3.org/2000/svg",
66
+ fill: "none",
67
+ viewBox: "0 0 24 24",
68
+ "stroke-width": "2",
69
+ stroke: "currentColor",
70
+ children: [
71
+ /*#__PURE__*/ _jsx("circle", {
72
+ cx: "12",
73
+ cy: "12",
74
+ r: "10"
75
+ }),
76
+ /*#__PURE__*/ _jsx("path", {
77
+ d: "m15 9-6 6M9 9l6 6"
78
+ })
79
+ ]
80
+ }) : /*#__PURE__*/ _jsxs("svg", {
81
+ xmlns: "http://www.w3.org/2000/svg",
82
+ fill: "none",
83
+ viewBox: "0 0 24 24",
84
+ "stroke-width": "2",
85
+ stroke: "currentColor",
86
+ children: [
87
+ /*#__PURE__*/ _jsx("circle", {
88
+ cx: "12",
89
+ cy: "12",
90
+ r: "10"
91
+ }),
92
+ /*#__PURE__*/ _jsx("path", {
93
+ d: "m9 12 2 2 4-4"
94
+ })
95
+ ]
96
+ }),
97
+ /*#__PURE__*/ _jsx("span", {
98
+ children: toast.message
99
+ }),
100
+ /*#__PURE__*/ _jsx("button", {
101
+ class: "toast-close",
102
+ "data-on:click": "el.closest('.toast').classList.add('toast-out'); el.closest('.toast').addEventListener('animationend', () => el.closest('.toast').remove())",
103
+ children: /*#__PURE__*/ _jsx("svg", {
104
+ xmlns: "http://www.w3.org/2000/svg",
105
+ fill: "none",
106
+ viewBox: "0 0 24 24",
107
+ "stroke-width": "2",
108
+ stroke: "currentColor",
109
+ children: /*#__PURE__*/ _jsx("path", {
110
+ d: "M18 6 6 18M6 6l12 12"
111
+ })
112
+ })
113
+ })
114
+ ]
115
+ })
116
+ })
117
+ ]
51
118
  })
52
119
  ]
53
120
  });
@@ -5,11 +5,13 @@
5
5
  */
6
6
  import type { FC, PropsWithChildren } from "hono/jsx";
7
7
  import type { Context } from "hono";
8
+ import { type ToastProps } from "./BaseLayout.js";
8
9
  export interface DashLayoutProps {
9
10
  c: Context;
10
11
  title: string;
11
12
  siteName: string;
12
13
  currentPath?: string;
14
+ toast?: ToastProps;
13
15
  }
14
16
  export declare const DashLayout: FC<PropsWithChildren<DashLayoutProps>>;
15
17
  //# sourceMappingURL=DashLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashLayout.d.ts","sourceRoot":"","sources":["../../../src/theme/layouts/DashLayout.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,OAAO,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkID,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAc7D,CAAC"}
1
+ {"version":3,"file":"DashLayout.d.ts","sourceRoot":"","sources":["../../../src/theme/layouts/DashLayout.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,OAAO,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AA2ID,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAe7D,CAAC"}
@@ -113,6 +113,14 @@ function DashLayoutContent({ siteName, currentPath, children }) {
113
113
  id: "Tz0i8g",
114
114
  message: "Settings"
115
115
  })
116
+ }),
117
+ /*#__PURE__*/ _jsx("a", {
118
+ href: "/dash/appearance",
119
+ class: navClass("/dash/appearance", /^\/dash\/appearance/),
120
+ children: $__i18n._({
121
+ id: "aAIQg2",
122
+ message: "Appearance"
123
+ })
116
124
  })
117
125
  ]
118
126
  })
@@ -126,10 +134,11 @@ function DashLayoutContent({ siteName, currentPath, children }) {
126
134
  ]
127
135
  });
128
136
  }
129
- export const DashLayout = ({ c, title, siteName, currentPath, children })=>{
137
+ export const DashLayout = ({ c, title, siteName, currentPath, toast, children })=>{
130
138
  return /*#__PURE__*/ _jsx(BaseLayout, {
131
139
  title: `${title} - ${siteName}`,
132
140
  c: c,
141
+ toast: toast,
133
142
  children: /*#__PURE__*/ _jsx(DashLayoutContent, {
134
143
  siteName: siteName,
135
144
  currentPath: currentPath,
@@ -1,3 +1,3 @@
1
- export { BaseLayout, type BaseLayoutProps } from "./BaseLayout.js";
1
+ export { BaseLayout, type BaseLayoutProps, type ToastProps, } from "./BaseLayout.js";
2
2
  export { DashLayout, type DashLayoutProps } from "./DashLayout.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/layouts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/layouts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -18,6 +18,55 @@ export interface Bindings {
18
18
  SITE_DESCRIPTION?: string;
19
19
  SITE_LANGUAGE?: string;
20
20
  }
21
+ /**
22
+ * Configuration Registry - Single Source of Truth
23
+ *
24
+ * All available configuration fields with their metadata.
25
+ * Add new fields here, and they'll automatically work everywhere.
26
+ *
27
+ * Priority logic:
28
+ * - envOnly: false → User-configurable (DB > ENV > Default)
29
+ * - envOnly: true → Environment-only (ENV > Default)
30
+ */
31
+ export declare const CONFIG_FIELDS: {
32
+ readonly SITE_NAME: {
33
+ readonly defaultValue: "Jant";
34
+ readonly envOnly: false;
35
+ };
36
+ readonly SITE_DESCRIPTION: {
37
+ readonly defaultValue: "A microblog powered by Jant";
38
+ readonly envOnly: false;
39
+ };
40
+ readonly SITE_LANGUAGE: {
41
+ readonly defaultValue: "en";
42
+ readonly envOnly: false;
43
+ };
44
+ readonly SITE_URL: {
45
+ readonly defaultValue: "";
46
+ readonly envOnly: true;
47
+ };
48
+ readonly AUTH_SECRET: {
49
+ readonly defaultValue: "";
50
+ readonly envOnly: true;
51
+ };
52
+ readonly R2_PUBLIC_URL: {
53
+ readonly defaultValue: "";
54
+ readonly envOnly: true;
55
+ };
56
+ readonly IMAGE_TRANSFORM_URL: {
57
+ readonly defaultValue: "";
58
+ readonly envOnly: true;
59
+ };
60
+ readonly DEMO_EMAIL: {
61
+ readonly defaultValue: "";
62
+ readonly envOnly: true;
63
+ };
64
+ readonly DEMO_PASSWORD: {
65
+ readonly defaultValue: "";
66
+ readonly envOnly: true;
67
+ };
68
+ };
69
+ export type ConfigKey = keyof typeof CONFIG_FIELDS;
21
70
  export interface Post {
22
71
  id: number;
23
72
  type: PostType;
@@ -96,6 +145,7 @@ export interface UpdatePost {
96
145
  publishedAt?: number;
97
146
  }
98
147
  import type { FC, PropsWithChildren } from "hono/jsx";
148
+ import type { ColorTheme } from "./theme/color-themes.js";
99
149
  /**
100
150
  * Props for overridable theme components
101
151
  */
@@ -141,8 +191,10 @@ export interface JantTheme {
141
191
  name?: string;
142
192
  /** Component overrides */
143
193
  components?: ThemeComponents;
144
- /** CSS variable overrides */
194
+ /** CSS variable overrides (highest priority, always applied) */
145
195
  cssVariables?: Record<string, string>;
196
+ /** Replace built-in color themes with a custom list */
197
+ colorThemes?: ColorTheme[];
146
198
  }
147
199
  /**
148
200
  * Main Jant configuration
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,UAAU,gEAOb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,iBAAiB,qDAKpB,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM5D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwChB,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,aAAa,CAAC;AAMnD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,uDAAuD;IACvD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB"}
package/dist/types.js CHANGED
@@ -17,3 +17,55 @@ export const VISIBILITY_LEVELS = [
17
17
  "unlisted",
18
18
  "draft"
19
19
  ];
20
+ // =============================================================================
21
+ // Configuration System
22
+ // =============================================================================
23
+ /**
24
+ * Configuration Registry - Single Source of Truth
25
+ *
26
+ * All available configuration fields with their metadata.
27
+ * Add new fields here, and they'll automatically work everywhere.
28
+ *
29
+ * Priority logic:
30
+ * - envOnly: false → User-configurable (DB > ENV > Default)
31
+ * - envOnly: true → Environment-only (ENV > Default)
32
+ */ export const CONFIG_FIELDS = {
33
+ // User-configurable (can be modified in dashboard)
34
+ SITE_NAME: {
35
+ defaultValue: "Jant",
36
+ envOnly: false
37
+ },
38
+ SITE_DESCRIPTION: {
39
+ defaultValue: "A microblog powered by Jant",
40
+ envOnly: false
41
+ },
42
+ SITE_LANGUAGE: {
43
+ defaultValue: "en",
44
+ envOnly: false
45
+ },
46
+ // Environment-only (deployment/infrastructure config)
47
+ SITE_URL: {
48
+ defaultValue: "",
49
+ envOnly: true
50
+ },
51
+ AUTH_SECRET: {
52
+ defaultValue: "",
53
+ envOnly: true
54
+ },
55
+ R2_PUBLIC_URL: {
56
+ defaultValue: "",
57
+ envOnly: true
58
+ },
59
+ IMAGE_TRANSFORM_URL: {
60
+ defaultValue: "",
61
+ envOnly: true
62
+ },
63
+ DEMO_EMAIL: {
64
+ defaultValue: "",
65
+ envOnly: true
66
+ },
67
+ DEMO_PASSWORD: {
68
+ defaultValue: "",
69
+ envOnly: true
70
+ }
71
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jant/core",
3
- "version": "0.2.17",
3
+ "version": "0.2.18",
4
4
  "description": "A modern, open-source microblogging platform built on Cloudflare Workers",
5
5
  "type": "module",
6
6
  "bin": {