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.
- package/dist/index.js +100 -20
- package/dist/index.js.map +1 -1
- package/dist/templates/app/auth-controller.d.ts +2 -0
- package/dist/templates/app/auth-controller.d.ts.map +1 -0
- package/dist/templates/app/auth-controller.js +51 -0
- package/dist/templates/app/auth-controller.js.map +1 -0
- package/dist/templates/app/mcp-echo-server.d.ts +2 -0
- package/dist/templates/app/mcp-echo-server.d.ts.map +1 -0
- package/dist/templates/app/mcp-echo-server.js +13 -0
- package/dist/templates/app/mcp-echo-server.js.map +1 -0
- package/dist/templates/app/mcp-echo-tool.d.ts +2 -0
- package/dist/templates/app/mcp-echo-tool.d.ts.map +1 -0
- package/dist/templates/app/mcp-echo-tool.js +20 -0
- package/dist/templates/app/mcp-echo-tool.js.map +1 -0
- package/dist/templates/app/service-provider.d.ts +3 -0
- package/dist/templates/app/service-provider.d.ts.map +1 -0
- package/dist/templates/app/service-provider.js +27 -0
- package/dist/templates/app/service-provider.js.map +1 -0
- package/dist/templates/app/user-model.d.ts +2 -0
- package/dist/templates/app/user-model.d.ts.map +1 -0
- package/dist/templates/app/user-model.js +19 -0
- package/dist/templates/app/user-model.js.map +1 -0
- package/dist/templates/bootstrap/app.d.ts +3 -0
- package/dist/templates/bootstrap/app.d.ts.map +1 -0
- package/dist/templates/bootstrap/app.js +41 -0
- package/dist/templates/bootstrap/app.js.map +1 -0
- package/dist/templates/bootstrap/providers.d.ts +3 -0
- package/dist/templates/bootstrap/providers.d.ts.map +1 -0
- package/dist/templates/bootstrap/providers.js +27 -0
- package/dist/templates/bootstrap/providers.js.map +1 -0
- package/dist/templates/configs/ai.d.ts +2 -0
- package/dist/templates/configs/ai.d.ts.map +1 -0
- package/dist/templates/configs/ai.js +32 -0
- package/dist/templates/configs/ai.js.map +1 -0
- package/dist/templates/configs/app.d.ts +2 -0
- package/dist/templates/configs/app.d.ts.map +1 -0
- package/dist/templates/configs/app.js +12 -0
- package/dist/templates/configs/app.js.map +1 -0
- package/dist/templates/configs/auth.d.ts +3 -0
- package/dist/templates/configs/auth.d.ts.map +1 -0
- package/dist/templates/configs/auth.js +16 -0
- package/dist/templates/configs/auth.js.map +1 -0
- package/dist/templates/configs/cache.d.ts +2 -0
- package/dist/templates/configs/cache.d.ts.map +1 -0
- package/dist/templates/configs/cache.js +28 -0
- package/dist/templates/configs/cache.js.map +1 -0
- package/dist/templates/configs/cashier.d.ts +2 -0
- package/dist/templates/configs/cashier.d.ts.map +1 -0
- package/dist/templates/configs/cashier.js +22 -0
- package/dist/templates/configs/cashier.js.map +1 -0
- package/dist/templates/configs/crypt.d.ts +2 -0
- package/dist/templates/configs/crypt.d.ts.map +1 -0
- package/dist/templates/configs/crypt.js +16 -0
- package/dist/templates/configs/crypt.js.map +1 -0
- package/dist/templates/configs/database.d.ts +3 -0
- package/dist/templates/configs/database.d.ts.map +1 -0
- package/dist/templates/configs/database.js +28 -0
- package/dist/templates/configs/database.js.map +1 -0
- package/dist/templates/configs/hash.d.ts +2 -0
- package/dist/templates/configs/hash.d.ts.map +1 -0
- package/dist/templates/configs/hash.js +12 -0
- package/dist/templates/configs/hash.js.map +1 -0
- package/dist/templates/configs/horizon.d.ts +2 -0
- package/dist/templates/configs/horizon.d.ts.map +1 -0
- package/dist/templates/configs/horizon.js +30 -0
- package/dist/templates/configs/horizon.js.map +1 -0
- package/dist/templates/configs/index.d.ts +3 -0
- package/dist/templates/configs/index.d.ts.map +1 -0
- package/dist/templates/configs/index.js +96 -0
- package/dist/templates/configs/index.js.map +1 -0
- package/dist/templates/configs/localization.d.ts +2 -0
- package/dist/templates/configs/localization.d.ts.map +1 -0
- package/dist/templates/configs/localization.js +13 -0
- package/dist/templates/configs/localization.js.map +1 -0
- package/dist/templates/configs/log.d.ts +2 -0
- package/dist/templates/configs/log.d.ts.map +1 -0
- package/dist/templates/configs/log.js +40 -0
- package/dist/templates/configs/log.js.map +1 -0
- package/dist/templates/configs/mail.d.ts +2 -0
- package/dist/templates/configs/mail.d.ts.map +1 -0
- package/dist/templates/configs/mail.js +33 -0
- package/dist/templates/configs/mail.js.map +1 -0
- package/dist/templates/configs/passport.d.ts +2 -0
- package/dist/templates/configs/passport.d.ts.map +1 -0
- package/dist/templates/configs/passport.js +22 -0
- package/dist/templates/configs/passport.js.map +1 -0
- package/dist/templates/configs/pennant.d.ts +2 -0
- package/dist/templates/configs/pennant.d.ts.map +1 -0
- package/dist/templates/configs/pennant.js +16 -0
- package/dist/templates/configs/pennant.js.map +1 -0
- package/dist/templates/configs/pulse.d.ts +2 -0
- package/dist/templates/configs/pulse.d.ts.map +1 -0
- package/dist/templates/configs/pulse.js +21 -0
- package/dist/templates/configs/pulse.js.map +1 -0
- package/dist/templates/configs/queue.d.ts +2 -0
- package/dist/templates/configs/queue.d.ts.map +1 -0
- package/dist/templates/configs/queue.js +28 -0
- package/dist/templates/configs/queue.js.map +1 -0
- package/dist/templates/configs/sanctum.d.ts +2 -0
- package/dist/templates/configs/sanctum.d.ts.map +1 -0
- package/dist/templates/configs/sanctum.js +19 -0
- package/dist/templates/configs/sanctum.js.map +1 -0
- package/dist/templates/configs/server.d.ts +2 -0
- package/dist/templates/configs/server.d.ts.map +1 -0
- package/dist/templates/configs/server.js +15 -0
- package/dist/templates/configs/server.js.map +1 -0
- package/dist/templates/configs/session.d.ts +2 -0
- package/dist/templates/configs/session.d.ts.map +1 -0
- package/dist/templates/configs/session.js +26 -0
- package/dist/templates/configs/session.js.map +1 -0
- package/dist/templates/configs/socialite.d.ts +2 -0
- package/dist/templates/configs/socialite.d.ts.map +1 -0
- package/dist/templates/configs/socialite.js +27 -0
- package/dist/templates/configs/socialite.js.map +1 -0
- package/dist/templates/configs/storage.d.ts +2 -0
- package/dist/templates/configs/storage.d.ts.map +1 -0
- package/dist/templates/configs/storage.js +35 -0
- package/dist/templates/configs/storage.js.map +1 -0
- package/dist/templates/configs/sync.d.ts +3 -0
- package/dist/templates/configs/sync.d.ts.map +1 -0
- package/dist/templates/configs/sync.js +17 -0
- package/dist/templates/configs/sync.js.map +1 -0
- package/dist/templates/configs/telescope.d.ts +2 -0
- package/dist/templates/configs/telescope.d.ts.map +1 -0
- package/dist/templates/configs/telescope.js +25 -0
- package/dist/templates/configs/telescope.js.map +1 -0
- package/dist/templates/css/index.d.ts +3 -0
- package/dist/templates/css/index.d.ts.map +1 -0
- package/dist/templates/css/index.js +140 -0
- package/dist/templates/css/index.js.map +1 -0
- package/dist/templates/css/plain.d.ts +2 -0
- package/dist/templates/css/plain.d.ts.map +1 -0
- package/dist/templates/css/plain.js +373 -0
- package/dist/templates/css/plain.js.map +1 -0
- package/dist/templates/css/tailwind.d.ts +2 -0
- package/dist/templates/css/tailwind.d.ts.map +1 -0
- package/dist/templates/css/tailwind.js +176 -0
- package/dist/templates/css/tailwind.js.map +1 -0
- package/dist/templates/demos/bk-socket.d.ts +2 -0
- package/dist/templates/demos/bk-socket.d.ts.map +1 -0
- package/dist/templates/demos/bk-socket.js +95 -0
- package/dist/templates/demos/bk-socket.js.map +1 -0
- package/dist/templates/demos/contact.d.ts +3 -0
- package/dist/templates/demos/contact.d.ts.map +1 -0
- package/dist/templates/demos/contact.js +106 -0
- package/dist/templates/demos/contact.js.map +1 -0
- package/dist/templates/demos/index-view.d.ts +3 -0
- package/dist/templates/demos/index-view.d.ts.map +1 -0
- package/dist/templates/demos/index-view.js +67 -0
- package/dist/templates/demos/index-view.js.map +1 -0
- package/dist/templates/demos/live.d.ts +2 -0
- package/dist/templates/demos/live.d.ts.map +1 -0
- package/dist/templates/demos/live.js +97 -0
- package/dist/templates/demos/live.js.map +1 -0
- package/dist/templates/demos/registry.d.ts +13 -0
- package/dist/templates/demos/registry.d.ts.map +1 -0
- package/dist/templates/demos/registry.js +15 -0
- package/dist/templates/demos/registry.js.map +1 -0
- package/dist/templates/demos/ws.d.ts +2 -0
- package/dist/templates/demos/ws.d.ts.map +1 -0
- package/dist/templates/demos/ws.js +106 -0
- package/dist/templates/demos/ws.js.map +1 -0
- package/dist/templates/env.d.ts +7 -0
- package/dist/templates/env.d.ts.map +1 -0
- package/dist/templates/env.js +127 -0
- package/dist/templates/env.js.map +1 -0
- package/dist/templates/package-json.d.ts +3 -0
- package/dist/templates/package-json.d.ts.map +1 -0
- package/dist/templates/package-json.js +195 -0
- package/dist/templates/package-json.js.map +1 -0
- package/dist/templates/package-managers.d.ts +14 -0
- package/dist/templates/package-managers.d.ts.map +1 -0
- package/dist/templates/package-managers.js +49 -0
- package/dist/templates/package-managers.js.map +1 -0
- package/dist/templates/pages/ai-chat.d.ts +7 -0
- package/dist/templates/pages/ai-chat.d.ts.map +1 -0
- package/dist/templates/pages/ai-chat.js +285 -0
- package/dist/templates/pages/ai-chat.js.map +1 -0
- package/dist/templates/pages/demo.d.ts +4 -0
- package/dist/templates/pages/demo.d.ts.map +1 -0
- package/dist/templates/pages/demo.js +71 -0
- package/dist/templates/pages/demo.js.map +1 -0
- package/dist/templates/pages/error.d.ts +7 -0
- package/dist/templates/pages/error.d.ts.map +1 -0
- package/dist/templates/pages/error.js +148 -0
- package/dist/templates/pages/error.js.map +1 -0
- package/dist/templates/pages/index.d.ts +9 -0
- package/dist/templates/pages/index.d.ts.map +1 -0
- package/dist/templates/pages/index.js +311 -0
- package/dist/templates/pages/index.js.map +1 -0
- package/dist/templates/prisma/auth.d.ts +2 -0
- package/dist/templates/prisma/auth.d.ts.map +1 -0
- package/dist/templates/prisma/auth.js +22 -0
- package/dist/templates/prisma/auth.js.map +1 -0
- package/dist/templates/prisma/base.d.ts +3 -0
- package/dist/templates/prisma/base.d.ts.map +1 -0
- package/dist/templates/prisma/base.js +14 -0
- package/dist/templates/prisma/base.js.map +1 -0
- package/dist/templates/prisma/config.d.ts +3 -0
- package/dist/templates/prisma/config.d.ts.map +1 -0
- package/dist/templates/prisma/config.js +15 -0
- package/dist/templates/prisma/config.js.map +1 -0
- package/dist/templates/prisma/notification.d.ts +2 -0
- package/dist/templates/prisma/notification.d.ts.map +1 -0
- package/dist/templates/prisma/notification.js +16 -0
- package/dist/templates/prisma/notification.js.map +1 -0
- package/dist/templates/prisma/passport.d.ts +2 -0
- package/dist/templates/prisma/passport.d.ts.map +1 -0
- package/dist/templates/prisma/passport.js +69 -0
- package/dist/templates/prisma/passport.js.map +1 -0
- package/dist/templates/routes/api.d.ts +3 -0
- package/dist/templates/routes/api.d.ts.map +1 -0
- package/dist/templates/routes/api.js +118 -0
- package/dist/templates/routes/api.js.map +1 -0
- package/dist/templates/routes/console.d.ts +2 -0
- package/dist/templates/routes/console.d.ts.map +1 -0
- package/dist/templates/routes/console.js +22 -0
- package/dist/templates/routes/console.js.map +1 -0
- package/dist/templates/routes/web.d.ts +4 -0
- package/dist/templates/routes/web.d.ts.map +1 -0
- package/dist/templates/routes/web.js +108 -0
- package/dist/templates/routes/web.js.map +1 -0
- package/dist/templates/server.d.ts +2 -0
- package/dist/templates/server.d.ts.map +1 -0
- package/dist/templates/server.js +10 -0
- package/dist/templates/server.js.map +1 -0
- package/dist/templates/tsconfig.d.ts +3 -0
- package/dist/templates/tsconfig.d.ts.map +1 -0
- package/dist/templates/tsconfig.js +33 -0
- package/dist/templates/tsconfig.js.map +1 -0
- package/dist/templates/views/welcome.d.ts +6 -0
- package/dist/templates/views/welcome.d.ts.map +1 -0
- package/dist/templates/views/welcome.js +396 -0
- package/dist/templates/views/welcome.js.map +1 -0
- package/dist/templates/vite.d.ts +3 -0
- package/dist/templates/vite.d.ts.map +1 -0
- package/dist/templates/vite.js +61 -0
- package/dist/templates/vite.js.map +1 -0
- package/dist/templates.d.ts +28 -17
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +99 -3779
- package/dist/templates.js.map +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|