@vezham/config 0.0.0-stage → 26.0.0-alpha.6

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 (173) hide show
  1. package/LICENSE +173 -0
  2. package/README.md +14 -2
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +0 -0
  6. package/dist/lib/deploy/cli.d.ts +3 -0
  7. package/dist/lib/deploy/cli.d.ts.map +1 -0
  8. package/dist/lib/deploy/cli.js +12 -0
  9. package/dist/lib/deploy/firebase.d.ts +3 -0
  10. package/dist/lib/deploy/firebase.d.ts.map +1 -0
  11. package/dist/lib/deploy/firebase.js +106 -0
  12. package/dist/lib/deploy/index.d.ts +4 -0
  13. package/dist/lib/deploy/index.d.ts.map +1 -0
  14. package/dist/lib/deploy/index.js +42 -0
  15. package/dist/lib/deploy/paths.d.ts +3 -0
  16. package/dist/lib/deploy/paths.d.ts.map +1 -0
  17. package/dist/lib/deploy/paths.js +6 -0
  18. package/dist/lib/deploy/presets.d.ts +5 -0
  19. package/dist/lib/deploy/presets.d.ts.map +1 -0
  20. package/dist/lib/deploy/presets.js +10 -0
  21. package/dist/lib/deploy/types.d.ts +97 -0
  22. package/dist/lib/deploy/types.d.ts.map +1 -0
  23. package/dist/lib/deploy/vercel.d.ts +3 -0
  24. package/dist/lib/deploy/vercel.d.ts.map +1 -0
  25. package/dist/lib/deploy/vercel.js +47 -0
  26. package/dist/lib/framework.d.ts +3 -0
  27. package/dist/lib/framework.d.ts.map +1 -0
  28. package/dist/lib/framework.js +7 -0
  29. package/dist/lib/i18n.d.ts +6 -0
  30. package/dist/lib/i18n.d.ts.map +1 -0
  31. package/dist/lib/i18n.js +11 -0
  32. package/dist/lib/integrations/next/index.d.ts +4 -0
  33. package/dist/lib/integrations/next/index.d.ts.map +1 -0
  34. package/dist/lib/integrations/next/index.js +29 -0
  35. package/dist/lib/integrations/playwright/index.d.ts +11 -0
  36. package/dist/lib/integrations/playwright/index.d.ts.map +1 -0
  37. package/dist/lib/integrations/playwright/index.js +77 -0
  38. package/dist/lib/integrations/playwright/test.d.ts +5 -0
  39. package/dist/lib/integrations/playwright/test.d.ts.map +1 -0
  40. package/dist/lib/integrations/playwright/test.js +23 -0
  41. package/dist/lib/integrations/vite/index.d.ts +12 -0
  42. package/dist/lib/integrations/vite/index.d.ts.map +1 -0
  43. package/dist/lib/integrations/vite/index.js +34 -0
  44. package/dist/lib/integrations/vite-lib/base.d.ts +3 -0
  45. package/dist/lib/integrations/vite-lib/base.d.ts.map +1 -0
  46. package/dist/lib/integrations/vite-lib/base.js +31 -0
  47. package/dist/lib/integrations/vite-lib/index.d.ts +3 -0
  48. package/dist/lib/integrations/vite-lib/index.d.ts.map +1 -0
  49. package/dist/lib/integrations/vite-lib/index.js +42 -0
  50. package/dist/lib/integrations/vite-lib/react.d.ts +3 -0
  51. package/dist/lib/integrations/vite-lib/react.d.ts.map +1 -0
  52. package/dist/lib/integrations/vite-lib/react.js +10 -0
  53. package/dist/lib/integrations/vitest/framework.d.ts +4 -0
  54. package/dist/lib/integrations/vitest/framework.d.ts.map +1 -0
  55. package/dist/lib/integrations/vitest/framework.js +5 -0
  56. package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts +3 -0
  57. package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts.map +1 -0
  58. package/dist/lib/integrations/vitest/frameworks/docs-plugins.js +27 -0
  59. package/dist/lib/integrations/vitest/frameworks/docs.d.ts +3 -0
  60. package/dist/lib/integrations/vitest/frameworks/docs.d.ts.map +1 -0
  61. package/dist/lib/integrations/vitest/frameworks/docs.js +5 -0
  62. package/dist/lib/integrations/vitest/frameworks/next.d.ts +3 -0
  63. package/dist/lib/integrations/vitest/frameworks/next.d.ts.map +1 -0
  64. package/dist/lib/integrations/vitest/frameworks/next.js +5 -0
  65. package/dist/lib/integrations/vitest/frameworks/react.d.ts +3 -0
  66. package/dist/lib/integrations/vitest/frameworks/react.d.ts.map +1 -0
  67. package/dist/lib/integrations/vitest/frameworks/react.js +5 -0
  68. package/dist/lib/integrations/vitest/index.d.ts +4 -0
  69. package/dist/lib/integrations/vitest/index.d.ts.map +1 -0
  70. package/dist/lib/integrations/vitest/index.js +4 -0
  71. package/dist/lib/integrations/vitest/setup/next.d.ts +2 -0
  72. package/dist/lib/integrations/vitest/setup/next.d.ts.map +1 -0
  73. package/dist/lib/integrations/vitest/setup/next.js +11 -0
  74. package/dist/lib/integrations/vitest/setup/react.d.ts +2 -0
  75. package/dist/lib/integrations/vitest/setup/react.d.ts.map +1 -0
  76. package/dist/lib/integrations/vitest/setup/react.js +36 -0
  77. package/dist/lib/integrations/vitest/shared.d.ts +3 -0
  78. package/dist/lib/integrations/vitest/shared.d.ts.map +1 -0
  79. package/dist/lib/integrations/vitest/shared.js +24 -0
  80. package/dist/lib/metadata/cli.d.ts +3 -0
  81. package/dist/lib/metadata/cli.d.ts.map +1 -0
  82. package/dist/lib/metadata/cli.js +13 -0
  83. package/dist/lib/metadata/env.d.ts +9 -0
  84. package/dist/lib/metadata/env.d.ts.map +1 -0
  85. package/dist/lib/metadata/env.js +36 -0
  86. package/dist/lib/metadata/html.d.ts +3 -0
  87. package/dist/lib/metadata/html.d.ts.map +1 -0
  88. package/dist/lib/metadata/html.js +96 -0
  89. package/dist/lib/metadata/index.d.ts +7 -0
  90. package/dist/lib/metadata/index.d.ts.map +1 -0
  91. package/dist/lib/metadata/index.js +61 -0
  92. package/dist/lib/metadata/next.d.ts +79 -0
  93. package/dist/lib/metadata/next.d.ts.map +1 -0
  94. package/dist/lib/metadata/next.js +106 -0
  95. package/dist/lib/metadata/public.d.ts +3 -0
  96. package/dist/lib/metadata/public.d.ts.map +1 -0
  97. package/dist/lib/metadata/public.js +107 -0
  98. package/dist/lib/metadata/render.d.ts +7 -0
  99. package/dist/lib/metadata/render.d.ts.map +1 -0
  100. package/dist/lib/metadata/render.js +37 -0
  101. package/dist/lib/metadata/runtime.d.ts +68 -0
  102. package/dist/lib/metadata/runtime.d.ts.map +1 -0
  103. package/dist/lib/metadata/runtime.js +134 -0
  104. package/dist/lib/metadata/tanstack.d.ts +71 -0
  105. package/dist/lib/metadata/tanstack.d.ts.map +1 -0
  106. package/dist/lib/metadata/tanstack.js +194 -0
  107. package/dist/lib/metadata/templates/not-found.html +224 -0
  108. package/dist/lib/metadata/templates/offline.html +210 -0
  109. package/dist/lib/metadata/types.d.ts +118 -0
  110. package/dist/lib/metadata/types.d.ts.map +1 -0
  111. package/dist/lib/navigation/app-menu.d.ts +2 -0
  112. package/dist/lib/navigation/app-menu.d.ts.map +1 -0
  113. package/dist/lib/navigation/app-menu.js +45 -0
  114. package/dist/lib/navigation/control-center.d.ts +2 -0
  115. package/dist/lib/navigation/control-center.d.ts.map +1 -0
  116. package/dist/lib/navigation/control-center.js +66 -0
  117. package/dist/lib/navigation/index.d.ts +5 -0
  118. package/dist/lib/navigation/index.d.ts.map +1 -0
  119. package/dist/lib/navigation/index.js +59 -0
  120. package/dist/lib/navigation/toolbar.d.ts +2 -0
  121. package/dist/lib/navigation/toolbar.d.ts.map +1 -0
  122. package/dist/lib/navigation/toolbar.js +78 -0
  123. package/dist/lib/presets/app/index.d.ts +21 -0
  124. package/dist/lib/presets/app/index.d.ts.map +1 -0
  125. package/dist/lib/presets/app/index.js +114 -0
  126. package/dist/lib/presets/cdn/index.d.ts +2 -0
  127. package/dist/lib/presets/cdn/index.d.ts.map +1 -0
  128. package/dist/lib/presets/cdn/index.js +2 -0
  129. package/dist/lib/presets/docs/cli.d.ts +3 -0
  130. package/dist/lib/presets/docs/cli.d.ts.map +1 -0
  131. package/dist/lib/presets/docs/cli.js +18 -0
  132. package/dist/lib/presets/docs/config.d.ts +40 -0
  133. package/dist/lib/presets/docs/config.d.ts.map +1 -0
  134. package/dist/lib/presets/docs/config.js +39 -0
  135. package/dist/lib/presets/docs/files.d.ts +2 -0
  136. package/dist/lib/presets/docs/files.d.ts.map +1 -0
  137. package/dist/lib/presets/docs/files.js +13 -0
  138. package/dist/lib/presets/docs/index.d.ts +7 -0
  139. package/dist/lib/presets/docs/index.d.ts.map +1 -0
  140. package/dist/lib/presets/docs/index.js +6 -0
  141. package/dist/lib/presets/docs/mdx-path.d.ts +7 -0
  142. package/dist/lib/presets/docs/mdx-path.d.ts.map +1 -0
  143. package/dist/lib/presets/docs/mdx-path.js +19 -0
  144. package/dist/lib/presets/docs/og-image.d.ts +9 -0
  145. package/dist/lib/presets/docs/og-image.d.ts.map +1 -0
  146. package/dist/lib/presets/docs/og-image.js +88 -0
  147. package/dist/lib/presets/docs/og-output.d.ts +5 -0
  148. package/dist/lib/presets/docs/og-output.d.ts.map +1 -0
  149. package/dist/lib/presets/docs/og-output.js +34 -0
  150. package/dist/lib/presets/docs/og.d.ts +9 -0
  151. package/dist/lib/presets/docs/og.d.ts.map +1 -0
  152. package/dist/lib/presets/docs/og.js +112 -0
  153. package/dist/lib/presets/docs/openapi.d.ts +3 -0
  154. package/dist/lib/presets/docs/openapi.d.ts.map +1 -0
  155. package/dist/lib/presets/docs/openapi.js +105 -0
  156. package/dist/lib/presets/docs/routes.d.ts +7 -0
  157. package/dist/lib/presets/docs/routes.d.ts.map +1 -0
  158. package/dist/lib/presets/docs/routes.js +109 -0
  159. package/dist/lib/presets/docs/types.d.ts +31 -0
  160. package/dist/lib/presets/docs/types.d.ts.map +1 -0
  161. package/dist/lib/presets/docs/vite.d.ts +11 -0
  162. package/dist/lib/presets/docs/vite.d.ts.map +1 -0
  163. package/dist/lib/presets/docs/vite.js +78 -0
  164. package/dist/lib/presets/files.d.ts +5 -0
  165. package/dist/lib/presets/files.d.ts.map +1 -0
  166. package/dist/lib/presets/files.js +21 -0
  167. package/dist/lib/presets/route-files.d.ts +22 -0
  168. package/dist/lib/presets/route-files.d.ts.map +1 -0
  169. package/dist/lib/presets/route-files.js +49 -0
  170. package/dist/lib/yaml-config.d.ts +2 -0
  171. package/dist/lib/yaml-config.d.ts.map +1 -0
  172. package/dist/lib/yaml-config.js +6 -0
  173. package/package.json +119 -3
@@ -0,0 +1,134 @@
1
+ import { resolveI18n } from "../i18n.js";
2
+ import path from "node:path";
3
+ //#region src/lib/metadata/runtime.ts
4
+ var lowerFirst = (value) => value ? `${value.charAt(0).toLowerCase()}${value.slice(1)}` : value;
5
+ var normalizePath = (value) => value.split(path.sep).join("/");
6
+ var getProjectAssetBaseUrl = (projectRoot) => `https://static.cdn.vezham.com/${normalizePath(path.relative(process.cwd(), projectRoot))}`;
7
+ var createVersionedAssetUrl = (baseUrl, version) => {
8
+ const versionParam = `vx=${encodeURIComponent(version)}`;
9
+ return (assetPath) => `${baseUrl.replace(/\/$/, "")}/${assetPath.replace(/^\//, "")}?${versionParam}`;
10
+ };
11
+ var getStaticAssetUrl = (assetPath, version) => `https://static.cdn.vezham.com/${assetPath.replace(/^\//, "")}?vx=${encodeURIComponent(version)}`;
12
+ var toAssetUrl = (assetPath, versionedAssetUrl) => /^https?:\/\//.test(assetPath) || assetPath.startsWith("/") ? assetPath : versionedAssetUrl(assetPath);
13
+ var resolveSocialImage = (image) => {
14
+ const value = image?.trim();
15
+ if (!value) return {
16
+ source: "default",
17
+ url: "/og/image.png"
18
+ };
19
+ if (/^https?:\/\//i.test(value)) return {
20
+ source: "url",
21
+ url: value
22
+ };
23
+ return {
24
+ source: "path",
25
+ url: `/${value.replace(/^\/+/, "")}`
26
+ };
27
+ };
28
+ var getStartupImageMedia = (image) => {
29
+ if (image.media) return image.media;
30
+ return [
31
+ image.colorScheme ? `(prefers-color-scheme: ${image.colorScheme})` : void 0,
32
+ image.width ? `(device-width: ${image.width}px)` : void 0,
33
+ image.height ? `(device-height: ${image.height}px)` : void 0,
34
+ image.pixelRatio ? `(-webkit-device-pixel-ratio: ${image.pixelRatio})` : void 0
35
+ ].filter(Boolean).join(" and ");
36
+ };
37
+ var createStartupImagePath = (template, image) => template.replaceAll("{colorScheme}", image.colorScheme ?? "").replaceAll("{device}", image.device ?? "").replaceAll("{width}", String(image.width ?? "")).replaceAll("{height}", String(image.height ?? "")).replaceAll("{pixelRatio}", String(image.pixelRatio ?? ""));
38
+ var normalizeStartupImages = (startupImages) => {
39
+ if (Array.isArray(startupImages)) return startupImages;
40
+ return (startupImages.colorSchemes ?? ["light", "dark"]).flatMap((colorScheme) => startupImages.sizes.map((size) => {
41
+ const image = {
42
+ ...size,
43
+ colorScheme
44
+ };
45
+ const sourcePath = size.path ?? size.src ?? startupImages.path;
46
+ return {
47
+ ...image,
48
+ path: createStartupImagePath(sourcePath, image)
49
+ };
50
+ }));
51
+ };
52
+ var normalizeIcons = (icons) => {
53
+ if (Array.isArray(icons)) return icons;
54
+ return icons.sizes.map((size) => ({
55
+ src: icons.path.replaceAll("{size}", String(size)),
56
+ sizes: `${size}x${size}`,
57
+ type: icons.type
58
+ }));
59
+ };
60
+ var getRuntimeMetadata = (config, projectRoot = process.cwd()) => {
61
+ const { core, metadata, pwa } = config;
62
+ const { apple, microsoft } = metadata.platforms;
63
+ const { openGraph, twitter } = metadata.social;
64
+ const versionedAssetUrl = createVersionedAssetUrl(getProjectAssetBaseUrl(projectRoot), core.version);
65
+ const title = metadata.title;
66
+ const description = lowerFirst(core.description);
67
+ const lightThemeColor = metadata.theme.lightColor;
68
+ const darkThemeColor = metadata.theme.darkColor;
69
+ const lightBackgroundColor = metadata.theme.lightBackgroundColor;
70
+ const darkBackgroundColor = metadata.theme.darkBackgroundColor;
71
+ const faviconLight = versionedAssetUrl("favicon-light.png");
72
+ const faviconDark = versionedAssetUrl("favicon-dark.png");
73
+ const maskIcon = versionedAssetUrl("safari-pinned-tab.svg");
74
+ const appleTouchIcon = versionedAssetUrl(apple.touchIcon);
75
+ const openGraphImage = resolveSocialImage(openGraph.image);
76
+ const twitterImage = resolveSocialImage(twitter.image?.trim() ? twitter.image : openGraph.image);
77
+ const startupImages = normalizeStartupImages(apple.startupImages).map((image) => ({
78
+ media: getStartupImageMedia(image),
79
+ url: toAssetUrl(image.path ?? image.src ?? "", versionedAssetUrl)
80
+ }));
81
+ return {
82
+ ...resolveI18n(config.i18n),
83
+ title,
84
+ description,
85
+ url: core.url,
86
+ manifest: "/manifest.webmanifest",
87
+ browserConfig: "/browserconfig.xml",
88
+ startUrl: microsoft.startUrl ?? pwa.startUrl,
89
+ author: core.publisher,
90
+ keywords: metadata.keywords,
91
+ theme: {
92
+ lightColor: lightThemeColor,
93
+ darkColor: darkThemeColor,
94
+ lightBackgroundColor,
95
+ darkBackgroundColor
96
+ },
97
+ mobileWebAppCapable: apple.mobileWebAppCapable,
98
+ apple: {
99
+ title: core.name,
100
+ capable: apple.webAppCapable,
101
+ touchIcon: appleTouchIcon,
102
+ startupImages
103
+ },
104
+ icons: {
105
+ faviconLight,
106
+ faviconDark,
107
+ maskIcon
108
+ },
109
+ microsoft: {
110
+ applicationName: core.name,
111
+ config: "/browserconfig.xml",
112
+ startUrl: microsoft.startUrl
113
+ },
114
+ openGraph: {
115
+ type: openGraph.type,
116
+ title: core.name,
117
+ description,
118
+ image: openGraphImage.url,
119
+ imageSource: openGraphImage.source,
120
+ url: core.url
121
+ },
122
+ twitter: {
123
+ creator: twitter.creator,
124
+ site: twitter.site,
125
+ title: core.name,
126
+ description,
127
+ image: twitterImage.url,
128
+ url: core.url,
129
+ card: twitter.card
130
+ }
131
+ };
132
+ };
133
+ //#endregion
134
+ export { createVersionedAssetUrl, getProjectAssetBaseUrl, getRuntimeMetadata, getStaticAssetUrl, lowerFirst, normalizeIcons, toAssetUrl };
@@ -0,0 +1,71 @@
1
+ import type { VxConfig } from './types';
2
+ export declare const getTanStackHead: (config: VxConfig, projectRoot?: string) => {
3
+ meta: ({
4
+ charSet: string;
5
+ name?: undefined;
6
+ content?: undefined;
7
+ title?: undefined;
8
+ media?: undefined;
9
+ property?: undefined;
10
+ } | {
11
+ name: string;
12
+ content: string;
13
+ charSet?: undefined;
14
+ title?: undefined;
15
+ media?: undefined;
16
+ property?: undefined;
17
+ } | {
18
+ title: string;
19
+ charSet?: undefined;
20
+ name?: undefined;
21
+ content?: undefined;
22
+ media?: undefined;
23
+ property?: undefined;
24
+ } | {
25
+ name: string;
26
+ media: string;
27
+ content: string;
28
+ charSet?: undefined;
29
+ title?: undefined;
30
+ property?: undefined;
31
+ } | {
32
+ property: string;
33
+ content: string;
34
+ charSet?: undefined;
35
+ name?: undefined;
36
+ title?: undefined;
37
+ media?: undefined;
38
+ })[];
39
+ links: ({
40
+ rel: string;
41
+ href: string;
42
+ type?: undefined;
43
+ media?: undefined;
44
+ color?: undefined;
45
+ } | {
46
+ rel: string;
47
+ type: string;
48
+ media: string;
49
+ href: string;
50
+ color?: undefined;
51
+ } | {
52
+ rel: string;
53
+ media: string;
54
+ href: string;
55
+ type?: undefined;
56
+ color?: undefined;
57
+ } | {
58
+ rel: string;
59
+ type: string;
60
+ media: string;
61
+ href: string;
62
+ color: string;
63
+ } | {
64
+ rel: string;
65
+ media: string;
66
+ href: string;
67
+ color: string;
68
+ type?: undefined;
69
+ })[];
70
+ };
71
+ //# sourceMappingURL=tanstack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tanstack.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata/tanstack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,eAAe,GAC1B,QAAQ,QAAQ,EAChB,oBAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJ5B,CAAA"}
@@ -0,0 +1,194 @@
1
+ import { getRuntimeMetadata } from "./runtime.js";
2
+ //#region src/lib/metadata/tanstack.ts
3
+ var getTanStackHead = (config, projectRoot = process.cwd()) => {
4
+ const metadata = getRuntimeMetadata(config, projectRoot);
5
+ return {
6
+ meta: [
7
+ { charSet: "utf-8" },
8
+ {
9
+ name: "viewport",
10
+ content: "width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=1, shrink-to-fit=no"
11
+ },
12
+ {
13
+ name: "author",
14
+ content: metadata.author?.name ?? ""
15
+ },
16
+ {
17
+ name: "keywords",
18
+ content: metadata.keywords.join(", ")
19
+ },
20
+ { title: metadata.title },
21
+ {
22
+ name: "description",
23
+ content: metadata.description
24
+ },
25
+ {
26
+ name: "theme-color",
27
+ media: "(prefers-color-scheme: light)",
28
+ content: metadata.theme.lightColor
29
+ },
30
+ {
31
+ name: "theme-color",
32
+ media: "(prefers-color-scheme: dark)",
33
+ content: metadata.theme.darkColor
34
+ },
35
+ {
36
+ name: "background-color",
37
+ media: "(prefers-color-scheme: light)",
38
+ content: metadata.theme.lightBackgroundColor
39
+ },
40
+ {
41
+ name: "background-color",
42
+ media: "(prefers-color-scheme: dark)",
43
+ content: metadata.theme.darkBackgroundColor
44
+ },
45
+ {
46
+ name: "mobile-web-app-capable",
47
+ content: metadata.mobileWebAppCapable ? "yes" : "no"
48
+ },
49
+ {
50
+ name: "apple-mobile-web-app-title",
51
+ content: metadata.apple.title
52
+ },
53
+ {
54
+ name: "apple-mobile-web-app-capable",
55
+ content: metadata.apple.capable ? "yes" : "no"
56
+ },
57
+ {
58
+ name: "application-name",
59
+ content: metadata.microsoft.applicationName
60
+ },
61
+ {
62
+ name: "msapplication-config",
63
+ content: metadata.microsoft.config
64
+ },
65
+ {
66
+ name: "msapplication-starturl",
67
+ content: metadata.microsoft.startUrl
68
+ },
69
+ {
70
+ property: "og:type",
71
+ content: metadata.openGraph.type
72
+ },
73
+ {
74
+ property: "og:title",
75
+ content: metadata.openGraph.title
76
+ },
77
+ {
78
+ property: "og:description",
79
+ content: metadata.openGraph.description
80
+ },
81
+ {
82
+ property: "og:image",
83
+ content: metadata.openGraph.image
84
+ },
85
+ {
86
+ property: "og:url",
87
+ content: metadata.openGraph.url
88
+ },
89
+ {
90
+ name: "twitter:creator",
91
+ content: metadata.twitter.creator
92
+ },
93
+ {
94
+ name: "twitter:site",
95
+ content: metadata.twitter.site
96
+ },
97
+ {
98
+ name: "twitter:title",
99
+ content: metadata.twitter.title
100
+ },
101
+ {
102
+ name: "twitter:description",
103
+ content: metadata.twitter.description
104
+ },
105
+ {
106
+ name: "twitter:image",
107
+ content: metadata.twitter.image
108
+ },
109
+ {
110
+ name: "twitter:url",
111
+ content: metadata.twitter.url
112
+ },
113
+ {
114
+ name: "twitter:card",
115
+ content: metadata.twitter.card
116
+ }
117
+ ],
118
+ links: [
119
+ {
120
+ rel: "manifest",
121
+ href: metadata.manifest
122
+ },
123
+ {
124
+ rel: "icon",
125
+ type: "image/x-icon",
126
+ media: "(prefers-color-scheme: light)",
127
+ href: metadata.icons.faviconLight
128
+ },
129
+ {
130
+ rel: "icon",
131
+ type: "image/x-icon",
132
+ media: "(prefers-color-scheme: dark)",
133
+ href: metadata.icons.faviconDark
134
+ },
135
+ {
136
+ rel: "icon",
137
+ media: "(prefers-color-scheme: light)",
138
+ href: metadata.icons.faviconLight
139
+ },
140
+ {
141
+ rel: "icon",
142
+ media: "(prefers-color-scheme: dark)",
143
+ href: metadata.icons.faviconDark
144
+ },
145
+ {
146
+ rel: "icon",
147
+ type: "image/svg+xml",
148
+ media: "(prefers-color-scheme: light)",
149
+ href: metadata.icons.maskIcon,
150
+ color: "black"
151
+ },
152
+ {
153
+ rel: "icon",
154
+ type: "image/svg+xml",
155
+ media: "(prefers-color-scheme: dark)",
156
+ href: metadata.icons.maskIcon,
157
+ color: "white"
158
+ },
159
+ {
160
+ rel: "shortcut icon",
161
+ media: "(prefers-color-scheme: light)",
162
+ href: metadata.icons.faviconLight
163
+ },
164
+ {
165
+ rel: "shortcut icon",
166
+ media: "(prefers-color-scheme: dark)",
167
+ href: metadata.icons.faviconDark
168
+ },
169
+ {
170
+ rel: "mask-icon",
171
+ media: "(prefers-color-scheme: light)",
172
+ href: metadata.icons.maskIcon,
173
+ color: "black"
174
+ },
175
+ {
176
+ rel: "mask-icon",
177
+ media: "(prefers-color-scheme: dark)",
178
+ href: metadata.icons.maskIcon,
179
+ color: "white"
180
+ },
181
+ {
182
+ rel: "apple-touch-icon",
183
+ href: metadata.apple.touchIcon
184
+ },
185
+ ...metadata.apple.startupImages.map((image) => ({
186
+ rel: "apple-touch-startup-image",
187
+ media: image.media,
188
+ href: image.url
189
+ }))
190
+ ]
191
+ };
192
+ };
193
+ //#endregion
194
+ export { getTanStackHead };
@@ -0,0 +1,224 @@
1
+ <!doctype html>
2
+ <!-- {{generatedNotice}} -->
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <meta name="author" content="{{author}}" />
8
+ <title>Page Not Found | {{appName}}</title>
9
+ <style>
10
+ :root,
11
+ .light {
12
+ color-scheme: light;
13
+ --white: oklch(100% 0 0);
14
+ --snow: oklch(0.9911 0 0);
15
+ --eclipse: oklch(0.2103 0.0059 285.89);
16
+ --background: oklch(0.9702 0 0);
17
+ --foreground: var(--eclipse);
18
+ --muted: oklch(0.5517 0.0138 285.94);
19
+ --default: oklch(94% 0.001 286.375);
20
+ --default-foreground: var(--eclipse);
21
+ --accent: oklch(0.6204 0.195 253.83);
22
+ --accent-soft-foreground: color-mix(
23
+ in oklab,
24
+ var(--accent) 70%,
25
+ var(--foreground) 30%
26
+ );
27
+ --default-hover: color-mix(
28
+ in oklab,
29
+ var(--default) 96%,
30
+ var(--default-foreground) 4%
31
+ );
32
+ }
33
+
34
+ .dark,
35
+ [data-theme='dark'] {
36
+ color-scheme: dark;
37
+ --background: oklch(12% 0.005 285.823);
38
+ --foreground: var(--snow);
39
+ --muted: oklch(70.5% 0.015 286.067);
40
+ --default: oklch(27.4% 0.006 286.033);
41
+ --default-foreground: var(--snow);
42
+ --accent-soft-foreground: color-mix(
43
+ in oklab,
44
+ var(--accent) 80%,
45
+ var(--foreground) 30%
46
+ );
47
+ }
48
+
49
+ * {
50
+ box-sizing: border-box;
51
+ }
52
+
53
+ body {
54
+ background: var(--white);
55
+ color: var(--foreground);
56
+ font-family: ui-sans-serif, system-ui, sans-serif;
57
+ margin: 0;
58
+ }
59
+
60
+ .dark body,
61
+ [data-theme='dark'] body {
62
+ background: var(--background);
63
+ }
64
+
65
+ .vx-not-found {
66
+ align-items: center;
67
+ display: flex;
68
+ justify-content: center;
69
+ min-height: 100vh;
70
+ padding: 1.5rem;
71
+ text-align: left;
72
+ }
73
+
74
+ .empty-state {
75
+ max-width: 37rem;
76
+ padding: 0.5rem;
77
+ width: 100%;
78
+ }
79
+
80
+ .vx-not-found__content {
81
+ align-items: flex-start;
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: 0.75rem;
85
+ justify-content: center;
86
+ max-width: 36rem;
87
+ width: 100%;
88
+ }
89
+
90
+ .vx-not-found__image {
91
+ height: auto;
92
+ margin-bottom: 0.75rem;
93
+ max-height: 16rem;
94
+ max-width: 100%;
95
+ object-fit: contain;
96
+ width: min(20rem, 70vw);
97
+ }
98
+
99
+ .vx-not-found__path {
100
+ font-weight: 600;
101
+ overflow-wrap: anywhere;
102
+ }
103
+
104
+ .typography {
105
+ color: var(--foreground);
106
+ margin: 0;
107
+ }
108
+
109
+ .typography--h1 {
110
+ font-size: 2.25rem;
111
+ font-weight: 600;
112
+ line-height: 2.5rem;
113
+ }
114
+
115
+ .typography--h2 {
116
+ font-size: 1.875rem;
117
+ font-weight: 600;
118
+ line-height: 2.25rem;
119
+ }
120
+
121
+ .typography--body {
122
+ color: var(--muted);
123
+ font-size: 1rem;
124
+ line-height: 1.75rem;
125
+ }
126
+
127
+ .typography--color-muted {
128
+ color: var(--muted);
129
+ }
130
+
131
+ .button {
132
+ align-items: center;
133
+ border-radius: 1.5rem;
134
+ cursor: pointer;
135
+ display: flex;
136
+ font-size: 0.875rem;
137
+ font-weight: 500;
138
+ gap: 0.5rem;
139
+ height: 2.25rem;
140
+ justify-content: center;
141
+ padding: 0 1rem;
142
+ text-decoration: none;
143
+ width: fit-content;
144
+ --button-bg: transparent;
145
+ --button-bg-hover: var(--button-bg);
146
+ --button-bg-pressed: var(--button-bg-hover);
147
+ --button-fg: currentcolor;
148
+ background: var(--button-bg);
149
+ color: var(--button-fg);
150
+ }
151
+
152
+ .button--secondary {
153
+ --button-bg: var(--default);
154
+ --button-bg-hover: var(--default-hover);
155
+ --button-bg-pressed: var(--default-hover);
156
+ --button-fg: var(--accent-soft-foreground);
157
+ }
158
+
159
+ .button:hover {
160
+ background: var(--button-bg-hover);
161
+ }
162
+
163
+ .button:focus-visible {
164
+ outline: 2px solid var(--accent);
165
+ outline-offset: 2px;
166
+ }
167
+
168
+ @media (prefers-color-scheme: dark) {
169
+ :root:not(.light):not(.dark):not([data-theme]) {
170
+ color-scheme: dark;
171
+ --background: oklch(12% 0.005 285.823);
172
+ --foreground: var(--snow);
173
+ --muted: oklch(70.5% 0.015 286.067);
174
+ --default: oklch(27.4% 0.006 286.033);
175
+ --default-foreground: var(--snow);
176
+ --accent-soft-foreground: color-mix(
177
+ in oklab,
178
+ var(--accent) 80%,
179
+ var(--foreground) 30%
180
+ );
181
+ }
182
+
183
+ :root:not(.light):not(.dark):not([data-theme]) body {
184
+ background: var(--background);
185
+ }
186
+ }
187
+
188
+ @media only screen and (orientation: landscape) {
189
+ .vx-not-found__image {
190
+ max-height: 11rem;
191
+ width: min(14rem, 30vw);
192
+ }
193
+ }
194
+ </style>
195
+ </head>
196
+ <body>
197
+ <main class="vx-not-found">
198
+ <div class="empty-state">
199
+ <div class="vx-not-found__content">
200
+ <img
201
+ class="vx-not-found__image"
202
+ src="{{imageUrl}}"
203
+ alt="Page not found" />
204
+ <h1 class="typography typography--color-muted typography--h1">404</h1>
205
+ <h2 class="typography typography--h2">Page not found</h2>
206
+ <p class="typography typography--color-muted typography--body">
207
+ {{appName}} could not find the page you requested<span
208
+ class="vx-not-found__path"
209
+ data-vx-not-found-path></span
210
+ >.
211
+ </p>
212
+ <a class="button button--secondary" href="/">Back to Home</a>
213
+ </div>
214
+ </div>
215
+ </main>
216
+ <script>
217
+ const pathElement = document.querySelector('[data-vx-not-found-path]')
218
+
219
+ if (pathElement) {
220
+ pathElement.textContent = ': ' + (window.location.pathname || '/')
221
+ }
222
+ </script>
223
+ </body>
224
+ </html>