@growthub/cli 0.13.6 → 0.13.8
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/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/helper/query/route.js +98 -34
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/metadata-graph/route.js +1 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/swarm-condition/route.js +106 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/components/WorkspaceActivationPanel.jsx +189 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/components/WorkspaceContributionGraph.jsx +119 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/components/WorkspaceHelperSetupModal.jsx +357 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/components/WorkspaceLensPanel.jsx +488 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/components/WorkspaceLensWalkthrough.jsx +69 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/HelperSidecar.jsx +37 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/NangoConnectionPanel.jsx +37 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +437 -26
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workflows/WorkflowSurface.jsx +44 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +592 -41
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-lens/page.jsx +76 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-rail.jsx +148 -4
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-activation.js +1559 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-data-model.js +3 -3
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-helper-apply.js +24 -8
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-metadata-store.js +82 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +8 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/seeded-configs/project-management.config.json +4 -4
- package/dist/index.js +5224 -5225
- package/package.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
-
import
|
|
4
|
+
import Link from "next/link";
|
|
5
|
+
import { ArrowRight, CheckCircle, ExternalLink, Loader2, RefreshCw, ShieldCheck, XCircle } from "lucide-react";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* NangoConnectionPanel — interactive sidecar for an api-registry row whose
|
|
@@ -114,7 +115,7 @@ function StatusBadge({ status, label }) {
|
|
|
114
115
|
);
|
|
115
116
|
}
|
|
116
117
|
|
|
117
|
-
export function NangoConnectionPanel({ row, disabled, onUpdateRow }) {
|
|
118
|
+
export function NangoConnectionPanel({ row, disabled, onUpdateRow, templateContext }) {
|
|
118
119
|
const initialProviderConfigKey = useMemo(() => deriveProviderConfigKey(row), [row]);
|
|
119
120
|
const initialConnectionId = useMemo(() => deriveDefaultConnectionId(row), [row]);
|
|
120
121
|
const initialStatus = useMemo(() => deriveInitialStatus(row), [row]);
|
|
@@ -491,6 +492,40 @@ export function NangoConnectionPanel({ row, disabled, onUpdateRow }) {
|
|
|
491
492
|
</button>
|
|
492
493
|
) : null}
|
|
493
494
|
</div>
|
|
495
|
+
|
|
496
|
+
{/*
|
|
497
|
+
* Template-aware affordances. When this row was scaffolded as part
|
|
498
|
+
* of a workspace template (project-management today), surface a
|
|
499
|
+
* "next step" hint linking back to the activation checklist or the
|
|
500
|
+
* seeded workflow. Other rows render no template context at all.
|
|
501
|
+
*/}
|
|
502
|
+
{templateContext && (templateContext.nextHref || templateContext.backHref) ? (
|
|
503
|
+
<div
|
|
504
|
+
className={
|
|
505
|
+
"workspace-template-context-banner"
|
|
506
|
+
+ ((statusKind === "connected" || persistedStatus === "connected") ? "" : " is-warn")
|
|
507
|
+
}
|
|
508
|
+
role="note"
|
|
509
|
+
>
|
|
510
|
+
<span>
|
|
511
|
+
{(statusKind === "connected" || persistedStatus === "connected")
|
|
512
|
+
? (templateContext.nextLabel || "Next: run the seeded workflow.")
|
|
513
|
+
: (templateContext.pendingLabel || "Finish OAuth above, then continue setup.")}
|
|
514
|
+
</span>
|
|
515
|
+
{templateContext.backHref ? (
|
|
516
|
+
<Link href={templateContext.backHref} className="workspace-template-context-link">
|
|
517
|
+
<span>Back to setup checklist</span>
|
|
518
|
+
<ArrowRight size={12} aria-hidden="true" />
|
|
519
|
+
</Link>
|
|
520
|
+
) : null}
|
|
521
|
+
{templateContext.nextHref ? (
|
|
522
|
+
<Link href={templateContext.nextHref} className="workspace-template-context-link">
|
|
523
|
+
<span>{templateContext.nextCta || "Open workflow"}</span>
|
|
524
|
+
<ArrowRight size={12} aria-hidden="true" />
|
|
525
|
+
</Link>
|
|
526
|
+
) : null}
|
|
527
|
+
</div>
|
|
528
|
+
) : null}
|
|
494
529
|
</section>
|
|
495
530
|
);
|
|
496
531
|
}
|
package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css
CHANGED
|
@@ -445,46 +445,53 @@ body.workspace-rail-collapsed .workspace-builder.dm-workflow-page {
|
|
|
445
445
|
.workspace-rail.is-collapsed {
|
|
446
446
|
padding: 18px 10px;
|
|
447
447
|
align-items: center;
|
|
448
|
-
gap:
|
|
448
|
+
gap: 8px;
|
|
449
449
|
}
|
|
450
|
+
/* Collapsed rail = a single clean icon column. Every primary action stays
|
|
451
|
+
tracked as an icon (toggle, home, search, chat, builder, lens, management,
|
|
452
|
+
settings); only labels, folders, chat list, brand, helper pill, activation
|
|
453
|
+
panel, and the duplicate top-bar gear are hidden. Native title attributes
|
|
454
|
+
provide the hover tooltip of each item's name. */
|
|
450
455
|
.workspace-rail.is-collapsed .workspace-rail-brand-button,
|
|
451
456
|
.workspace-rail.is-collapsed .workspace-rail-folders,
|
|
452
|
-
.workspace-rail.is-collapsed .workspace-nav,
|
|
453
457
|
.workspace-rail.is-collapsed .workspace-rail-chat,
|
|
454
458
|
.workspace-rail.is-collapsed .workspace-rail-status,
|
|
455
|
-
.workspace-rail.is-collapsed .workspace-rail-helper-pill
|
|
459
|
+
.workspace-rail.is-collapsed .workspace-rail-helper-pill,
|
|
460
|
+
.workspace-rail.is-collapsed .workspace-rail-activation-slot,
|
|
461
|
+
.workspace-rail.is-collapsed .workspace-rail-icon-btn[aria-label="Workspace settings"],
|
|
462
|
+
.workspace-rail.is-collapsed .workspace-nav-label {
|
|
456
463
|
display: none;
|
|
457
464
|
}
|
|
458
|
-
.workspace-rail.is-collapsed .workspace-rail-topbar
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}
|
|
463
|
-
.workspace-rail.is-collapsed .workspace-rail-topbar-actions {
|
|
465
|
+
.workspace-rail.is-collapsed .workspace-rail-topbar,
|
|
466
|
+
.workspace-rail.is-collapsed .workspace-rail-topbar-actions,
|
|
467
|
+
.workspace-rail.is-collapsed .workspace-rail-tabbar,
|
|
468
|
+
.workspace-rail.is-collapsed .workspace-rail-tabs {
|
|
464
469
|
display: contents;
|
|
465
470
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
}
|
|
469
|
-
.workspace-rail.is-collapsed .workspace-rail-
|
|
470
|
-
|
|
471
|
-
}
|
|
472
|
-
.workspace-rail.is-collapsed .workspace-
|
|
473
|
-
order: 4;
|
|
474
|
-
}
|
|
471
|
+
/* Vertical order: toggle · home · search · chat · [nav: builder, lens,
|
|
472
|
+
management, settings]. */
|
|
473
|
+
.workspace-rail.is-collapsed .workspace-rail-icon-btn[aria-pressed="true"] { order: 1; }
|
|
474
|
+
.workspace-rail.is-collapsed .workspace-rail-tab[aria-label="Home"] { order: 2; }
|
|
475
|
+
.workspace-rail.is-collapsed .workspace-rail-icon-btn[data-rail-search] { order: 3; }
|
|
476
|
+
.workspace-rail.is-collapsed .workspace-rail-tab[aria-label="Helper conversations"] { order: 4; }
|
|
477
|
+
.workspace-rail.is-collapsed .workspace-nav { order: 5; }
|
|
475
478
|
.workspace-rail.is-collapsed .workspace-rail-icon-btn[aria-pressed="true"] svg {
|
|
476
479
|
transform: rotate(180deg);
|
|
477
480
|
}
|
|
478
|
-
.workspace-rail.is-collapsed .workspace-
|
|
481
|
+
.workspace-rail.is-collapsed .workspace-nav {
|
|
479
482
|
display: flex;
|
|
480
|
-
justify-content: center;
|
|
481
|
-
width: 100%;
|
|
482
|
-
order: 2;
|
|
483
|
-
}
|
|
484
|
-
.workspace-rail.is-collapsed .workspace-rail-tabs {
|
|
485
483
|
flex-direction: column;
|
|
484
|
+
align-items: center;
|
|
486
485
|
gap: 8px;
|
|
486
|
+
width: 100%;
|
|
487
|
+
}
|
|
488
|
+
.workspace-rail.is-collapsed .workspace-nav a,
|
|
489
|
+
.workspace-rail.is-collapsed .workspace-nav .workspace-nav-button {
|
|
490
|
+
justify-content: center;
|
|
491
|
+
gap: 0;
|
|
487
492
|
padding: 0;
|
|
493
|
+
width: 34px;
|
|
494
|
+
height: 34px;
|
|
488
495
|
}
|
|
489
496
|
.workspace-rail.is-collapsed .workspace-rail-tab,
|
|
490
497
|
.workspace-rail.is-collapsed .workspace-rail-icon-btn {
|
|
@@ -525,12 +532,31 @@ body.workspace-rail-collapsed .workspace-builder.dm-workflow-page {
|
|
|
525
532
|
margin-top: 2px;
|
|
526
533
|
}
|
|
527
534
|
.workspace-nav a,
|
|
528
|
-
.workspace-nav-static
|
|
535
|
+
.workspace-nav-static,
|
|
536
|
+
.workspace-nav .workspace-nav-button {
|
|
537
|
+
display: flex;
|
|
538
|
+
align-items: center;
|
|
539
|
+
gap: 10px;
|
|
529
540
|
border-radius: 6px;
|
|
530
541
|
color: #686868;
|
|
531
542
|
font-size: 13px;
|
|
532
543
|
padding: 8px 9px;
|
|
533
544
|
text-decoration: none;
|
|
545
|
+
width: 100%;
|
|
546
|
+
}
|
|
547
|
+
.workspace-nav a > svg,
|
|
548
|
+
.workspace-nav .workspace-nav-button > svg {
|
|
549
|
+
flex-shrink: 0;
|
|
550
|
+
color: #9a9a9a;
|
|
551
|
+
}
|
|
552
|
+
.workspace-nav a.active > svg,
|
|
553
|
+
.workspace-nav .workspace-nav-button.active > svg {
|
|
554
|
+
color: #2c2c2c;
|
|
555
|
+
}
|
|
556
|
+
.workspace-nav-label {
|
|
557
|
+
white-space: nowrap;
|
|
558
|
+
overflow: hidden;
|
|
559
|
+
text-overflow: ellipsis;
|
|
534
560
|
}
|
|
535
561
|
.workspace-nav-static {
|
|
536
562
|
cursor: default;
|
|
@@ -559,7 +585,10 @@ body.workspace-rail-collapsed .workspace-builder.dm-workflow-page {
|
|
|
559
585
|
padding: 16px;
|
|
560
586
|
display: flex;
|
|
561
587
|
flex-direction: column;
|
|
562
|
-
overflow:
|
|
588
|
+
overflow-y: auto;
|
|
589
|
+
overflow-x: hidden;
|
|
590
|
+
scrollbar-gutter: stable;
|
|
591
|
+
overscroll-behavior: contain;
|
|
563
592
|
}
|
|
564
593
|
.workspace-toolbar {
|
|
565
594
|
min-height: 48px;
|
|
@@ -639,6 +668,54 @@ body.workspace-rail-collapsed .workspace-builder.dm-workflow-page {
|
|
|
639
668
|
.workspace-tabs > button svg {
|
|
640
669
|
flex: 0 0 auto;
|
|
641
670
|
}
|
|
671
|
+
.workspace-toolbar-actions > .workspace-finish-setup-control {
|
|
672
|
+
gap: 0;
|
|
673
|
+
padding: 0;
|
|
674
|
+
overflow: hidden;
|
|
675
|
+
}
|
|
676
|
+
.workspace-finish-setup-trigger,
|
|
677
|
+
.workspace-finish-setup-dismiss {
|
|
678
|
+
min-height: 28px;
|
|
679
|
+
border: 0;
|
|
680
|
+
background: transparent;
|
|
681
|
+
color: inherit;
|
|
682
|
+
display: inline-flex;
|
|
683
|
+
align-items: center;
|
|
684
|
+
justify-content: center;
|
|
685
|
+
gap: 6px;
|
|
686
|
+
padding: 0 10px;
|
|
687
|
+
cursor: pointer;
|
|
688
|
+
}
|
|
689
|
+
.workspace-finish-setup-trigger:hover,
|
|
690
|
+
.workspace-finish-setup-dismiss:hover {
|
|
691
|
+
background: #fafafa;
|
|
692
|
+
}
|
|
693
|
+
.workspace-finish-setup-control.is-complete {
|
|
694
|
+
border-color: #bbf7d0;
|
|
695
|
+
color: #047857;
|
|
696
|
+
background: #f0fdf4;
|
|
697
|
+
}
|
|
698
|
+
.workspace-finish-setup-control.is-complete .workspace-finish-setup-trigger:hover,
|
|
699
|
+
.workspace-finish-setup-control.is-complete .workspace-finish-setup-dismiss:hover {
|
|
700
|
+
background: #dcfce7;
|
|
701
|
+
}
|
|
702
|
+
.workspace-finish-setup-dismiss {
|
|
703
|
+
width: 30px;
|
|
704
|
+
padding: 0;
|
|
705
|
+
border-left: 1px solid #bbf7d0;
|
|
706
|
+
}
|
|
707
|
+
.workspace-finish-setup-dismiss-x {
|
|
708
|
+
display: none;
|
|
709
|
+
}
|
|
710
|
+
.workspace-finish-setup-dismiss:hover {
|
|
711
|
+
color: #b91c1c;
|
|
712
|
+
}
|
|
713
|
+
.workspace-finish-setup-dismiss:hover .workspace-finish-setup-dismiss-check {
|
|
714
|
+
display: none;
|
|
715
|
+
}
|
|
716
|
+
.workspace-finish-setup-dismiss:hover .workspace-finish-setup-dismiss-x {
|
|
717
|
+
display: block;
|
|
718
|
+
}
|
|
642
719
|
.workspace-table,
|
|
643
720
|
.workspace-canvas {
|
|
644
721
|
border: 1px solid #e7e7e7;
|
|
@@ -4120,6 +4197,68 @@ body.workspace-rail-collapsed .workspace-builder.dm-workflow-page {
|
|
|
4120
4197
|
.workspace-chart-type-tabs button.active em {
|
|
4121
4198
|
color: #075985;
|
|
4122
4199
|
}
|
|
4200
|
+
.workspace-table-view-tabs {
|
|
4201
|
+
grid-template-columns: repeat(4, 1fr);
|
|
4202
|
+
}
|
|
4203
|
+
.workspace-table-transform-preview {
|
|
4204
|
+
display: grid;
|
|
4205
|
+
gap: 8px;
|
|
4206
|
+
min-height: 88px;
|
|
4207
|
+
margin-top: 10px;
|
|
4208
|
+
color: #4b5563;
|
|
4209
|
+
font-size: 11px;
|
|
4210
|
+
}
|
|
4211
|
+
.workspace-table-transform-preview.is-board,
|
|
4212
|
+
.workspace-table-transform-preview.is-calendar {
|
|
4213
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
4214
|
+
}
|
|
4215
|
+
.workspace-table-transform-preview.is-calendar {
|
|
4216
|
+
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
4217
|
+
}
|
|
4218
|
+
.workspace-table-transform-preview section {
|
|
4219
|
+
min-width: 0;
|
|
4220
|
+
border: 1px solid #eeeeee;
|
|
4221
|
+
border-radius: 5px;
|
|
4222
|
+
background: #fafafa;
|
|
4223
|
+
padding: 6px;
|
|
4224
|
+
}
|
|
4225
|
+
.workspace-table-transform-preview strong,
|
|
4226
|
+
.workspace-table-transform-preview span,
|
|
4227
|
+
.workspace-table-transform-preview em {
|
|
4228
|
+
display: block;
|
|
4229
|
+
min-width: 0;
|
|
4230
|
+
overflow: hidden;
|
|
4231
|
+
text-overflow: ellipsis;
|
|
4232
|
+
white-space: nowrap;
|
|
4233
|
+
}
|
|
4234
|
+
.workspace-table-transform-preview strong {
|
|
4235
|
+
color: #111827;
|
|
4236
|
+
font-size: 11px;
|
|
4237
|
+
}
|
|
4238
|
+
.workspace-table-transform-preview span {
|
|
4239
|
+
margin-top: 5px;
|
|
4240
|
+
border-radius: 4px;
|
|
4241
|
+
background: #fff;
|
|
4242
|
+
padding: 5px 6px;
|
|
4243
|
+
}
|
|
4244
|
+
.workspace-table-transform-preview div {
|
|
4245
|
+
display: grid;
|
|
4246
|
+
grid-template-columns: minmax(64px, 1fr) 2fr minmax(32px, auto);
|
|
4247
|
+
align-items: center;
|
|
4248
|
+
gap: 8px;
|
|
4249
|
+
}
|
|
4250
|
+
.workspace-table-transform-preview i {
|
|
4251
|
+
display: block;
|
|
4252
|
+
width: var(--width, 42%);
|
|
4253
|
+
height: 9px;
|
|
4254
|
+
margin-left: var(--offset, 0);
|
|
4255
|
+
border-radius: 999px;
|
|
4256
|
+
background: #93c5fd;
|
|
4257
|
+
}
|
|
4258
|
+
.workspace-table-transform-preview em {
|
|
4259
|
+
color: #9ca3af;
|
|
4260
|
+
font-style: normal;
|
|
4261
|
+
}
|
|
4123
4262
|
.workspace-axis-range {
|
|
4124
4263
|
display: grid;
|
|
4125
4264
|
grid-template-columns: 1fr 1fr;
|
|
@@ -8501,3 +8640,275 @@ body.workspace-rail-collapsed .workspace-builder.dm-workflow-page {
|
|
|
8501
8640
|
.dm-swarm-phase { border: 1px solid #edf0f3; border-radius: 4px; padding: 6px 8px; font-size: 11px; }
|
|
8502
8641
|
.dm-swarm-phase summary { cursor: pointer; color: #6b7280; font-weight: 500; }
|
|
8503
8642
|
.dm-swarm-phase pre { margin: 6px 0 0; font-size: 11px; white-space: pre-wrap; color: #111827; max-height: 240px; overflow: auto; }
|
|
8643
|
+
|
|
8644
|
+
/* Customer Activation Layer V1 — workspace activation panel */
|
|
8645
|
+
.workspace-activation-panel { border: 1px solid #e5e7eb; border-radius: 10px; background: #ffffff; padding: 18px 20px; margin: 0 0 20px; display: flex; flex-direction: column; gap: 16px; }
|
|
8646
|
+
.workspace-activation-panel.is-complete { background: linear-gradient(180deg, #f0fdf4 0%, #ffffff 80%); border-color: #bbf7d0; }
|
|
8647
|
+
.workspace-activation-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap; }
|
|
8648
|
+
.workspace-activation-head-text { display: flex; flex-direction: column; gap: 4px; flex: 1 1 320px; min-width: 0; }
|
|
8649
|
+
.workspace-activation-eyebrow { margin: 0; font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: #6b7280; font-weight: 600; }
|
|
8650
|
+
.workspace-activation-headline { margin: 0; font-size: 18px; font-weight: 600; color: #111827; line-height: 1.3; }
|
|
8651
|
+
.workspace-activation-subheadline { margin: 0; font-size: 13px; color: #4b5563; }
|
|
8652
|
+
.workspace-activation-progress { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; min-width: 120px; }
|
|
8653
|
+
.workspace-activation-progress-value { font-size: 11px; font-weight: 600; color: #475569; }
|
|
8654
|
+
.workspace-activation-progress-bar { display: block; width: 120px; height: 6px; background: #f1f5f9; border-radius: 999px; overflow: hidden; }
|
|
8655
|
+
.workspace-activation-progress-fill { display: block; height: 100%; background: #3b82f6; transition: width 200ms ease; }
|
|
8656
|
+
.workspace-activation-panel.is-complete .workspace-activation-progress-fill { background: #16a34a; }
|
|
8657
|
+
.workspace-activation-steps { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
8658
|
+
.workspace-activation-step { display: flex; align-items: flex-start; gap: 12px; padding: 12px 14px; border: 1px solid #edf0f3; border-radius: 8px; background: #fbfcfd; transition: border-color 120ms ease, background 120ms ease; }
|
|
8659
|
+
.workspace-activation-step.is-next { border-color: #3b82f6; background: #eff6ff; }
|
|
8660
|
+
.workspace-activation-step.is-complete { background: #f0fdf4; border-color: #bbf7d0; }
|
|
8661
|
+
.workspace-activation-step.is-blocked { background: #fffbeb; border-color: #fde68a; }
|
|
8662
|
+
.workspace-activation-step.is-optional { opacity: 0.85; }
|
|
8663
|
+
.workspace-activation-step-status { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 999px; background: #ffffff; border: 1px solid #cbd5f5; color: #3b82f6; flex-shrink: 0; }
|
|
8664
|
+
.workspace-activation-step.is-complete .workspace-activation-step-status { background: #16a34a; border-color: #16a34a; color: #ffffff; }
|
|
8665
|
+
.workspace-activation-step.is-blocked .workspace-activation-step-status { background: #fef3c7; border-color: #f59e0b; color: #b45309; }
|
|
8666
|
+
.workspace-activation-step.is-optional .workspace-activation-step-status { background: #f5f3ff; border-color: #c4b5fd; color: #7c3aed; }
|
|
8667
|
+
.workspace-activation-step-body { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 0; }
|
|
8668
|
+
.workspace-activation-step-titlebar { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
|
|
8669
|
+
.workspace-activation-step-title { margin: 0; font-size: 13px; font-weight: 600; color: #111827; }
|
|
8670
|
+
.workspace-activation-step-badge { font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; padding: 1px 6px; border-radius: 999px; background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
|
|
8671
|
+
.workspace-activation-step-badge.is-complete { background: #ecfdf5; color: #047857; border-color: #a7f3d0; }
|
|
8672
|
+
.workspace-activation-step-badge.is-blocked { background: #fef3c7; color: #b45309; border-color: #fde68a; }
|
|
8673
|
+
.workspace-activation-step-badge.is-optional { background: #f5f3ff; color: #6d28d9; border-color: #ddd6fe; }
|
|
8674
|
+
.workspace-activation-step-description { margin: 0; font-size: 12px; color: #475569; line-height: 1.5; }
|
|
8675
|
+
.workspace-activation-step-hint { display: inline-flex; align-items: flex-start; gap: 6px; margin: 0; font-size: 11px; color: #6b7280; line-height: 1.45; }
|
|
8676
|
+
.workspace-activation-step-hint > svg { margin-top: 2px; flex-shrink: 0; }
|
|
8677
|
+
.workspace-activation-step-cta { display: inline-flex; align-items: center; gap: 4px; align-self: flex-start; font-size: 12px; color: #1d4ed8; text-decoration: none; padding: 4px 0; }
|
|
8678
|
+
.workspace-activation-step-cta:hover { text-decoration: underline; }
|
|
8679
|
+
.workspace-activation-step-cta.is-primary { background: #3b82f6; color: #ffffff; border-radius: 6px; padding: 4px 10px; }
|
|
8680
|
+
.workspace-activation-step-cta.is-primary:hover { background: #2563eb; text-decoration: none; }
|
|
8681
|
+
.workspace-activation-helper-cta { display: flex; justify-content: flex-end; }
|
|
8682
|
+
.workspace-activation-helper-btn { display: inline-flex; align-items: center; gap: 6px; background: transparent; border: 1px dashed #c7d2fe; color: #4338ca; font-size: 12px; padding: 6px 10px; border-radius: 6px; cursor: pointer; }
|
|
8683
|
+
.workspace-activation-helper-btn:hover { background: #eef2ff; }
|
|
8684
|
+
|
|
8685
|
+
/* Activation → Workspace Lens handoff teaser (shown once setup completes). */
|
|
8686
|
+
.workspace-activation-lens-teaser { margin-top: 14px; border-top: 1px solid #eef0f2; padding-top: 12px; display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
|
|
8687
|
+
.workspace-activation-lens-teaser-text { font-size: 12px; color: #4b5563; line-height: 1.45; }
|
|
8688
|
+
.workspace-activation-lens-teaser-link { font-size: 12px; font-weight: 600; color: #374151; text-decoration: none; white-space: nowrap; }
|
|
8689
|
+
.workspace-activation-lens-teaser-link:hover { text-decoration: underline; }
|
|
8690
|
+
|
|
8691
|
+
/* Locked rail nav affordance (Workspace Lens before setup completes). */
|
|
8692
|
+
.workspace-nav-button.is-locked { opacity: 0.45; cursor: default; }
|
|
8693
|
+
|
|
8694
|
+
/* ── Workspace Lens — post-activation operating surface ─────────────────────
|
|
8695
|
+
Neutral, calm, aggregate-first. No semantic color overload, no icon spam. */
|
|
8696
|
+
body.workspace-rail-collapsed .workspace-builder.workspace-lens-page,
|
|
8697
|
+
.workspace-builder.workspace-lens-page { grid-template-columns: var(--workspace-rail-width) minmax(0, 1fr); height: 100vh; overflow: hidden; }
|
|
8698
|
+
.workspace-lens-surface { width: 100%; padding: 0; background: #f7f7f8; overflow-y: auto; overflow-x: hidden; }
|
|
8699
|
+
.workspace-lens-shell { width: 100%; max-width: none; margin: 0; padding: 24px 28px 32px; }
|
|
8700
|
+
.workspace-lens-locked { border: 1px solid #e5e7eb; border-radius: 10px; background: #fff; padding: 28px; max-width: 560px; margin: 48px auto; display: flex; flex-direction: column; gap: 8px; }
|
|
8701
|
+
.workspace-lens-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 16px; }
|
|
8702
|
+
.workspace-lens-title { font-size: 18px; font-weight: 600; color: #111827; margin: 0; }
|
|
8703
|
+
.workspace-lens-subtitle { font-size: 13px; color: #6b7280; margin: 4px 0 0; }
|
|
8704
|
+
.workspace-lens-score { font-size: 12px; color: #4b5563; font-variant-numeric: tabular-nums; margin: 2px 0 0; }
|
|
8705
|
+
.workspace-lens-controls.workspace-builder-filterbar { margin: 0 0 14px; border: 1px solid #e8edf3; border-radius: 8px; background: #fff; }
|
|
8706
|
+
.workspace-lens-filters.workspace-builder-filterbar__segments { max-width: 100%; overflow-x: auto; }
|
|
8707
|
+
.workspace-lens-filter { white-space: nowrap; }
|
|
8708
|
+
.workspace-lens-filter.is-active { background: #fff; color: #111827; box-shadow: 0 1px 2px rgba(15, 23, 42, .08); }
|
|
8709
|
+
.workspace-lens-search-wrap { flex-shrink: 0; }
|
|
8710
|
+
.workspace-lens-search { width: 100%; min-width: 0; border: 0; outline: 0; background: transparent; color: #111827; font: inherit; font-size: 12px; padding: 0; }
|
|
8711
|
+
.workspace-lens-control-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 0 0 22px; }
|
|
8712
|
+
.workspace-lens-control-card { border: 1px solid #e5e7eb; border-radius: 8px; background: #ffffff; min-height: 184px; padding: 14px; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); display: flex; flex-direction: column; gap: 12px; }
|
|
8713
|
+
.workspace-lens-control-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
|
|
8714
|
+
.workspace-lens-control-card-head h2 { margin: 0; color: #111827; font-size: 13px; font-weight: 600; line-height: 1.3; }
|
|
8715
|
+
.workspace-lens-control-card-head span { color: #6b7280; font-size: 12px; }
|
|
8716
|
+
.workspace-lens-icon-btn { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid transparent; border-radius: 6px; background: transparent; color: #6b7280; cursor: pointer; }
|
|
8717
|
+
.workspace-lens-icon-btn:hover { border-color: #e5e7eb; background: #f9fafb; color: #111827; }
|
|
8718
|
+
.workspace-lens-checklist { display: flex; flex-direction: column; gap: 6px; }
|
|
8719
|
+
.workspace-lens-check-item { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 32px; border-radius: 6px; background: #f3f4f6; color: #374151; padding: 0 10px; text-decoration: none; font-size: 12px; }
|
|
8720
|
+
.workspace-lens-check-item:hover { background: #e5e7eb; }
|
|
8721
|
+
.workspace-lens-check-item.is-complete { background: #dcfce7; color: #15803d; text-decoration: line-through; box-shadow: inset 3px 0 0 #22c55e; }
|
|
8722
|
+
.workspace-lens-check-item.is-complete svg { color: #16a34a; }
|
|
8723
|
+
.workspace-lens-stat-list { display: flex; flex-direction: column; gap: 0; margin-top: 14px; }
|
|
8724
|
+
.workspace-lens-stat-row { display: grid; grid-template-columns: minmax(0, 1fr) 64px; align-items: center; gap: 12px; min-height: 31px; border-bottom: 1px solid #eef0f2; color: #6b7280; font-size: 12px; }
|
|
8725
|
+
.workspace-lens-stat-row:last-child { border-bottom: 0; }
|
|
8726
|
+
.workspace-lens-stat-row strong { color: #111827; font-size: 13px; font-weight: 500; text-align: left; font-variant-numeric: tabular-nums; }
|
|
8727
|
+
.workspace-lens-helper-card-body { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; text-align: center; color: #4b5563; }
|
|
8728
|
+
.workspace-lens-helper-card-body svg { color: #111827; }
|
|
8729
|
+
.workspace-lens-helper-card-body strong { color: #111827; font-size: 13px; }
|
|
8730
|
+
.workspace-lens-helper-card-body p { margin: 0; color: #6b7280; font-size: 12px; line-height: 1.45; max-width: 260px; }
|
|
8731
|
+
.workspace-lens-helper-card-body button { margin-top: 4px; border: 1px solid #d1d5db; border-radius: 6px; background: #fff; color: #111827; font-size: 12px; font-weight: 500; padding: 7px 12px; cursor: pointer; }
|
|
8732
|
+
.workspace-lens-helper-card-body button:hover { background: #f9fafb; }
|
|
8733
|
+
.workspace-lens-branches { margin: 24px 0 32px; }
|
|
8734
|
+
.workspace-lens-branches-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 12px; }
|
|
8735
|
+
.workspace-lens-branches-head h2 { margin: 0; color: #111827; font-size: 18px; font-weight: 600; }
|
|
8736
|
+
.workspace-lens-branches-head span { display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; background: #e5e7eb; color: #374151; padding: 2px 8px; font-size: 11px; font-weight: 600; }
|
|
8737
|
+
.workspace-lens-branches-table { border: 1px solid #e5e7eb; border-radius: 8px; background: #ffffff; overflow: visible; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); }
|
|
8738
|
+
.workspace-lens-branch-row { position: relative; display: grid; grid-template-columns: minmax(240px, 1fr) auto; align-items: center; gap: 16px; min-height: 46px; border-bottom: 1px solid #eef0f2; padding: 0 16px; }
|
|
8739
|
+
.workspace-lens-branch-row:last-child { border-bottom: 0; }
|
|
8740
|
+
.workspace-lens-branch-name { display: inline-flex; align-items: center; gap: 8px; min-width: 0; color: #111827; font-size: 13px; font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace); }
|
|
8741
|
+
.workspace-lens-branch-name span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
8742
|
+
.workspace-lens-branch-name svg { color: #4b5563; flex-shrink: 0; }
|
|
8743
|
+
.workspace-lens-branch-actions { position: relative; display: inline-flex; align-items: center; justify-content: flex-end; gap: 8px; min-width: 0; }
|
|
8744
|
+
.workspace-lens-preview-pill,
|
|
8745
|
+
.workspace-lens-progress-pill,
|
|
8746
|
+
.workspace-lens-owner-pill { display: inline-flex; align-items: center; gap: 5px; min-height: 24px; border: 1px solid #e5e7eb; border-radius: 999px; background: #ffffff; color: #4b5563; padding: 0 9px; text-decoration: none; font-size: 11px; white-space: nowrap; }
|
|
8747
|
+
.workspace-lens-preview-pill:hover { background: #f9fafb; color: #111827; }
|
|
8748
|
+
.workspace-lens-owner-pill { border-color: transparent; color: #4b5563; }
|
|
8749
|
+
.workspace-lens-branch-summary,
|
|
8750
|
+
.workspace-lens-branch-next { display: none; grid-column: 1 / -1; margin: -6px 0 10px 22px; color: #6b7280; font-size: 12px; line-height: 1.4; }
|
|
8751
|
+
.workspace-lens-branch-next { margin-top: -8px; color: #374151; font-weight: 500; }
|
|
8752
|
+
.workspace-lens-action-menu { position: absolute; z-index: 80; top: 34px; right: 0; width: 190px; border: 1px solid #e5e7eb; border-radius: 8px; background: #ffffff; box-shadow: 0 12px 28px rgba(15, 23, 42, 0.16); padding: 6px; display: flex; flex-direction: column; gap: 2px; }
|
|
8753
|
+
.workspace-lens-action-menu button,
|
|
8754
|
+
.workspace-lens-action-menu a { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; border: 0; border-radius: 6px; background: transparent; color: #111827; padding: 9px 8px; text-align: left; text-decoration: none; font-size: 12px; cursor: pointer; }
|
|
8755
|
+
.workspace-lens-action-menu button:hover,
|
|
8756
|
+
.workspace-lens-action-menu a:hover { background: #f3f4f6; }
|
|
8757
|
+
@media (max-width: 1100px) {
|
|
8758
|
+
.workspace-lens-control-grid { grid-template-columns: 1fr; }
|
|
8759
|
+
.workspace-lens-branch-row { grid-template-columns: 1fr; align-items: flex-start; padding: 10px 12px; gap: 8px; }
|
|
8760
|
+
.workspace-lens-branch-actions { justify-content: flex-start; flex-wrap: wrap; }
|
|
8761
|
+
.workspace-lens-branch-summary,
|
|
8762
|
+
.workspace-lens-branch-next { margin-left: 22px; }
|
|
8763
|
+
}
|
|
8764
|
+
.workspace-lens-stream { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
8765
|
+
.workspace-lens-card { border: 1px solid #e8edf3; border-radius: 10px; background: #fff; padding: 12px 14px; }
|
|
8766
|
+
.workspace-lens-card.is-ready { opacity: 0.7; }
|
|
8767
|
+
.workspace-lens-card-head { display: flex; align-items: center; gap: 10px; width: 100%; background: none; border: none; padding: 0; cursor: pointer; text-align: left; }
|
|
8768
|
+
.workspace-lens-card-title { font-size: 13px; font-weight: 600; color: #111827; flex: 1; }
|
|
8769
|
+
.workspace-lens-chip { font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; color: #6b7280; border: 1px solid #e5e7eb; border-radius: 999px; padding: 1px 8px; }
|
|
8770
|
+
.workspace-lens-chip.is-blocked { color: #374151; border-color: #d1d5db; background: #f3f4f6; }
|
|
8771
|
+
.workspace-lens-card-progress { font-size: 11px; color: #6b7280; font-variant-numeric: tabular-nums; }
|
|
8772
|
+
.workspace-lens-caret { color: #9ca3af; transition: transform 120ms ease; }
|
|
8773
|
+
.workspace-lens-caret.is-open { transform: rotate(180deg); }
|
|
8774
|
+
.workspace-lens-card-headline { font-size: 12px; color: #4b5563; line-height: 1.45; margin: 8px 0 0; }
|
|
8775
|
+
.workspace-lens-card-next { display: flex; align-items: baseline; gap: 6px; margin-top: 8px; font-size: 12px; }
|
|
8776
|
+
.workspace-lens-next-label { color: #9ca3af; }
|
|
8777
|
+
.workspace-lens-next-link { color: #374151; font-weight: 600; text-decoration: none; }
|
|
8778
|
+
.workspace-lens-next-link:hover { text-decoration: underline; }
|
|
8779
|
+
.workspace-lens-card-detail { margin-top: 12px; border-top: 1px solid #f1f5f9; padding-top: 10px; display: flex; flex-direction: column; gap: 10px; }
|
|
8780
|
+
.workspace-lens-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
|
|
8781
|
+
.workspace-lens-step { display: flex; align-items: baseline; gap: 8px; font-size: 12px; color: #4b5563; }
|
|
8782
|
+
.workspace-lens-step-label { flex: 1; }
|
|
8783
|
+
.workspace-lens-step-status { font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; color: #9ca3af; }
|
|
8784
|
+
.workspace-lens-step.is-blocked .workspace-lens-step-status { color: #6b7280; font-weight: 600; }
|
|
8785
|
+
.workspace-lens-step-hint { flex-basis: 100%; font-size: 11px; color: #9ca3af; }
|
|
8786
|
+
.workspace-lens-blocked { font-size: 12px; color: #374151; margin: 0; }
|
|
8787
|
+
.workspace-lens-agent { border: 1px solid #f1f5f9; border-radius: 8px; background: #fafbfc; padding: 10px; }
|
|
8788
|
+
.workspace-lens-agent-title { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: #6b7280; margin: 0 0 6px; }
|
|
8789
|
+
.workspace-lens-agent-row { display: flex; gap: 8px; font-size: 12px; color: #4b5563; margin: 2px 0; }
|
|
8790
|
+
.workspace-lens-agent-row > span { color: #9ca3af; min-width: 84px; }
|
|
8791
|
+
.workspace-lens-empty { font-size: 12px; color: #9ca3af; padding: 16px; text-align: center; }
|
|
8792
|
+
|
|
8793
|
+
/* Workspace contribution graph — neutral chrome, GitHub green cell scale. */
|
|
8794
|
+
.workspace-contrib { border: 1px solid #e8edf3; border-radius: 10px; background: #fff; padding: 14px 16px; margin-bottom: 16px; }
|
|
8795
|
+
.workspace-contrib-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; flex-wrap: wrap; }
|
|
8796
|
+
.workspace-contrib-total { font-size: 12px; color: #4b5563; }
|
|
8797
|
+
.workspace-contrib-legend { display: inline-flex; align-items: center; gap: 3px; font-size: 11px; color: #9ca3af; }
|
|
8798
|
+
.workspace-contrib-grid-wrap { width: 100%; overflow: visible; }
|
|
8799
|
+
.workspace-contrib-months { display: grid; grid-template-columns: repeat(53, minmax(0, 1fr)); gap: 3px; margin-left: 38px; margin-bottom: 4px; }
|
|
8800
|
+
.workspace-contrib-month { font-size: 9px; color: #9ca3af; white-space: nowrap; }
|
|
8801
|
+
.workspace-contrib-body { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 8px; align-items: stretch; }
|
|
8802
|
+
.workspace-contrib-weekdays { display: grid; grid-template-rows: repeat(7, minmax(0, 1fr)); gap: 3px; width: 30px; }
|
|
8803
|
+
.workspace-contrib-weekdays span { font-size: 9px; color: #9ca3af; line-height: 1; display: flex; align-items: center; }
|
|
8804
|
+
.workspace-contrib-weeks { display: grid; grid-template-columns: repeat(53, minmax(0, 1fr)); gap: 3px; min-width: 0; }
|
|
8805
|
+
.workspace-contrib-week { display: grid; grid-template-rows: repeat(7, minmax(0, 1fr)); gap: 3px; min-width: 0; }
|
|
8806
|
+
.workspace-contrib-cell { width: 100%; aspect-ratio: 1; min-height: 10px; max-height: 18px; border-radius: 3px; padding: 0; border: 1px solid rgba(27, 31, 35, 0.06); background: #ebedf0; cursor: pointer; }
|
|
8807
|
+
.workspace-contrib-cell:disabled { cursor: default; }
|
|
8808
|
+
.workspace-contrib-cell.lvl-0 { background: #ebedf0; }
|
|
8809
|
+
.workspace-contrib-cell.lvl-1 { background: #9be9a8; }
|
|
8810
|
+
.workspace-contrib-cell.lvl-2 { background: #40c463; }
|
|
8811
|
+
.workspace-contrib-cell.lvl-3 { background: #30a14e; }
|
|
8812
|
+
.workspace-contrib-cell.lvl-4 { background: #216e39; }
|
|
8813
|
+
.workspace-contrib-cell.has-count { border-color: rgba(27, 31, 35, 0.18); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.18), 0 0 0 1px rgba(34,197,94,0.18); }
|
|
8814
|
+
.workspace-contrib-cell.has-count:hover { outline: 2px solid rgba(17, 24, 39, 0.75); outline-offset: 1px; }
|
|
8815
|
+
.workspace-contrib-cell.lvl-future { background: transparent; border-color: transparent; }
|
|
8816
|
+
.workspace-contrib-legend .workspace-contrib-cell { cursor: default; }
|
|
8817
|
+
.workspace-contrib-tooltip { position: fixed; transform: translate(-50%, calc(-100% - 8px)); z-index: 50; background: #111827; color: #fff; border-radius: 6px; padding: 6px 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.18); display: flex; flex-direction: column; gap: 2px; pointer-events: auto; }
|
|
8818
|
+
.workspace-contrib-tooltip-count { font-size: 11px; font-weight: 600; }
|
|
8819
|
+
.workspace-contrib-tooltip-date { font-size: 10px; color: #cbd5e1; }
|
|
8820
|
+
.workspace-contrib-tooltip-link { font-size: 10px; color: #9be9a8; text-decoration: none; margin-top: 2px; }
|
|
8821
|
+
.workspace-contrib-tooltip-link:hover { text-decoration: underline; }
|
|
8822
|
+
|
|
8823
|
+
/* Workspace Lens one-time walkthrough — calm white popover. */
|
|
8824
|
+
.workspace-rail-lens-nav { position: relative; }
|
|
8825
|
+
.workspace-lens-walkthrough { position: relative; width: 264px; background: #ffffff; border: 1px solid #d1d5db; border-radius: 5px; box-shadow: 0 6px 18px rgba(17, 24, 39, 0.12); padding: 12px 13px; }
|
|
8826
|
+
.workspace-lens-walkthrough.is-anchored,
|
|
8827
|
+
.workspace-lens-walkthrough.is-rail-reveal { position: fixed; z-index: 1200; }
|
|
8828
|
+
.workspace-lens-walkthrough.is-anchored::before,
|
|
8829
|
+
.workspace-lens-walkthrough.is-rail-reveal::before { content: ""; position: absolute; left: -6px; top: 16px; width: 10px; height: 10px; background: #ffffff; border-left: 1px solid #d1d5db; border-bottom: 1px solid #d1d5db; transform: rotate(45deg); }
|
|
8830
|
+
@media (max-width: 760px) {
|
|
8831
|
+
.workspace-lens-walkthrough.is-anchored,
|
|
8832
|
+
.workspace-lens-walkthrough.is-rail-reveal { right: 16px; width: auto; }
|
|
8833
|
+
.workspace-lens-walkthrough.is-anchored::before,
|
|
8834
|
+
.workspace-lens-walkthrough.is-rail-reveal::before { display: none; }
|
|
8835
|
+
}
|
|
8836
|
+
.workspace-lens-walkthrough.is-panel { width: 100%; max-width: 520px; margin: 0 0 16px; }
|
|
8837
|
+
.workspace-lens-walkthrough-x { position: absolute; top: 8px; right: 8px; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border: none; background: transparent; color: #9ca3af; border-radius: 5px; cursor: pointer; }
|
|
8838
|
+
.workspace-lens-walkthrough-x:hover { background: #f3f4f6; color: #4b5563; }
|
|
8839
|
+
.workspace-lens-walkthrough-eyebrow { margin: 0 0 4px; font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: #9ca3af; }
|
|
8840
|
+
.workspace-lens-walkthrough-title { margin: 0 0 5px; font-size: 13px; font-weight: 600; color: #111827; padding-right: 18px; }
|
|
8841
|
+
.workspace-lens-walkthrough-body { margin: 0 0 12px; font-size: 12px; line-height: 1.5; color: #4b5563; }
|
|
8842
|
+
.workspace-lens-walkthrough-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
8843
|
+
.workspace-lens-walkthrough-steps { font-size: 11px; color: #9ca3af; font-variant-numeric: tabular-nums; }
|
|
8844
|
+
.workspace-lens-walkthrough-next { font-size: 12px; font-weight: 600; color: #ffffff; background: #111827; border: none; border-radius: 6px; padding: 6px 12px; cursor: pointer; }
|
|
8845
|
+
.workspace-lens-walkthrough-next:hover { background: #1f2937; }
|
|
8846
|
+
|
|
8847
|
+
/* Helper handoff — one callout, one helper widget, one sandbox config. */
|
|
8848
|
+
.workspace-lens-helper-callout { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; border: 1px solid #e5e7eb; border-radius: 8px; background: #fafbfc; padding: 12px 14px; margin: 0 0 16px; }
|
|
8849
|
+
.workspace-lens-helper-callout-text { min-width: 0; }
|
|
8850
|
+
.workspace-lens-helper-callout-title { margin: 0 0 3px; font-size: 13px; font-weight: 600; color: #111827; }
|
|
8851
|
+
.workspace-lens-helper-callout-body { margin: 0; font-size: 12px; line-height: 1.5; color: #6b7280; max-width: 560px; }
|
|
8852
|
+
.workspace-lens-helper-callout-btn { flex-shrink: 0; font-size: 12px; font-weight: 600; color: #111827; background: #ffffff; border: 1px solid #d1d5db; border-radius: 6px; padding: 7px 12px; cursor: pointer; }
|
|
8853
|
+
.workspace-lens-helper-callout-btn:hover:not(:disabled) { background: #f3f4f6; }
|
|
8854
|
+
.workspace-lens-helper-callout-btn:disabled { opacity: 0.6; cursor: default; }
|
|
8855
|
+
.workspace-helper-setup-modal-backdrop { position: fixed; inset: 0; z-index: 1400; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(17, 24, 39, 0.42); backdrop-filter: blur(3px); }
|
|
8856
|
+
.workspace-helper-setup-modal { position: relative; width: min(620px, 100%); max-height: min(720px, calc(100vh - 48px)); overflow: auto; background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; box-shadow: 0 24px 70px rgba(17, 24, 39, 0.28); padding: 18px; }
|
|
8857
|
+
.workspace-helper-setup-modal-close { position: absolute; top: 12px; right: 12px; width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid #e5e7eb; border-radius: 6px; background: #fff; color: #6b7280; cursor: pointer; }
|
|
8858
|
+
.workspace-helper-setup-modal-close:hover { background: #f9fafb; color: #111827; }
|
|
8859
|
+
.workspace-helper-setup-breadcrumbs { display: flex; gap: 8px; flex-wrap: wrap; padding-right: 36px; margin-bottom: 16px; font-size: 12px; color: #9ca3af; }
|
|
8860
|
+
.workspace-helper-setup-breadcrumbs span { border: 1px solid #e5e7eb; border-radius: 999px; padding: 4px 9px; background: #f9fafb; }
|
|
8861
|
+
.workspace-helper-setup-breadcrumbs span.active { color: #111827; border-color: #111827; background: #fff; font-weight: 600; }
|
|
8862
|
+
.workspace-helper-setup-step { display: flex; flex-direction: column; gap: 12px; }
|
|
8863
|
+
.workspace-helper-setup-step h2 { margin: 0; font-size: 18px; line-height: 1.25; color: #111827; }
|
|
8864
|
+
.workspace-helper-setup-step p { margin: 0; font-size: 13px; line-height: 1.55; color: #4b5563; }
|
|
8865
|
+
.workspace-helper-setup-eyebrow { font-size: 11px !important; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: #6b7280 !important; }
|
|
8866
|
+
.workspace-helper-setup-target { border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px; display: grid; gap: 4px; background: #fafafa; }
|
|
8867
|
+
.workspace-helper-setup-target span, .workspace-helper-setup-target small { font-size: 12px; color: #6b7280; }
|
|
8868
|
+
.workspace-helper-setup-target strong { font-size: 14px; color: #111827; }
|
|
8869
|
+
.workspace-helper-setup-card-grid { display: grid; gap: 8px; }
|
|
8870
|
+
.workspace-helper-setup-toggle { display: flex !important; align-items: flex-start; gap: 10px; border: 1px solid #e5e7eb; border-radius: 8px; background: #fff; padding: 11px 12px; cursor: pointer; }
|
|
8871
|
+
.workspace-helper-setup-toggle:hover { background: #f9fafb; }
|
|
8872
|
+
.workspace-helper-setup-toggle input { width: 16px !important; height: 16px; margin: 2px 0 0; padding: 0 !important; accent-color: #111827; flex-shrink: 0; }
|
|
8873
|
+
.workspace-helper-setup-toggle span { display: grid; gap: 3px; min-width: 0; }
|
|
8874
|
+
.workspace-helper-setup-toggle strong { color: #111827; font-size: 13px; }
|
|
8875
|
+
.workspace-helper-setup-toggle small { color: #6b7280; font-size: 12px; line-height: 1.35; }
|
|
8876
|
+
.workspace-helper-setup-radio-group { border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px; display: grid; gap: 8px; background: #fafafa; }
|
|
8877
|
+
.workspace-helper-setup-radio-group > span { font-size: 12px; font-weight: 700; color: #374151; }
|
|
8878
|
+
.workspace-helper-setup-radio-group label { display: flex !important; align-items: center; gap: 8px; font-size: 13px; color: #111827; font-weight: 600; }
|
|
8879
|
+
.workspace-helper-setup-radio-group input { width: 15px !important; height: 15px; margin: 0; padding: 0 !important; accent-color: #111827; }
|
|
8880
|
+
.workspace-helper-setup-radio-group small { color: #9ca3af; font-size: 12px; line-height: 1.4; }
|
|
8881
|
+
.workspace-helper-setup-field-stack { display: grid; gap: 10px; }
|
|
8882
|
+
.workspace-helper-agent-options { display: grid; gap: 8px; }
|
|
8883
|
+
.workspace-helper-agent-options button { display: grid; gap: 3px; text-align: left; border: 1px solid #e5e7eb; border-radius: 8px; background: #fff; padding: 10px 12px; cursor: pointer; }
|
|
8884
|
+
.workspace-helper-agent-options button:hover { background: #f9fafb; }
|
|
8885
|
+
.workspace-helper-agent-options button.active { border-color: #111827; box-shadow: inset 3px 0 0 #111827; }
|
|
8886
|
+
.workspace-helper-agent-options strong { font-size: 13px; color: #111827; }
|
|
8887
|
+
.workspace-helper-agent-options span { font-size: 12px; line-height: 1.4; color: #6b7280; }
|
|
8888
|
+
.workspace-helper-setup-two-col { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
|
|
8889
|
+
.workspace-helper-setup-step label { display: grid; gap: 6px; font-size: 12px; font-weight: 600; color: #374151; }
|
|
8890
|
+
.workspace-helper-setup-step input, .workspace-helper-setup-step select { width: 100%; border: 1px solid #d1d5db; border-radius: 7px; padding: 9px 10px; font-size: 13px; color: #111827; background: #fff; }
|
|
8891
|
+
.workspace-helper-setup-review { display: grid; gap: 8px; margin: 0; }
|
|
8892
|
+
.workspace-helper-setup-review div { display: grid; grid-template-columns: 120px 1fr; gap: 12px; border-bottom: 1px solid #f3f4f6; padding-bottom: 8px; }
|
|
8893
|
+
.workspace-helper-setup-review dt { font-size: 12px; color: #6b7280; }
|
|
8894
|
+
.workspace-helper-setup-review dd { margin: 0; min-width: 0; overflow-wrap: anywhere; font-size: 12px; color: #111827; }
|
|
8895
|
+
.workspace-helper-setup-error { color: #b91c1c !important; }
|
|
8896
|
+
.workspace-helper-setup-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }
|
|
8897
|
+
.workspace-helper-setup-actions button { border: 1px solid #d1d5db; border-radius: 7px; background: #fff; color: #111827; padding: 8px 12px; font-size: 13px; font-weight: 600; cursor: pointer; }
|
|
8898
|
+
.workspace-helper-setup-actions button.primary { background: #111827; border-color: #111827; color: #fff; }
|
|
8899
|
+
.workspace-helper-setup-actions button:disabled { opacity: 0.55; cursor: default; }
|
|
8900
|
+
|
|
8901
|
+
/* Compact rail variant — slim activation chip in WorkspaceRail Home */
|
|
8902
|
+
.workspace-activation-panel.is-compact { padding: 12px 14px; margin: 0 0 12px; gap: 10px; border-radius: 8px; }
|
|
8903
|
+
.workspace-activation-panel.is-compact .workspace-activation-head { gap: 8px; }
|
|
8904
|
+
.workspace-activation-panel.is-compact .workspace-activation-headline { font-size: 13px; }
|
|
8905
|
+
.workspace-activation-panel.is-compact .workspace-activation-subheadline { font-size: 11px; }
|
|
8906
|
+
.workspace-activation-panel.is-compact .workspace-activation-step { padding: 8px 10px; gap: 8px; }
|
|
8907
|
+
.workspace-activation-panel.is-compact .workspace-activation-step-title { font-size: 12px; }
|
|
8908
|
+
.workspace-activation-panel.is-compact .workspace-activation-step-description { font-size: 11px; }
|
|
8909
|
+
.workspace-activation-panel.is-compact .workspace-activation-progress-bar { width: 80px; }
|
|
8910
|
+
|
|
8911
|
+
/* Template-aware context banner — workflow + nango affordance */
|
|
8912
|
+
.workspace-template-context-banner { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 6px; background: #eff6ff; border: 1px solid #bfdbfe; color: #1e40af; font-size: 12px; margin: 0 0 12px; }
|
|
8913
|
+
.workspace-template-context-banner.is-warn { background: #fffbeb; border-color: #fde68a; color: #92400e; }
|
|
8914
|
+
.workspace-template-context-banner .workspace-template-context-link { color: inherit; text-decoration: underline; font-weight: 600; margin-left: auto; }
|
|
@@ -51,6 +51,7 @@ import { AgentSwarmPanel } from "../data-model/components/AgentSwarmPanel.jsx";
|
|
|
51
51
|
import { RunSetupPanel } from "./RunSetupPanel.jsx";
|
|
52
52
|
import { describeRunInputMetadataItems, discoverRunInputSchema } from "@/lib/orchestration-run-inputs";
|
|
53
53
|
import { selectWorkflowNodeInputSchema } from "@/lib/workspace-metadata-selectors";
|
|
54
|
+
import { deriveProvenance, hasConnectionId } from "@/lib/workspace-activation";
|
|
54
55
|
|
|
55
56
|
// Workspace Metadata Graph V1 — read-only dependency metadata for workflow
|
|
56
57
|
// sidecars. The runtime path (sandbox-run, publish, draft/live) is
|
|
@@ -387,6 +388,33 @@ export default function WorkflowSurface() {
|
|
|
387
388
|
[workspaceConfig, sandboxRow]
|
|
388
389
|
);
|
|
389
390
|
|
|
391
|
+
// Template-aware activation banner. When the active workflow belongs to
|
|
392
|
+
// a seeded template (project-management today) and its provider row
|
|
393
|
+
// doesn't have a connectionId yet, surface a back-link to the API
|
|
394
|
+
// Registry / Nango panel so the user can finish setup without hunting
|
|
395
|
+
// through Data Model surfaces.
|
|
396
|
+
const templateBanner = useMemo(() => {
|
|
397
|
+
if (!workspaceConfig) return null;
|
|
398
|
+
const provenance = deriveProvenance(workspaceConfig);
|
|
399
|
+
if (provenance.template !== "project-management") return null;
|
|
400
|
+
if (!registryRow) return null;
|
|
401
|
+
const ready = hasConnectionId(registryRow);
|
|
402
|
+
const apiRegistryObjectId = String(
|
|
403
|
+
(Array.isArray(workspaceConfig?.dataModel?.objects)
|
|
404
|
+
? workspaceConfig.dataModel.objects.find((o) => o?.objectType === "api-registry")?.id
|
|
405
|
+
: "") || ""
|
|
406
|
+
);
|
|
407
|
+
const apiRegistryRowId = String(registryRow.integrationId || "").trim();
|
|
408
|
+
const backHref = apiRegistryObjectId && apiRegistryRowId
|
|
409
|
+
? `/data-model?object=${encodeURIComponent(apiRegistryObjectId)}&row=${encodeURIComponent(apiRegistryRowId)}`
|
|
410
|
+
: "/data-model";
|
|
411
|
+
return {
|
|
412
|
+
ready,
|
|
413
|
+
backHref,
|
|
414
|
+
providerConfigKey: String(registryRow.providerConfigKey || registryRow.integrationId || "").trim(),
|
|
415
|
+
};
|
|
416
|
+
}, [workspaceConfig, registryRow]);
|
|
417
|
+
|
|
390
418
|
useEffect(() => {
|
|
391
419
|
setSidecarMode(runId ? "trace" : "graph");
|
|
392
420
|
}, [runId]);
|
|
@@ -876,6 +904,22 @@ export default function WorkflowSurface() {
|
|
|
876
904
|
</div>
|
|
877
905
|
</header>
|
|
878
906
|
|
|
907
|
+
{templateBanner ? (
|
|
908
|
+
<div
|
|
909
|
+
className={"workspace-template-context-banner" + (templateBanner.ready ? "" : " is-warn")}
|
|
910
|
+
role="note"
|
|
911
|
+
>
|
|
912
|
+
<span>
|
|
913
|
+
{templateBanner.ready
|
|
914
|
+
? `Provider connected via Nango${templateBanner.providerConfigKey ? ` (${templateBanner.providerConfigKey})` : ""}. Ready to run.`
|
|
915
|
+
: "Connect your provider through Nango before running this workflow."}
|
|
916
|
+
</span>
|
|
917
|
+
<Link href={templateBanner.backHref} className="workspace-template-context-link">
|
|
918
|
+
<span>{templateBanner.ready ? "Manage connection" : "Open Nango panel"}</span>
|
|
919
|
+
</Link>
|
|
920
|
+
</div>
|
|
921
|
+
) : null}
|
|
922
|
+
|
|
879
923
|
{loading ? (
|
|
880
924
|
<p className="dm-workflow-empty">Loading workflow…</p>
|
|
881
925
|
) : error ? (
|