@w6w/ui 0.2.0 → 0.2.54
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 +146 -2
- package/README.md +28 -10
- package/dist/AppPicker.d.ts +58 -2
- package/dist/CanvasContextMenu.d.ts +19 -0
- package/dist/CanvasLayer.d.ts +38 -0
- package/dist/{CodeBlock-Dot3Pd7P.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/EditConnectionModal.d.ts +6 -1
- package/dist/JsonEditor.d.ts +20 -0
- package/dist/Markdown.d.ts +25 -0
- package/dist/ParamCustomization.d.ts +5 -0
- package/dist/ParamsForm.d.ts +18 -4
- package/dist/RouterEditor.d.ts +5 -0
- package/dist/StepBuilderModal.d.ts +103 -15
- 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/WorkflowFlowEditor.d.ts +74 -7
- package/dist/app-pages.d.ts +2 -0
- 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/canvas-types.d.ts +36 -0
- package/dist/canvas-utils.d.ts +44 -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/AuthFieldsForm.d.ts +11 -0
- package/dist/components/BudgetMeter.d.ts +15 -0
- package/dist/components/CallableList.d.ts +3 -2
- package/dist/components/ColumnsEditor.d.ts +27 -0
- package/dist/components/Combobox.d.ts +19 -1
- package/dist/components/ConnectionList.d.ts +2 -3
- package/dist/components/CredentialPicker.d.ts +35 -0
- 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/DataTable.d.ts +27 -0
- package/dist/components/DataTableGrid.d.ts +46 -0
- package/dist/components/EmptyState.d.ts +9 -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/data-stores/data-store-view.d.ts +371 -0
- package/dist/dynamic-fields.d.ts +60 -0
- package/dist/editor-theme.d.ts +24 -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-fanout.d.ts +2 -2
- 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 +155 -10
- package/dist/flow-utils.d.ts +33 -12
- package/dist/flow.cjs +4 -2
- package/dist/flow.cjs.map +1 -1
- package/dist/flow.d.ts +15 -2
- package/dist/flow.mjs +3737 -1350
- 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 +43 -5
- package/dist/index.mjs +2855 -1333
- package/dist/index.mjs.map +1 -1
- package/dist/node-samples-ChdyMBnJ.cjs +22 -0
- package/dist/node-samples-ChdyMBnJ.cjs.map +1 -0
- package/dist/node-samples-DkJL07EX.js +12302 -0
- package/dist/node-samples-DkJL07EX.js.map +1 -0
- package/dist/node-samples.d.ts +80 -0
- package/dist/note-markdown.d.ts +22 -0
- package/dist/output-shape.d.ts +30 -14
- package/dist/param-customization.d.ts +7 -0
- package/dist/provider.d.ts +174 -13
- package/dist/resolve-params.d.ts +50 -11
- package/dist/run-visuals.d.ts +18 -22
- 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 +64 -0
- package/dist/test-inputs.d.ts +25 -0
- package/dist/trigger-registration.d.ts +28 -0
- package/dist/types.d.ts +179 -11
- package/dist/use-app-action-defs.d.ts +9 -1
- package/dist/use-dynamic-fields.d.ts +23 -0
- package/dist/use-test-input.d.ts +18 -0
- package/dist/workflow-connections.d.ts +30 -0
- package/package.json +18 -7
- package/src/code.css +60 -6
- package/src/styles/_budget-meter.scss +46 -0
- package/src/styles/_callable-list.scss +15 -6
- package/src/styles/_canvas.scss +353 -0
- package/src/styles/_code-editor.scss +35 -0
- package/src/styles/_code.scss +6 -5
- package/src/styles/_connections.scss +2 -14
- package/src/styles/_copyable.scss +24 -0
- package/src/styles/_data-stores.scss +138 -0
- package/src/styles/_data-table.scss +55 -0
- package/src/styles/_data-vars.scss +17 -6
- package/src/styles/_empty-state.scss +21 -0
- 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 +171 -0
- package/src/styles/_fx.scss +26 -1
- package/src/styles/_incoming-state.scss +33 -0
- package/src/styles/_layout.scss +10 -0
- package/src/styles/_markdown.scss +20 -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 +57 -14
- package/src/styles/_tokens.scss +27 -1
- package/src/styles.css +1861 -115
- package/src/styles.scss +7 -0
- package/dist/CodeBlock-CZu4TFSi.cjs +0 -15
- package/dist/CodeBlock-CZu4TFSi.cjs.map +0 -1
- package/dist/CodeBlock-Dot3Pd7P.js.map +0 -1
- package/dist/ConfirmModal-ChoiGy2K.cjs +0 -11
- package/dist/ConfirmModal-ChoiGy2K.cjs.map +0 -1
- package/dist/ConfirmModal-Wx3i8F1n.js +0 -6359
- package/dist/ConfirmModal-Wx3i8F1n.js.map +0 -1
- package/dist/Copyable-1niV9gUa.js +0 -771
- package/dist/Copyable-1niV9gUa.js.map +0 -1
- package/dist/Copyable-CYZU1o4X.cjs +0 -2
- package/dist/Copyable-CYZU1o4X.cjs.map +0 -1
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
.w6w-canvas-layer {
|
|
2
|
+
position: absolute;
|
|
3
|
+
top: 0;
|
|
4
|
+
left: 0;
|
|
5
|
+
width: 0;
|
|
6
|
+
height: 0;
|
|
7
|
+
overflow: visible;
|
|
8
|
+
pointer-events: none;
|
|
9
|
+
}
|
|
10
|
+
.w6w-canvas-section,
|
|
11
|
+
.w6w-canvas-note {
|
|
12
|
+
position: absolute;
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
border: 1px solid var(--w6w-canvas-color, var(--w6w-border));
|
|
15
|
+
border-radius: var(--w6w-radius, 6px);
|
|
16
|
+
background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 14%, transparent);
|
|
17
|
+
pointer-events: none;
|
|
18
|
+
}
|
|
19
|
+
// A note reads as a sticky: an opaque tint of its colour over the panel, so it stays legible in
|
|
20
|
+
// both themes and over a section or the grid.
|
|
21
|
+
.w6w-canvas-note {
|
|
22
|
+
border-color: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-border)) 55%, var(--w6w-panel));
|
|
23
|
+
background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 32%, var(--w6w-panel));
|
|
24
|
+
box-shadow: 0 1px 3px rgb(0 0 0 / 12%);
|
|
25
|
+
}
|
|
26
|
+
.w6w-canvas-note.selected,
|
|
27
|
+
.w6w-canvas-section.selected {
|
|
28
|
+
outline: 2px solid var(--w6w-accent);
|
|
29
|
+
outline-offset: 2px;
|
|
30
|
+
}
|
|
31
|
+
.w6w-canvas-note-body {
|
|
32
|
+
pointer-events: auto;
|
|
33
|
+
color: var(--w6w-text);
|
|
34
|
+
}
|
|
35
|
+
// A section's label sits above its frame's top-left corner, never inside the frame.
|
|
36
|
+
.w6w-canvas-section-title {
|
|
37
|
+
position: absolute;
|
|
38
|
+
max-width: 320px;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-1-5);
|
|
41
|
+
border-radius: 6px;
|
|
42
|
+
color: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-text)) 55%, var(--w6w-text));
|
|
43
|
+
font-size: var(--w6w-fs-sm);
|
|
44
|
+
font-weight: var(--w6w-fw-semibold);
|
|
45
|
+
text-overflow: ellipsis;
|
|
46
|
+
white-space: nowrap;
|
|
47
|
+
}
|
|
48
|
+
.w6w-canvas-section-title.editable {
|
|
49
|
+
pointer-events: auto;
|
|
50
|
+
cursor: grab;
|
|
51
|
+
touch-action: none;
|
|
52
|
+
}
|
|
53
|
+
.w6w-canvas-section-title.editable:hover {
|
|
54
|
+
background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 18%, transparent);
|
|
55
|
+
}
|
|
56
|
+
.w6w-canvas-note-body {
|
|
57
|
+
box-sizing: border-box;
|
|
58
|
+
height: 100%;
|
|
59
|
+
overflow: auto;
|
|
60
|
+
padding: var(--w6w-sp-3) var(--w6w-sp-3);
|
|
61
|
+
font-size: var(--w6w-fs-sm);
|
|
62
|
+
line-height: var(--w6w-lh-normal);
|
|
63
|
+
overflow-wrap: anywhere;
|
|
64
|
+
h1,
|
|
65
|
+
h2,
|
|
66
|
+
h3,
|
|
67
|
+
h4,
|
|
68
|
+
h5,
|
|
69
|
+
h6,
|
|
70
|
+
p,
|
|
71
|
+
ul,
|
|
72
|
+
ol {
|
|
73
|
+
margin: 0 0 var(--w6w-sp-1);
|
|
74
|
+
}
|
|
75
|
+
h1 {
|
|
76
|
+
font-size: var(--w6w-fs-2xl);
|
|
77
|
+
line-height: var(--w6w-lh-tight);
|
|
78
|
+
}
|
|
79
|
+
h2 {
|
|
80
|
+
font-size: var(--w6w-fs-xl);
|
|
81
|
+
line-height: var(--w6w-lh-tight);
|
|
82
|
+
}
|
|
83
|
+
h3 {
|
|
84
|
+
font-size: var(--w6w-fs-lg);
|
|
85
|
+
line-height: var(--w6w-lh-tight);
|
|
86
|
+
}
|
|
87
|
+
h4,
|
|
88
|
+
h5,
|
|
89
|
+
h6 {
|
|
90
|
+
font-size: var(--w6w-fs-base);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// The in-place editor shares the view's box and type, so editing does not shift the text.
|
|
94
|
+
.w6w-canvas-note-editor {
|
|
95
|
+
outline: none;
|
|
96
|
+
cursor: text;
|
|
97
|
+
> div,
|
|
98
|
+
> h1,
|
|
99
|
+
> h2,
|
|
100
|
+
> h3,
|
|
101
|
+
> h4,
|
|
102
|
+
> h5,
|
|
103
|
+
> h6 {
|
|
104
|
+
margin: 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// The note's corner resize grip: two diagonal strokes, shown on hover or when selected.
|
|
108
|
+
.w6w-note-resize {
|
|
109
|
+
position: absolute;
|
|
110
|
+
right: var(--w6w-sp-0-5);
|
|
111
|
+
bottom: var(--w6w-sp-0-5);
|
|
112
|
+
width: 14px;
|
|
113
|
+
height: 14px;
|
|
114
|
+
cursor: nwse-resize;
|
|
115
|
+
pointer-events: auto;
|
|
116
|
+
touch-action: none;
|
|
117
|
+
opacity: 0;
|
|
118
|
+
background: linear-gradient(
|
|
119
|
+
135deg,
|
|
120
|
+
transparent 45%,
|
|
121
|
+
var(--w6w-muted) 45% 52%,
|
|
122
|
+
transparent 52% 70%,
|
|
123
|
+
var(--w6w-muted) 70% 77%,
|
|
124
|
+
transparent 77%
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
.w6w-canvas-note:hover .w6w-note-resize,
|
|
128
|
+
.w6w-canvas-note.selected .w6w-note-resize,
|
|
129
|
+
.w6w-canvas-section.selected .w6w-note-resize {
|
|
130
|
+
opacity: 1;
|
|
131
|
+
}
|
|
132
|
+
.w6w-canvas-note-empty {
|
|
133
|
+
color: var(--w6w-muted);
|
|
134
|
+
font-style: italic;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// The selected note's floating toolbar.
|
|
138
|
+
.w6w-note-toolbar {
|
|
139
|
+
position: absolute;
|
|
140
|
+
display: flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
gap: var(--w6w-sp-0-5);
|
|
143
|
+
padding: var(--w6w-sp-1);
|
|
144
|
+
background: var(--w6w-panel);
|
|
145
|
+
color: var(--w6w-text);
|
|
146
|
+
border: 1px solid var(--w6w-border);
|
|
147
|
+
border-radius: 10px;
|
|
148
|
+
box-shadow: 0 6px 20px rgb(0 0 0 / 18%);
|
|
149
|
+
font-size: var(--w6w-fs-sm);
|
|
150
|
+
white-space: nowrap;
|
|
151
|
+
pointer-events: auto;
|
|
152
|
+
.w6w-icon-btn {
|
|
153
|
+
gap: var(--w6w-sp-1);
|
|
154
|
+
padding: var(--w6w-sp-1-5);
|
|
155
|
+
color: var(--w6w-text);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
.w6w-note-toolbar-group {
|
|
159
|
+
position: relative;
|
|
160
|
+
display: inline-flex;
|
|
161
|
+
}
|
|
162
|
+
.w6w-note-toolbar-sep {
|
|
163
|
+
align-self: stretch;
|
|
164
|
+
width: 1px;
|
|
165
|
+
margin: var(--w6w-sp-0-5) var(--w6w-sp-0-5);
|
|
166
|
+
background: var(--w6w-border);
|
|
167
|
+
}
|
|
168
|
+
.w6w-note-grip {
|
|
169
|
+
cursor: grab;
|
|
170
|
+
touch-action: none;
|
|
171
|
+
}
|
|
172
|
+
.w6w-note-grip:active {
|
|
173
|
+
cursor: grabbing;
|
|
174
|
+
}
|
|
175
|
+
// The section toolbar's label field reads as the label until focused. Sized by its `size`
|
|
176
|
+
// attribute, so a host's global `input { width: 100% }` must not collapse it inside the flex row.
|
|
177
|
+
.w6w-note-toolbar .w6w-section-title-input {
|
|
178
|
+
flex: none;
|
|
179
|
+
width: auto;
|
|
180
|
+
margin: 0;
|
|
181
|
+
padding: var(--w6w-sp-1) var(--w6w-sp-1-5);
|
|
182
|
+
border: 1px solid transparent;
|
|
183
|
+
border-radius: 6px;
|
|
184
|
+
background: transparent;
|
|
185
|
+
color: inherit;
|
|
186
|
+
font: inherit;
|
|
187
|
+
font-weight: var(--w6w-fw-semibold);
|
|
188
|
+
}
|
|
189
|
+
.w6w-note-toolbar .w6w-section-title-input:hover {
|
|
190
|
+
border-color: var(--w6w-border);
|
|
191
|
+
}
|
|
192
|
+
.w6w-note-toolbar .w6w-section-title-input:focus {
|
|
193
|
+
border-color: var(--w6w-accent);
|
|
194
|
+
outline: none;
|
|
195
|
+
}
|
|
196
|
+
.w6w-note-size-btn {
|
|
197
|
+
font-weight: var(--w6w-fw-semibold);
|
|
198
|
+
}
|
|
199
|
+
.w6w-note-delete:hover {
|
|
200
|
+
color: var(--w6w-danger);
|
|
201
|
+
}
|
|
202
|
+
.w6w-note-swatch {
|
|
203
|
+
width: 16px;
|
|
204
|
+
height: 16px;
|
|
205
|
+
border-radius: 50%;
|
|
206
|
+
background: var(--w6w-canvas-color);
|
|
207
|
+
box-shadow: inset 0 0 0 1px rgb(0 0 0 / 15%);
|
|
208
|
+
}
|
|
209
|
+
.w6w-note-menu {
|
|
210
|
+
position: absolute;
|
|
211
|
+
top: calc(100% + var(--w6w-sp-2));
|
|
212
|
+
left: 0;
|
|
213
|
+
z-index: 1;
|
|
214
|
+
display: flex;
|
|
215
|
+
padding: var(--w6w-sp-1);
|
|
216
|
+
background: var(--w6w-panel);
|
|
217
|
+
border: 1px solid var(--w6w-border);
|
|
218
|
+
border-radius: 10px;
|
|
219
|
+
box-shadow: 0 6px 20px rgb(0 0 0 / 18%);
|
|
220
|
+
}
|
|
221
|
+
.w6w-note-menu-colors {
|
|
222
|
+
display: grid;
|
|
223
|
+
grid-template-columns: repeat(5, 24px);
|
|
224
|
+
gap: var(--w6w-sp-1-5);
|
|
225
|
+
padding: var(--w6w-sp-2);
|
|
226
|
+
}
|
|
227
|
+
.w6w-note-swatch-btn {
|
|
228
|
+
position: relative;
|
|
229
|
+
width: 24px;
|
|
230
|
+
height: 24px;
|
|
231
|
+
padding: 0;
|
|
232
|
+
border: 2px solid transparent;
|
|
233
|
+
border-radius: 50%;
|
|
234
|
+
background: var(--w6w-canvas-color);
|
|
235
|
+
box-shadow: inset 0 0 0 1px rgb(0 0 0 / 15%);
|
|
236
|
+
cursor: pointer;
|
|
237
|
+
}
|
|
238
|
+
.w6w-note-swatch-btn.active {
|
|
239
|
+
border-color: var(--w6w-panel);
|
|
240
|
+
box-shadow: 0 0 0 2px var(--w6w-accent);
|
|
241
|
+
}
|
|
242
|
+
.w6w-note-swatch-custom {
|
|
243
|
+
overflow: hidden;
|
|
244
|
+
background: conic-gradient(#f87171, #facc15, #4ade80, #60a5fa, #a78bfa, #f87171);
|
|
245
|
+
input {
|
|
246
|
+
position: absolute;
|
|
247
|
+
inset: 0;
|
|
248
|
+
width: 100%;
|
|
249
|
+
height: 100%;
|
|
250
|
+
opacity: 0;
|
|
251
|
+
cursor: pointer;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
.w6w-note-menu-sizes {
|
|
255
|
+
flex-direction: column;
|
|
256
|
+
min-width: 150px;
|
|
257
|
+
}
|
|
258
|
+
.w6w-note-menu-item {
|
|
259
|
+
padding: var(--w6w-sp-1) var(--w6w-sp-2);
|
|
260
|
+
border: 0;
|
|
261
|
+
border-radius: 6px;
|
|
262
|
+
background: transparent;
|
|
263
|
+
color: inherit;
|
|
264
|
+
text-align: left;
|
|
265
|
+
font-weight: var(--w6w-fw-semibold);
|
|
266
|
+
cursor: pointer;
|
|
267
|
+
}
|
|
268
|
+
.w6w-note-menu-item:hover {
|
|
269
|
+
background: var(--w6w-panel-2);
|
|
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
|
+
}
|
|
306
|
+
.w6w-note-size-1 {
|
|
307
|
+
font-size: var(--w6w-fs-xl);
|
|
308
|
+
}
|
|
309
|
+
.w6w-note-size-2 {
|
|
310
|
+
font-size: var(--w6w-fs-lg);
|
|
311
|
+
}
|
|
312
|
+
.w6w-note-size-3 {
|
|
313
|
+
font-size: var(--w6w-fs-base);
|
|
314
|
+
}
|
|
315
|
+
.w6w-note-size-0 {
|
|
316
|
+
font-size: var(--w6w-fs-sm);
|
|
317
|
+
font-weight: var(--w6w-fw-regular);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// The editor's top-left tool strip: "+ Node", then the canvas tools as icon buttons.
|
|
321
|
+
.w6w-flow-tools {
|
|
322
|
+
display: flex;
|
|
323
|
+
align-items: center;
|
|
324
|
+
gap: var(--w6w-sp-1-5);
|
|
325
|
+
}
|
|
326
|
+
.w6w-flow-tool {
|
|
327
|
+
padding: var(--w6w-sp-2);
|
|
328
|
+
background: var(--w6w-panel);
|
|
329
|
+
color: var(--w6w-text);
|
|
330
|
+
border: 1px solid var(--w6w-border);
|
|
331
|
+
}
|
|
332
|
+
.w6w-flow-tool.active {
|
|
333
|
+
border-color: var(--w6w-accent);
|
|
334
|
+
color: var(--w6w-accent);
|
|
335
|
+
background: color-mix(in srgb, var(--w6w-accent) 12%, var(--w6w-panel));
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// The draw-section surface and the frame being dragged on it.
|
|
339
|
+
.w6w-section-draw {
|
|
340
|
+
position: absolute;
|
|
341
|
+
inset: 0;
|
|
342
|
+
z-index: 4;
|
|
343
|
+
cursor: crosshair;
|
|
344
|
+
touch-action: none;
|
|
345
|
+
}
|
|
346
|
+
.w6w-section-draw-rect {
|
|
347
|
+
position: absolute;
|
|
348
|
+
box-sizing: border-box;
|
|
349
|
+
border: 2px dashed var(--w6w-accent);
|
|
350
|
+
border-radius: var(--w6w-radius, 6px);
|
|
351
|
+
background: color-mix(in srgb, var(--w6w-accent) 10%, transparent);
|
|
352
|
+
pointer-events: none;
|
|
353
|
+
}
|
|
@@ -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);
|
|
@@ -18,23 +18,11 @@
|
|
|
18
18
|
gap: var(--w6w-sp-2);
|
|
19
19
|
flex-shrink: 0;
|
|
20
20
|
}
|
|
21
|
-
.w6w-connection-
|
|
22
|
-
|
|
23
|
-
margin: 0;
|
|
24
|
-
padding: 0;
|
|
25
|
-
display: flex;
|
|
26
|
-
flex-direction: column;
|
|
27
|
-
gap: var(--w6w-sp-1);
|
|
28
|
-
}
|
|
29
|
-
.w6w-connection-row {
|
|
30
|
-
display: flex;
|
|
21
|
+
.w6w-connection-cell-name {
|
|
22
|
+
display: inline-flex;
|
|
31
23
|
align-items: center;
|
|
32
24
|
gap: var(--w6w-sp-2);
|
|
33
25
|
}
|
|
34
|
-
.w6w-connection-row-main {
|
|
35
|
-
flex: 1;
|
|
36
|
-
min-width: 0;
|
|
37
|
-
}
|
|
38
26
|
.w6w-connection-row-actions {
|
|
39
27
|
display: flex;
|
|
40
28
|
gap: var(--w6w-sp-1-5);
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* The frame is the ONLY element of a DataTable that draws an outer border and a
|
|
2
|
+
radius (T-3). `overflow: hidden` clips the cells at the rounded corners, so
|
|
3
|
+
the table below never needs an outer edge of its own. */
|
|
4
|
+
.w6w-data-table-frame {
|
|
5
|
+
border: 1px solid var(--w6w-border);
|
|
6
|
+
border-radius: var(--w6w-radius);
|
|
7
|
+
background: var(--w6w-panel);
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
}
|
|
10
|
+
/* No outer border here (T-3): the frame above already draws it. */
|
|
11
|
+
.w6w-data-table {
|
|
12
|
+
width: 100%;
|
|
13
|
+
border-collapse: collapse;
|
|
14
|
+
color: var(--w6w-text);
|
|
15
|
+
}
|
|
16
|
+
/* Inner separators only (T-3): a right border on every cell but the last column
|
|
17
|
+
and a bottom border on every row but the last. First column, first row, last
|
|
18
|
+
column and last row therefore paint nothing on the outside — one border per
|
|
19
|
+
outer edge, from the frame. */
|
|
20
|
+
.w6w-data-table th,
|
|
21
|
+
.w6w-data-table td {
|
|
22
|
+
border-right: 1px solid var(--w6w-border);
|
|
23
|
+
border-bottom: 1px solid var(--w6w-border);
|
|
24
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-3);
|
|
25
|
+
text-align: left;
|
|
26
|
+
vertical-align: middle;
|
|
27
|
+
}
|
|
28
|
+
.w6w-data-table th:last-child,
|
|
29
|
+
.w6w-data-table td:last-child {
|
|
30
|
+
border-right: 0;
|
|
31
|
+
}
|
|
32
|
+
.w6w-data-table tbody tr:last-child > td {
|
|
33
|
+
border-bottom: 0;
|
|
34
|
+
}
|
|
35
|
+
/* Header-only table (rows=[] + loading, e.g. a list still fetching): there is no
|
|
36
|
+
`tbody tr:last-child` to strip, so the header's bottom border would sit right
|
|
37
|
+
on top of the frame's own bottom edge and paint it twice. With no body row the
|
|
38
|
+
header is the last row, so it paints no bottom border — the frame supplies it. */
|
|
39
|
+
.w6w-data-table:not(:has(tbody tr)) th {
|
|
40
|
+
border-bottom: 0;
|
|
41
|
+
}
|
|
42
|
+
.w6w-data-table th {
|
|
43
|
+
color: var(--w6w-muted);
|
|
44
|
+
}
|
|
45
|
+
.w6w-data-table-row-clickable {
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
}
|
|
48
|
+
.w6w-data-table-row-clickable:hover {
|
|
49
|
+
background: var(--w6w-panel-2);
|
|
50
|
+
}
|
|
51
|
+
.w6w-data-table-link {
|
|
52
|
+
display: block;
|
|
53
|
+
color: inherit;
|
|
54
|
+
text-decoration: none;
|
|
55
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.w6w-empty-state {
|
|
2
|
+
position: relative;
|
|
3
|
+
min-height: 10rem;
|
|
4
|
+
background: var(--w6w-panel);
|
|
5
|
+
color: var(--w6w-text);
|
|
6
|
+
border: 1px solid var(--w6w-border);
|
|
7
|
+
}
|
|
8
|
+
.w6w-empty-state-inner {
|
|
9
|
+
position: absolute;
|
|
10
|
+
top: 50%;
|
|
11
|
+
left: 50%;
|
|
12
|
+
transform: translate(-50%, -50%);
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: var(--w6w-sp-2);
|
|
17
|
+
text-align: center;
|
|
18
|
+
}
|
|
19
|
+
.w6w-empty-state-body {
|
|
20
|
+
color: var(--w6w-muted);
|
|
21
|
+
}
|