@growthub/cli 0.9.2 → 0.9.4

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 (44) hide show
  1. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/growthub.config.json +112 -0
  2. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package.json +1 -1
  3. package/assets/worker-kits/growthub-agency-portal-starter-v1/bundles/growthub-agency-portal-starter-v1.json +1 -0
  4. package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +2 -0
  5. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/package.json +1 -1
  6. package/assets/worker-kits/growthub-custom-workspace-starter-v1/SKILL.md +35 -1
  7. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/.env.example +41 -0
  8. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/README.md +38 -0
  9. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/settings/integrations/route.js +13 -0
  10. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/route.js +31 -0
  11. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +717 -0
  12. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/layout.jsx +14 -0
  13. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +117 -0
  14. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +105 -0
  15. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/growthub.config.json +53 -0
  16. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/jsconfig.json +8 -0
  17. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/auth/index.js +21 -0
  18. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/env.js +28 -0
  19. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
  20. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +198 -0
  21. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/payments/index.js +13 -0
  22. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/index.js +13 -0
  23. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/postgres.js +16 -0
  24. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/provider-managed.js +16 -0
  25. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/qstash-kv.js +16 -0
  26. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +185 -0
  27. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/portal.js +150 -0
  28. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/next.config.js +10 -0
  29. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/package-lock.json +976 -0
  30. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/package.json +17 -0
  31. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/postcss.config.mjs +3 -0
  32. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/vercel.json +5 -0
  33. package/assets/worker-kits/growthub-custom-workspace-starter-v1/bundles/growthub-custom-workspace-starter-v1.json +13 -0
  34. package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/adapter-contracts.md +86 -0
  35. package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/vercel-serverless-deployment.md +46 -0
  36. package/assets/worker-kits/growthub-custom-workspace-starter-v1/growthub.config.json +49 -0
  37. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/check-self-improving-health.sh +60 -0
  38. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/promote-capability.mjs +37 -0
  39. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/propose-capability.mjs +38 -0
  40. package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +45 -0
  41. package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/deployment-handoff.md +61 -0
  42. package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/supabase-setup-plan.md +26 -0
  43. package/dist/index.js +5252 -3460
  44. package/package.json +3 -2
@@ -0,0 +1,717 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --bg: #080b12;
4
+ --sidebar: #0d1118;
5
+ --panel: #111827;
6
+ --panel-soft: #0d1420;
7
+ --ink: #f7fafc;
8
+ --muted: #93a3b8;
9
+ --line: #223047;
10
+ --accent: #38bdf8;
11
+ --accent-soft: rgba(56, 189, 248, 0.12);
12
+ --good: #22c55e;
13
+ --warn: #f59e0b;
14
+ }
15
+
16
+ * { box-sizing: border-box; }
17
+ html { scroll-behavior: smooth; }
18
+ body {
19
+ margin: 0;
20
+ background: var(--bg);
21
+ color: var(--ink);
22
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
23
+ }
24
+ a { color: inherit; }
25
+ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em; }
26
+
27
+ .shell {
28
+ min-height: 100vh;
29
+ display: grid;
30
+ grid-template-columns: 232px minmax(0, 1fr);
31
+ background: radial-gradient(circle at top right, rgba(56, 189, 248, 0.12), transparent 360px), var(--bg);
32
+ }
33
+ .sidebar {
34
+ position: sticky;
35
+ top: 0;
36
+ height: 100vh;
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 22px;
40
+ background: rgba(13, 17, 24, 0.96);
41
+ border-right: 1px solid var(--line);
42
+ padding: 22px 16px;
43
+ }
44
+ .brand { display: flex; align-items: center; gap: 10px; font-weight: 800; }
45
+ .brand-mark {
46
+ width: 34px;
47
+ height: 34px;
48
+ display: grid;
49
+ place-items: center;
50
+ border-radius: 8px;
51
+ background: var(--accent);
52
+ color: #06111d;
53
+ font-size: 13px;
54
+ font-weight: 900;
55
+ }
56
+ .nav { display: grid; gap: 5px; }
57
+ .nav a {
58
+ color: #c6d1e1;
59
+ text-decoration: none;
60
+ padding: 9px 10px;
61
+ border-radius: 7px;
62
+ font-size: 14px;
63
+ }
64
+ .nav a.active, .nav a:hover { background: #172133; color: white; }
65
+ .sidebar-footer {
66
+ margin-top: auto;
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 8px;
70
+ color: var(--muted);
71
+ font-size: 13px;
72
+ }
73
+ .status-dot {
74
+ width: 8px;
75
+ height: 8px;
76
+ border-radius: 999px;
77
+ background: var(--good);
78
+ box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.12);
79
+ }
80
+ .main {
81
+ width: min(100%, 1180px);
82
+ padding: 30px;
83
+ }
84
+ .utility-bar {
85
+ display: flex;
86
+ justify-content: space-between;
87
+ gap: 16px;
88
+ align-items: center;
89
+ margin-bottom: 20px;
90
+ padding: 12px 14px;
91
+ border: 1px solid var(--line);
92
+ border-radius: 8px;
93
+ background: rgba(17, 24, 39, 0.82);
94
+ }
95
+ .utility-bar strong { display: block; font-size: 14px; }
96
+ .utility-bar span, .page-heading p, .panel-copy, .card p, .setup-card p, .results-panel p {
97
+ color: var(--muted);
98
+ line-height: 1.5;
99
+ }
100
+ .utility-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
101
+ .utility-actions a, .pill, .badge {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ min-height: 28px;
105
+ border: 1px solid var(--line);
106
+ border-radius: 999px;
107
+ padding: 5px 10px;
108
+ background: #0c1320;
109
+ color: #c9d7e8;
110
+ text-decoration: none;
111
+ font-size: 12px;
112
+ }
113
+ .page-heading { position: relative; margin-bottom: 22px; }
114
+ .page-heading h1 {
115
+ margin: 4px 0 8px;
116
+ font-size: clamp(32px, 5vw, 58px);
117
+ line-height: 0.98;
118
+ letter-spacing: 0;
119
+ }
120
+ .page-heading p { max-width: 780px; margin: 0 0 12px; }
121
+ .eyebrow { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.12em; }
122
+ .workspace-header { margin-bottom: 18px; }
123
+ .primitive-grid {
124
+ display: grid;
125
+ grid-template-columns: repeat(3, minmax(0, 1fr));
126
+ gap: 14px;
127
+ margin-bottom: 16px;
128
+ }
129
+ .primitive-grid.adapter { grid-template-columns: repeat(6, minmax(0, 1fr)); }
130
+ .primitive-card, .capability-primitive, .contract-panel a {
131
+ border: 1px solid var(--line);
132
+ border-radius: 10px;
133
+ background: rgba(17, 24, 39, 0.9);
134
+ }
135
+ .primitive-card { min-height: 158px; padding: 16px; }
136
+ .primitive-card-top, .capability-heading {
137
+ display: flex;
138
+ justify-content: space-between;
139
+ align-items: flex-start;
140
+ gap: 12px;
141
+ }
142
+ .primitive-card strong {
143
+ display: block;
144
+ margin-top: 16px;
145
+ font-size: clamp(20px, 3vw, 34px);
146
+ line-height: 1;
147
+ word-break: break-word;
148
+ }
149
+ .primitive-meta, .integration-bindings {
150
+ display: flex;
151
+ flex-wrap: wrap;
152
+ gap: 7px;
153
+ margin-top: 16px;
154
+ }
155
+ .primitive-meta span, .primitive-meta code, .integration-bindings span, .binding-row code, .contract-panel code, .quick-actions code {
156
+ border: 1px solid var(--line);
157
+ border-radius: 999px;
158
+ padding: 4px 7px;
159
+ color: var(--muted);
160
+ background: #0d1420;
161
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
162
+ font-size: 11px;
163
+ }
164
+ .capability-board { display: grid; gap: 16px; }
165
+ .capability-primitive {
166
+ min-height: 252px;
167
+ padding: 18px;
168
+ scroll-margin-top: 20px;
169
+ }
170
+ .capability-primitive h2 { margin: 4px 0 0; font-size: 28px; }
171
+ .binding-list { display: grid; gap: 8px; margin-top: 16px; }
172
+ .binding-row {
173
+ display: grid;
174
+ grid-template-columns: minmax(90px, 0.8fr) minmax(0, 1fr) auto;
175
+ gap: 10px;
176
+ align-items: center;
177
+ border: 1px solid var(--line);
178
+ border-radius: 8px;
179
+ padding: 9px 10px;
180
+ background: #0d1420;
181
+ }
182
+ .binding-row span { color: var(--muted); font-size: 12px; }
183
+ .binding-row strong { font-size: 13px; word-break: break-word; }
184
+ .primitive-columns {
185
+ display: grid;
186
+ grid-template-columns: 1fr 0.7fr 1fr;
187
+ gap: 12px;
188
+ margin-top: 14px;
189
+ }
190
+ .primitive-stack {
191
+ display: grid;
192
+ align-content: start;
193
+ gap: 7px;
194
+ border: 1px solid var(--line);
195
+ border-radius: 8px;
196
+ padding: 10px;
197
+ background: rgba(13, 20, 32, 0.82);
198
+ }
199
+ .primitive-stack > span {
200
+ color: var(--accent);
201
+ font-size: 11px;
202
+ font-weight: 800;
203
+ text-transform: uppercase;
204
+ letter-spacing: 0.12em;
205
+ }
206
+ .primitive-stack div {
207
+ display: flex;
208
+ justify-content: space-between;
209
+ gap: 8px;
210
+ align-items: center;
211
+ border-top: 1px solid rgba(34, 48, 71, 0.65);
212
+ padding-top: 7px;
213
+ }
214
+ .primitive-stack strong {
215
+ min-width: 0;
216
+ font-size: 12px;
217
+ word-break: break-word;
218
+ }
219
+ .field-cloud {
220
+ display: flex;
221
+ flex-wrap: wrap;
222
+ gap: 6px;
223
+ margin-top: 12px;
224
+ }
225
+ .field-cloud code {
226
+ border: 1px solid rgba(56, 189, 248, 0.28);
227
+ border-radius: 999px;
228
+ padding: 4px 7px;
229
+ color: #d7e8ff;
230
+ background: rgba(56, 189, 248, 0.08);
231
+ font-size: 11px;
232
+ }
233
+ .integration-bindings span {
234
+ display: inline-flex;
235
+ align-items: center;
236
+ gap: 6px;
237
+ }
238
+ .contract-panel {
239
+ display: grid;
240
+ grid-template-columns: repeat(2, minmax(0, 1fr));
241
+ gap: 12px;
242
+ margin-top: 16px;
243
+ }
244
+ .contract-panel a {
245
+ display: flex;
246
+ justify-content: space-between;
247
+ gap: 12px;
248
+ padding: 14px;
249
+ text-decoration: none;
250
+ }
251
+ .hero-grid {
252
+ display: grid;
253
+ grid-template-columns: 1.2fr 0.9fr 0.9fr;
254
+ gap: 14px;
255
+ margin-bottom: 16px;
256
+ }
257
+ .hero-card, .card, .setup-card, .integration-section, .integration-toolbar, .results-panel {
258
+ border: 1px solid var(--line);
259
+ border-radius: 8px;
260
+ background: rgba(17, 24, 39, 0.9);
261
+ }
262
+ .hero-card { min-height: 188px; padding: 18px; }
263
+ .hero-card.primary { background: linear-gradient(135deg, rgba(56, 189, 248, 0.18), rgba(17, 24, 39, 0.95)); }
264
+ .hero-card.wide { min-height: 210px; }
265
+ .hero-card span, .card span, .setup-card span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
266
+ .hero-card strong { display: block; margin-top: 10px; font-size: 34px; line-height: 1; }
267
+ .hero-card p { margin: 12px 0 0; color: var(--muted); line-height: 1.5; }
268
+ .card-label { color: var(--accent) !important; font-size: 12px; font-weight: 800; text-transform: uppercase; }
269
+ .muted { color: var(--muted) !important; }
270
+ .progress { height: 8px; margin: 18px 0 2px; overflow: hidden; border-radius: 999px; background: #0a101b; border: 1px solid var(--line); }
271
+ .progress span { display: block; height: 100%; background: var(--accent); }
272
+ .ops-strip, .setup-grid {
273
+ display: grid;
274
+ grid-template-columns: repeat(4, minmax(0, 1fr));
275
+ gap: 12px;
276
+ margin-bottom: 18px;
277
+ }
278
+ .setup-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
279
+ .ops-strip article, .setup-card { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(13, 20, 32, 0.88); }
280
+ .ops-strip strong, .setup-card strong { display: block; margin: 7px 0; font-size: 14px; }
281
+ .ops-strip p, .setup-card p { margin: 0 0 10px; font-size: 13px; }
282
+ .setup-card code { color: #d7e8ff; word-break: break-word; }
283
+ .grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
284
+ .compact-grid .card { min-height: 124px; }
285
+ .card { min-height: 138px; padding: 16px; }
286
+ .card h3 { margin: 7px 0 8px; font-size: 15px; }
287
+ .metric { font-size: 26px; font-weight: 800; margin-top: 12px; }
288
+ .adapter { margin-top: 18px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
289
+ .adapter .card { min-height: auto; }
290
+ .results-panel { margin-top: 18px; padding: 18px; display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
291
+ .results-panel h2 { margin: 0 0 8px; }
292
+ .results-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
293
+ .results-metrics span { display: block; color: var(--muted); font-size: 12px; }
294
+ .quick-actions {
295
+ position: fixed;
296
+ right: 20px;
297
+ bottom: 20px;
298
+ display: grid;
299
+ gap: 8px;
300
+ width: 190px;
301
+ }
302
+ .quick-actions button, .quick-actions a {
303
+ border: 1px solid var(--line);
304
+ border-radius: 8px;
305
+ padding: 10px 12px;
306
+ background: #0d1420;
307
+ color: var(--ink);
308
+ text-align: left;
309
+ font: inherit;
310
+ text-decoration: none;
311
+ }
312
+ .integration-board { display: grid; gap: 14px; }
313
+ .integration-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 14px 16px; }
314
+ .integration-toolbar p { margin: 4px 0 0; color: var(--muted); font-size: 14px; }
315
+ .section-heading { display: flex; justify-content: space-between; gap: 14px; align-items: flex-start; margin-bottom: 12px; }
316
+ .integration-section { padding: 16px; }
317
+ .integration-section h2 { margin: 0 0 8px; font-size: 18px; }
318
+ .integration-list { display: grid; gap: 10px; }
319
+ .integration-card { border: 1px solid var(--line); border-radius: 8px; padding: 14px; background: #0d1420; }
320
+ .integration-card-top { display: grid; grid-template-columns: 38px minmax(0, 1fr) auto; gap: 12px; align-items: start; }
321
+ .provider-mark {
322
+ width: 34px;
323
+ height: 34px;
324
+ display: grid;
325
+ place-items: center;
326
+ border: 1px solid var(--line);
327
+ border-radius: 7px;
328
+ background: #101a2b;
329
+ font-weight: 800;
330
+ color: var(--accent);
331
+ }
332
+ .integration-card strong { display: block; font-size: 14px; }
333
+ .integration-card p { margin: 4px 0 0; color: var(--muted); font-size: 13px; line-height: 1.4; }
334
+ .status {
335
+ white-space: nowrap;
336
+ border: 1px solid var(--line);
337
+ border-radius: 999px;
338
+ padding: 4px 8px;
339
+ font-size: 12px;
340
+ color: var(--muted);
341
+ }
342
+ .status.connected { color: var(--good); border-color: rgba(34, 197, 94, 0.45); background: rgba(34, 197, 94, 0.1); }
343
+ .status.needs-connection { color: var(--warn); border-color: rgba(245, 158, 11, 0.5); background: rgba(245, 158, 11, 0.1); }
344
+ .status.runtime-ready, .status.runtime-derived, .status.configured-by-env { color: var(--good); border-color: rgba(34, 197, 94, 0.45); background: rgba(34, 197, 94, 0.1); }
345
+ .status.needs-runtime-config { color: var(--warn); border-color: rgba(245, 158, 11, 0.5); background: rgba(245, 158, 11, 0.1); }
346
+ .integration-card-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
347
+ .integration-card-meta span {
348
+ border: 1px solid var(--line);
349
+ border-radius: 999px;
350
+ padding: 3px 7px;
351
+ color: var(--muted);
352
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
353
+ font-size: 11px;
354
+ }
355
+
356
+ @media (max-width: 1020px) {
357
+ .shell { grid-template-columns: 1fr; }
358
+ .sidebar { position: static; height: auto; }
359
+ .primitive-grid, .primitive-grid.adapter, .capability-board, .primitive-columns, .contract-panel, .hero-grid, .grid, .adapter, .ops-strip, .setup-grid, .results-panel, .results-metrics { grid-template-columns: 1fr; }
360
+ .quick-actions { position: static; width: auto; margin: 20px 30px; }
361
+ }
362
+
363
+ @media (max-width: 720px) {
364
+ .main { padding: 20px; }
365
+ .utility-bar, .integration-toolbar, .section-heading { display: block; }
366
+ .utility-actions { margin-top: 10px; }
367
+ .integration-card-top { grid-template-columns: 34px minmax(0, 1fr); }
368
+ .integration-card-top .status { grid-column: 2; width: fit-content; }
369
+ }
370
+
371
+ .workspace-builder {
372
+ min-height: 100vh;
373
+ display: grid;
374
+ grid-template-columns: 220px minmax(0, 1fr) 320px;
375
+ background: #fafafa;
376
+ color: #252525;
377
+ }
378
+ .workspace-rail,
379
+ .workspace-widget-panel {
380
+ background: #ffffff;
381
+ border-color: #e8e8e8;
382
+ }
383
+ .workspace-rail {
384
+ display: flex;
385
+ flex-direction: column;
386
+ gap: 18px;
387
+ border-right: 1px solid #e8e8e8;
388
+ padding: 18px 14px;
389
+ }
390
+ .workspace-brand {
391
+ display: flex;
392
+ align-items: center;
393
+ gap: 10px;
394
+ font-size: 14px;
395
+ font-weight: 650;
396
+ }
397
+ .workspace-mark {
398
+ width: 26px;
399
+ height: 26px;
400
+ display: grid;
401
+ place-items: center;
402
+ border: 1px solid #dedede;
403
+ border-radius: 6px;
404
+ background: #f7f7f7;
405
+ color: #555;
406
+ font-size: 12px;
407
+ }
408
+ .workspace-nav {
409
+ display: grid;
410
+ gap: 2px;
411
+ }
412
+ .workspace-nav a {
413
+ border-radius: 6px;
414
+ color: #686868;
415
+ font-size: 13px;
416
+ padding: 8px 9px;
417
+ text-decoration: none;
418
+ }
419
+ .workspace-nav a.active,
420
+ .workspace-nav a:hover {
421
+ background: #f1f1f1;
422
+ color: #2c2c2c;
423
+ }
424
+ .workspace-rail-status {
425
+ margin-top: auto;
426
+ display: flex;
427
+ align-items: center;
428
+ gap: 8px;
429
+ color: #777;
430
+ font-size: 12px;
431
+ }
432
+ .workspace-surface {
433
+ min-width: 0;
434
+ padding: 16px;
435
+ }
436
+ .workspace-toolbar {
437
+ min-height: 48px;
438
+ display: flex;
439
+ justify-content: space-between;
440
+ gap: 16px;
441
+ align-items: center;
442
+ border-bottom: 1px solid #e8e8e8;
443
+ margin: -16px -16px 14px;
444
+ padding: 10px 16px;
445
+ background: #ffffff;
446
+ }
447
+ .workspace-toolbar p {
448
+ margin: 0 0 2px;
449
+ color: #888;
450
+ font-size: 11px;
451
+ text-transform: uppercase;
452
+ }
453
+ .workspace-toolbar h1 {
454
+ margin: 0;
455
+ font-size: 15px;
456
+ line-height: 1.2;
457
+ }
458
+ .workspace-toolbar-actions {
459
+ display: flex;
460
+ gap: 8px;
461
+ }
462
+ .workspace-toolbar-actions button,
463
+ .workspace-tabs button,
464
+ .workspace-widget-panel button,
465
+ .workspace-add-widget {
466
+ font: inherit;
467
+ }
468
+ .workspace-toolbar-actions button,
469
+ .workspace-tabs button {
470
+ min-height: 30px;
471
+ border: 1px solid #dedede;
472
+ border-radius: 6px;
473
+ background: #ffffff;
474
+ color: #4f4f4f;
475
+ padding: 0 10px;
476
+ }
477
+ .workspace-table,
478
+ .workspace-canvas {
479
+ border: 1px solid #e7e7e7;
480
+ border-radius: 8px;
481
+ background: #ffffff;
482
+ overflow: hidden;
483
+ }
484
+ .workspace-table {
485
+ margin-bottom: 14px;
486
+ }
487
+ .workspace-table-heading {
488
+ display: flex;
489
+ align-items: center;
490
+ gap: 8px;
491
+ border-bottom: 1px solid #ececec;
492
+ padding: 10px 12px;
493
+ }
494
+ .workspace-table-heading strong {
495
+ font-size: 13px;
496
+ }
497
+ .workspace-table-heading span {
498
+ color: #999;
499
+ font-size: 12px;
500
+ }
501
+ .workspace-table-row {
502
+ display: grid;
503
+ grid-template-columns: minmax(160px, 1.4fr) repeat(3, minmax(110px, 0.8fr));
504
+ align-items: center;
505
+ min-height: 34px;
506
+ border-bottom: 1px solid #f0f0f0;
507
+ }
508
+ .workspace-table-row:last-child {
509
+ border-bottom: 0;
510
+ }
511
+ .workspace-table-row span,
512
+ .workspace-table-row code {
513
+ min-width: 0;
514
+ border-right: 1px solid #f0f0f0;
515
+ color: #555;
516
+ font-size: 12px;
517
+ padding: 7px 10px;
518
+ }
519
+ .workspace-table-row span:last-child,
520
+ .workspace-table-row code:last-child {
521
+ border-right: 0;
522
+ }
523
+ .workspace-table-head span {
524
+ color: #929292;
525
+ font-weight: 600;
526
+ }
527
+ .workspace-table-row code {
528
+ border-radius: 0;
529
+ background: transparent;
530
+ font-size: 11px;
531
+ }
532
+ .workspace-tabs {
533
+ display: flex;
534
+ align-items: center;
535
+ gap: 2px;
536
+ border-bottom: 1px solid #ececec;
537
+ padding: 8px;
538
+ }
539
+ .workspace-tabs button {
540
+ border-color: transparent;
541
+ background: transparent;
542
+ }
543
+ .workspace-tabs button.active {
544
+ background: #f3f3f3;
545
+ color: #222;
546
+ }
547
+ .workspace-grid {
548
+ position: relative;
549
+ display: grid;
550
+ grid-template-columns: repeat(var(--workspace-columns), minmax(48px, 1fr));
551
+ grid-auto-rows: 52px;
552
+ gap: 8px;
553
+ min-height: 620px;
554
+ padding: 8px;
555
+ }
556
+ .workspace-grid-cell {
557
+ border: 1px solid #ededed;
558
+ border-radius: 7px;
559
+ background: #fdfdfd;
560
+ }
561
+ .workspace-add-widget {
562
+ grid-column: 1 / span 4;
563
+ grid-row: 1 / span 4;
564
+ z-index: 1;
565
+ display: grid;
566
+ place-items: center;
567
+ align-content: center;
568
+ gap: 8px;
569
+ border: 1px solid #e6e6e6;
570
+ border-radius: 7px;
571
+ background: #ffffff;
572
+ color: #3d3d3d;
573
+ cursor: pointer;
574
+ }
575
+ .workspace-add-widget small {
576
+ color: #979797;
577
+ }
578
+ .workspace-widget-icon {
579
+ width: 92px;
580
+ height: 68px;
581
+ display: grid;
582
+ place-items: center;
583
+ border: 1px solid #d8e7ee;
584
+ border-radius: 16px;
585
+ background: #edfaff;
586
+ transform: rotate(-30deg) skewX(18deg);
587
+ }
588
+ .workspace-widget-icon span {
589
+ width: 56px;
590
+ height: 38px;
591
+ border: 3px solid #277cad;
592
+ border-radius: 3px;
593
+ background: #b9ecff;
594
+ }
595
+ .workspace-widget-preview {
596
+ z-index: 2;
597
+ border: 1px solid #dedede;
598
+ border-radius: 7px;
599
+ background: #ffffff;
600
+ padding: 10px;
601
+ }
602
+ .workspace-widget-preview span {
603
+ color: #888;
604
+ font-size: 11px;
605
+ }
606
+ .workspace-widget-panel {
607
+ border-left: 1px solid #e8e8e8;
608
+ padding: 0 12px 16px;
609
+ }
610
+ .workspace-panel-title {
611
+ height: 48px;
612
+ display: flex;
613
+ align-items: center;
614
+ gap: 10px;
615
+ border-bottom: 1px solid #ececec;
616
+ }
617
+ .workspace-panel-title button {
618
+ width: 24px;
619
+ height: 24px;
620
+ border: 0;
621
+ border-radius: 5px;
622
+ background: #f1f1f1;
623
+ color: #888;
624
+ }
625
+ .workspace-panel-title strong {
626
+ font-size: 14px;
627
+ }
628
+ .workspace-panel-label {
629
+ margin: 14px 0 7px;
630
+ color: #999;
631
+ font-size: 11px;
632
+ font-weight: 700;
633
+ }
634
+ .workspace-widget-types {
635
+ display: grid;
636
+ gap: 2px;
637
+ }
638
+ .workspace-widget-types button {
639
+ display: flex;
640
+ align-items: center;
641
+ gap: 10px;
642
+ min-height: 34px;
643
+ border: 0;
644
+ border-radius: 5px;
645
+ background: transparent;
646
+ color: #666;
647
+ padding: 0 8px;
648
+ text-align: left;
649
+ }
650
+ .workspace-widget-types button:first-child,
651
+ .workspace-widget-types button:hover {
652
+ background: #f2f2f2;
653
+ }
654
+ .workspace-widget-types span {
655
+ width: 20px;
656
+ height: 20px;
657
+ display: grid;
658
+ place-items: center;
659
+ border: 1px solid #d8d8d8;
660
+ border-radius: 4px;
661
+ color: #777;
662
+ font-size: 11px;
663
+ }
664
+ .workspace-bindings {
665
+ border-top: 1px solid #ececec;
666
+ margin-top: 16px;
667
+ }
668
+ .workspace-bindings div {
669
+ display: flex;
670
+ justify-content: space-between;
671
+ gap: 8px;
672
+ align-items: center;
673
+ min-height: 30px;
674
+ color: #666;
675
+ font-size: 12px;
676
+ }
677
+ .workspace-bindings code {
678
+ color: #777;
679
+ background: #f4f4f4;
680
+ }
681
+
682
+ @media (max-width: 1080px) {
683
+ .workspace-builder {
684
+ grid-template-columns: 180px minmax(0, 1fr);
685
+ }
686
+ .workspace-widget-panel {
687
+ grid-column: 1 / -1;
688
+ border-left: 0;
689
+ border-top: 1px solid #e8e8e8;
690
+ }
691
+ }
692
+
693
+ @media (max-width: 720px) {
694
+ .workspace-builder {
695
+ grid-template-columns: 1fr;
696
+ }
697
+ .workspace-rail {
698
+ border-right: 0;
699
+ border-bottom: 1px solid #e8e8e8;
700
+ }
701
+ .workspace-table-row {
702
+ grid-template-columns: 1fr;
703
+ }
704
+ .workspace-table-head {
705
+ display: none;
706
+ }
707
+ .workspace-table-row span,
708
+ .workspace-table-row code {
709
+ border-right: 0;
710
+ }
711
+ .workspace-grid {
712
+ grid-template-columns: repeat(4, minmax(44px, 1fr));
713
+ }
714
+ .workspace-add-widget {
715
+ grid-column: 1 / -1;
716
+ }
717
+ }
@@ -0,0 +1,14 @@
1
+ import "./globals.css";
2
+ const metadata = {
3
+ title: "Growthub Workspace",
4
+ description: "Configurable governed workspace dashboard builder."
5
+ };
6
+ function RootLayout({ children }) {
7
+ return <html lang="en">
8
+ <body>{children}</body>
9
+ </html>;
10
+ }
11
+ export {
12
+ RootLayout as default,
13
+ metadata
14
+ };