create-rudder-app 0.3.0 → 0.4.0

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 (243) hide show
  1. package/dist/index.js +100 -20
  2. package/dist/index.js.map +1 -1
  3. package/dist/templates/app/auth-controller.d.ts +2 -0
  4. package/dist/templates/app/auth-controller.d.ts.map +1 -0
  5. package/dist/templates/app/auth-controller.js +51 -0
  6. package/dist/templates/app/auth-controller.js.map +1 -0
  7. package/dist/templates/app/mcp-echo-server.d.ts +2 -0
  8. package/dist/templates/app/mcp-echo-server.d.ts.map +1 -0
  9. package/dist/templates/app/mcp-echo-server.js +13 -0
  10. package/dist/templates/app/mcp-echo-server.js.map +1 -0
  11. package/dist/templates/app/mcp-echo-tool.d.ts +2 -0
  12. package/dist/templates/app/mcp-echo-tool.d.ts.map +1 -0
  13. package/dist/templates/app/mcp-echo-tool.js +20 -0
  14. package/dist/templates/app/mcp-echo-tool.js.map +1 -0
  15. package/dist/templates/app/service-provider.d.ts +3 -0
  16. package/dist/templates/app/service-provider.d.ts.map +1 -0
  17. package/dist/templates/app/service-provider.js +27 -0
  18. package/dist/templates/app/service-provider.js.map +1 -0
  19. package/dist/templates/app/user-model.d.ts +2 -0
  20. package/dist/templates/app/user-model.d.ts.map +1 -0
  21. package/dist/templates/app/user-model.js +19 -0
  22. package/dist/templates/app/user-model.js.map +1 -0
  23. package/dist/templates/bootstrap/app.d.ts +3 -0
  24. package/dist/templates/bootstrap/app.d.ts.map +1 -0
  25. package/dist/templates/bootstrap/app.js +41 -0
  26. package/dist/templates/bootstrap/app.js.map +1 -0
  27. package/dist/templates/bootstrap/providers.d.ts +3 -0
  28. package/dist/templates/bootstrap/providers.d.ts.map +1 -0
  29. package/dist/templates/bootstrap/providers.js +27 -0
  30. package/dist/templates/bootstrap/providers.js.map +1 -0
  31. package/dist/templates/configs/ai.d.ts +2 -0
  32. package/dist/templates/configs/ai.d.ts.map +1 -0
  33. package/dist/templates/configs/ai.js +32 -0
  34. package/dist/templates/configs/ai.js.map +1 -0
  35. package/dist/templates/configs/app.d.ts +2 -0
  36. package/dist/templates/configs/app.d.ts.map +1 -0
  37. package/dist/templates/configs/app.js +12 -0
  38. package/dist/templates/configs/app.js.map +1 -0
  39. package/dist/templates/configs/auth.d.ts +3 -0
  40. package/dist/templates/configs/auth.d.ts.map +1 -0
  41. package/dist/templates/configs/auth.js +16 -0
  42. package/dist/templates/configs/auth.js.map +1 -0
  43. package/dist/templates/configs/cache.d.ts +2 -0
  44. package/dist/templates/configs/cache.d.ts.map +1 -0
  45. package/dist/templates/configs/cache.js +28 -0
  46. package/dist/templates/configs/cache.js.map +1 -0
  47. package/dist/templates/configs/cashier.d.ts +2 -0
  48. package/dist/templates/configs/cashier.d.ts.map +1 -0
  49. package/dist/templates/configs/cashier.js +22 -0
  50. package/dist/templates/configs/cashier.js.map +1 -0
  51. package/dist/templates/configs/crypt.d.ts +2 -0
  52. package/dist/templates/configs/crypt.d.ts.map +1 -0
  53. package/dist/templates/configs/crypt.js +16 -0
  54. package/dist/templates/configs/crypt.js.map +1 -0
  55. package/dist/templates/configs/database.d.ts +3 -0
  56. package/dist/templates/configs/database.d.ts.map +1 -0
  57. package/dist/templates/configs/database.js +28 -0
  58. package/dist/templates/configs/database.js.map +1 -0
  59. package/dist/templates/configs/hash.d.ts +2 -0
  60. package/dist/templates/configs/hash.d.ts.map +1 -0
  61. package/dist/templates/configs/hash.js +12 -0
  62. package/dist/templates/configs/hash.js.map +1 -0
  63. package/dist/templates/configs/horizon.d.ts +2 -0
  64. package/dist/templates/configs/horizon.d.ts.map +1 -0
  65. package/dist/templates/configs/horizon.js +30 -0
  66. package/dist/templates/configs/horizon.js.map +1 -0
  67. package/dist/templates/configs/index.d.ts +3 -0
  68. package/dist/templates/configs/index.d.ts.map +1 -0
  69. package/dist/templates/configs/index.js +96 -0
  70. package/dist/templates/configs/index.js.map +1 -0
  71. package/dist/templates/configs/localization.d.ts +2 -0
  72. package/dist/templates/configs/localization.d.ts.map +1 -0
  73. package/dist/templates/configs/localization.js +13 -0
  74. package/dist/templates/configs/localization.js.map +1 -0
  75. package/dist/templates/configs/log.d.ts +2 -0
  76. package/dist/templates/configs/log.d.ts.map +1 -0
  77. package/dist/templates/configs/log.js +40 -0
  78. package/dist/templates/configs/log.js.map +1 -0
  79. package/dist/templates/configs/mail.d.ts +2 -0
  80. package/dist/templates/configs/mail.d.ts.map +1 -0
  81. package/dist/templates/configs/mail.js +33 -0
  82. package/dist/templates/configs/mail.js.map +1 -0
  83. package/dist/templates/configs/passport.d.ts +2 -0
  84. package/dist/templates/configs/passport.d.ts.map +1 -0
  85. package/dist/templates/configs/passport.js +22 -0
  86. package/dist/templates/configs/passport.js.map +1 -0
  87. package/dist/templates/configs/pennant.d.ts +2 -0
  88. package/dist/templates/configs/pennant.d.ts.map +1 -0
  89. package/dist/templates/configs/pennant.js +16 -0
  90. package/dist/templates/configs/pennant.js.map +1 -0
  91. package/dist/templates/configs/pulse.d.ts +2 -0
  92. package/dist/templates/configs/pulse.d.ts.map +1 -0
  93. package/dist/templates/configs/pulse.js +21 -0
  94. package/dist/templates/configs/pulse.js.map +1 -0
  95. package/dist/templates/configs/queue.d.ts +2 -0
  96. package/dist/templates/configs/queue.d.ts.map +1 -0
  97. package/dist/templates/configs/queue.js +28 -0
  98. package/dist/templates/configs/queue.js.map +1 -0
  99. package/dist/templates/configs/sanctum.d.ts +2 -0
  100. package/dist/templates/configs/sanctum.d.ts.map +1 -0
  101. package/dist/templates/configs/sanctum.js +19 -0
  102. package/dist/templates/configs/sanctum.js.map +1 -0
  103. package/dist/templates/configs/server.d.ts +2 -0
  104. package/dist/templates/configs/server.d.ts.map +1 -0
  105. package/dist/templates/configs/server.js +15 -0
  106. package/dist/templates/configs/server.js.map +1 -0
  107. package/dist/templates/configs/session.d.ts +2 -0
  108. package/dist/templates/configs/session.d.ts.map +1 -0
  109. package/dist/templates/configs/session.js +26 -0
  110. package/dist/templates/configs/session.js.map +1 -0
  111. package/dist/templates/configs/socialite.d.ts +2 -0
  112. package/dist/templates/configs/socialite.d.ts.map +1 -0
  113. package/dist/templates/configs/socialite.js +27 -0
  114. package/dist/templates/configs/socialite.js.map +1 -0
  115. package/dist/templates/configs/storage.d.ts +2 -0
  116. package/dist/templates/configs/storage.d.ts.map +1 -0
  117. package/dist/templates/configs/storage.js +35 -0
  118. package/dist/templates/configs/storage.js.map +1 -0
  119. package/dist/templates/configs/sync.d.ts +3 -0
  120. package/dist/templates/configs/sync.d.ts.map +1 -0
  121. package/dist/templates/configs/sync.js +17 -0
  122. package/dist/templates/configs/sync.js.map +1 -0
  123. package/dist/templates/configs/telescope.d.ts +2 -0
  124. package/dist/templates/configs/telescope.d.ts.map +1 -0
  125. package/dist/templates/configs/telescope.js +25 -0
  126. package/dist/templates/configs/telescope.js.map +1 -0
  127. package/dist/templates/css/index.d.ts +3 -0
  128. package/dist/templates/css/index.d.ts.map +1 -0
  129. package/dist/templates/css/index.js +140 -0
  130. package/dist/templates/css/index.js.map +1 -0
  131. package/dist/templates/css/plain.d.ts +2 -0
  132. package/dist/templates/css/plain.d.ts.map +1 -0
  133. package/dist/templates/css/plain.js +373 -0
  134. package/dist/templates/css/plain.js.map +1 -0
  135. package/dist/templates/css/tailwind.d.ts +2 -0
  136. package/dist/templates/css/tailwind.d.ts.map +1 -0
  137. package/dist/templates/css/tailwind.js +176 -0
  138. package/dist/templates/css/tailwind.js.map +1 -0
  139. package/dist/templates/demos/bk-socket.d.ts +2 -0
  140. package/dist/templates/demos/bk-socket.d.ts.map +1 -0
  141. package/dist/templates/demos/bk-socket.js +95 -0
  142. package/dist/templates/demos/bk-socket.js.map +1 -0
  143. package/dist/templates/demos/contact.d.ts +3 -0
  144. package/dist/templates/demos/contact.d.ts.map +1 -0
  145. package/dist/templates/demos/contact.js +106 -0
  146. package/dist/templates/demos/contact.js.map +1 -0
  147. package/dist/templates/demos/index-view.d.ts +3 -0
  148. package/dist/templates/demos/index-view.d.ts.map +1 -0
  149. package/dist/templates/demos/index-view.js +67 -0
  150. package/dist/templates/demos/index-view.js.map +1 -0
  151. package/dist/templates/demos/live.d.ts +2 -0
  152. package/dist/templates/demos/live.d.ts.map +1 -0
  153. package/dist/templates/demos/live.js +97 -0
  154. package/dist/templates/demos/live.js.map +1 -0
  155. package/dist/templates/demos/registry.d.ts +13 -0
  156. package/dist/templates/demos/registry.d.ts.map +1 -0
  157. package/dist/templates/demos/registry.js +15 -0
  158. package/dist/templates/demos/registry.js.map +1 -0
  159. package/dist/templates/demos/ws.d.ts +2 -0
  160. package/dist/templates/demos/ws.d.ts.map +1 -0
  161. package/dist/templates/demos/ws.js +106 -0
  162. package/dist/templates/demos/ws.js.map +1 -0
  163. package/dist/templates/env.d.ts +7 -0
  164. package/dist/templates/env.d.ts.map +1 -0
  165. package/dist/templates/env.js +127 -0
  166. package/dist/templates/env.js.map +1 -0
  167. package/dist/templates/package-json.d.ts +3 -0
  168. package/dist/templates/package-json.d.ts.map +1 -0
  169. package/dist/templates/package-json.js +195 -0
  170. package/dist/templates/package-json.js.map +1 -0
  171. package/dist/templates/package-managers.d.ts +14 -0
  172. package/dist/templates/package-managers.d.ts.map +1 -0
  173. package/dist/templates/package-managers.js +49 -0
  174. package/dist/templates/package-managers.js.map +1 -0
  175. package/dist/templates/pages/ai-chat.d.ts +7 -0
  176. package/dist/templates/pages/ai-chat.d.ts.map +1 -0
  177. package/dist/templates/pages/ai-chat.js +285 -0
  178. package/dist/templates/pages/ai-chat.js.map +1 -0
  179. package/dist/templates/pages/demo.d.ts +4 -0
  180. package/dist/templates/pages/demo.d.ts.map +1 -0
  181. package/dist/templates/pages/demo.js +71 -0
  182. package/dist/templates/pages/demo.js.map +1 -0
  183. package/dist/templates/pages/error.d.ts +7 -0
  184. package/dist/templates/pages/error.d.ts.map +1 -0
  185. package/dist/templates/pages/error.js +148 -0
  186. package/dist/templates/pages/error.js.map +1 -0
  187. package/dist/templates/pages/index.d.ts +9 -0
  188. package/dist/templates/pages/index.d.ts.map +1 -0
  189. package/dist/templates/pages/index.js +311 -0
  190. package/dist/templates/pages/index.js.map +1 -0
  191. package/dist/templates/prisma/auth.d.ts +2 -0
  192. package/dist/templates/prisma/auth.d.ts.map +1 -0
  193. package/dist/templates/prisma/auth.js +22 -0
  194. package/dist/templates/prisma/auth.js.map +1 -0
  195. package/dist/templates/prisma/base.d.ts +3 -0
  196. package/dist/templates/prisma/base.d.ts.map +1 -0
  197. package/dist/templates/prisma/base.js +14 -0
  198. package/dist/templates/prisma/base.js.map +1 -0
  199. package/dist/templates/prisma/config.d.ts +3 -0
  200. package/dist/templates/prisma/config.d.ts.map +1 -0
  201. package/dist/templates/prisma/config.js +15 -0
  202. package/dist/templates/prisma/config.js.map +1 -0
  203. package/dist/templates/prisma/notification.d.ts +2 -0
  204. package/dist/templates/prisma/notification.d.ts.map +1 -0
  205. package/dist/templates/prisma/notification.js +16 -0
  206. package/dist/templates/prisma/notification.js.map +1 -0
  207. package/dist/templates/prisma/passport.d.ts +2 -0
  208. package/dist/templates/prisma/passport.d.ts.map +1 -0
  209. package/dist/templates/prisma/passport.js +69 -0
  210. package/dist/templates/prisma/passport.js.map +1 -0
  211. package/dist/templates/routes/api.d.ts +3 -0
  212. package/dist/templates/routes/api.d.ts.map +1 -0
  213. package/dist/templates/routes/api.js +118 -0
  214. package/dist/templates/routes/api.js.map +1 -0
  215. package/dist/templates/routes/console.d.ts +2 -0
  216. package/dist/templates/routes/console.d.ts.map +1 -0
  217. package/dist/templates/routes/console.js +22 -0
  218. package/dist/templates/routes/console.js.map +1 -0
  219. package/dist/templates/routes/web.d.ts +4 -0
  220. package/dist/templates/routes/web.d.ts.map +1 -0
  221. package/dist/templates/routes/web.js +108 -0
  222. package/dist/templates/routes/web.js.map +1 -0
  223. package/dist/templates/server.d.ts +2 -0
  224. package/dist/templates/server.d.ts.map +1 -0
  225. package/dist/templates/server.js +10 -0
  226. package/dist/templates/server.js.map +1 -0
  227. package/dist/templates/tsconfig.d.ts +3 -0
  228. package/dist/templates/tsconfig.d.ts.map +1 -0
  229. package/dist/templates/tsconfig.js +33 -0
  230. package/dist/templates/tsconfig.js.map +1 -0
  231. package/dist/templates/views/welcome.d.ts +6 -0
  232. package/dist/templates/views/welcome.d.ts.map +1 -0
  233. package/dist/templates/views/welcome.js +396 -0
  234. package/dist/templates/views/welcome.js.map +1 -0
  235. package/dist/templates/vite.d.ts +3 -0
  236. package/dist/templates/vite.d.ts.map +1 -0
  237. package/dist/templates/vite.js +61 -0
  238. package/dist/templates/vite.js.map +1 -0
  239. package/dist/templates.d.ts +28 -17
  240. package/dist/templates.d.ts.map +1 -1
  241. package/dist/templates.js +99 -3779
  242. package/dist/templates.js.map +1 -1
  243. package/package.json +3 -3
@@ -0,0 +1,373 @@
1
+ export function indexCssPlain() {
2
+ return `:root {
3
+ --bg-start: #ffffff;
4
+ --bg-end: #fafafa;
5
+ --fg: #18181b;
6
+ --fg-muted: #52525b;
7
+ --fg-strong: #09090b;
8
+ --border: #e4e4e7;
9
+ --surface: #ffffff;
10
+ --surface-muted: #f4f4f5;
11
+ --accent: #10b981;
12
+ --danger-bg: #fef2f2;
13
+ --danger-fg: #dc2626;
14
+ --success-bg: #f0fdf4;
15
+ --success-fg: #16a34a;
16
+ }
17
+ @media (prefers-color-scheme: dark) {
18
+ :root {
19
+ --bg-start: #09090b;
20
+ --bg-end: #000000;
21
+ --fg: #fafafa;
22
+ --fg-muted: #a1a1aa;
23
+ --fg-strong: #ffffff;
24
+ --border: #27272a;
25
+ --surface: #09090b;
26
+ --surface-muted: #18181b;
27
+ --danger-bg: #450a0a;
28
+ --danger-fg: #f87171;
29
+ --success-bg: #052e16;
30
+ --success-fg: #4ade80;
31
+ }
32
+ }
33
+
34
+ *, *::before, *::after { box-sizing: border-box; }
35
+ html, body { margin: 0; padding: 0; }
36
+ body {
37
+ background: linear-gradient(to bottom, var(--bg-start), var(--bg-end));
38
+ color: var(--fg);
39
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
40
+ min-height: 100vh;
41
+ -webkit-font-smoothing: antialiased;
42
+ }
43
+ a { color: inherit; }
44
+
45
+ /* Layout */
46
+ .page { min-height: 100svh; }
47
+ .page-nav {
48
+ max-width: 72rem;
49
+ margin: 0 auto;
50
+ padding: 1.25rem 1.5rem;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: space-between;
54
+ }
55
+ .page-footer {
56
+ border-top: 1px solid var(--border);
57
+ }
58
+ .footer-inner {
59
+ max-width: 72rem;
60
+ margin: 0 auto;
61
+ padding: 1.5rem;
62
+ display: flex;
63
+ flex-direction: column;
64
+ align-items: center;
65
+ gap: 0.75rem;
66
+ font-size: 0.75rem;
67
+ color: var(--fg-muted);
68
+ }
69
+ @media (min-width: 640px) {
70
+ .footer-inner { flex-direction: row; justify-content: space-between; }
71
+ }
72
+ .footer-links { display: flex; gap: 1rem; }
73
+ .footer-link {
74
+ text-decoration: none;
75
+ transition: color 150ms;
76
+ }
77
+ .footer-link:hover { color: var(--fg-strong); }
78
+
79
+ /* Welcome */
80
+ .brand {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 0.5rem;
84
+ font-size: 0.875rem;
85
+ font-weight: 600;
86
+ letter-spacing: -0.01em;
87
+ }
88
+ .brand-dot {
89
+ display: inline-block;
90
+ width: 0.5rem;
91
+ height: 0.5rem;
92
+ border-radius: 9999px;
93
+ background: var(--accent);
94
+ }
95
+ .nav-right {
96
+ display: flex;
97
+ align-items: center;
98
+ gap: 1rem;
99
+ font-size: 0.875rem;
100
+ }
101
+ .nav-badge { color: var(--fg-muted); }
102
+ .nav-badge strong { color: var(--fg-strong); font-weight: 500; }
103
+ .nav-button {
104
+ display: inline-block;
105
+ border: 1px solid var(--border);
106
+ border-radius: 0.375rem;
107
+ padding: 0.375rem 0.75rem;
108
+ font-size: 0.75rem;
109
+ font-weight: 500;
110
+ color: var(--fg);
111
+ background: transparent;
112
+ cursor: pointer;
113
+ text-decoration: none;
114
+ transition: background-color 150ms;
115
+ }
116
+ .nav-button:hover { background: var(--surface-muted); }
117
+ .nav-link {
118
+ color: var(--fg-muted);
119
+ text-decoration: none;
120
+ transition: color 150ms;
121
+ }
122
+ .nav-link:hover { color: var(--fg-strong); }
123
+
124
+ .hero {
125
+ max-width: 48rem;
126
+ margin: 0 auto;
127
+ padding: 5rem 1.5rem 3rem;
128
+ text-align: center;
129
+ }
130
+ .hero-title {
131
+ font-size: 3rem;
132
+ font-weight: 700;
133
+ letter-spacing: -0.02em;
134
+ margin: 0;
135
+ }
136
+ @media (min-width: 640px) {
137
+ .hero-title { font-size: 3.75rem; }
138
+ }
139
+ .hero-lead {
140
+ margin: 1.5rem 0 0;
141
+ font-size: 1.125rem;
142
+ color: var(--fg-muted);
143
+ line-height: 1.6;
144
+ }
145
+ .hero-meta {
146
+ margin-top: 2rem;
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ gap: 0.75rem;
151
+ font-size: 0.75rem;
152
+ color: var(--fg-muted);
153
+ }
154
+ .inline-code {
155
+ background: var(--surface-muted);
156
+ padding: 0.125rem 0.375rem;
157
+ border-radius: 0.25rem;
158
+ font-size: 0.875rem;
159
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
160
+ }
161
+
162
+ .feature-section {
163
+ max-width: 72rem;
164
+ margin: 0 auto;
165
+ padding: 0 1.5rem 5rem;
166
+ }
167
+ .feature-grid {
168
+ display: grid;
169
+ gap: 1rem;
170
+ }
171
+ @media (min-width: 768px) { .feature-grid { grid-template-columns: repeat(2, 1fr); } }
172
+ @media (min-width: 1024px) { .feature-grid { grid-template-columns: repeat(3, 1fr); } }
173
+ .feature-card {
174
+ display: block;
175
+ border: 1px solid var(--border);
176
+ background: var(--surface);
177
+ border-radius: 0.75rem;
178
+ padding: 1.5rem;
179
+ text-decoration: none;
180
+ color: inherit;
181
+ transition: border-color 150ms, color 150ms;
182
+ }
183
+ .feature-card:hover { border-color: var(--fg-strong); }
184
+ .feature-title { font-weight: 600; margin: 0; }
185
+ .feature-desc {
186
+ margin: 0.5rem 0 0;
187
+ font-size: 0.875rem;
188
+ color: var(--fg-muted);
189
+ }
190
+ .feature-card:hover .feature-desc { color: var(--fg-strong); }
191
+
192
+ /* Auth forms + error page */
193
+ .auth-wrap {
194
+ display: flex;
195
+ min-height: 100svh;
196
+ align-items: center;
197
+ justify-content: center;
198
+ padding: 1rem;
199
+ }
200
+ .auth-card {
201
+ width: 100%;
202
+ max-width: 24rem;
203
+ display: flex;
204
+ flex-direction: column;
205
+ gap: 1.5rem;
206
+ }
207
+ .auth-head { text-align: center; }
208
+ .heading-lg { font-size: 1.5rem; font-weight: 700; margin: 0; }
209
+ .muted { font-size: 0.875rem; color: var(--fg-muted); margin: 0; }
210
+ .auth-head .muted { margin-top: 0.25rem; }
211
+
212
+ .form-card {
213
+ display: flex;
214
+ flex-direction: column;
215
+ gap: 1rem;
216
+ border: 1px solid var(--border);
217
+ border-radius: 0.5rem;
218
+ padding: 1.5rem;
219
+ background: var(--surface);
220
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
221
+ }
222
+ .form-error {
223
+ background: var(--danger-bg);
224
+ color: var(--danger-fg);
225
+ font-size: 0.875rem;
226
+ padding: 0.5rem 0.75rem;
227
+ border-radius: 0.375rem;
228
+ margin: 0;
229
+ }
230
+ .form-success {
231
+ background: var(--success-bg);
232
+ color: var(--success-fg);
233
+ font-size: 0.875rem;
234
+ padding: 0.5rem 0.75rem;
235
+ border-radius: 0.375rem;
236
+ margin: 0;
237
+ }
238
+ .form-label {
239
+ display: block;
240
+ font-size: 0.875rem;
241
+ font-weight: 500;
242
+ margin-bottom: 0.25rem;
243
+ }
244
+ .form-input {
245
+ display: block;
246
+ width: 100%;
247
+ border: 1px solid var(--border);
248
+ border-radius: 0.375rem;
249
+ padding: 0.5rem 0.75rem;
250
+ font-size: 0.875rem;
251
+ background: var(--surface);
252
+ color: var(--fg);
253
+ outline: none;
254
+ transition: box-shadow 150ms, border-color 150ms;
255
+ }
256
+ .form-input:focus {
257
+ border-color: var(--fg-strong);
258
+ box-shadow: 0 0 0 2px var(--fg-strong);
259
+ }
260
+ .form-submit {
261
+ width: 100%;
262
+ background: var(--fg-strong);
263
+ color: var(--bg-start);
264
+ border: 0;
265
+ border-radius: 0.375rem;
266
+ padding: 0.625rem 1rem;
267
+ font-size: 0.875rem;
268
+ font-weight: 500;
269
+ cursor: pointer;
270
+ transition: opacity 150ms;
271
+ }
272
+ .form-submit:hover { opacity: 0.9; }
273
+ .form-submit:disabled { opacity: 0.5; cursor: not-allowed; }
274
+ .form-link-row {
275
+ display: flex;
276
+ align-items: center;
277
+ justify-content: space-between;
278
+ font-size: 0.875rem;
279
+ color: var(--fg-muted);
280
+ }
281
+ .auth-link {
282
+ text-decoration: underline;
283
+ transition: color 150ms;
284
+ }
285
+ .auth-link:hover { color: var(--fg-strong); }
286
+
287
+ .error-wrap {
288
+ display: flex;
289
+ min-height: 100svh;
290
+ flex-direction: column;
291
+ align-items: center;
292
+ justify-content: center;
293
+ gap: 1rem;
294
+ padding: 1rem;
295
+ text-align: center;
296
+ }
297
+ .error-link {
298
+ margin-top: 1rem;
299
+ font-size: 0.875rem;
300
+ text-decoration: underline;
301
+ transition: color 150ms;
302
+ }
303
+ .error-link:hover { color: var(--fg-strong); }
304
+ .empty-state {
305
+ padding: 2rem 0;
306
+ text-align: center;
307
+ font-size: 0.875rem;
308
+ color: var(--fg-muted);
309
+ }
310
+
311
+ .form-inline {
312
+ display: flex;
313
+ width: 100%;
314
+ max-width: 28rem;
315
+ gap: 0.5rem;
316
+ }
317
+
318
+ /* AI chat */
319
+ .chat-wrap {
320
+ display: flex;
321
+ min-height: 100svh;
322
+ flex-direction: column;
323
+ align-items: center;
324
+ padding: 1rem;
325
+ }
326
+ .chat-column {
327
+ display: flex;
328
+ width: 100%;
329
+ max-width: 42rem;
330
+ flex: 1;
331
+ flex-direction: column;
332
+ }
333
+ .chat-header {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: space-between;
337
+ margin-bottom: 1rem;
338
+ }
339
+ .chat-log {
340
+ flex: 1;
341
+ display: flex;
342
+ flex-direction: column;
343
+ gap: 0.75rem;
344
+ overflow-y: auto;
345
+ border: 1px solid var(--border);
346
+ border-radius: 0.5rem;
347
+ padding: 1rem;
348
+ background: var(--surface);
349
+ max-height: calc(100svh - 180px);
350
+ }
351
+ .chat-row { display: flex; }
352
+ .chat-row.is-user { justify-content: flex-end; }
353
+ .chat-row.is-assistant { justify-content: flex-start; }
354
+ .chat-bubble {
355
+ max-width: 80%;
356
+ border-radius: 0.5rem;
357
+ padding: 0.5rem 0.75rem;
358
+ font-size: 0.875rem;
359
+ }
360
+ .chat-bubble.is-user {
361
+ background: var(--fg-strong);
362
+ color: var(--bg-start);
363
+ }
364
+ .chat-bubble.is-assistant {
365
+ background: var(--surface-muted);
366
+ color: var(--fg);
367
+ }
368
+ .chat-input {
369
+ margin-top: 0.75rem;
370
+ }
371
+ `;
372
+ }
373
+ //# sourceMappingURL=plain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain.js","sourceRoot":"","sources":["../../../src/templates/css/plain.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiXR,CAAA;AACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function semanticRulesApply(): string;
2
+ //# sourceMappingURL=tailwind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.d.ts","sourceRoot":"","sources":["../../../src/templates/css/tailwind.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,IAAI,MAAM,CA8K3C"}
@@ -0,0 +1,176 @@
1
+ export function semanticRulesApply() {
2
+ return `/* ─── Scaffolded view classes ────────────────────────────────
3
+ Semantic classes shared by app/Views/Welcome and vendored
4
+ @rudderjs/auth views. The --no-tailwind variant of this
5
+ scaffolder emits equivalent hand-authored CSS under the
6
+ same selectors. */
7
+
8
+ .page {
9
+ @apply min-h-svh bg-gradient-to-b from-white to-zinc-50 text-zinc-900 dark:from-zinc-950 dark:to-black dark:text-zinc-100;
10
+ }
11
+ .page-nav {
12
+ @apply mx-auto flex max-w-6xl items-center justify-between px-6 py-5;
13
+ }
14
+ .page-footer {
15
+ @apply border-t border-zinc-200 dark:border-zinc-900;
16
+ }
17
+ .footer-inner {
18
+ @apply mx-auto flex max-w-6xl flex-col items-center gap-3 px-6 py-6 text-xs text-zinc-500 sm:flex-row sm:justify-between;
19
+ }
20
+ .footer-links {
21
+ @apply flex gap-4;
22
+ }
23
+ .footer-link {
24
+ @apply transition-colors hover:text-zinc-900 dark:hover:text-zinc-100;
25
+ }
26
+
27
+ .brand {
28
+ @apply flex items-center gap-2 text-sm font-semibold tracking-tight;
29
+ }
30
+ .brand-dot {
31
+ @apply inline-block h-2 w-2 rounded-full bg-emerald-500;
32
+ }
33
+ .nav-right {
34
+ @apply flex items-center gap-4 text-sm;
35
+ }
36
+ .nav-badge {
37
+ @apply text-zinc-500 dark:text-zinc-400;
38
+ }
39
+ .nav-badge strong {
40
+ @apply font-medium text-zinc-900 dark:text-zinc-100;
41
+ }
42
+ .nav-button {
43
+ @apply rounded-md border border-zinc-200 px-3 py-1.5 text-xs font-medium text-zinc-700 transition-colors hover:bg-zinc-100 dark:border-zinc-800 dark:text-zinc-300 dark:hover:bg-zinc-900;
44
+ }
45
+ .nav-link {
46
+ @apply text-zinc-500 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-100;
47
+ }
48
+
49
+ .hero {
50
+ @apply mx-auto max-w-3xl px-6 pb-12 pt-20 text-center;
51
+ }
52
+ .hero-title {
53
+ @apply text-5xl font-bold tracking-tight sm:text-6xl;
54
+ }
55
+ .hero-lead {
56
+ @apply mt-6 text-lg text-zinc-600 dark:text-zinc-400;
57
+ }
58
+ .hero-meta {
59
+ @apply mt-8 flex items-center justify-center gap-3 text-xs text-zinc-500;
60
+ }
61
+ .inline-code {
62
+ @apply rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-900;
63
+ }
64
+
65
+ .feature-section {
66
+ @apply mx-auto max-w-6xl px-6 pb-20;
67
+ }
68
+ .feature-grid {
69
+ @apply grid gap-4 md:grid-cols-2 lg:grid-cols-3;
70
+ }
71
+ .feature-card {
72
+ @apply rounded-xl border border-zinc-200 bg-white p-6 transition-colors hover:border-zinc-900 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:border-zinc-100;
73
+ }
74
+ .feature-title {
75
+ @apply font-semibold;
76
+ }
77
+ .feature-desc {
78
+ @apply mt-2 text-sm text-zinc-600 dark:text-zinc-400;
79
+ }
80
+ .feature-card:hover .feature-desc {
81
+ @apply text-zinc-900 dark:text-zinc-100;
82
+ }
83
+
84
+ /* Auth forms + error page (reused selectors) */
85
+ .auth-wrap {
86
+ @apply flex min-h-svh items-center justify-center p-4;
87
+ }
88
+ .auth-card {
89
+ @apply w-full max-w-sm space-y-6;
90
+ }
91
+ .auth-head {
92
+ @apply text-center;
93
+ }
94
+ .heading-lg {
95
+ @apply text-2xl font-bold;
96
+ }
97
+ .muted {
98
+ @apply text-sm text-zinc-500 dark:text-zinc-400;
99
+ }
100
+ .form-card {
101
+ @apply space-y-4 rounded-lg border border-zinc-200 p-6 shadow-sm dark:border-zinc-800;
102
+ }
103
+ .form-error {
104
+ @apply rounded-md bg-red-50 px-3 py-2 text-sm text-red-600 dark:bg-red-950 dark:text-red-400;
105
+ }
106
+ .form-success {
107
+ @apply rounded-md bg-green-50 px-3 py-2 text-sm text-green-600 dark:bg-green-950 dark:text-green-400;
108
+ }
109
+ .form-label {
110
+ @apply block text-sm font-medium mb-1;
111
+ }
112
+ .form-input {
113
+ @apply w-full rounded-md border border-zinc-200 px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-zinc-900 dark:border-zinc-800 dark:bg-zinc-950 dark:focus:ring-zinc-100;
114
+ }
115
+ .form-submit {
116
+ @apply w-full rounded-md bg-zinc-900 px-4 py-2 text-sm font-medium text-white transition-opacity hover:opacity-90 disabled:opacity-50 dark:bg-zinc-100 dark:text-zinc-900;
117
+ }
118
+ .form-link-row {
119
+ @apply flex items-center justify-between text-sm text-zinc-500 dark:text-zinc-400;
120
+ }
121
+ .auth-link {
122
+ @apply underline transition-colors hover:text-zinc-900 dark:hover:text-zinc-100;
123
+ }
124
+
125
+ .error-wrap {
126
+ @apply flex min-h-svh flex-col items-center justify-center gap-4 p-4;
127
+ }
128
+ .error-link {
129
+ @apply mt-4 text-sm underline transition-colors hover:text-zinc-900 dark:hover:text-zinc-100;
130
+ }
131
+ .empty-state {
132
+ @apply py-8 text-center text-sm text-zinc-500 dark:text-zinc-400;
133
+ }
134
+
135
+ .form-inline {
136
+ @apply flex w-full max-w-md gap-2;
137
+ }
138
+
139
+ /* AI chat */
140
+ .chat-wrap {
141
+ @apply flex min-h-svh flex-col items-center p-4;
142
+ }
143
+ .chat-column {
144
+ @apply flex w-full max-w-2xl flex-1 flex-col;
145
+ }
146
+ .chat-header {
147
+ @apply mb-4 flex items-center justify-between;
148
+ }
149
+ .chat-log {
150
+ @apply flex-1 space-y-3 overflow-y-auto rounded-lg border border-zinc-200 p-4 dark:border-zinc-800;
151
+ max-height: calc(100svh - 180px);
152
+ }
153
+ .chat-row {
154
+ @apply flex;
155
+ }
156
+ .chat-row.is-user {
157
+ @apply justify-end;
158
+ }
159
+ .chat-row.is-assistant {
160
+ @apply justify-start;
161
+ }
162
+ .chat-bubble {
163
+ @apply max-w-[80%] rounded-lg px-3 py-2 text-sm;
164
+ }
165
+ .chat-bubble.is-user {
166
+ @apply bg-zinc-900 text-zinc-50 dark:bg-zinc-100 dark:text-zinc-900;
167
+ }
168
+ .chat-bubble.is-assistant {
169
+ @apply bg-zinc-100 text-zinc-900 dark:bg-zinc-900 dark:text-zinc-100;
170
+ }
171
+ .chat-input {
172
+ @apply mt-3;
173
+ }
174
+ `;
175
+ }
176
+ //# sourceMappingURL=tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/templates/css/tailwind.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4KR,CAAA;AACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function bkSocketSource(): string;
2
+ //# sourceMappingURL=bk-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bk-socket.d.ts","sourceRoot":"","sources":["../../../src/templates/demos/bk-socket.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,IAAI,MAAM,CA6FvC"}
@@ -0,0 +1,95 @@
1
+ export function bkSocketSource() {
2
+ return `// BKSocket — RudderJS WebSocket client
3
+ //
4
+ // Multiplexes channels and presence rooms over a single WebSocket connection.
5
+ // Mirrors the API expected by @rudderjs/broadcast on the server.
6
+
7
+ type Listener = (data: unknown) => void
8
+
9
+ class Channel {
10
+ private listeners = new Map<string, Set<Listener>>()
11
+
12
+ constructor(
13
+ private readonly socket: BKSocket,
14
+ public readonly name: string,
15
+ ) {}
16
+
17
+ on(event: string, fn: Listener): this {
18
+ if (!this.listeners.has(event)) this.listeners.set(event, new Set())
19
+ this.listeners.get(event)!.add(fn)
20
+ return this
21
+ }
22
+
23
+ off(event: string, fn: Listener): this {
24
+ this.listeners.get(event)?.delete(fn)
25
+ return this
26
+ }
27
+
28
+ /** @internal — invoked by BKSocket on incoming messages */
29
+ receive(event: string, data: unknown) {
30
+ this.listeners.get(event)?.forEach(fn => fn(data))
31
+ }
32
+
33
+ /** @internal — invoked by BKSocket to (re)subscribe after connect */
34
+ subscribe() {
35
+ this.socket.send({ type: 'subscribe', channel: this.name })
36
+ }
37
+ }
38
+
39
+ class Presence extends Channel {
40
+ constructor(socket: BKSocket, name: string, private readonly token: string) {
41
+ super(socket, name)
42
+ }
43
+
44
+ override subscribe() {
45
+ this.socket.send({ type: 'presence.join', channel: this.name, token: this.token })
46
+ }
47
+ }
48
+
49
+ export class BKSocket {
50
+ private ws?: WebSocket
51
+ private readonly channels = new Map<string, Channel>()
52
+ private reconnectTimer?: ReturnType<typeof setTimeout>
53
+
54
+ constructor(private readonly url: string) {
55
+ this.connect()
56
+ }
57
+
58
+ channel(name: string): Channel {
59
+ let ch = this.channels.get(name)
60
+ if (!ch) { ch = new Channel(this, name); this.channels.set(name, ch); ch.subscribe() }
61
+ return ch
62
+ }
63
+
64
+ presence(name: string, token: string): Channel {
65
+ let ch = this.channels.get(name)
66
+ if (!ch) { ch = new Presence(this, name, token); this.channels.set(name, ch); ch.subscribe() }
67
+ return ch
68
+ }
69
+
70
+ send(payload: Record<string, unknown>) {
71
+ if (this.ws?.readyState === WebSocket.OPEN) this.ws.send(JSON.stringify(payload))
72
+ }
73
+
74
+ close() {
75
+ if (this.reconnectTimer) clearTimeout(this.reconnectTimer)
76
+ this.ws?.close()
77
+ }
78
+
79
+ private connect() {
80
+ this.ws = new WebSocket(this.url)
81
+ this.ws.onopen = () => this.channels.forEach(ch => ch.subscribe())
82
+ this.ws.onmessage = (e) => {
83
+ try {
84
+ const msg = JSON.parse(e.data as string) as { channel?: string; event?: string; data?: unknown }
85
+ if (msg.channel && msg.event) this.channels.get(msg.channel)?.receive(msg.event, msg.data)
86
+ } catch { /* ignore non-JSON frames */ }
87
+ }
88
+ this.ws.onclose = () => {
89
+ this.reconnectTimer = setTimeout(() => this.connect(), 1500)
90
+ }
91
+ }
92
+ }
93
+ `;
94
+ }
95
+ //# sourceMappingURL=bk-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bk-socket.js","sourceRoot":"","sources":["../../../src/templates/demos/bk-socket.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FR,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateContext } from '../../templates.js';
2
+ export declare function demosContactView(ctx: TemplateContext): string;
3
+ //# sourceMappingURL=contact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../../src/templates/demos/contact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAyG7D"}