@w6w/ui 0.2.11 → 0.2.55
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/CHANGELOG.md +139 -2
- package/README.md +28 -10
- package/dist/AppPicker.d.ts +12 -1
- package/dist/CanvasContextMenu.d.ts +19 -0
- package/dist/{CodeBlock-BqXDA35P.js → CodeBlock-C-oIIYfC.js} +1436 -555
- package/dist/CodeBlock-C-oIIYfC.js.map +1 -0
- package/dist/CodeBlock-CymlfyeA.cjs +15 -0
- package/dist/CodeBlock-CymlfyeA.cjs.map +1 -0
- package/dist/CodeEditor.d.ts +4 -1
- package/dist/ConditionEditor.d.ts +11 -0
- package/dist/JsonEditor.d.ts +12 -0
- package/dist/ParamCustomization.d.ts +5 -0
- package/dist/ParamsForm.d.ts +11 -3
- package/dist/RouterEditor.d.ts +5 -0
- package/dist/StepBuilderModal.d.ts +83 -13
- package/dist/StepNameEditor.d.ts +11 -0
- package/dist/StopEditor.d.ts +5 -0
- package/dist/TriggerFillForm.d.ts +14 -1
- package/dist/WebhookListenPanel.d.ts +28 -0
- package/dist/WorkflowConnections.d.ts +29 -0
- package/dist/WorkflowConnectionsPanel.d.ts +5 -0
- package/dist/WorkflowFlowEditor.d.ts +67 -8
- package/dist/assets/script-completion.worker-DDJKkj5M.js +8290 -0
- package/dist/assets/script-completion.worker-DDJKkj5M.js.map +1 -0
- package/dist/canvas-context-menu.d.ts +27 -0
- package/dist/code.cjs +1 -1
- package/dist/code.mjs +3 -4
- package/dist/code.mjs.map +1 -1
- package/dist/components/AnchoredFlyout.d.ts +7 -0
- package/dist/components/ColumnsEditor.d.ts +27 -0
- package/dist/components/Combobox.d.ts +12 -1
- package/dist/components/ConfirmModal.d.ts +3 -1
- package/dist/components/CsvPanel.d.ts +21 -0
- package/dist/components/DataEntryEditor.d.ts +38 -0
- package/dist/components/DataEntryList.d.ts +33 -0
- package/dist/components/DataStoreList.d.ts +33 -0
- package/dist/components/DataTableGrid.d.ts +46 -0
- package/dist/components/EventbriteTriggerPicker.d.ts +7 -0
- package/dist/components/ExecutionDetail.d.ts +17 -1
- package/dist/components/ExecutionList.d.ts +19 -1
- package/dist/components/ExecutionLogPanel.d.ts +61 -3
- package/dist/components/ExpressionEditorModal.d.ts +33 -10
- package/dist/components/ExpressionOptions.d.ts +101 -15
- package/dist/components/HtmlPreview.d.ts +7 -0
- package/dist/components/JsonTree.d.ts +32 -0
- package/dist/components/ResolvedParams.d.ts +6 -1
- package/dist/components/ResultViewer.d.ts +46 -0
- package/dist/components/ScriptBindingsNotice.d.ts +31 -0
- package/dist/components/ScriptCodeField.d.ts +13 -0
- package/dist/components/StepStatusPill.d.ts +7 -0
- package/dist/components/expression-authoring.d.ts +13 -0
- package/dist/components/expression-dom.d.ts +17 -2
- package/dist/components/expression-template.d.ts +25 -3
- package/dist/components/icons.d.ts +1 -1
- package/dist/components/json-compose.d.ts +53 -0
- package/dist/components/result-format.d.ts +13 -0
- package/dist/condition-editor.d.ts +44 -0
- package/dist/connection-app-meta-BEXlKBgV.cjs +22 -0
- package/dist/connection-app-meta-BEXlKBgV.cjs.map +1 -0
- package/dist/connection-app-meta-ZCPakGjD.js +12422 -0
- package/dist/connection-app-meta-ZCPakGjD.js.map +1 -0
- package/dist/data-stores/data-store-view.d.ts +371 -0
- package/dist/eventbrite-trigger-selection.d.ts +13 -0
- package/dist/flow-connect.d.ts +22 -16
- package/dist/flow-delete.d.ts +16 -0
- package/dist/flow-history.d.ts +75 -0
- package/dist/flow-layout.d.ts +13 -0
- package/dist/flow-loop-colors.d.ts +39 -0
- package/dist/flow-loop.d.ts +98 -0
- package/dist/flow-node-flags.d.ts +14 -0
- package/dist/flow-problems.d.ts +69 -0
- package/dist/flow-state.d.ts +20 -0
- package/dist/flow-types.d.ts +137 -9
- package/dist/flow-utils.d.ts +27 -13
- package/dist/flow.cjs +4 -2
- package/dist/flow.cjs.map +1 -1
- package/dist/flow.d.ts +9 -3
- package/dist/flow.mjs +4028 -1585
- package/dist/flow.mjs.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +30 -4
- package/dist/index.mjs +2559 -1287
- package/dist/index.mjs.map +1 -1
- package/dist/node-samples.d.ts +80 -0
- package/dist/output-shape.d.ts +30 -14
- package/dist/param-customization.d.ts +7 -0
- package/dist/provider.d.ts +119 -7
- package/dist/resolve-params.d.ts +45 -11
- package/dist/run-visuals.d.ts +14 -21
- package/dist/script-bindings.d.ts +63 -0
- package/dist/script-completion-service.d.ts +9 -0
- package/dist/script-completion.worker.d.ts +1 -0
- package/dist/script-completions.d.ts +2 -0
- package/dist/state-shape.d.ts +38 -0
- package/dist/step-preview-state.d.ts +155 -6
- package/dist/step-problems.d.ts +42 -12
- package/dist/test-inputs.d.ts +25 -0
- package/dist/trigger-registration.d.ts +28 -0
- package/dist/types.d.ts +70 -8
- package/dist/use-app-action-defs.d.ts +9 -1
- package/dist/use-test-input.d.ts +18 -0
- package/dist/workflow-connections.d.ts +78 -0
- package/package.json +16 -7
- package/src/code.css +60 -6
- package/src/styles/_canvas.scss +35 -0
- package/src/styles/_code-editor.scss +35 -0
- package/src/styles/_code.scss +6 -5
- package/src/styles/_connections.scss +64 -0
- package/src/styles/_copyable.scss +24 -0
- package/src/styles/_data-stores.scss +138 -0
- package/src/styles/_data-vars.scss +17 -6
- package/src/styles/_execution-history.scss +73 -0
- package/src/styles/_execution-log.scss +145 -1
- package/src/styles/_expression-modal.scss +106 -16
- package/src/styles/_fields.scss +11 -0
- package/src/styles/_flow.scss +166 -0
- package/src/styles/_fx.scss +3 -1
- package/src/styles/_incoming-state.scss +33 -0
- package/src/styles/_modal.scss +12 -0
- package/src/styles/_multiselect.scss +35 -0
- package/src/styles/_sections.scss +36 -0
- package/src/styles/_step-builder.scss +145 -0
- package/src/styles/_tester.scss +56 -0
- package/src/styles/_tokens.scss +27 -1
- package/src/styles.css +1347 -41
- package/src/styles.scss +2 -0
- package/dist/CodeBlock-BqXDA35P.js.map +0 -1
- package/dist/CodeBlock-CulfbnZD.cjs +0 -15
- package/dist/CodeBlock-CulfbnZD.cjs.map +0 -1
- package/dist/ConfirmModal-Ln99S9NT.js +0 -7919
- package/dist/ConfirmModal-Ln99S9NT.js.map +0 -1
- package/dist/ConfirmModal-fjHW5rN-.cjs +0 -14
- package/dist/ConfirmModal-fjHW5rN-.cjs.map +0 -1
- package/dist/Copyable-DA6eiU7w.cjs +0 -2
- package/dist/Copyable-DA6eiU7w.cjs.map +0 -1
- package/dist/Copyable-F4NTaG77.js +0 -847
- package/dist/Copyable-F4NTaG77.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w6w/ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.55",
|
|
4
4
|
"description": "React components for w6w — central API management. Build plugins, apps and integrations on them.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://w6w.io",
|
|
7
7
|
"author": "W6W (https://w6w.io)",
|
|
8
|
-
"bugs": "https://github.com/w6w-io/w6w-
|
|
8
|
+
"bugs": "https://github.com/w6w-io/w6w-studio/issues",
|
|
9
9
|
"keywords": [
|
|
10
10
|
"w6w",
|
|
11
11
|
"react",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
],
|
|
15
15
|
"repository": {
|
|
16
16
|
"type": "git",
|
|
17
|
-
"url": "https://github.com/w6w-io/w6w-
|
|
17
|
+
"url": "https://github.com/w6w-io/w6w-studio.git",
|
|
18
|
+
"directory": "packages/ui"
|
|
18
19
|
},
|
|
19
20
|
"type": "module",
|
|
20
21
|
"main": "./dist/index.cjs",
|
|
@@ -71,10 +72,12 @@
|
|
|
71
72
|
"@codemirror/state": "^6.5.0",
|
|
72
73
|
"@codemirror/view": "^6.35.0",
|
|
73
74
|
"@uiw/react-codemirror": "^4.23.7",
|
|
74
|
-
"@w6w/expr": "^0.1.
|
|
75
|
+
"@w6w/expr": "^0.1.2",
|
|
75
76
|
"@xyflow/react": "^12.3.6",
|
|
76
77
|
"prism-react-renderer": "^2.4.1",
|
|
77
|
-
"react-markdown": "^10.1.0"
|
|
78
|
+
"react-markdown": "^10.1.0",
|
|
79
|
+
"typescript": "^5.7.2",
|
|
80
|
+
"@codemirror/autocomplete": "^6.18.0"
|
|
78
81
|
},
|
|
79
82
|
"devDependencies": {
|
|
80
83
|
"@biomejs/biome": "^1.9.4",
|
|
@@ -90,7 +93,6 @@
|
|
|
90
93
|
"react-dom": "^18.3.1",
|
|
91
94
|
"sass": "^1.102.0",
|
|
92
95
|
"storybook": "^10.5.8",
|
|
93
|
-
"typescript": "^5.7.2",
|
|
94
96
|
"vite": "^6.0.5",
|
|
95
97
|
"vite-plugin-dts": "^4.3.0"
|
|
96
98
|
},
|
|
@@ -102,16 +104,23 @@
|
|
|
102
104
|
"test": "node --max-old-space-size=2048 --conditions=w6w-source --import ./src/test-jsx-loader.mjs --test --test-concurrency=4 --test-timeout=120000 src/__tests__/*.test.ts src/components/__tests__/*.test.ts",
|
|
103
105
|
"test:picker-layout": "bash test/picker-layout/run.sh",
|
|
104
106
|
"test:canvas-layer": "bash test/canvas-layer/run.sh",
|
|
107
|
+
"test:foreach-loop": "bash test/foreach-loop/run.sh",
|
|
105
108
|
"test:expr-template": "bash test/expr-template/run.sh",
|
|
109
|
+
"test:friendly-expressions": "node test/friendly-expressions/run.mjs",
|
|
106
110
|
"test:action-test-form": "bash test/action-test-form/run.sh",
|
|
107
111
|
"test:host-isolation": "bash test/host-isolation/run.sh",
|
|
108
112
|
"test:copyable": "bash test/copyable/run.sh",
|
|
113
|
+
"test:code-editor-fill": "bash test/code-editor-fill/run.sh",
|
|
109
114
|
"test:pack-smoke": "bash test/pack-smoke/run.sh",
|
|
110
115
|
"storybook": "storybook dev -p 6006 --no-open",
|
|
111
116
|
"build-storybook": "storybook build",
|
|
112
117
|
"lint": "biome check .",
|
|
113
118
|
"lint:tokens": "node scripts/lint-tokens.mjs",
|
|
114
119
|
"coverage:stories": "node scripts/coverage-stories.mjs",
|
|
115
|
-
"format": "biome format --write ."
|
|
120
|
+
"format": "biome format --write .",
|
|
121
|
+
"test:workflow-connections": "node test/workflow-connections/run.mjs",
|
|
122
|
+
"test:workflow-undo": "node test/workflow-connections/undo.mjs",
|
|
123
|
+
"test:workflow-context-menu": "node test/workflow-connections/context-menu.mjs",
|
|
124
|
+
"test:script-completion": "node test/script-completion/run.mjs"
|
|
116
125
|
}
|
|
117
126
|
}
|
package/src/code.css
CHANGED
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
* host rule — even a plain `:root { ... }` — wins without !important. Tokens are
|
|
33
33
|
* defined on :root so every `.w6w-*` component inherits them out of the box.
|
|
34
34
|
*/
|
|
35
|
-
/* Light — the base defaults.
|
|
35
|
+
/* Light — the base defaults.
|
|
36
|
+
`--w6w-loop-N` is the For each palette (flow-loop-colors.ts, LOOP_TONES): no red,
|
|
37
|
+
black or green, so a loop never reads as an error port or a success edge. */
|
|
36
38
|
:where(:root) {
|
|
37
39
|
--w6w-bg: #f7f8fa;
|
|
38
40
|
--w6w-panel: #ffffff;
|
|
@@ -48,6 +50,12 @@
|
|
|
48
50
|
--w6w-health-down: var(--w6w-danger);
|
|
49
51
|
--w6w-health-unknown: #5f6875;
|
|
50
52
|
--w6w-icon-swatch: #f0f2f6;
|
|
53
|
+
--w6w-loop-1: #2f6fdf;
|
|
54
|
+
--w6w-loop-2: #7c4ddb;
|
|
55
|
+
--w6w-loop-3: #b7791f;
|
|
56
|
+
--w6w-loop-4: #0e8fa8;
|
|
57
|
+
--w6w-loop-5: #b0399f;
|
|
58
|
+
--w6w-loop-6: #4f4fc7;
|
|
51
59
|
--w6w-code-comment: #6b7280;
|
|
52
60
|
--w6w-code-keyword: #8250df;
|
|
53
61
|
--w6w-code-string: #0a7b34;
|
|
@@ -77,6 +85,12 @@
|
|
|
77
85
|
--w6w-health-down: var(--w6w-danger);
|
|
78
86
|
--w6w-health-unknown: #9aa3b2;
|
|
79
87
|
--w6w-icon-swatch: #1f232c;
|
|
88
|
+
--w6w-loop-1: #5b9bff;
|
|
89
|
+
--w6w-loop-2: #a98bff;
|
|
90
|
+
--w6w-loop-3: #f0b13a;
|
|
91
|
+
--w6w-loop-4: #3cc6e0;
|
|
92
|
+
--w6w-loop-5: #e47ad6;
|
|
93
|
+
--w6w-loop-6: #8a8aff;
|
|
80
94
|
--w6w-scheme: dark;
|
|
81
95
|
--w6w-code-comment: #7d8797;
|
|
82
96
|
--w6w-code-keyword: #d2a8ff;
|
|
@@ -105,6 +119,12 @@
|
|
|
105
119
|
--w6w-health-down: var(--w6w-danger);
|
|
106
120
|
--w6w-health-unknown: #5f6875;
|
|
107
121
|
--w6w-icon-swatch: #f0f2f6;
|
|
122
|
+
--w6w-loop-1: #2f6fdf;
|
|
123
|
+
--w6w-loop-2: #7c4ddb;
|
|
124
|
+
--w6w-loop-3: #b7791f;
|
|
125
|
+
--w6w-loop-4: #0e8fa8;
|
|
126
|
+
--w6w-loop-5: #b0399f;
|
|
127
|
+
--w6w-loop-6: #4f4fc7;
|
|
108
128
|
--w6w-code-comment: #6b7280;
|
|
109
129
|
--w6w-code-keyword: #8250df;
|
|
110
130
|
--w6w-code-string: #0a7b34;
|
|
@@ -130,6 +150,12 @@
|
|
|
130
150
|
--w6w-health-down: var(--w6w-danger);
|
|
131
151
|
--w6w-health-unknown: #9aa3b2;
|
|
132
152
|
--w6w-icon-swatch: #1f232c;
|
|
153
|
+
--w6w-loop-1: #5b9bff;
|
|
154
|
+
--w6w-loop-2: #a98bff;
|
|
155
|
+
--w6w-loop-3: #f0b13a;
|
|
156
|
+
--w6w-loop-4: #3cc6e0;
|
|
157
|
+
--w6w-loop-5: #e47ad6;
|
|
158
|
+
--w6w-loop-6: #8a8aff;
|
|
133
159
|
--w6w-code-comment: #7d8797;
|
|
134
160
|
--w6w-code-keyword: #d2a8ff;
|
|
135
161
|
--w6w-code-string: #7ee787;
|
|
@@ -405,6 +431,32 @@
|
|
|
405
431
|
min-width: 0;
|
|
406
432
|
}
|
|
407
433
|
|
|
434
|
+
/* ── Hover modifier: ResultViewer — the button overlays the top-right corner of
|
|
435
|
+
ANY child and is revealed on hover/focus; always shown where there is no hover. */
|
|
436
|
+
.w6w-copyable--hover {
|
|
437
|
+
position: relative;
|
|
438
|
+
align-items: flex-start;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.w6w-copyable--hover > .w6w-copyable-btn {
|
|
442
|
+
position: absolute;
|
|
443
|
+
top: var(--w6w-sp-1);
|
|
444
|
+
right: var(--w6w-sp-1);
|
|
445
|
+
background: var(--w6w-panel);
|
|
446
|
+
border-color: var(--w6w-border);
|
|
447
|
+
opacity: 0;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.w6w-copyable--hover:hover > .w6w-copyable-btn,
|
|
451
|
+
.w6w-copyable--hover:focus-within > .w6w-copyable-btn {
|
|
452
|
+
opacity: 1;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
@media (hover: none) {
|
|
456
|
+
.w6w-copyable--hover > .w6w-copyable-btn {
|
|
457
|
+
opacity: 1;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
408
460
|
.w6w-code-block {
|
|
409
461
|
background: var(--w6w-panel-2);
|
|
410
462
|
border: 1px solid var(--w6w-border);
|
|
@@ -528,15 +580,17 @@
|
|
|
528
580
|
/* The expanded form of a clipped value (`resolved-clip.ts`). A block with its
|
|
529
581
|
own scroll, so "Show all" can never restore the unbounded inline paste that
|
|
530
582
|
buried the other params and the run's result. */
|
|
583
|
+
.w6w-resolved-copy {
|
|
584
|
+
margin: var(--w6w-sp-1) 0;
|
|
585
|
+
}
|
|
586
|
+
|
|
531
587
|
.w6w-resolved-text-full {
|
|
532
588
|
display: block;
|
|
533
|
-
margin:
|
|
589
|
+
margin: 0;
|
|
534
590
|
max-height: 14em;
|
|
535
591
|
overflow: auto;
|
|
536
|
-
padding:
|
|
537
|
-
|
|
538
|
-
border: 1px solid var(--w6w-border);
|
|
539
|
-
border-radius: var(--w6w-radius);
|
|
592
|
+
padding: 0;
|
|
593
|
+
padding-right: var(--w6w-sp-10);
|
|
540
594
|
font-family: var(--w6w-font-mono);
|
|
541
595
|
font-size: 0.85em; /* lint-tokens-allow: matches the sibling code-typography rules above in this same file */
|
|
542
596
|
line-height: var(--w6w-lh-normal);
|
package/src/styles/_canvas.scss
CHANGED
|
@@ -268,6 +268,41 @@
|
|
|
268
268
|
.w6w-note-menu-item:hover {
|
|
269
269
|
background: var(--w6w-panel-2);
|
|
270
270
|
}
|
|
271
|
+
// The canvas right-click menu (CanvasContextMenu): the note menu's panel and items,
|
|
272
|
+
// placed at the pointer instead of under a toolbar button.
|
|
273
|
+
.w6w-canvas-menu {
|
|
274
|
+
top: auto;
|
|
275
|
+
z-index: 10;
|
|
276
|
+
flex-direction: column;
|
|
277
|
+
min-width: 170px;
|
|
278
|
+
.w6w-note-menu-item {
|
|
279
|
+
font-weight: var(--w6w-fw-medium);
|
|
280
|
+
}
|
|
281
|
+
.w6w-note-menu-item:focus-visible {
|
|
282
|
+
outline: none;
|
|
283
|
+
background: var(--w6w-panel-2);
|
|
284
|
+
}
|
|
285
|
+
.w6w-note-menu-item.danger {
|
|
286
|
+
color: var(--w6w-danger);
|
|
287
|
+
}
|
|
288
|
+
.w6w-note-menu-item.separated {
|
|
289
|
+
position: relative;
|
|
290
|
+
margin-top: var(--w6w-sp-2);
|
|
291
|
+
}
|
|
292
|
+
.w6w-note-menu-item.separated::before {
|
|
293
|
+
content: "";
|
|
294
|
+
position: absolute;
|
|
295
|
+
top: calc(-1 * var(--w6w-sp-1) - 0.5px);
|
|
296
|
+
right: 0;
|
|
297
|
+
left: 0;
|
|
298
|
+
border-top: 1px solid var(--w6w-border);
|
|
299
|
+
}
|
|
300
|
+
.w6w-note-menu-item[aria-disabled="true"] {
|
|
301
|
+
opacity: 0.45;
|
|
302
|
+
cursor: default;
|
|
303
|
+
background: transparent;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
271
306
|
.w6w-note-size-1 {
|
|
272
307
|
font-size: var(--w6w-fs-xl);
|
|
273
308
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* Every CodeMirror code view (`JsonEditor`, `CodeEditor`, `YamlEditor`) FILLS
|
|
2
|
+
its bordered box. The border is on `.cm-editor`, which react-codemirror
|
|
3
|
+
sizes with the `height` / `minHeight` / `maxHeight` props and whose
|
|
4
|
+
`.cm-scroller` it gives `height: 100%`. With only a min/max height (the Data
|
|
5
|
+
page's Document modal) that percentage has nothing definite to resolve
|
|
6
|
+
against, so the scroller — and the gutter column inside it — stopped at the
|
|
7
|
+
last content line, the horizontal scrollbar sat right under it, and the rest
|
|
8
|
+
of the box was empty.
|
|
9
|
+
|
|
10
|
+
The react-codemirror root (the wrapper's first child) is a one-cell grid.
|
|
11
|
+
A grid area is definite once its track is sized, so `.cm-editor`, stretched
|
|
12
|
+
into it, has a definite height whether that came from `height`, from
|
|
13
|
+
`minHeight` or from the content (capped by `maxHeight`), and the scroller and
|
|
14
|
+
the gutters fill it. `minmax(0, 1fr)` keeps a long line from widening the
|
|
15
|
+
editor: the scroller scrolls it instead. The wrapper is a flex column so a
|
|
16
|
+
wrapper given a definite height (a flex item with `min-height: 0`, as in
|
|
17
|
+
`_step-config.scss`) hands that height down to the editor.
|
|
18
|
+
|
|
19
|
+
Everything sits under `:where()` (specificity 0 for the wrapper part), so a
|
|
20
|
+
call site's own layout for the same elements — `_expression-modal.scss`'s
|
|
21
|
+
JSON pane, a host's dialog — still wins. */
|
|
22
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
}
|
|
26
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) > :first-child {
|
|
27
|
+
display: grid;
|
|
28
|
+
grid-template-columns: minmax(0, 1fr);
|
|
29
|
+
flex: 1 1 auto;
|
|
30
|
+
min-height: 0;
|
|
31
|
+
}
|
|
32
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) .cm-scroller,
|
|
33
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) .cm-gutters {
|
|
34
|
+
min-height: 100%;
|
|
35
|
+
}
|
package/src/styles/_code.scss
CHANGED
|
@@ -108,15 +108,16 @@
|
|
|
108
108
|
/* The expanded form of a clipped value (`resolved-clip.ts`). A block with its
|
|
109
109
|
own scroll, so "Show all" can never restore the unbounded inline paste that
|
|
110
110
|
buried the other params and the run's result. */
|
|
111
|
+
.w6w-resolved-copy {
|
|
112
|
+
margin: var(--w6w-sp-1) 0;
|
|
113
|
+
}
|
|
111
114
|
.w6w-resolved-text-full {
|
|
112
115
|
display: block;
|
|
113
|
-
margin:
|
|
116
|
+
margin: 0;
|
|
114
117
|
max-height: 14em;
|
|
115
118
|
overflow: auto;
|
|
116
|
-
padding:
|
|
117
|
-
|
|
118
|
-
border: 1px solid var(--w6w-border);
|
|
119
|
-
border-radius: var(--w6w-radius);
|
|
119
|
+
padding: 0;
|
|
120
|
+
padding-right: var(--w6w-sp-10);
|
|
120
121
|
font-family: var(--w6w-font-mono);
|
|
121
122
|
font-size: 0.85em; /* lint-tokens-allow: matches the sibling code-typography rules above in this same file */
|
|
122
123
|
line-height: var(--w6w-lh-normal);
|
|
@@ -86,3 +86,67 @@
|
|
|
86
86
|
.w6w-connection-id-copy:focus-within .w6w-copyable-btn {
|
|
87
87
|
opacity: 1;
|
|
88
88
|
}
|
|
89
|
+
|
|
90
|
+
/* Identify workflow connections and their consuming canvas nodes. */
|
|
91
|
+
.w6w-connection-app-heading {
|
|
92
|
+
display: flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
gap: var(--w6w-sp-2);
|
|
95
|
+
}
|
|
96
|
+
.w6w-connection-node-list {
|
|
97
|
+
display: flex;
|
|
98
|
+
flex-direction: column;
|
|
99
|
+
gap: var(--w6w-sp-2);
|
|
100
|
+
list-style: none;
|
|
101
|
+
margin: 0;
|
|
102
|
+
padding: 0;
|
|
103
|
+
}
|
|
104
|
+
.w6w-connection-node-list .w6w-btn {
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: var(--w6w-sp-2);
|
|
108
|
+
text-align: left;
|
|
109
|
+
width: 100%;
|
|
110
|
+
overflow-wrap: anywhere;
|
|
111
|
+
white-space: normal;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.w6w-connection-node-label {
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
min-width: 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.w6w-workflow-connections-heading {
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
justify-content: space-between;
|
|
124
|
+
gap: var(--w6w-sp-2);
|
|
125
|
+
}
|
|
126
|
+
.w6w-workflow-connections-heading h3 { margin: 0; font-size: inherit; }
|
|
127
|
+
.w6w-workflow-connection {
|
|
128
|
+
display: flex;
|
|
129
|
+
flex-direction: column;
|
|
130
|
+
gap: var(--w6w-sp-2);
|
|
131
|
+
padding-bottom: var(--w6w-sp-3);
|
|
132
|
+
border-bottom: 1px solid var(--w6w-border);
|
|
133
|
+
}
|
|
134
|
+
.w6w-connection-summary {
|
|
135
|
+
display: flex;
|
|
136
|
+
flex-direction: column;
|
|
137
|
+
flex: 1;
|
|
138
|
+
min-width: 0;
|
|
139
|
+
overflow-wrap: anywhere;
|
|
140
|
+
}
|
|
141
|
+
.w6w-connection-consumers summary { cursor: pointer; }
|
|
142
|
+
.w6w-connection-consumers[open] summary { margin-bottom: var(--w6w-sp-2); }
|
|
143
|
+
.w6w-connection-scope { display: flex; align-items: flex-start; gap: var(--w6w-sp-2); }
|
|
144
|
+
.w6w-connection-remove { border-top: 1px solid var(--w6w-border); padding-top: var(--w6w-sp-3); }
|
|
145
|
+
|
|
146
|
+
.w6w-connection-node-kind {
|
|
147
|
+
display: inline-flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: center;
|
|
150
|
+
flex-shrink: 0;
|
|
151
|
+
color: var(--w6w-accent);
|
|
152
|
+
}
|
|
@@ -145,3 +145,27 @@
|
|
|
145
145
|
flex: 1 1 auto;
|
|
146
146
|
min-width: 0;
|
|
147
147
|
}
|
|
148
|
+
|
|
149
|
+
/* ── Hover modifier: ResultViewer — the button overlays the top-right corner of
|
|
150
|
+
ANY child and is revealed on hover/focus; always shown where there is no hover. */
|
|
151
|
+
.w6w-copyable--hover {
|
|
152
|
+
position: relative;
|
|
153
|
+
align-items: flex-start;
|
|
154
|
+
}
|
|
155
|
+
.w6w-copyable--hover > .w6w-copyable-btn {
|
|
156
|
+
position: absolute;
|
|
157
|
+
top: var(--w6w-sp-1);
|
|
158
|
+
right: var(--w6w-sp-1);
|
|
159
|
+
background: var(--w6w-panel);
|
|
160
|
+
border-color: var(--w6w-border);
|
|
161
|
+
opacity: 0;
|
|
162
|
+
}
|
|
163
|
+
.w6w-copyable--hover:hover > .w6w-copyable-btn,
|
|
164
|
+
.w6w-copyable--hover:focus-within > .w6w-copyable-btn {
|
|
165
|
+
opacity: 1;
|
|
166
|
+
}
|
|
167
|
+
@media (hover: none) {
|
|
168
|
+
.w6w-copyable--hover > .w6w-copyable-btn {
|
|
169
|
+
opacity: 1;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/* Data stores (F-2): DataStoreList, ColumnsEditor, CsvPanel and the data-grid/entry rules ported from Studio's Data store detail page. */
|
|
2
|
+
.w6w-data-store-list {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: var(--w6w-sp-3);
|
|
6
|
+
}
|
|
7
|
+
.w6w-data-store-list-head {
|
|
8
|
+
display: flex;
|
|
9
|
+
justify-content: space-between;
|
|
10
|
+
align-items: flex-start;
|
|
11
|
+
gap: var(--w6w-sp-4);
|
|
12
|
+
}
|
|
13
|
+
.w6w-data-store-list-heading {
|
|
14
|
+
min-width: 0;
|
|
15
|
+
}
|
|
16
|
+
.w6w-data-store-list-actions {
|
|
17
|
+
display: flex;
|
|
18
|
+
gap: var(--w6w-sp-2);
|
|
19
|
+
flex-shrink: 0;
|
|
20
|
+
}
|
|
21
|
+
.w6w-data-columns-head {
|
|
22
|
+
display: flex;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
align-items: center;
|
|
25
|
+
}
|
|
26
|
+
.w6w-data-columns-list {
|
|
27
|
+
list-style: none;
|
|
28
|
+
margin: 0;
|
|
29
|
+
padding: 0;
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
gap: var(--w6w-sp-2);
|
|
33
|
+
}
|
|
34
|
+
.w6w-data-columns-row {
|
|
35
|
+
display: flex;
|
|
36
|
+
flex-wrap: wrap;
|
|
37
|
+
align-items: center;
|
|
38
|
+
gap: var(--w6w-sp-2);
|
|
39
|
+
}
|
|
40
|
+
.w6w-data-columns-required {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: var(--w6w-sp-1);
|
|
44
|
+
}
|
|
45
|
+
.w6w-data-columns-error {
|
|
46
|
+
flex-basis: 100%;
|
|
47
|
+
}
|
|
48
|
+
.w6w-data-entries-toolbar {
|
|
49
|
+
display: flex;
|
|
50
|
+
align-items: center;
|
|
51
|
+
gap: var(--w6w-sp-2);
|
|
52
|
+
margin: var(--w6w-sp-3) 0;
|
|
53
|
+
}
|
|
54
|
+
.w6w-data-entries-toolbar input[type="search"] {
|
|
55
|
+
flex: 1;
|
|
56
|
+
max-width: 20rem;
|
|
57
|
+
/* Same box as `.w6w-field` inputs — no host page styles a bare search input. */
|
|
58
|
+
background: var(--w6w-panel-2);
|
|
59
|
+
border: 1px solid var(--w6w-border);
|
|
60
|
+
border-radius: 8px;
|
|
61
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-2-5);
|
|
62
|
+
color: var(--w6w-text);
|
|
63
|
+
font-size: var(--w6w-fs-sm);
|
|
64
|
+
font-family: inherit;
|
|
65
|
+
}
|
|
66
|
+
.w6w-data-entries-toolbar input[type="search"]:focus {
|
|
67
|
+
outline: none;
|
|
68
|
+
border-color: var(--w6w-accent);
|
|
69
|
+
}
|
|
70
|
+
/* Entries open a viewer. Keep the list quiet and bounded, even for long keys or JSON. */
|
|
71
|
+
.w6w-data-entry-list {
|
|
72
|
+
table-layout: fixed;
|
|
73
|
+
}
|
|
74
|
+
.w6w-data-entry-key,
|
|
75
|
+
.w6w-data-entry-preview {
|
|
76
|
+
display: block;
|
|
77
|
+
width: 100%;
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
white-space: nowrap;
|
|
80
|
+
text-overflow: ellipsis;
|
|
81
|
+
}
|
|
82
|
+
.w6w-data-entry-key {
|
|
83
|
+
appearance: none;
|
|
84
|
+
border: 0;
|
|
85
|
+
border-radius: 0;
|
|
86
|
+
background: transparent;
|
|
87
|
+
padding: 0;
|
|
88
|
+
color: inherit;
|
|
89
|
+
font: inherit;
|
|
90
|
+
text-align: left;
|
|
91
|
+
cursor: pointer;
|
|
92
|
+
}
|
|
93
|
+
.w6w-data-entry-key:focus-visible {
|
|
94
|
+
outline: 2px solid var(--w6w-accent);
|
|
95
|
+
outline-offset: 2px;
|
|
96
|
+
}
|
|
97
|
+
.w6w-data-entry-delete {
|
|
98
|
+
margin-inline-end: auto;
|
|
99
|
+
}
|
|
100
|
+
/* The wide-table pane: the sheet scrolls INSIDE this box, so a 24-column
|
|
101
|
+
table never widens its container and the page itself never overflows. */
|
|
102
|
+
.w6w-data-grid-scroll {
|
|
103
|
+
overflow-x: auto;
|
|
104
|
+
max-width: 100%;
|
|
105
|
+
}
|
|
106
|
+
.w6w-data-grid-scroll input {
|
|
107
|
+
min-width: var(--w6w-sp-16);
|
|
108
|
+
}
|
|
109
|
+
.w6w-data-cell {
|
|
110
|
+
display: flex;
|
|
111
|
+
flex-direction: column;
|
|
112
|
+
gap: var(--w6w-sp-1);
|
|
113
|
+
}
|
|
114
|
+
.w6w-data-cell-error {
|
|
115
|
+
color: var(--w6w-danger);
|
|
116
|
+
font-size: var(--w6w-fs-xs);
|
|
117
|
+
}
|
|
118
|
+
.w6w-data-row-actions {
|
|
119
|
+
display: flex;
|
|
120
|
+
align-items: center;
|
|
121
|
+
gap: var(--w6w-sp-2);
|
|
122
|
+
}
|
|
123
|
+
.w6w-data-entry-editor {
|
|
124
|
+
margin-top: var(--w6w-sp-4);
|
|
125
|
+
}
|
|
126
|
+
.w6w-data-entry-editor-actions {
|
|
127
|
+
display: flex;
|
|
128
|
+
gap: var(--w6w-sp-2);
|
|
129
|
+
margin-top: var(--w6w-sp-3);
|
|
130
|
+
}
|
|
131
|
+
.w6w-data-csv-panel {
|
|
132
|
+
margin-bottom: var(--w6w-sp-4);
|
|
133
|
+
}
|
|
134
|
+
.w6w-data-csv-panel-actions {
|
|
135
|
+
display: flex;
|
|
136
|
+
align-items: center;
|
|
137
|
+
gap: var(--w6w-sp-3);
|
|
138
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
.w6w-datavar-row {
|
|
2
2
|
display: grid;
|
|
3
|
-
|
|
3
|
+
// A long expression must not widen its track and shift the other columns in that row.
|
|
4
|
+
grid-template-columns: minmax(0, 1fr) 110px minmax(0, 1fr) auto;
|
|
4
5
|
gap: var(--w6w-sp-1-5);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
align-items: end;
|
|
6
|
+
align-items: stretch;
|
|
7
|
+
}
|
|
8
|
+
.w6w-datavar-row > * {
|
|
9
|
+
min-width: 0;
|
|
10
10
|
}
|
|
11
11
|
.w6w-datavar-row input,
|
|
12
12
|
.w6w-datavar-row select {
|
|
@@ -36,3 +36,14 @@
|
|
|
36
36
|
.w6w-datavar-row .w6w-btn {
|
|
37
37
|
padding: var(--w6w-sp-1-5) var(--w6w-sp-2-5);
|
|
38
38
|
}
|
|
39
|
+
.w6w-datavar-modes {
|
|
40
|
+
margin-left: auto;
|
|
41
|
+
}
|
|
42
|
+
.w6w-datavar-modes .active {
|
|
43
|
+
background: var(--w6w-panel-2);
|
|
44
|
+
border-color: var(--w6w-accent);
|
|
45
|
+
color: var(--w6w-accent);
|
|
46
|
+
}
|
|
47
|
+
.w6w-datavar-error {
|
|
48
|
+
color: var(--w6w-danger);
|
|
49
|
+
}
|
|
@@ -35,9 +35,30 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
.w6w-execution-list-rows > li {
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
gap: var(--w6w-sp-1);
|
|
41
|
+
min-width: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* The row stays the full-width click target; a Re-run control, when the host
|
|
45
|
+
offers one, sits beside it rather than inside it (a button cannot nest in
|
|
46
|
+
the row's own `<button>`). */
|
|
47
|
+
.w6w-execution-list-rows > li > .w6w-list-item {
|
|
48
|
+
flex: 1 1 auto;
|
|
38
49
|
min-width: 0;
|
|
39
50
|
}
|
|
40
51
|
|
|
52
|
+
.w6w-execution-list-rerun {
|
|
53
|
+
flex-shrink: 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* The row's input snippet: inline in the subtitle, so the subtitle's own
|
|
57
|
+
one-line ellipsis cuts it — no box of its own, just the code face. */
|
|
58
|
+
.w6w-execution-input-preview {
|
|
59
|
+
font-family: var(--w6w-font-mono);
|
|
60
|
+
}
|
|
61
|
+
|
|
41
62
|
/* Both non-list branches (the loading and the empty `<p>`) hang straight off
|
|
42
63
|
the root, so one direct-child rule covers them and neither needs a class the
|
|
43
64
|
pinned markup doesn't have. Same dashed box `.w6w-execution-log-empty`
|
|
@@ -193,6 +214,12 @@
|
|
|
193
214
|
min-width: 0;
|
|
194
215
|
}
|
|
195
216
|
|
|
217
|
+
/* The Back control sits alone on its own line, flush left, so the detail
|
|
218
|
+
reads as a page the list was swapped for. */
|
|
219
|
+
.w6w-execution-detail-back {
|
|
220
|
+
display: flex;
|
|
221
|
+
}
|
|
222
|
+
|
|
196
223
|
/* Title block left, controls right; the actions keep their width, the name
|
|
197
224
|
wraps or ellipses into whatever is left. */
|
|
198
225
|
.w6w-execution-detail-head {
|
|
@@ -230,6 +257,13 @@
|
|
|
230
257
|
flex-shrink: 0;
|
|
231
258
|
}
|
|
232
259
|
|
|
260
|
+
/* Glyph + label on one baseline (`.w6w-btn` itself is not a flex box). */
|
|
261
|
+
.w6w-execution-detail-rerun {
|
|
262
|
+
display: inline-flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
gap: var(--w6w-sp-1);
|
|
265
|
+
}
|
|
266
|
+
|
|
233
267
|
.w6w-execution-detail-id-line {
|
|
234
268
|
margin: 0;
|
|
235
269
|
}
|
|
@@ -280,3 +314,42 @@
|
|
|
280
314
|
color: var(--w6w-danger);
|
|
281
315
|
font-size: var(--w6w-fs-sm);
|
|
282
316
|
}
|
|
317
|
+
|
|
318
|
+
/* "Re-run": marks an execution started by History's Re-run — on its list row
|
|
319
|
+
(after the title) and on its detail ("Re-run of <id>"). */
|
|
320
|
+
.w6w-execution-rerun-tag {
|
|
321
|
+
display: inline-block;
|
|
322
|
+
margin-left: var(--w6w-sp-2);
|
|
323
|
+
padding: 0 var(--w6w-sp-1-5);
|
|
324
|
+
border: 1px solid var(--w6w-accent);
|
|
325
|
+
border-radius: var(--w6w-radius);
|
|
326
|
+
color: var(--w6w-accent);
|
|
327
|
+
font-size: var(--w6w-fs-xs);
|
|
328
|
+
line-height: var(--w6w-lh-tight);
|
|
329
|
+
vertical-align: middle;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.w6w-execution-detail-rerun-of {
|
|
333
|
+
display: flex;
|
|
334
|
+
align-items: center;
|
|
335
|
+
gap: var(--w6w-sp-1-5);
|
|
336
|
+
margin: 0;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.w6w-execution-detail-rerun-of .w6w-execution-rerun-tag {
|
|
340
|
+
margin-left: 0;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.w6w-execution-detail-rerun-of code {
|
|
344
|
+
font-family: var(--w6w-font-mono);
|
|
345
|
+
font-size: var(--w6w-fs-sm);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.w6w-execution-detail-rerun-of-link {
|
|
349
|
+
padding: 0;
|
|
350
|
+
border: none;
|
|
351
|
+
background: none;
|
|
352
|
+
color: var(--w6w-accent);
|
|
353
|
+
cursor: pointer;
|
|
354
|
+
text-decoration: underline;
|
|
355
|
+
}
|