@leadertechie/personal-site-kit 0.0.0 → 0.1.0-alpha.10

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 (197) hide show
  1. package/dist/api/__tests__/info.test.d.ts +2 -0
  2. package/dist/api/__tests__/info.test.d.ts.map +1 -0
  3. package/dist/api/__tests__/utils.test.d.ts +2 -0
  4. package/dist/api/__tests__/utils.test.d.ts.map +1 -0
  5. package/dist/api/content-utils.d.ts +27 -0
  6. package/dist/api/content-utils.d.ts.map +1 -0
  7. package/dist/api/handlers/{aboutme.d.ts → about-me.d.ts} +1 -1
  8. package/dist/api/handlers/about-me.d.ts.map +1 -0
  9. package/dist/api/handlers/auth-handler.d.ts +2 -0
  10. package/dist/api/handlers/auth-handler.d.ts.map +1 -0
  11. package/dist/api/handlers/auth.d.ts +23 -0
  12. package/dist/api/handlers/auth.d.ts.map +1 -0
  13. package/dist/api/handlers/content-api.d.ts +0 -1
  14. package/dist/api/handlers/content-api.d.ts.map +1 -1
  15. package/dist/api/handlers/content.d.ts.map +1 -1
  16. package/dist/api/handlers/home.d.ts.map +1 -1
  17. package/dist/api/handlers/{staticdetails.d.ts → static-details.d.ts} +1 -1
  18. package/dist/api/handlers/static-details.d.ts.map +1 -0
  19. package/dist/api/index.d.ts +7 -8
  20. package/dist/api/index.d.ts.map +1 -1
  21. package/dist/api/website-api.d.ts +10 -0
  22. package/dist/api/website-api.d.ts.map +1 -0
  23. package/dist/api.d.ts +2 -0
  24. package/dist/api.js +19 -589
  25. package/dist/assets/logo-placeholder.svg +21 -0
  26. package/dist/chunks/index-CGvOrVf8.js +213 -0
  27. package/dist/chunks/index-_AMi6ort.js +2690 -0
  28. package/dist/chunks/site-store-Vqmjjz9c.js +86 -0
  29. package/dist/chunks/template-C1tMqlPY.js +597 -0
  30. package/dist/chunks/website-api-CuyeBej-.js +920 -0
  31. package/dist/index.d.ts +5 -2
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +48 -352
  34. package/dist/prerender/__tests__/page-content.test.d.ts +2 -0
  35. package/dist/prerender/__tests__/page-content.test.d.ts.map +1 -0
  36. package/dist/prerender/__tests__/template.test.d.ts +2 -0
  37. package/dist/prerender/__tests__/template.test.d.ts.map +1 -0
  38. package/dist/prerender/data-fetcher.d.ts +19 -0
  39. package/dist/prerender/data-fetcher.d.ts.map +1 -0
  40. package/dist/prerender/index.d.ts +5 -4
  41. package/dist/prerender/index.d.ts.map +1 -1
  42. package/dist/prerender/{pageContent.d.ts → page-content.d.ts} +1 -1
  43. package/dist/prerender/page-content.d.ts.map +1 -0
  44. package/dist/prerender/page-generators/about.d.ts +16 -0
  45. package/dist/prerender/page-generators/about.d.ts.map +1 -0
  46. package/dist/prerender/page-generators/base.d.ts +26 -0
  47. package/dist/prerender/page-generators/base.d.ts.map +1 -0
  48. package/dist/prerender/page-generators/blog-detail.d.ts +15 -0
  49. package/dist/prerender/page-generators/blog-detail.d.ts.map +1 -0
  50. package/dist/prerender/page-generators/blogs-list.d.ts +17 -0
  51. package/dist/prerender/page-generators/blogs-list.d.ts.map +1 -0
  52. package/dist/prerender/page-generators/home.d.ts +19 -0
  53. package/dist/prerender/page-generators/home.d.ts.map +1 -0
  54. package/dist/prerender/page-generators/index.d.ts +9 -0
  55. package/dist/prerender/page-generators/index.d.ts.map +1 -0
  56. package/dist/prerender/page-generators/not-found.d.ts +14 -0
  57. package/dist/prerender/page-generators/not-found.d.ts.map +1 -0
  58. package/dist/prerender/page-generators/stories-list.d.ts +17 -0
  59. package/dist/prerender/page-generators/stories-list.d.ts.map +1 -0
  60. package/dist/prerender/page-generators/story-detail.d.ts +15 -0
  61. package/dist/prerender/page-generators/story-detail.d.ts.map +1 -0
  62. package/dist/prerender/website-prerender.d.ts +22 -0
  63. package/dist/prerender/website-prerender.d.ts.map +1 -0
  64. package/dist/prerender.d.ts +2 -0
  65. package/dist/prerender.js +163 -151
  66. package/dist/shared/config/index.d.ts +1 -0
  67. package/dist/shared/config/index.d.ts.map +1 -1
  68. package/dist/shared/core/__tests__/theme-toggle.test.d.ts +2 -0
  69. package/dist/shared/core/__tests__/theme-toggle.test.d.ts.map +1 -0
  70. package/dist/shared/core/site-store.d.ts +1 -0
  71. package/dist/shared/core/site-store.d.ts.map +1 -1
  72. package/dist/shared/index.d.ts +5 -3
  73. package/dist/shared/index.d.ts.map +1 -1
  74. package/dist/shared/interfaces/{iFooterLink.d.ts → ifooter-link.d.ts} +1 -1
  75. package/dist/shared/interfaces/ifooter-link.d.ts.map +1 -0
  76. package/dist/shared/interfaces/{iRoute.d.ts → iroute.d.ts} +1 -1
  77. package/dist/shared/interfaces/iroute.d.ts.map +1 -0
  78. package/dist/shared/{pageContent.d.ts → page-content.d.ts} +4 -3
  79. package/dist/shared/page-content.d.ts.map +1 -0
  80. package/dist/shared/router.d.ts +23 -0
  81. package/dist/shared/router.d.ts.map +1 -0
  82. package/dist/shared/runtime.d.ts +6 -6
  83. package/dist/shared/runtime.d.ts.map +1 -1
  84. package/dist/shared/website-ui.d.ts +32 -0
  85. package/dist/shared/website-ui.d.ts.map +1 -0
  86. package/dist/shared.js +13 -8
  87. package/dist/ui/about-me/api.d.ts.map +1 -0
  88. package/dist/ui/{aboutme → about-me}/index.d.ts +2 -10
  89. package/dist/ui/about-me/index.d.ts.map +1 -0
  90. package/dist/ui/about-me/styles.d.ts.map +1 -0
  91. package/dist/ui/admin/api.d.ts +16 -0
  92. package/dist/ui/admin/api.d.ts.map +1 -0
  93. package/dist/ui/admin/components/AboutMeSection.d.ts +7 -0
  94. package/dist/ui/admin/components/AboutMeSection.d.ts.map +1 -0
  95. package/dist/ui/admin/components/AdminSection.d.ts +13 -0
  96. package/dist/ui/admin/components/AdminSection.d.ts.map +1 -0
  97. package/dist/ui/admin/components/BlogsSection.d.ts +7 -0
  98. package/dist/ui/admin/components/BlogsSection.d.ts.map +1 -0
  99. package/dist/ui/admin/components/HomeSection.d.ts +7 -0
  100. package/dist/ui/admin/components/HomeSection.d.ts.map +1 -0
  101. package/dist/ui/admin/components/ImagesSection.d.ts +7 -0
  102. package/dist/ui/admin/components/ImagesSection.d.ts.map +1 -0
  103. package/dist/ui/admin/components/LoginForm.d.ts +9 -0
  104. package/dist/ui/admin/components/LoginForm.d.ts.map +1 -0
  105. package/dist/ui/admin/components/LogoSection.d.ts +7 -0
  106. package/dist/ui/admin/components/LogoSection.d.ts.map +1 -0
  107. package/dist/ui/admin/components/ProfileSection.d.ts +7 -0
  108. package/dist/ui/admin/components/ProfileSection.d.ts.map +1 -0
  109. package/dist/ui/admin/components/StaticSection.d.ts +9 -0
  110. package/dist/ui/admin/components/StaticSection.d.ts.map +1 -0
  111. package/dist/ui/admin/components/StoriesSection.d.ts +7 -0
  112. package/dist/ui/admin/components/StoriesSection.d.ts.map +1 -0
  113. package/dist/ui/admin/components/index.d.ts +11 -0
  114. package/dist/ui/admin/components/index.d.ts.map +1 -0
  115. package/dist/ui/admin/index.d.ts +27 -26
  116. package/dist/ui/admin/index.d.ts.map +1 -1
  117. package/dist/ui/admin/styles.d.ts.map +1 -1
  118. package/dist/ui/admin/types.d.ts +24 -0
  119. package/dist/ui/admin/types.d.ts.map +1 -0
  120. package/dist/ui/banner/styles.d.ts.map +1 -1
  121. package/dist/ui/blog-viewer/__tests__/blogviewer.test.d.ts +2 -0
  122. package/dist/ui/blog-viewer/__tests__/blogviewer.test.d.ts.map +1 -0
  123. package/dist/ui/blog-viewer/index.d.ts +25 -0
  124. package/dist/ui/blog-viewer/index.d.ts.map +1 -0
  125. package/dist/ui/blog-viewer/styles.d.ts +2 -0
  126. package/dist/ui/blog-viewer/styles.d.ts.map +1 -0
  127. package/dist/ui/footer/index.d.ts +1 -1
  128. package/dist/ui/footer/index.d.ts.map +1 -1
  129. package/dist/ui/footer/styles.d.ts.map +1 -1
  130. package/dist/ui/index.d.ts +7 -0
  131. package/dist/ui/index.d.ts.map +1 -0
  132. package/dist/ui/story-viewer/__tests__/storyviewer.test.d.ts +2 -0
  133. package/dist/ui/story-viewer/__tests__/storyviewer.test.d.ts.map +1 -0
  134. package/dist/ui/story-viewer/index.d.ts +25 -0
  135. package/dist/ui/story-viewer/index.d.ts.map +1 -0
  136. package/dist/ui/story-viewer/styles.d.ts +2 -0
  137. package/dist/ui/story-viewer/styles.d.ts.map +1 -0
  138. package/dist/ui.d.ts +1 -1
  139. package/dist/ui.js +17 -818
  140. package/package.json +35 -12
  141. package/public/assets/logo-placeholder.svg +21 -0
  142. package/dist/api/handlers/aboutme.d.ts.map +0 -1
  143. package/dist/api/handlers/staticdetails.d.ts.map +0 -1
  144. package/dist/prerender/pageContent.d.ts.map +0 -1
  145. package/dist/shared/interfaces/iFooterLink.d.ts.map +0 -1
  146. package/dist/shared/interfaces/iRoute.d.ts.map +0 -1
  147. package/dist/shared/pageContent.d.ts.map +0 -1
  148. package/dist/ui/aboutme/api.d.ts.map +0 -1
  149. package/dist/ui/aboutme/index.d.ts.map +0 -1
  150. package/dist/ui/aboutme/renderer.d.ts +0 -5
  151. package/dist/ui/aboutme/renderer.d.ts.map +0 -1
  152. package/dist/ui/aboutme/styles.d.ts.map +0 -1
  153. package/src/api/__tests__/info.test.ts +0 -44
  154. package/src/api/__tests__/utils.test.ts +0 -78
  155. package/src/api/handlers/aboutme.ts +0 -99
  156. package/src/api/handlers/content-api.ts +0 -268
  157. package/src/api/handlers/content.ts +0 -72
  158. package/src/api/handlers/home.ts +0 -79
  159. package/src/api/handlers/info.ts +0 -12
  160. package/src/api/handlers/logo.ts +0 -55
  161. package/src/api/handlers/staticdetails.ts +0 -48
  162. package/src/api/index.ts +0 -125
  163. package/src/api/utils.ts +0 -16
  164. package/src/prerender/__tests__/pageContent.test.ts +0 -54
  165. package/src/prerender/__tests__/template.test.ts +0 -54
  166. package/src/prerender/index.ts +0 -138
  167. package/src/prerender/pageContent.ts +0 -263
  168. package/src/prerender/prerender.ts +0 -25
  169. package/src/prerender/template.ts +0 -65
  170. package/src/shared/config/api.ts +0 -16
  171. package/src/shared/config/index.ts +0 -41
  172. package/src/shared/config/types.ts +0 -16
  173. package/src/shared/core/__tests__/theme-toggle.test.ts +0 -204
  174. package/src/shared/core/site-store.ts +0 -38
  175. package/src/shared/core/theme-toggle.ts +0 -118
  176. package/src/shared/index.ts +0 -15
  177. package/src/shared/interfaces/iFooterLink.ts +0 -4
  178. package/src/shared/interfaces/iRoute.ts +0 -4
  179. package/src/shared/models/theme-variables.css +0 -25
  180. package/src/shared/pageContent.ts +0 -209
  181. package/src/shared/runtime.ts +0 -11
  182. package/src/shared/template.ts +0 -35
  183. package/src/styles/markdown.css +0 -129
  184. package/src/ui/aboutme/api.ts +0 -12
  185. package/src/ui/aboutme/index.ts +0 -155
  186. package/src/ui/aboutme/renderer.ts +0 -7
  187. package/src/ui/aboutme/styles.ts +0 -10
  188. package/src/ui/admin/index.ts +0 -492
  189. package/src/ui/admin/styles.ts +0 -317
  190. package/src/ui/banner/index.ts +0 -38
  191. package/src/ui/banner/styles.ts +0 -10
  192. package/src/ui/footer/index.ts +0 -37
  193. package/src/ui/footer/styles.ts +0 -9
  194. /package/{src/shared → dist}/styles/markdown.css +0 -0
  195. /package/{src → dist}/styles/theme.css +0 -0
  196. /package/dist/ui/{aboutme → about-me}/api.d.ts +0 -0
  197. /package/dist/ui/{aboutme → about-me}/styles.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stories-list.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/stories-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,wBAAyB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW;CA0BxD"}
@@ -0,0 +1,15 @@
1
+ import { BasePageGenerator, StaticDetails } from './base';
2
+ import { IRoute, IFooterLink, PageContent } from '../page-content';
3
+ export interface StoryDetailPageData {
4
+ routes: IRoute[];
5
+ footerLinks: IFooterLink[];
6
+ staticDetails: StaticDetails;
7
+ apiUrl: string;
8
+ baseUrl: string;
9
+ pathname: string;
10
+ slug: string;
11
+ }
12
+ export declare class StoryDetailPageGenerator extends BasePageGenerator {
13
+ generate(data: StoryDetailPageData): PageContent;
14
+ }
15
+ //# sourceMappingURL=story-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-detail.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/story-detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,wBAAyB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW;CAoBxD"}
@@ -0,0 +1,22 @@
1
+ import { TemplateProps } from './template';
2
+ import { IFooterLink, IRoute } from './page-content';
3
+ export interface PrerenderOptions {
4
+ routes?: IRoute[];
5
+ defaultFooterLinks?: IFooterLink[];
6
+ siteTitle?: string;
7
+ copyright?: string;
8
+ templateRenderer?: (props: TemplateProps) => Promise<string> | string;
9
+ }
10
+ export declare class WebsitePrerender {
11
+ private routes;
12
+ private defaultFooterLinks;
13
+ private footerLinks;
14
+ private siteTitle;
15
+ private copyright;
16
+ private templateRenderer;
17
+ constructor(options?: PrerenderOptions);
18
+ private fetchStaticDetails;
19
+ private fetchAboutMeData;
20
+ fetch(request: Request, env: any, ctx: any): Promise<Response>;
21
+ }
22
+ //# sourceMappingURL=website-prerender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"website-prerender.d.ts","sourceRoot":"","sources":["../../src/prerender/website-prerender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,EAAuB,MAAM,gBAAgB,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACvE;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAqD;gBAEjE,OAAO,GAAE,gBAAqB;YAkB5B,kBAAkB;YAwBlB,gBAAgB;IAQjB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkF5E"}
@@ -1,4 +1,6 @@
1
+ export * from './prerender/index'
1
2
  export {}
2
3
  import _default from './prerender/index'
3
4
  export default _default
5
+ export * from './prerender/index'
4
6
  export {}
package/dist/prerender.js CHANGED
@@ -90,7 +90,7 @@ async function fetchHome(env) {
90
90
  try {
91
91
  const r2 = getLoader(env);
92
92
  if (!r2) return "";
93
- const result = await r2.getRendered("home.md");
93
+ const result = await r2.getRendered("pages/home.md");
94
94
  return result?.content || "";
95
95
  } catch {
96
96
  return "";
@@ -136,9 +136,9 @@ async function fetchLatestStorySummaries(env, count = 3) {
136
136
  return [];
137
137
  }
138
138
  }
139
- const generatePageContent = async (pathname, routes2, footerLinks2, env) => {
140
- const apiUrl = env?.apiUrl;
141
- const baseUrl = env?.baseUrl || "https://www.techieleader.com";
139
+ const generatePageContent = async (pathname, routes, footerLinks, env) => {
140
+ const apiUrl = env?.API_URL || env?.apiUrl;
141
+ const baseUrl = env?.BASE_URL || env?.baseUrl || "https://www.example.com";
142
142
  let staticDetails = {
143
143
  siteTitle: "My Personal Website",
144
144
  copyright: "2026 My Personal Website",
@@ -151,20 +151,6 @@ const generatePageContent = async (pathname, routes2, footerLinks2, env) => {
151
151
  if (res.ok) staticDetails = await res.json();
152
152
  } catch (e) {
153
153
  }
154
- const logo = "/api/logo";
155
- const navLinks = routes2.map((r) => `<a href="${r.link}" class="nav-link" data-route="${r.link === "/" ? "home" : r.text.toLowerCase()}">${r.text}</a>`).join("");
156
- const bannerTemplate = `
157
- <my-banner header="${staticDetails.siteTitle}" logo="${logo}">
158
- <theme-toggle slot="theme-switcher"></theme-toggle>
159
- <nav slot="nav-links">
160
- ${navLinks}
161
- </nav>
162
- </my-banner>`;
163
- const footerTemplate = `
164
- <my-footer
165
- copyright="${staticDetails.copyright}"
166
- footerlinks='${JSON.stringify(footerLinks2)}'>
167
- </my-footer>`;
168
154
  let profile = null;
169
155
  let aboutMeContent = "";
170
156
  let homeContent = "";
@@ -180,151 +166,175 @@ const generatePageContent = async (pathname, routes2, footerLinks2, env) => {
180
166
  ]);
181
167
  }
182
168
  const name = profile?.name || "User";
183
- const title = profile?.title || "Professional";
184
- profile?.experience || "some";
185
- const canonicalUrl = new URL(pathname, baseUrl).toString();
169
+ profile?.title || "Professional";
170
+ new URL(pathname, baseUrl).toString();
171
+ const strategies = {
172
+ home: async () => {
173
+ const { HomePageGenerator } = await import("./chunks/index-CGvOrVf8.js");
174
+ const generator = new HomePageGenerator();
175
+ return generator.generate({
176
+ routes,
177
+ footerLinks,
178
+ staticDetails,
179
+ apiUrl,
180
+ baseUrl,
181
+ pathname,
182
+ profile,
183
+ homeContent,
184
+ latestBlogs,
185
+ latestStories
186
+ });
187
+ },
188
+ about: async () => {
189
+ const { AboutPageGenerator } = await import("./chunks/index-CGvOrVf8.js");
190
+ const generator = new AboutPageGenerator();
191
+ return generator.generate({
192
+ routes,
193
+ footerLinks,
194
+ staticDetails,
195
+ apiUrl,
196
+ baseUrl,
197
+ pathname,
198
+ profile
199
+ });
200
+ },
201
+ blogsList: async () => {
202
+ const { BlogsListPageGenerator } = await import("./chunks/index-CGvOrVf8.js");
203
+ const generator = new BlogsListPageGenerator();
204
+ return generator.generate({
205
+ routes,
206
+ footerLinks,
207
+ staticDetails,
208
+ apiUrl,
209
+ baseUrl,
210
+ pathname,
211
+ latestBlogs,
212
+ name
213
+ });
214
+ },
215
+ storiesList: async () => {
216
+ const { StoriesListPageGenerator } = await import("./chunks/index-CGvOrVf8.js");
217
+ const generator = new StoriesListPageGenerator();
218
+ return generator.generate({
219
+ routes,
220
+ footerLinks,
221
+ staticDetails,
222
+ apiUrl,
223
+ baseUrl,
224
+ pathname,
225
+ latestStories,
226
+ name
227
+ });
228
+ },
229
+ blogDetail: async (slug) => {
230
+ const { BlogDetailPageGenerator } = await import("./chunks/index-CGvOrVf8.js");
231
+ const generator = new BlogDetailPageGenerator();
232
+ return generator.generate({
233
+ routes,
234
+ footerLinks,
235
+ staticDetails,
236
+ apiUrl,
237
+ baseUrl,
238
+ pathname,
239
+ slug
240
+ });
241
+ },
242
+ storyDetail: async (slug) => {
243
+ const { StoryDetailPageGenerator } = await import("./chunks/index-CGvOrVf8.js");
244
+ const generator = new StoryDetailPageGenerator();
245
+ return generator.generate({
246
+ routes,
247
+ footerLinks,
248
+ staticDetails,
249
+ apiUrl,
250
+ baseUrl,
251
+ pathname,
252
+ slug
253
+ });
254
+ },
255
+ notFound: async () => {
256
+ const { NotFoundPageGenerator } = await import("./chunks/index-CGvOrVf8.js");
257
+ const generator = new NotFoundPageGenerator();
258
+ return generator.generate({
259
+ routes,
260
+ footerLinks,
261
+ staticDetails,
262
+ apiUrl,
263
+ baseUrl,
264
+ pathname
265
+ });
266
+ }
267
+ };
186
268
  if (pathname === "/" || pathname === "") {
187
- const homeHtml = homeContent || `<h1>Welcome to ${name}</h1><p>Upload home.md to customize this page.</p>`;
188
- const blogGists = latestBlogs.map((b) => `<div class="gist-card"><a href="/blogs/${b.slug}"><h4>${b.title}</h4></a><p>${b.summary}</p><small>${b.date}</small></div>`).join("");
189
- const storyGists = latestStories.map((s) => `<div class="gist-card"><a href="/stories/${s.slug}"><h4>${s.title}</h4></a><p>${s.summary}</p><small>${s.date}</small></div>`).join("");
190
- const mainContent = `
191
- ${bannerTemplate}
192
- <main class="container container-wide column-layout">
193
- <div class="main-column">
194
- ${homeHtml}
195
- </div>
196
- <div class="sidebar-column">
197
- <h3>Recent Blogs</h3>
198
- ${blogGists || "<p>No blogs yet.</p>"}
199
- <h3 class="mt-2">Recent Stories</h3>
200
- ${storyGists || "<p>No stories yet.</p>"}
201
- </div>
202
- </main>
203
- ${footerTemplate}`;
204
- return {
205
- title: `${name} – ${title}`,
206
- description: `Welcome to ${name}'s personal website. Professional portfolio and content.`,
207
- canonicalUrl,
208
- content: mainContent
209
- };
269
+ return strategies.home();
210
270
  } else if (pathname === "/about-me") {
211
- const mainContent = `
212
- ${bannerTemplate}
213
- <main class="container container-narrow">
214
- <my-aboutme base-url="${apiUrl}"></my-aboutme>
215
- </main>
216
- ${footerTemplate}`;
217
- return {
218
- title: `About - ${name}`,
219
- description: `Learn more about ${name}'s experience and skills.`,
220
- canonicalUrl,
221
- content: mainContent
222
- };
271
+ return strategies.about();
223
272
  } else if (pathname === "/blogs" || pathname === "/blogs/") {
224
- const blogGists = latestBlogs.map((b) => `<div class="gist-card"><a href="/blogs/${b.slug}"><h4>${b.title}</h4></a><p>${b.summary}</p><small>${b.date}</small></div>`).join("");
225
- const mainContent = `
226
- ${bannerTemplate}
227
- <main class="container container-wide">
228
- <h1>Blogs</h1>
229
- <input type="text" placeholder="Search blogs..." class="search-input" />
230
- <div class="blog-list">
231
- ${blogGists || "<p>No blogs yet.</p>"}
232
- </div>
233
- </main>
234
- ${footerTemplate}`;
235
- return { title: `Blogs – ${name}`, description: "Read the latest blog posts.", canonicalUrl, content: mainContent };
273
+ return strategies.blogsList();
236
274
  } else if (pathname === "/stories" || pathname === "/stories/") {
237
- const storyGists = latestStories.map((s) => `<div class="gist-card"><a href="/stories/${s.slug}"><h4>${s.title}</h4></a><p>${s.summary}</p><small>${s.date}</small></div>`).join("");
238
- const mainContent = `
239
- ${bannerTemplate}
240
- <main class="container container-wide">
241
- <h1>Stories</h1>
242
- <input type="text" placeholder="Search stories..." class="search-input" />
243
- <div class="story-list">
244
- ${storyGists || "<p>No stories yet.</p>"}
245
- </div>
246
- </main>
247
- ${footerTemplate}`;
248
- return { title: `Stories – ${name}`, description: "Read the latest stories.", canonicalUrl, content: mainContent };
275
+ return strategies.storiesList();
249
276
  } else if (pathname.startsWith("/blogs/")) {
250
277
  const slug = pathname.replace("/blogs/", "").replace("/", "");
251
- const mainContent = `
252
- ${bannerTemplate}
253
- <main class="container container-narrow">
254
- <my-blog-viewer slug="${slug}"></my-blog-viewer>
255
- </main>
256
- ${footerTemplate}`;
257
- return { title: `Blog: ${slug}`, description: "Blog post", canonicalUrl, content: mainContent };
278
+ return strategies.blogDetail(slug);
258
279
  } else if (pathname.startsWith("/stories/")) {
259
280
  const slug = pathname.replace("/stories/", "").replace("/", "");
260
- const mainContent = `
261
- ${bannerTemplate}
262
- <main class="container container-narrow">
263
- <my-story-viewer slug="${slug}"></my-story-viewer>
264
- </main>
265
- ${footerTemplate}`;
266
- return { title: `Story: ${slug}`, description: "Story post", canonicalUrl, content: mainContent };
281
+ return strategies.storyDetail(slug);
267
282
  } else {
268
- const mainContent = `
269
- ${bannerTemplate}
270
- <main class="container container-narrow text-center">
271
- <h1>Page Not Found</h1>
272
- <p>The page you're looking for doesn't exist.</p>
273
- <p><a href="/">Return to home</a></p>
274
- </main>
275
- ${footerTemplate}`;
276
- return { title: "404 Not Found", description: "The page you requested could not be found.", canonicalUrl, content: mainContent };
283
+ return strategies.notFound();
277
284
  }
278
285
  };
279
- const routes = [
280
- { link: "/", text: "Home" },
281
- { link: "/blogs", text: "Blogs" },
282
- { link: "/stories", text: "Stories" },
283
- { link: "/about-me", text: "About Me" }
284
- ];
285
- const defaultFooterLinks = [
286
- { text: "LinkedIn", link: "https://linkedin.com/in/yourname" },
287
- { text: "GitHub", link: "https://github.com/yourname" },
288
- { text: "Email", link: "mailto:yourname@domain.com" }
289
- ];
290
- let footerLinks = defaultFooterLinks;
291
- let siteTitle = "My Personal Website";
292
- let copyright = "2026 My Personal Website";
293
- async function fetchStaticDetails(apiUrl) {
294
- try {
295
- const res = await fetch(`${apiUrl}/api/static`);
296
- if (res.ok) {
297
- const data = await res.json();
298
- siteTitle = data.siteTitle || siteTitle;
299
- copyright = data.copyright || copyright;
300
- const normalizeUrl = (url) => {
301
- if (!url) return "";
302
- if (url.startsWith("http://") || url.startsWith("https://")) return url;
303
- if (url.startsWith("www.")) return `https://${url}`;
304
- return url;
305
- };
306
- footerLinks = [
307
- { text: "LinkedIn", link: normalizeUrl(data.linkedin) || defaultFooterLinks[0].link },
308
- { text: "GitHub", link: normalizeUrl(data.github) || defaultFooterLinks[1].link },
309
- { text: "Email", link: data.email ? `mailto:${data.email}` : defaultFooterLinks[2].link }
310
- ];
286
+ class WebsitePrerender {
287
+ constructor(options = {}) {
288
+ this.routes = options.routes || [
289
+ { link: "/", text: "Home" },
290
+ { link: "/blogs", text: "Blogs" },
291
+ { link: "/stories", text: "Stories" },
292
+ { link: "/about-me", text: "About Me" }
293
+ ];
294
+ this.defaultFooterLinks = options.defaultFooterLinks || [
295
+ { text: "LinkedIn", link: "https://linkedin.com/in/yourname" },
296
+ { text: "GitHub", link: "https://github.com/yourname" },
297
+ { text: "Email", link: "mailto:yourname@domain.com" }
298
+ ];
299
+ this.footerLinks = [...this.defaultFooterLinks];
300
+ this.siteTitle = options.siteTitle || "My Personal Website";
301
+ this.copyright = options.copyright || "2026 My Personal Website";
302
+ this.templateRenderer = options.templateRenderer || createHtmlTemplate;
303
+ }
304
+ async fetchStaticDetails(apiUrl) {
305
+ try {
306
+ const res = await fetch(`${apiUrl}/api/static`);
307
+ if (res.ok) {
308
+ const data = await res.json();
309
+ this.siteTitle = data.siteTitle || this.siteTitle;
310
+ this.copyright = data.copyright || this.copyright;
311
+ const normalizeUrl = (url) => {
312
+ if (!url) return "";
313
+ if (url.startsWith("http://") || url.startsWith("https://")) return url;
314
+ if (url.startsWith("www.")) return `https://${url}`;
315
+ return url;
316
+ };
317
+ this.footerLinks = [
318
+ { text: "LinkedIn", link: normalizeUrl(data.linkedin) || this.defaultFooterLinks[0].link },
319
+ { text: "GitHub", link: normalizeUrl(data.github) || this.defaultFooterLinks[1].link },
320
+ { text: "Email", link: data.email ? `mailto:${data.email}` : this.defaultFooterLinks[2].link }
321
+ ];
322
+ }
323
+ } catch (e) {
311
324
  }
312
- } catch (e) {
313
325
  }
314
- }
315
- async function fetchAboutMeData(apiUrl) {
316
- try {
317
- const res = await fetch(`${apiUrl}/api/aboutme`);
318
- if (res.ok) return await res.json();
319
- } catch (e) {
326
+ async fetchAboutMeData(apiUrl) {
327
+ try {
328
+ const res = await fetch(`${apiUrl}/api/about-me`);
329
+ if (res.ok) return await res.json();
330
+ } catch (e) {
331
+ }
332
+ return null;
320
333
  }
321
- return null;
322
- }
323
- const index = {
324
334
  async fetch(request, env, ctx) {
325
335
  const apiUrl = env?.API_URL || "https://api.example.com";
326
336
  const baseSiteUrl = env?.BASE_SITE_URL || "https://site.example.com";
327
- await fetchStaticDetails(apiUrl);
337
+ await this.fetchStaticDetails(apiUrl);
328
338
  const url = new URL(request.url);
329
339
  if (url.pathname.startsWith("/api/")) {
330
340
  return fetch(`${apiUrl}${url.pathname}${url.search}`);
@@ -379,13 +389,13 @@ const index = {
379
389
  }
380
390
  let hydrationScript = "";
381
391
  if (url.pathname === "/about-me" || url.pathname === "/about-me/") {
382
- const aboutMeData = await fetchAboutMeData(apiUrl);
392
+ const aboutMeData = await this.fetchAboutMeData(apiUrl);
383
393
  if (aboutMeData) {
384
394
  hydrationScript = `<script>window.__HYDRATION_DATA__ = ${JSON.stringify(aboutMeData)};<\/script>`;
385
395
  }
386
396
  }
387
- const pageContent = await generatePageContent(url.pathname, routes, footerLinks, { ...env, apiUrl });
388
- const html = await createHtmlTemplate({ ...pageContent, hydrationData: hydrationScript });
397
+ const pageContent = await generatePageContent(url.pathname, this.routes, this.footerLinks, { ...env, apiUrl, siteTitle: this.siteTitle, copyright: this.copyright });
398
+ const html = await this.templateRenderer({ ...pageContent, hydrationData: hydrationScript });
389
399
  return new Response(html, {
390
400
  headers: {
391
401
  "content-type": "text/html",
@@ -393,7 +403,9 @@ const index = {
393
403
  }
394
404
  });
395
405
  }
396
- };
406
+ }
407
+ const defaultPrerender = new WebsitePrerender();
397
408
  export {
398
- index as default
409
+ WebsitePrerender,
410
+ defaultPrerender as default
399
411
  };
@@ -1,5 +1,6 @@
1
1
  import { InfrastructureConfig, WebsiteConfig } from './types';
2
2
  export * from './types';
3
3
  export declare function initializeConfig(infra?: Partial<InfrastructureConfig>): Promise<WebsiteConfig>;
4
+ export declare function refreshConfig(): Promise<WebsiteConfig>;
4
5
  export declare function getConfig(): WebsiteConfig;
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAiB,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7E,cAAc,SAAS,CAAC;AAkBxB,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpG;AAED,wBAAgB,SAAS,IAAI,aAAa,CAEzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAiB,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7E,cAAc,SAAS,CAAC;AAkBxB,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAkBpG;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAW5D;AAED,wBAAgB,SAAS,IAAI,aAAa,CAEzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=theme-toggle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-toggle.test.d.ts","sourceRoot":"","sources":["../../../../src/shared/core/__tests__/theme-toggle.test.ts"],"names":[],"mappings":""}
@@ -11,6 +11,7 @@ export declare class SiteStore {
11
11
  }): Promise<WebsiteConfig>;
12
12
  subscribe(listener: (config: WebsiteConfig) => void): () => boolean;
13
13
  private notify;
14
+ refresh(): Promise<void>;
14
15
  getConfig(): WebsiteConfig;
15
16
  }
16
17
  //# sourceMappingURL=site-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"site-store.d.ts","sourceRoot":"","sources":["../../../src/shared/core/site-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAA+B,MAAM,WAAW,CAAC;AAEtF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAY;IACnC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,SAAS,CAAmD;IAEpE,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,SAAS;IAOzB,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAMtD,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI;IAMnD,OAAO,CAAC,MAAM;IAMd,SAAS,IAAI,aAAa;CAG3B"}
1
+ {"version":3,"file":"site-store.d.ts","sourceRoot":"","sources":["../../../src/shared/core/site-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAA8C,MAAM,WAAW,CAAC;AAErG,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAY;IACnC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,SAAS,CAAmD;IAEpE,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,SAAS;IAOzB,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAMtD,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI;IAMnD,OAAO,CAAC,MAAM;IAMR,OAAO;IAQb,SAAS,IAAI,aAAa;CAG3B"}
@@ -1,9 +1,11 @@
1
1
  export * from './config';
2
2
  export * from './core/site-store';
3
- export * from './interfaces/iRoute';
4
- export * from './interfaces/iFooterLink';
3
+ export * from './website-ui';
4
+ export * from './router';
5
+ export * from './interfaces/iroute';
6
+ export * from './interfaces/ifooter-link';
5
7
  export * from './core/theme-toggle';
6
8
  export * from './template';
7
- export * from './pageContent';
9
+ export * from './page-content';
8
10
  export * from './runtime';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AAGzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC"}
@@ -2,4 +2,4 @@ export interface IFooterLink {
2
2
  text: string;
3
3
  link: string;
4
4
  }
5
- //# sourceMappingURL=iFooterLink.d.ts.map
5
+ //# sourceMappingURL=ifooter-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifooter-link.d.ts","sourceRoot":"","sources":["../../../src/shared/interfaces/ifooter-link.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -2,4 +2,4 @@ export interface IRoute {
2
2
  text: string;
3
3
  link: string;
4
4
  }
5
- //# sourceMappingURL=iRoute.d.ts.map
5
+ //# sourceMappingURL=iroute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iroute.d.ts","sourceRoot":"","sources":["../../../src/shared/interfaces/iroute.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -1,5 +1,6 @@
1
- import { IFooterLink } from './interfaces/iFooterLink';
2
- import { IRoute } from './interfaces/iRoute';
1
+ import { IFooterLink } from './interfaces/ifooter-link';
2
+ import { IRoute } from './interfaces/iroute';
3
+ export type { IFooterLink, IRoute };
3
4
  export interface PageContent {
4
5
  title: string;
5
6
  description: string;
@@ -32,4 +33,4 @@ export declare const generatePageContent: (pathname: string, routes: IRoute[], f
32
33
  apiUrl?: string;
33
34
  baseUrl?: string;
34
35
  }) => PageContent;
35
- //# sourceMappingURL=pageContent.d.ts.map
36
+ //# sourceMappingURL=page-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-content.d.ts","sourceRoot":"","sources":["../../src/shared/page-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAGpC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,MAGhD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,EAChB,QAAQ,MAAM,EAAE,EAChB,aAAa,WAAW,EAAE,EAC1B,OAAO;IACL,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KACA,WA0JF,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { WebsiteUI } from './website-ui';
2
+ export declare class Router {
3
+ private ui;
4
+ private routes;
5
+ private apiUrl;
6
+ private logo;
7
+ private appElement;
8
+ constructor(ui: WebsiteUI);
9
+ private get config();
10
+ private get siteTitle();
11
+ private get copyright();
12
+ private get footerLinks();
13
+ init(appElementId?: string): void;
14
+ private setupEventListeners;
15
+ navigate(path: string): Promise<void>;
16
+ private setPageMeta;
17
+ private renderHomePage;
18
+ private renderAboutMePage;
19
+ private renderContentListPage;
20
+ private renderContentDetailPage;
21
+ private renderAdminPage;
22
+ }
23
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/shared/router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,MAAM;IAML,OAAO,CAAC,EAAE;IALtB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,UAAU,CAA4B;gBAE1B,EAAE,EAAE,SAAS;IAejC,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,WAAW,GAatB;IAEM,IAAI,CAAC,YAAY,GAAE,MAAc;IAWxC,OAAO,CAAC,mBAAmB;IAmCd,QAAQ,CAAC,IAAI,EAAE,MAAM;IA6BlC,OAAO,CAAC,WAAW;YAgCL,cAAc;IAkC5B,OAAO,CAAC,iBAAiB;YAQX,qBAAqB;YAiBrB,uBAAuB;YAmBvB,eAAe;CAqB9B"}
@@ -1,7 +1,7 @@
1
- export * from './interfaces/iRoute';
2
- export * from './interfaces/iFooterLink';
3
- export * from './pageContent';
4
- export type { IRoute } from './interfaces/iRoute';
5
- export type { IFooterLink } from './interfaces/iFooterLink';
6
- export { generatePageContent } from './pageContent';
1
+ export * from './interfaces/iroute';
2
+ export * from './interfaces/ifooter-link';
3
+ export * from './page-content';
4
+ export type { IRoute } from './interfaces/iroute';
5
+ export type { IFooterLink } from './interfaces/ifooter-link';
6
+ export { generatePageContent } from './page-content';
7
7
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/shared/runtime.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAG9B,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/shared/runtime.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAG/B,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { SiteStore } from './core/site-store';
2
+ import { IRoute } from './interfaces/iroute';
3
+ import { Router } from './router';
4
+ export interface UIConfig {
5
+ apiUrl?: string;
6
+ baseUrl?: string;
7
+ routes?: IRoute[];
8
+ appElementId?: string;
9
+ theme?: {
10
+ primaryColor?: string;
11
+ backgroundColor?: string;
12
+ textColor?: string;
13
+ customCss?: string;
14
+ };
15
+ onBootstrap?: (ui: WebsiteUI) => void | Promise<void>;
16
+ }
17
+ export declare class WebsiteUI {
18
+ private static instance;
19
+ private store;
20
+ private config;
21
+ private router;
22
+ private constructor();
23
+ static getInstance(config?: UIConfig): WebsiteUI;
24
+ bootstrap(): Promise<void>;
25
+ private applyTheme;
26
+ private updateFavicon;
27
+ getStore(): SiteStore;
28
+ getConfig(): UIConfig;
29
+ getRouter(): Router;
30
+ }
31
+ export declare const bootstrap: (config?: UIConfig) => Promise<void>;
32
+ //# sourceMappingURL=website-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"website-ui.d.ts","sourceRoot":"","sources":["../../src/shared/website-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAY;IACnC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO;WAKO,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS;IAU1C,SAAS;IAoCtB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,aAAa;IAad,QAAQ;IAIR,SAAS;IAIT,SAAS;CAGjB;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,QAAQ,kBAA8C,CAAC"}