@vezham/config 26.0.0-alpha.5 → 26.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +14 -0
  2. package/dist/lib/deploy/cli.d.ts +3 -0
  3. package/dist/lib/deploy/cli.d.ts.map +1 -0
  4. package/dist/lib/deploy/cli.js +12 -0
  5. package/dist/lib/deploy/firebase.d.ts +3 -0
  6. package/dist/lib/deploy/firebase.d.ts.map +1 -0
  7. package/dist/lib/deploy/firebase.js +106 -0
  8. package/dist/lib/deploy/index.d.ts +4 -0
  9. package/dist/lib/deploy/index.d.ts.map +1 -0
  10. package/dist/lib/deploy/index.js +42 -0
  11. package/dist/lib/deploy/paths.d.ts +3 -0
  12. package/dist/lib/deploy/paths.d.ts.map +1 -0
  13. package/dist/lib/deploy/paths.js +6 -0
  14. package/dist/lib/deploy/presets.d.ts +5 -0
  15. package/dist/lib/deploy/presets.d.ts.map +1 -0
  16. package/dist/lib/deploy/presets.js +10 -0
  17. package/dist/lib/deploy/types.d.ts +97 -0
  18. package/dist/lib/deploy/types.d.ts.map +1 -0
  19. package/dist/lib/deploy/vercel.d.ts +3 -0
  20. package/dist/lib/deploy/vercel.d.ts.map +1 -0
  21. package/dist/lib/deploy/vercel.js +47 -0
  22. package/dist/lib/framework.d.ts +3 -0
  23. package/dist/lib/framework.d.ts.map +1 -0
  24. package/dist/lib/framework.js +7 -0
  25. package/dist/lib/i18n.d.ts +6 -0
  26. package/dist/lib/i18n.d.ts.map +1 -0
  27. package/dist/lib/i18n.js +11 -0
  28. package/dist/lib/integrations/next/index.d.ts +4 -0
  29. package/dist/lib/integrations/next/index.d.ts.map +1 -0
  30. package/dist/lib/integrations/next/index.js +29 -0
  31. package/dist/lib/integrations/playwright/index.d.ts +11 -0
  32. package/dist/lib/integrations/playwright/index.d.ts.map +1 -0
  33. package/dist/lib/integrations/playwright/index.js +77 -0
  34. package/dist/lib/integrations/playwright/test.d.ts +5 -0
  35. package/dist/lib/integrations/playwright/test.d.ts.map +1 -0
  36. package/dist/lib/integrations/playwright/test.js +23 -0
  37. package/dist/lib/integrations/vite/index.d.ts +12 -0
  38. package/dist/lib/integrations/vite/index.d.ts.map +1 -0
  39. package/dist/lib/integrations/vite/index.js +34 -0
  40. package/dist/lib/integrations/vite-lib/base.d.ts +3 -0
  41. package/dist/lib/integrations/vite-lib/base.d.ts.map +1 -0
  42. package/dist/lib/integrations/vite-lib/base.js +31 -0
  43. package/dist/lib/integrations/vite-lib/index.d.ts +3 -0
  44. package/dist/lib/integrations/vite-lib/index.d.ts.map +1 -0
  45. package/dist/lib/integrations/vite-lib/index.js +50 -0
  46. package/dist/lib/integrations/vite-lib/react.d.ts +3 -0
  47. package/dist/lib/integrations/vite-lib/react.d.ts.map +1 -0
  48. package/dist/lib/integrations/vite-lib/react.js +10 -0
  49. package/dist/lib/integrations/vitest/framework.d.ts +4 -0
  50. package/dist/lib/integrations/vitest/framework.d.ts.map +1 -0
  51. package/dist/lib/integrations/vitest/framework.js +5 -0
  52. package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts +3 -0
  53. package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts.map +1 -0
  54. package/dist/lib/integrations/vitest/frameworks/docs-plugins.js +27 -0
  55. package/dist/lib/integrations/vitest/frameworks/docs.d.ts +3 -0
  56. package/dist/lib/integrations/vitest/frameworks/docs.d.ts.map +1 -0
  57. package/dist/lib/integrations/vitest/frameworks/docs.js +5 -0
  58. package/dist/lib/integrations/vitest/frameworks/next.d.ts +3 -0
  59. package/dist/lib/integrations/vitest/frameworks/next.d.ts.map +1 -0
  60. package/dist/lib/integrations/vitest/frameworks/next.js +5 -0
  61. package/dist/lib/integrations/vitest/frameworks/react.d.ts +3 -0
  62. package/dist/lib/integrations/vitest/frameworks/react.d.ts.map +1 -0
  63. package/dist/lib/integrations/vitest/frameworks/react.js +5 -0
  64. package/dist/lib/integrations/vitest/index.d.ts +4 -0
  65. package/dist/lib/integrations/vitest/index.d.ts.map +1 -0
  66. package/dist/lib/integrations/vitest/index.js +4 -0
  67. package/dist/lib/integrations/vitest/setup/next.d.ts +2 -0
  68. package/dist/lib/integrations/vitest/setup/next.d.ts.map +1 -0
  69. package/dist/lib/integrations/vitest/setup/next.js +11 -0
  70. package/dist/lib/integrations/vitest/setup/react.d.ts +2 -0
  71. package/dist/lib/integrations/vitest/setup/react.d.ts.map +1 -0
  72. package/dist/lib/integrations/vitest/setup/react.js +36 -0
  73. package/dist/lib/integrations/vitest/shared.d.ts +3 -0
  74. package/dist/lib/integrations/vitest/shared.d.ts.map +1 -0
  75. package/dist/lib/integrations/vitest/shared.js +24 -0
  76. package/dist/lib/metadata/cli.d.ts +3 -0
  77. package/dist/lib/metadata/cli.d.ts.map +1 -0
  78. package/dist/lib/metadata/cli.js +13 -0
  79. package/dist/lib/metadata/env.d.ts +9 -0
  80. package/dist/lib/metadata/env.d.ts.map +1 -0
  81. package/dist/lib/metadata/env.js +36 -0
  82. package/dist/lib/metadata/html.d.ts +3 -0
  83. package/dist/lib/metadata/html.d.ts.map +1 -0
  84. package/dist/lib/metadata/html.js +96 -0
  85. package/dist/lib/metadata/index.d.ts +7 -0
  86. package/dist/lib/metadata/index.d.ts.map +1 -0
  87. package/dist/lib/metadata/index.js +61 -0
  88. package/dist/lib/metadata/next.d.ts +79 -0
  89. package/dist/lib/metadata/next.d.ts.map +1 -0
  90. package/dist/lib/metadata/next.js +106 -0
  91. package/dist/lib/metadata/public.d.ts +3 -0
  92. package/dist/lib/metadata/public.d.ts.map +1 -0
  93. package/dist/lib/metadata/public.js +107 -0
  94. package/dist/lib/metadata/render.d.ts +7 -0
  95. package/dist/lib/metadata/render.d.ts.map +1 -0
  96. package/dist/lib/metadata/render.js +37 -0
  97. package/dist/lib/metadata/runtime.d.ts +68 -0
  98. package/dist/lib/metadata/runtime.d.ts.map +1 -0
  99. package/dist/lib/metadata/runtime.js +134 -0
  100. package/dist/lib/metadata/tanstack.d.ts +71 -0
  101. package/dist/lib/metadata/tanstack.d.ts.map +1 -0
  102. package/dist/lib/metadata/tanstack.js +194 -0
  103. package/dist/lib/metadata/templates/not-found.html +224 -0
  104. package/dist/lib/metadata/templates/offline.html +210 -0
  105. package/dist/lib/metadata/types.d.ts +118 -0
  106. package/dist/lib/metadata/types.d.ts.map +1 -0
  107. package/dist/lib/navigation/app-menu.d.ts +2 -0
  108. package/dist/lib/navigation/app-menu.d.ts.map +1 -0
  109. package/dist/lib/navigation/app-menu.js +45 -0
  110. package/dist/lib/navigation/control-center.d.ts +2 -0
  111. package/dist/lib/navigation/control-center.d.ts.map +1 -0
  112. package/dist/lib/navigation/control-center.js +66 -0
  113. package/dist/lib/navigation/index.d.ts +5 -0
  114. package/dist/lib/navigation/index.d.ts.map +1 -0
  115. package/dist/lib/navigation/index.js +59 -0
  116. package/dist/lib/navigation/toolbar.d.ts +2 -0
  117. package/dist/lib/navigation/toolbar.d.ts.map +1 -0
  118. package/dist/lib/navigation/toolbar.js +78 -0
  119. package/dist/lib/presets/app/index.d.ts +21 -0
  120. package/dist/lib/presets/app/index.d.ts.map +1 -0
  121. package/dist/lib/presets/app/index.js +114 -0
  122. package/dist/lib/presets/cdn/index.d.ts +2 -0
  123. package/dist/lib/presets/cdn/index.d.ts.map +1 -0
  124. package/dist/lib/presets/cdn/index.js +2 -0
  125. package/dist/lib/presets/docs/cli.d.ts +3 -0
  126. package/dist/lib/presets/docs/cli.d.ts.map +1 -0
  127. package/dist/lib/presets/docs/cli.js +18 -0
  128. package/dist/lib/presets/docs/config.d.ts +40 -0
  129. package/dist/lib/presets/docs/config.d.ts.map +1 -0
  130. package/dist/lib/presets/docs/config.js +39 -0
  131. package/dist/lib/presets/docs/files.d.ts +2 -0
  132. package/dist/lib/presets/docs/files.d.ts.map +1 -0
  133. package/dist/lib/presets/docs/files.js +13 -0
  134. package/dist/lib/presets/docs/index.d.ts +7 -0
  135. package/dist/lib/presets/docs/index.d.ts.map +1 -0
  136. package/dist/lib/presets/docs/index.js +6 -0
  137. package/dist/lib/presets/docs/mdx-path.d.ts +7 -0
  138. package/dist/lib/presets/docs/mdx-path.d.ts.map +1 -0
  139. package/dist/lib/presets/docs/mdx-path.js +19 -0
  140. package/dist/lib/presets/docs/og-image.d.ts +9 -0
  141. package/dist/lib/presets/docs/og-image.d.ts.map +1 -0
  142. package/dist/lib/presets/docs/og-image.js +88 -0
  143. package/dist/lib/presets/docs/og-output.d.ts +5 -0
  144. package/dist/lib/presets/docs/og-output.d.ts.map +1 -0
  145. package/dist/lib/presets/docs/og-output.js +34 -0
  146. package/dist/lib/presets/docs/og.d.ts +9 -0
  147. package/dist/lib/presets/docs/og.d.ts.map +1 -0
  148. package/dist/lib/presets/docs/og.js +112 -0
  149. package/dist/lib/presets/docs/openapi.d.ts +3 -0
  150. package/dist/lib/presets/docs/openapi.d.ts.map +1 -0
  151. package/dist/lib/presets/docs/openapi.js +105 -0
  152. package/dist/lib/presets/docs/routes.d.ts +7 -0
  153. package/dist/lib/presets/docs/routes.d.ts.map +1 -0
  154. package/dist/lib/presets/docs/routes.js +109 -0
  155. package/dist/lib/presets/docs/types.d.ts +31 -0
  156. package/dist/lib/presets/docs/types.d.ts.map +1 -0
  157. package/dist/lib/presets/docs/vite.d.ts +11 -0
  158. package/dist/lib/presets/docs/vite.d.ts.map +1 -0
  159. package/dist/lib/presets/docs/vite.js +78 -0
  160. package/dist/lib/presets/files.d.ts +5 -0
  161. package/dist/lib/presets/files.d.ts.map +1 -0
  162. package/dist/lib/presets/files.js +21 -0
  163. package/dist/lib/presets/route-files.d.ts +22 -0
  164. package/dist/lib/presets/route-files.d.ts.map +1 -0
  165. package/dist/lib/presets/route-files.js +49 -0
  166. package/dist/lib/yaml-config.d.ts +2 -0
  167. package/dist/lib/yaml-config.d.ts.map +1 -0
  168. package/dist/lib/yaml-config.js +6 -0
  169. package/package.json +99 -4
@@ -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>
@@ -0,0 +1,210 @@
1
+ <!doctype html>
2
+ <!-- {{generatedNotice}} -->
3
+ <html lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
+ <meta
8
+ name="viewport"
9
+ content="width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=1, shrink-to-fit=no" />
10
+ <meta name="author" content="{{author}}" />
11
+ <title>Offline | {{appName}}</title>
12
+ <style>
13
+ :root,
14
+ .light {
15
+ color-scheme: light;
16
+ --white: oklch(100% 0 0);
17
+ --snow: oklch(0.9911 0 0);
18
+ --eclipse: oklch(0.2103 0.0059 285.89);
19
+ --background: oklch(0.9702 0 0);
20
+ --foreground: var(--eclipse);
21
+ --muted: oklch(0.5517 0.0138 285.94);
22
+ --default: oklch(94% 0.001 286.375);
23
+ --default-foreground: var(--eclipse);
24
+ --accent: oklch(0.6204 0.195 253.83);
25
+ --accent-soft-foreground: color-mix(
26
+ in oklab,
27
+ var(--accent) 70%,
28
+ var(--foreground) 30%
29
+ );
30
+ --default-hover: color-mix(
31
+ in oklab,
32
+ var(--default) 96%,
33
+ var(--default-foreground) 4%
34
+ );
35
+ }
36
+
37
+ .dark,
38
+ [data-theme='dark'] {
39
+ color-scheme: dark;
40
+ --background: oklch(12% 0.005 285.823);
41
+ --foreground: var(--snow);
42
+ --muted: oklch(70.5% 0.015 286.067);
43
+ --default: oklch(27.4% 0.006 286.033);
44
+ --default-foreground: var(--snow);
45
+ --accent-soft-foreground: color-mix(
46
+ in oklab,
47
+ var(--accent) 80%,
48
+ var(--foreground) 30%
49
+ );
50
+ }
51
+
52
+ * {
53
+ box-sizing: border-box;
54
+ }
55
+
56
+ body {
57
+ background: var(--white);
58
+ color: var(--foreground);
59
+ font-family: ui-sans-serif, system-ui, sans-serif;
60
+ margin: 0;
61
+ }
62
+
63
+ .dark body,
64
+ [data-theme='dark'] body {
65
+ background: var(--background);
66
+ }
67
+
68
+ .dark .vx-offline__image,
69
+ [data-theme='dark'] .vx-offline__image {
70
+ filter: invert(1) hue-rotate(180deg);
71
+ }
72
+
73
+ .vx-offline {
74
+ align-items: center;
75
+ display: flex;
76
+ justify-content: center;
77
+ min-height: 100vh;
78
+ padding: 1.5rem;
79
+ text-align: left;
80
+ }
81
+
82
+ .empty-state {
83
+ padding: 0.5rem;
84
+ }
85
+
86
+ .vx-offline__content {
87
+ align-items: flex-start;
88
+ display: flex;
89
+ flex-direction: column;
90
+ gap: 0.75rem;
91
+ justify-content: center;
92
+ max-width: 36rem;
93
+ width: 100%;
94
+ }
95
+
96
+ .vx-offline__image {
97
+ height: auto;
98
+ margin-bottom: 0.75rem;
99
+ max-height: 16rem;
100
+ max-width: 100%;
101
+ object-fit: contain;
102
+ width: min(20rem, 70vw);
103
+ }
104
+
105
+ .typography {
106
+ color: var(--foreground);
107
+ margin: 0;
108
+ }
109
+
110
+ .typography--h2 {
111
+ font-size: 1.875rem;
112
+ font-weight: 600;
113
+ line-height: 2.25rem;
114
+ }
115
+
116
+ .typography--body {
117
+ font-size: 1rem;
118
+ line-height: 1.75rem;
119
+ }
120
+
121
+ .typography--color-muted {
122
+ color: var(--muted);
123
+ }
124
+
125
+ .button {
126
+ align-items: center;
127
+ border: 0;
128
+ border-radius: 1.5rem;
129
+ cursor: pointer;
130
+ display: inline-flex;
131
+ font: inherit;
132
+ font-size: 0.875rem;
133
+ font-weight: 500;
134
+ height: 2.25rem;
135
+ justify-content: center;
136
+ padding: 0 1rem;
137
+ text-decoration: none;
138
+ --button-bg: transparent;
139
+ --button-bg-hover: var(--button-bg);
140
+ --button-fg: currentcolor;
141
+ background: var(--button-bg);
142
+ color: var(--button-fg);
143
+ }
144
+
145
+ .button--secondary {
146
+ --button-bg: var(--default);
147
+ --button-bg-hover: var(--default-hover);
148
+ --button-fg: var(--accent-soft-foreground);
149
+ }
150
+
151
+ .button:hover {
152
+ background: var(--button-bg-hover);
153
+ }
154
+
155
+ .button:focus-visible {
156
+ outline: 2px solid var(--accent);
157
+ outline-offset: 2px;
158
+ }
159
+
160
+ @media (prefers-color-scheme: dark) {
161
+ :root:not(.light):not(.dark):not([data-theme]) {
162
+ color-scheme: dark;
163
+ --background: oklch(12% 0.005 285.823);
164
+ --foreground: var(--snow);
165
+ --muted: oklch(70.5% 0.015 286.067);
166
+ --default: oklch(27.4% 0.006 286.033);
167
+ --default-foreground: var(--snow);
168
+ --accent-soft-foreground: color-mix(
169
+ in oklab,
170
+ var(--accent) 80%,
171
+ var(--foreground) 30%
172
+ );
173
+ }
174
+
175
+ :root:not(.light):not(.dark):not([data-theme]) body {
176
+ background: var(--background);
177
+ }
178
+
179
+ :root:not(.light):not(.dark):not([data-theme]) .vx-offline__image {
180
+ filter: invert(1) hue-rotate(180deg);
181
+ }
182
+ }
183
+
184
+ @media only screen and (orientation: landscape) {
185
+ .vx-offline__image {
186
+ max-height: 11rem;
187
+ width: min(14rem, 30vw);
188
+ }
189
+ }
190
+ </style>
191
+ </head>
192
+ <body>
193
+ <main class="vx-offline">
194
+ <div class="empty-state">
195
+ <div class="vx-offline__content">
196
+ <!-- prettier-ignore -->
197
+ <img
198
+ class="vx-offline__image"
199
+ src="{{imageUrl}}"
200
+ alt="Offline" />
201
+ <h1 class="typography typography--h2">Oops! You're offline</h1>
202
+ <p class="typography typography--color-muted typography--body">
203
+ Please check your connection and try again.
204
+ </p>
205
+ <a class="button button--secondary" href="/">Back to Home</a>
206
+ </div>
207
+ </div>
208
+ </main>
209
+ </body>
210
+ </html>