@growthub/cli 0.9.3 → 0.9.5

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 (46) 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 +91 -0
  11. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +912 -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 +23 -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/app/workspace-builder.jsx +680 -0
  16. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/growthub.config.json +53 -0
  17. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/jsconfig.json +8 -0
  18. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/auth/index.js +21 -0
  19. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/env.js +28 -0
  20. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
  21. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +198 -0
  22. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/payments/index.js +13 -0
  23. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/index.js +13 -0
  24. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/postgres.js +16 -0
  25. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/provider-managed.js +16 -0
  26. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/qstash-kv.js +16 -0
  27. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +185 -0
  28. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/portal.js +150 -0
  29. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-config.js +232 -0
  30. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/next.config.js +10 -0
  31. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/package-lock.json +976 -0
  32. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/package.json +17 -0
  33. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/postcss.config.mjs +3 -0
  34. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/vercel.json +5 -0
  35. package/assets/worker-kits/growthub-custom-workspace-starter-v1/bundles/growthub-custom-workspace-starter-v1.json +13 -0
  36. package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/adapter-contracts.md +86 -0
  37. package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/vercel-serverless-deployment.md +46 -0
  38. package/assets/worker-kits/growthub-custom-workspace-starter-v1/growthub.config.json +49 -0
  39. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/check-self-improving-health.sh +60 -0
  40. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/promote-capability.mjs +37 -0
  41. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/propose-capability.mjs +38 -0
  42. package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +45 -0
  43. package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/deployment-handoff.md +61 -0
  44. package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/supabase-setup-plan.md +26 -0
  45. package/dist/index.js +2903 -1596
  46. package/package.json +2 -1
@@ -0,0 +1,912 @@
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-template-rows: repeat(var(--workspace-rows), 52px);
552
+ grid-auto-rows: 52px;
553
+ gap: 8px;
554
+ padding: 8px;
555
+ }
556
+ .workspace-grid-cell {
557
+ appearance: none;
558
+ border: 1px solid #ededed;
559
+ border-radius: 7px;
560
+ background: #fdfdfd;
561
+ cursor: crosshair;
562
+ padding: 0;
563
+ }
564
+ .workspace-grid-cell:disabled {
565
+ pointer-events: none;
566
+ opacity: 1;
567
+ }
568
+ .workspace-add-widget {
569
+ z-index: 1;
570
+ display: grid;
571
+ place-items: center;
572
+ align-content: center;
573
+ gap: 8px;
574
+ border: 1px solid #e6e6e6;
575
+ border-radius: 7px;
576
+ background: #ffffff;
577
+ color: #3d3d3d;
578
+ cursor: pointer;
579
+ }
580
+ .workspace-add-widget.selecting {
581
+ border-color: #7aa2ff;
582
+ background: rgba(122, 162, 255, 0.16);
583
+ box-shadow: inset 0 0 0 1px rgba(84, 125, 255, 0.35);
584
+ }
585
+ .workspace-add-widget small {
586
+ color: #979797;
587
+ }
588
+ .workspace-widget-icon {
589
+ width: 92px;
590
+ height: 68px;
591
+ display: grid;
592
+ place-items: center;
593
+ border: 1px solid #d8e7ee;
594
+ border-radius: 16px;
595
+ background: #edfaff;
596
+ transform: rotate(-30deg) skewX(18deg);
597
+ }
598
+ .workspace-widget-icon span {
599
+ width: 56px;
600
+ height: 38px;
601
+ border: 3px solid #277cad;
602
+ border-radius: 3px;
603
+ background: #b9ecff;
604
+ }
605
+ .workspace-widget-preview {
606
+ position: relative;
607
+ z-index: 2;
608
+ border: 1px solid #dedede;
609
+ border-radius: 7px;
610
+ background: #ffffff;
611
+ padding: 12px;
612
+ cursor: pointer;
613
+ overflow: hidden;
614
+ }
615
+ .workspace-widget-preview.selected {
616
+ border-color: #3f68ff;
617
+ box-shadow: inset 0 0 0 1px rgba(63, 104, 255, 0.45);
618
+ }
619
+ .workspace-resize-handle {
620
+ position: absolute;
621
+ z-index: 3;
622
+ width: 13px;
623
+ height: 13px;
624
+ border: 1px solid #3f68ff;
625
+ border-radius: 4px;
626
+ background: #ffffff;
627
+ box-shadow: 0 1px 3px rgba(63, 104, 255, 0.22);
628
+ padding: 0;
629
+ }
630
+ .workspace-resize-handle.nw {
631
+ top: -6px;
632
+ left: -6px;
633
+ cursor: nwse-resize;
634
+ }
635
+ .workspace-resize-handle.ne {
636
+ top: -6px;
637
+ right: -6px;
638
+ cursor: nesw-resize;
639
+ }
640
+ .workspace-resize-handle.sw {
641
+ bottom: -6px;
642
+ left: -6px;
643
+ cursor: nesw-resize;
644
+ }
645
+ .workspace-resize-handle.se {
646
+ right: -6px;
647
+ bottom: -6px;
648
+ cursor: nwse-resize;
649
+ }
650
+ .workspace-widget-preview-title {
651
+ display: flex;
652
+ align-items: center;
653
+ gap: 8px;
654
+ min-height: 22px;
655
+ }
656
+ .workspace-widget-preview-title span,
657
+ .workspace-widget-preview-title button {
658
+ color: #888;
659
+ font-size: 11px;
660
+ }
661
+ .workspace-widget-preview-title strong {
662
+ min-width: 0;
663
+ flex: 1;
664
+ overflow: hidden;
665
+ color: #333;
666
+ font-size: 13px;
667
+ text-overflow: ellipsis;
668
+ white-space: nowrap;
669
+ }
670
+ .workspace-widget-preview-title button {
671
+ width: 22px;
672
+ height: 22px;
673
+ border: 0;
674
+ border-radius: 5px;
675
+ background: transparent;
676
+ }
677
+ .workspace-widget-preview:not(.selected) .workspace-widget-preview-title button {
678
+ visibility: hidden;
679
+ }
680
+ .workspace-view-table {
681
+ margin-top: 10px;
682
+ border: 1px solid #eeeeee;
683
+ border-radius: 4px;
684
+ overflow: hidden;
685
+ color: #555;
686
+ font-size: 12px;
687
+ }
688
+ .workspace-view-table div {
689
+ display: grid;
690
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
691
+ min-height: 25px;
692
+ border-bottom: 1px solid #eeeeee;
693
+ }
694
+ .workspace-view-table span {
695
+ min-width: 0;
696
+ overflow: hidden;
697
+ padding: 5px 8px;
698
+ text-overflow: ellipsis;
699
+ white-space: nowrap;
700
+ }
701
+ .workspace-view-table span + span {
702
+ border-left: 1px solid #eeeeee;
703
+ }
704
+ .workspace-view-table footer {
705
+ padding: 7px 8px;
706
+ color: #999;
707
+ }
708
+ .workspace-iframe-preview {
709
+ height: calc(100% - 34px);
710
+ min-height: 90px;
711
+ display: grid;
712
+ place-items: center;
713
+ margin-top: 10px;
714
+ border-radius: 7px;
715
+ background: #fdfdfd;
716
+ color: #d54040;
717
+ font-size: 12px;
718
+ }
719
+ .workspace-rich-text-preview {
720
+ margin: 18px 10px 0;
721
+ color: #444;
722
+ font-size: 13px;
723
+ line-height: 1.5;
724
+ }
725
+ .workspace-chart-preview {
726
+ height: calc(100% - 42px);
727
+ min-height: 96px;
728
+ display: flex;
729
+ align-items: end;
730
+ gap: 8px;
731
+ padding: 16px 10px 6px;
732
+ }
733
+ .workspace-chart-preview span {
734
+ flex: 1;
735
+ border-radius: 5px 5px 0 0;
736
+ background: #d9e4ff;
737
+ }
738
+ .workspace-widget-panel {
739
+ border-left: 1px solid #e8e8e8;
740
+ padding: 0 12px 16px;
741
+ }
742
+ .workspace-panel-title {
743
+ height: 48px;
744
+ display: flex;
745
+ align-items: center;
746
+ gap: 10px;
747
+ border-bottom: 1px solid #ececec;
748
+ }
749
+ .workspace-panel-title button,
750
+ .workspace-panel-title > span {
751
+ width: 24px;
752
+ height: 24px;
753
+ display: grid;
754
+ place-items: center;
755
+ border: 0;
756
+ border-radius: 5px;
757
+ background: #f1f1f1;
758
+ color: #888;
759
+ }
760
+ .workspace-panel-title strong {
761
+ min-width: 0;
762
+ font-size: 14px;
763
+ overflow: hidden;
764
+ text-overflow: ellipsis;
765
+ white-space: nowrap;
766
+ }
767
+ .workspace-panel-title em {
768
+ color: #999;
769
+ font-size: 12px;
770
+ font-style: normal;
771
+ }
772
+ .workspace-panel-label {
773
+ margin: 14px 0 7px;
774
+ color: #999;
775
+ font-size: 11px;
776
+ font-weight: 700;
777
+ }
778
+ .workspace-widget-types {
779
+ display: grid;
780
+ gap: 2px;
781
+ }
782
+ .workspace-widget-types button {
783
+ display: flex;
784
+ align-items: center;
785
+ gap: 10px;
786
+ min-height: 34px;
787
+ border: 0;
788
+ border-radius: 5px;
789
+ background: transparent;
790
+ color: #666;
791
+ padding: 0 8px;
792
+ text-align: left;
793
+ }
794
+ .workspace-widget-types button:first-child,
795
+ .workspace-widget-types button:hover {
796
+ background: #f2f2f2;
797
+ }
798
+ .workspace-widget-types span {
799
+ width: 20px;
800
+ height: 20px;
801
+ display: grid;
802
+ place-items: center;
803
+ border: 1px solid #d8d8d8;
804
+ border-radius: 4px;
805
+ color: #777;
806
+ font-size: 11px;
807
+ }
808
+ .workspace-bindings {
809
+ border-top: 1px solid #ececec;
810
+ margin-top: 16px;
811
+ }
812
+ .workspace-bindings div {
813
+ display: flex;
814
+ justify-content: space-between;
815
+ gap: 8px;
816
+ align-items: center;
817
+ min-height: 30px;
818
+ color: #666;
819
+ font-size: 12px;
820
+ }
821
+ .workspace-bindings code {
822
+ color: #777;
823
+ background: #f4f4f4;
824
+ }
825
+ .workspace-widget-settings {
826
+ display: grid;
827
+ gap: 14px;
828
+ padding-top: 14px;
829
+ }
830
+ .workspace-widget-settings label {
831
+ display: grid;
832
+ gap: 6px;
833
+ }
834
+ .workspace-widget-settings label span {
835
+ color: #999;
836
+ font-size: 11px;
837
+ font-weight: 700;
838
+ }
839
+ .workspace-widget-settings input,
840
+ .workspace-widget-settings textarea {
841
+ width: 100%;
842
+ box-sizing: border-box;
843
+ border: 1px solid #e5e5e5;
844
+ border-radius: 6px;
845
+ background: #fafafa;
846
+ color: #444;
847
+ font: inherit;
848
+ padding: 8px 9px;
849
+ }
850
+ .workspace-widget-settings textarea {
851
+ min-height: 120px;
852
+ resize: vertical;
853
+ }
854
+ .workspace-settings-list {
855
+ display: grid;
856
+ gap: 2px;
857
+ }
858
+ .workspace-settings-list div {
859
+ display: flex;
860
+ align-items: center;
861
+ justify-content: space-between;
862
+ min-height: 32px;
863
+ border-radius: 5px;
864
+ color: #666;
865
+ font-size: 13px;
866
+ padding: 0 8px;
867
+ }
868
+ .workspace-settings-list div:nth-child(3),
869
+ .workspace-settings-list div:hover {
870
+ background: #f3f3f3;
871
+ }
872
+ .workspace-settings-list code {
873
+ color: #aaa;
874
+ background: transparent;
875
+ }
876
+
877
+ @media (max-width: 1080px) {
878
+ .workspace-builder {
879
+ grid-template-columns: 180px minmax(0, 1fr);
880
+ }
881
+ .workspace-widget-panel {
882
+ grid-column: 1 / -1;
883
+ border-left: 0;
884
+ border-top: 1px solid #e8e8e8;
885
+ }
886
+ }
887
+
888
+ @media (max-width: 720px) {
889
+ .workspace-builder {
890
+ grid-template-columns: 1fr;
891
+ }
892
+ .workspace-rail {
893
+ border-right: 0;
894
+ border-bottom: 1px solid #e8e8e8;
895
+ }
896
+ .workspace-table-row {
897
+ grid-template-columns: 1fr;
898
+ }
899
+ .workspace-table-head {
900
+ display: none;
901
+ }
902
+ .workspace-table-row span,
903
+ .workspace-table-row code {
904
+ border-right: 0;
905
+ }
906
+ .workspace-grid {
907
+ grid-template-columns: repeat(4, minmax(44px, 1fr));
908
+ }
909
+ .workspace-add-widget {
910
+ grid-column: 1 / -1;
911
+ }
912
+ }