@surf-ai/sdk 0.1.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/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@surf-ai/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Surf platform SDK — data API client, server runtime, React hooks, and database helpers",
5
+ "type": "module",
6
+ "exports": {
7
+ "./server": {
8
+ "types": "./dist/server/index.d.ts",
9
+ "import": "./dist/server/index.js",
10
+ "require": "./dist/server/index.cjs"
11
+ },
12
+ "./react": {
13
+ "types": "./dist/react/index.d.ts",
14
+ "import": "./dist/react/index.js"
15
+ },
16
+ "./db": {
17
+ "types": "./dist/db/index.d.ts",
18
+ "import": "./dist/db/index.js",
19
+ "require": "./dist/db/index.cjs"
20
+ },
21
+ "./theme.css": "./src/theme/index.css"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "src/theme"
26
+ ],
27
+ "scripts": {
28
+ "build": "tsup",
29
+ "dev": "tsup --watch",
30
+ "typecheck": "tsc --noEmit",
31
+ "codegen": "python3 ../../src/agent_mode/gen_sdk.py"
32
+ },
33
+ "dependencies": {
34
+ "express": "^4.22.0",
35
+ "cors": "^2.8.5",
36
+ "http-proxy-middleware": "^3.0.0",
37
+ "croner": "^9.0.0",
38
+ "drizzle-orm": "^0.44.0",
39
+ "@tanstack/react-query": "^5.94.0",
40
+ "clsx": "^2.1.0",
41
+ "tailwind-merge": "^2.6.0"
42
+ },
43
+ "peerDependencies": {
44
+ "react": "^19.0.0",
45
+ "react-dom": "^19.0.0"
46
+ },
47
+ "peerDependenciesMeta": {
48
+ "react": { "optional": true },
49
+ "react-dom": { "optional": true }
50
+ },
51
+ "devDependencies": {
52
+ "tsup": "^8.0.0",
53
+ "typescript": "^5.9.0",
54
+ "@types/express": "^5.0.0",
55
+ "@types/cors": "^2.8.0",
56
+ "@types/react": "^19.0.0"
57
+ }
58
+ }
@@ -0,0 +1,314 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Lato:wght@400;600;700;900&family=Roboto+Mono:wght@400;500&display=swap');
2
+
3
+ @import "tailwindcss";
4
+ @import "tw-animate-css";
5
+
6
+ /* ===== Tailwind CSS 4 Theme — maps CSS vars to Tailwind tokens ===== */
7
+ @theme inline {
8
+ --color-background: var(--background);
9
+ --color-foreground: var(--foreground);
10
+ --color-card: var(--card);
11
+ --color-card-foreground: var(--card-foreground);
12
+ --color-popover: var(--popover);
13
+ --color-popover-foreground: var(--popover-foreground);
14
+ --color-primary: var(--primary);
15
+ --color-primary-foreground: var(--primary-foreground);
16
+ --color-secondary: var(--secondary);
17
+ --color-secondary-foreground: var(--secondary-foreground);
18
+ --color-muted: var(--muted);
19
+ --color-muted-foreground: var(--muted-foreground);
20
+ --color-accent: var(--accent);
21
+ --color-accent-foreground: var(--accent-foreground);
22
+ --color-destructive: var(--destructive);
23
+ --color-destructive-foreground: var(--destructive-foreground);
24
+ --color-border: var(--border);
25
+ --color-input: var(--input);
26
+ --color-ring: var(--ring);
27
+ --radius-sm: calc(var(--radius) - 4px);
28
+ --radius-md: calc(var(--radius) - 2px);
29
+ --radius-lg: var(--radius);
30
+ --radius-xl: calc(var(--radius) + 4px);
31
+ --animate-accordion-down: accordion-down 0.2s ease-out;
32
+ --animate-accordion-up: accordion-up 0.2s ease-out;
33
+
34
+ /* Surf Semantic — Background */
35
+ --color-bg-subtle: var(--bg-subtle);
36
+ --color-bg-subtle-hover: var(--bg-subtle-hover);
37
+ --color-bg-base: var(--bg-base);
38
+ --color-bg-base-opaque: var(--bg-base-opaque);
39
+ --color-bg-menu: var(--bg-menu);
40
+ --color-bg-chat: var(--bg-chat);
41
+ --color-bg-chat-nav: var(--bg-chat-nav);
42
+
43
+ /* Surf Semantic — Foreground */
44
+ --color-fg-base: var(--fg-base);
45
+ --color-fg-subtle: var(--fg-subtle);
46
+ --color-fg-muted: var(--fg-muted);
47
+ --color-fg-disabled: var(--fg-disabled);
48
+
49
+ /* Surf Semantic — Border */
50
+ --color-border-base: var(--border-base);
51
+ --color-border-strong: var(--border-strong);
52
+ --color-border-contrast: var(--border-contrast);
53
+ --color-border-focus: var(--border-focus);
54
+
55
+ /* Surf Brand */
56
+ --color-brand-100: var(--brand-100);
57
+ --color-brand-60: var(--brand-60);
58
+ --color-brand-30: var(--brand-30);
59
+ --color-brand-10: var(--brand-10);
60
+
61
+ /* Surf Visualizer (Chart/Status) */
62
+ --color-visualizer-rose-pop: var(--visualizer-rose-pop);
63
+ --color-visualizer-indigo-breeze: var(--visualizer-indigo-breeze);
64
+ --color-visualizer-emerald-mint: var(--visualizer-emerald-mint);
65
+ --color-visualizer-golden-amber: var(--visualizer-golden-amber);
66
+ --color-visualizer-royal-blue: var(--visualizer-royal-blue);
67
+ --color-visualizer-crimson-spark: var(--visualizer-crimson-spark);
68
+ --color-visualizer-aqua-glow: var(--visualizer-aqua-glow);
69
+ --color-visualizer-sunbeam-yellow: var(--visualizer-sunbeam-yellow);
70
+
71
+ /* Surf Tags */
72
+ --color-tag-blue-10: var(--tag-blue-10);
73
+ --color-tag-blue-100: var(--tag-blue-100);
74
+ --color-tag-yellow-10: var(--tag-yellow-10);
75
+ --color-tag-yellow-100: var(--tag-yellow-100);
76
+ --color-tag-purple-10: var(--tag-purple-10);
77
+ --color-tag-purple-100: var(--tag-purple-100);
78
+ --color-tag-cyan-10: var(--tag-cyan-10);
79
+ --color-tag-cyan-100: var(--tag-cyan-100);
80
+ --color-tag-pink-10: var(--tag-pink-10);
81
+ --color-tag-pink-100: var(--tag-pink-100);
82
+ --color-tag-orange-10: var(--tag-orange-10);
83
+ --color-tag-orange-100: var(--tag-orange-100);
84
+
85
+ /* Neutral */
86
+ --color-neutral-0: var(--neutral-0);
87
+ }
88
+
89
+ @keyframes accordion-down {
90
+ from { height: 0; }
91
+ to { height: var(--radix-accordion-content-height); }
92
+ }
93
+
94
+ @keyframes accordion-up {
95
+ from { height: var(--radix-accordion-content-height); }
96
+ to { height: 0; }
97
+ }
98
+
99
+ /* ===== Light Mode (default) ===== */
100
+ :root {
101
+ /* shadcn semantic tokens (Surf Light) */
102
+ --background: hsl(0 0% 100%);
103
+ --foreground: hsl(0 0% 13%);
104
+ --card: hsl(0 0% 100%);
105
+ --card-foreground: hsl(0 0% 13%);
106
+ --popover: hsl(0 0% 100%);
107
+ --popover-foreground: hsl(0 0% 13%);
108
+ --primary: hsl(339 100% 58%);
109
+ --primary-foreground: hsl(0 0% 100%);
110
+ --secondary: hsl(0 3% 95%);
111
+ --secondary-foreground: hsl(0 0% 13%);
112
+ --muted: hsl(0 3% 95%);
113
+ --muted-foreground: hsl(0 0% 48%);
114
+ --accent: hsl(0 3% 95%);
115
+ --accent-foreground: hsl(0 0% 13%);
116
+ --destructive: hsl(357 91% 55%);
117
+ --destructive-foreground: hsl(0 0% 100%);
118
+ --border: hsl(0 0% 91%);
119
+ --input: hsl(0 0% 91%);
120
+ --ring: #212121;
121
+ --radius: 0.5rem;
122
+
123
+ /* Surf Neutral Palette */
124
+ --neutral-0: #ffffff;
125
+ --neutral-50: #fafafa;
126
+ --neutral-100: #f5f4f4;
127
+ --neutral-200: #e7e7e7;
128
+ --neutral-300: #d8d8d8;
129
+ --neutral-400: #aaaaaa;
130
+ --neutral-500: #7a7a7a;
131
+ --neutral-600: #5b5b5b;
132
+ --neutral-700: #464646;
133
+ --neutral-800: #2a2a2a;
134
+ --neutral-900: #212121;
135
+ --neutral-950: #1b1b1b;
136
+ --neutral-1000: #101010;
137
+
138
+ /* Surf Brand */
139
+ --brand-100: #ff2882;
140
+ --brand-60: rgba(255, 40, 130, 0.6);
141
+ --brand-30: rgba(255, 40, 130, 0.3);
142
+ --brand-10: rgba(255, 40, 130, 0.1);
143
+
144
+ /* Surf Brand Extended */
145
+ --brand-seafoam: #b6cfd0;
146
+ --brand-dusty-teal: #6ba4b8;
147
+ --brand-black-aqua: #002f38;
148
+ --brand-deep-teal-blue: #07272d;
149
+
150
+ /* Surf Visualizer (Chart) Colors */
151
+ --visualizer-rose-pop: #fd4b96;
152
+ --visualizer-indigo-breeze: #6366f1;
153
+ --visualizer-emerald-mint: #10b981;
154
+ --visualizer-golden-amber: #f59e0b;
155
+ --visualizer-royal-blue: #1d4ed8;
156
+ --visualizer-crimson-spark: #ef4444;
157
+ --visualizer-aqua-glow: #06b6d4;
158
+ --visualizer-sunbeam-yellow: #facc15;
159
+
160
+ /* Surf Semantic Tokens (Light) */
161
+ --bg-subtle: rgba(42, 42, 42, 0.04);
162
+ --bg-subtle-hover: rgba(42, 42, 42, 0.06);
163
+ --bg-base: rgba(255, 255, 255, 0.88);
164
+ --bg-base-opaque: #ffffff;
165
+ --bg-menu: #ffffff;
166
+ --bg-chat: #fcfcfc;
167
+ --bg-chat-nav: #f4f4f4;
168
+ --fg-base: #212121;
169
+ --fg-subtle: #7a7a7a;
170
+ --fg-muted: #aaaaaa;
171
+ --fg-disabled: #d8d8d8;
172
+ --border-base: rgba(42, 42, 42, 0.04);
173
+ --border-strong: rgba(42, 42, 42, 0.08);
174
+ --border-contrast: rgba(42, 42, 42, 0.12);
175
+ --border-focus: rgba(42, 42, 42, 0.4);
176
+
177
+ /* Tag Colors */
178
+ --tag-blue-10: rgba(91, 181, 255, 0.1);
179
+ --tag-blue-100: #5bb5ff;
180
+ --tag-yellow-10: rgba(222, 195, 120, 0.1);
181
+ --tag-yellow-100: #dec378;
182
+ --tag-purple-10: rgba(144, 142, 184, 0.1);
183
+ --tag-purple-100: #908eb8;
184
+ --tag-cyan-10: rgba(116, 173, 164, 0.1);
185
+ --tag-cyan-100: #74ada4;
186
+ --tag-pink-10: rgba(184, 142, 167, 0.1);
187
+ --tag-pink-100: #b88ea7;
188
+ --tag-orange-10: rgba(184, 160, 142, 0.1);
189
+ --tag-orange-100: #b8a08e;
190
+
191
+ /* Surf Gradient Definitions (raw, mode-independent) */
192
+ --gradient-max-dark: linear-gradient(213deg, #8c421d 2%, #fbe67b 31%, #fcfbe7 53%, #f7d14e 77%, #d4a041 100%);
193
+ --gradient-max-light: linear-gradient(125deg, #8c421d 22%, #d2af00 47%, #cd9124 67%, #d4a041 88%);
194
+ --gradient-pro-dark: linear-gradient(213deg, #7a96ac 1%, #c5d6e2 27%, #eaeff3 47%, #c5d6e2 65%, #a3bccf 89%);
195
+ --gradient-pro-light: linear-gradient(129deg, #7a96ac 4%, #6d7f8d 27%, #9fb9ce 55%, #6d7f8d 90%);
196
+ --gradient-plus-dark: linear-gradient(214deg, #986732 0%, #a7825b 23%, #f6d0ab 45%, #a07043 66%, #9d774e 100%);
197
+ --gradient-plus-light: linear-gradient(129deg, #9e8976 5%, #7a5e50 19%, #f6d0ab 35%, #9d774e 49%, #c99b70 65%, #795f52 78%);
198
+ --gradient-upgrade-dark: linear-gradient(214deg, #ffedf3 0%, #ff9fbf 30%, #fd5d92 59%, #ffdab2 100%);
199
+ --gradient-upgrade-light: linear-gradient(32deg, #fc3bb2 6%, #f7906e 79%);
200
+ --gradient-new-function: linear-gradient(33deg, #6e86ff 17%, #ff2882 55%, #ff98a4 103%);
201
+ --gradient-suggestion: linear-gradient(32deg, #fd538c 4%, #5aa6e0 47%, #ffdab2 98%);
202
+ --gradient-g1: linear-gradient(189deg, #ffacc6 6%, #b6e0f5 99%);
203
+ --gradient-g2: linear-gradient(34deg, #9796f0 9%, #fbc7d4 84%);
204
+ --gradient-g3: linear-gradient(to right, #ed4264, #ffedbc);
205
+ --gradient-g4: linear-gradient(232deg, #fedc2a 4%, #dd5789 56%, #7a2c9e 104%);
206
+ --gradient-g5: linear-gradient(32deg, #fc3bb2 6%, #f7906e 79%);
207
+
208
+ /* Surf Gradients (semantic, auto-switch by mode) */
209
+ --gradient-max: var(--gradient-max-light);
210
+ --gradient-pro: var(--gradient-pro-light);
211
+ --gradient-plus: var(--gradient-plus-light);
212
+ --gradient-upgrade: var(--gradient-upgrade-light);
213
+
214
+ /* Spacing */
215
+ --spacing-2: 2px;
216
+ --spacing-4: 4px;
217
+ --spacing-6: 6px;
218
+ --spacing-8: 8px;
219
+ --spacing-10: 10px;
220
+ --spacing-12: 12px;
221
+ --spacing-16: 16px;
222
+ --spacing-24: 24px;
223
+ --spacing-32: 32px;
224
+ --spacing-40: 40px;
225
+ --spacing-64: 64px;
226
+ --spacing-96: 96px;
227
+ --spacing-128: 128px;
228
+
229
+ /* Border Radius */
230
+ --radius-2: 2px;
231
+ --radius-4: 4px;
232
+ --radius-6: 6px;
233
+ --radius-8: 8px;
234
+ --radius-10: 10px;
235
+ --radius-12: 12px;
236
+ --radius-16: 16px;
237
+ --radius-20: 20px;
238
+ --radius-24: 24px;
239
+ --radius-full: 999px;
240
+
241
+ /* Typography */
242
+ --font-family-header: "Lato", "PingFang SC", sans-serif;
243
+ --font-family-body: "Lato", "PingFang SC", sans-serif;
244
+ --font-family-code: "Roboto Mono", monospace;
245
+ }
246
+
247
+ /* ===== Dark Mode ===== */
248
+ .dark {
249
+ /* shadcn semantic tokens (Surf Dark) */
250
+ --background: hsl(0 0% 9%);
251
+ --foreground: hsl(0 0% 91%);
252
+ --card: hsl(0 0% 9%);
253
+ --card-foreground: hsl(0 0% 91%);
254
+ --popover: hsl(0 0% 15%);
255
+ --popover-foreground: hsl(0 0% 91%);
256
+ --primary: hsl(339 100% 58%);
257
+ --primary-foreground: hsl(0 0% 100%);
258
+ --secondary: hsl(0 0% 16%);
259
+ --secondary-foreground: hsl(0 0% 91%);
260
+ --muted: hsl(0 0% 16%);
261
+ --muted-foreground: hsl(0 0% 67%);
262
+ --accent: hsl(0 0% 16%);
263
+ --accent-foreground: hsl(0 0% 91%);
264
+ --destructive: hsl(359 100% 65%);
265
+ --destructive-foreground: hsl(0 0% 100%);
266
+ --border: hsl(0 0% 20%);
267
+ --input: hsl(0 0% 20%);
268
+ --ring: #e7e7e7;
269
+
270
+ /* Surf Gradients (Dark) */
271
+ --gradient-max: var(--gradient-max-dark);
272
+ --gradient-pro: var(--gradient-pro-dark);
273
+ --gradient-plus: var(--gradient-plus-dark);
274
+ --gradient-upgrade: var(--gradient-upgrade-dark);
275
+
276
+ /* Surf Semantic Tokens (Dark) */
277
+ --bg-subtle: rgba(255, 255, 255, 0.04);
278
+ --bg-subtle-hover: rgba(255, 255, 255, 0.12);
279
+ --bg-base: rgba(42, 42, 42, 0.8);
280
+ --bg-base-opaque: #171717;
281
+ --bg-menu: #252525;
282
+ --bg-chat: #101010;
283
+ --bg-chat-nav: #171717;
284
+ --fg-base: #e7e7e7;
285
+ --fg-subtle: #aaaaaa;
286
+ --fg-muted: #7a7a7a;
287
+ --fg-disabled: #5b5b5b;
288
+ --border-base: rgba(255, 255, 255, 0.04);
289
+ --border-strong: rgba(255, 255, 255, 0.08);
290
+ --border-contrast: rgba(255, 255, 255, 0.12);
291
+ --border-focus: rgba(255, 255, 255, 0.4);
292
+ }
293
+
294
+ @layer base {
295
+ *,
296
+ ::after,
297
+ ::before {
298
+ border-color: var(--color-border);
299
+ }
300
+ body {
301
+ background-color: var(--color-background);
302
+ color: var(--color-foreground);
303
+ font-family: "Lato", "PingFang SC", sans-serif;
304
+ -webkit-font-smoothing: antialiased;
305
+ -moz-osx-font-smoothing: grayscale;
306
+ }
307
+ }
308
+
309
+ @media (max-width: 768px) {
310
+ :root {
311
+ --spacing-96: 64px;
312
+ --spacing-128: 64px;
313
+ }
314
+ }