@w6w/ui 0.0.0-stage → 0.1.0
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 +48 -0
- package/LICENSE +21 -0
- package/README.md +260 -2
- package/dist/ActionTestForm.d.ts +76 -0
- package/dist/AddConnectionModal.d.ts +24 -0
- package/dist/AppPicker.d.ts +83 -0
- package/dist/CodeBlock-CZu4TFSi.cjs +15 -0
- package/dist/CodeBlock-CZu4TFSi.cjs.map +1 -0
- package/dist/CodeBlock-Dot3Pd7P.js +2889 -0
- package/dist/CodeBlock-Dot3Pd7P.js.map +1 -0
- package/dist/CodeBlock.d.ts +65 -0
- package/dist/CodeEditor.d.ts +42 -0
- package/dist/ConfirmModal-DJPYXE9t.cjs +11 -0
- package/dist/ConfirmModal-DJPYXE9t.cjs.map +1 -0
- package/dist/ConfirmModal-sY1tzkBO.js +6335 -0
- package/dist/ConfirmModal-sY1tzkBO.js.map +1 -0
- package/dist/Copyable-1niV9gUa.js +771 -0
- package/dist/Copyable-1niV9gUa.js.map +1 -0
- package/dist/Copyable-CYZU1o4X.cjs +2 -0
- package/dist/Copyable-CYZU1o4X.cjs.map +1 -0
- package/dist/JsonEditor.d.ts +60 -0
- package/dist/NodeConfigForm.d.ts +70 -0
- package/dist/ParamsForm.d.ts +56 -0
- package/dist/PropertyEntryForm.d.ts +56 -0
- package/dist/RetryPolicyFields.d.ts +18 -0
- package/dist/StepBuilderModal.d.ts +375 -0
- package/dist/TriggerFillForm.d.ts +52 -0
- package/dist/WaitEditor.d.ts +6 -0
- package/dist/WorkflowFlowEditor.d.ts +119 -0
- package/dist/YamlEditor.d.ts +46 -0
- package/dist/app-categories.d.ts +38 -0
- package/dist/app-pages.d.ts +111 -0
- package/dist/code.cjs +2 -0
- package/dist/code.cjs.map +1 -0
- package/dist/code.d.ts +29 -0
- package/dist/code.mjs +7 -0
- package/dist/code.mjs.map +1 -0
- package/dist/components/ApiCallsPanel.d.ts +41 -0
- package/dist/components/AppIcon.d.ts +25 -0
- package/dist/components/AuthFieldsForm.d.ts +22 -0
- package/dist/components/Combobox.d.ts +24 -0
- package/dist/components/ConfirmModal.d.ts +33 -0
- package/dist/components/Copyable.d.ts +51 -0
- package/dist/components/CopyableText.d.ts +40 -0
- package/dist/components/DeleteButton.d.ts +16 -0
- package/dist/components/EditButton.d.ts +10 -0
- package/dist/components/ExecutionDetail.d.ts +70 -0
- package/dist/components/ExecutionFilters.d.ts +59 -0
- package/dist/components/ExecutionList.d.ts +60 -0
- package/dist/components/ExecutionLogPanel.d.ts +98 -0
- package/dist/components/ExecutionStats.d.ts +47 -0
- package/dist/components/ExpressionEditorModal.d.ts +42 -0
- package/dist/components/ExpressionInput.d.ts +36 -0
- package/dist/components/ExpressionOptions.d.ts +185 -0
- package/dist/components/HealthStatusPill.d.ts +25 -0
- package/dist/components/HistoryTimeline.d.ts +56 -0
- package/dist/components/Icon.d.ts +34 -0
- package/dist/components/IconButton.d.ts +60 -0
- package/dist/components/InfoTip.d.ts +15 -0
- package/dist/components/InternalIcon.d.ts +19 -0
- package/dist/components/ListItem.d.ts +25 -0
- package/dist/components/Modal.d.ts +29 -0
- package/dist/components/RepoSyncIndicator.d.ts +29 -0
- package/dist/components/ResolvedParams.d.ts +31 -0
- package/dist/components/ServerResources.d.ts +47 -0
- package/dist/components/StepStatusPill.d.ts +51 -0
- package/dist/components/UptimeStrip.d.ts +56 -0
- package/dist/components/execution-format.d.ts +24 -0
- package/dist/components/expression-dom.d.ts +154 -0
- package/dist/components/expression-template.d.ts +86 -0
- package/dist/components/history-scale.d.ts +33 -0
- package/dist/components/icons.d.ts +41 -0
- package/dist/components/resolved-clip.d.ts +42 -0
- package/dist/components/server-resources-format.d.ts +68 -0
- package/dist/components/server-resources.fixture.d.ts +9 -0
- package/dist/components/use-copy.d.ts +14 -0
- package/dist/createW6WApi.d.ts +31 -0
- package/dist/flow-connect.d.ts +138 -0
- package/dist/flow-fanout.d.ts +15 -0
- package/dist/flow-types.d.ts +356 -0
- package/dist/flow-utils.d.ts +284 -0
- package/dist/flow.cjs +3 -0
- package/dist/flow.cjs.map +1 -0
- package/dist/flow.d.ts +22 -0
- package/dist/flow.mjs +1977 -0
- package/dist/flow.mjs.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.mjs +1811 -0
- package/dist/index.mjs.map +1 -0
- package/dist/oauth-popup.d.ts +17 -0
- package/dist/output-shape.d.ts +58 -0
- package/dist/provider.d.ts +420 -0
- package/dist/resolve-params.d.ts +112 -0
- package/dist/resolved-json.d.ts +21 -0
- package/dist/run-visuals.d.ts +90 -0
- package/dist/step-preview-state.d.ts +143 -0
- package/dist/theme.d.ts +32 -0
- package/dist/trigger-fields.d.ts +56 -0
- package/dist/types.d.ts +413 -0
- package/dist/ui.css +1 -0
- package/dist/use-app-action-defs.d.ts +7 -0
- package/dist/use-enter-submit.d.ts +23 -0
- package/dist/use-seed-sources.d.ts +16 -0
- package/package.json +111 -3
- package/src/code.css +542 -0
- package/src/styles/_buttons.scss +38 -0
- package/src/styles/_chips.scss +210 -0
- package/src/styles/_code.scss +139 -0
- package/src/styles/_copyable.scss +147 -0
- package/src/styles/_data-vars.scss +38 -0
- package/src/styles/_execution-history.scss +282 -0
- package/src/styles/_execution-log.scss +178 -0
- package/src/styles/_expression-field.scss +65 -0
- package/src/styles/_expression-inline.scss +63 -0
- package/src/styles/_expression-modal.scss +292 -0
- package/src/styles/_fields.scss +161 -0
- package/src/styles/_flow.scss +217 -0
- package/src/styles/_fx.scss +158 -0
- package/src/styles/_health.scss +46 -0
- package/src/styles/_history-timeline.scss +156 -0
- package/src/styles/_icon-button.scss +22 -0
- package/src/styles/_icon.scss +15 -0
- package/src/styles/_icons.scss +31 -0
- package/src/styles/_incoming-state.scss +46 -0
- package/src/styles/_info-tip.scss +9 -0
- package/src/styles/_layout.scss +6 -0
- package/src/styles/_lists.scss +64 -0
- package/src/styles/_modal.scss +125 -0
- package/src/styles/_multiselect.scss +69 -0
- package/src/styles/_repo-sync-indicator.scss +99 -0
- package/src/styles/_scale.scss +70 -0
- package/src/styles/_sections.scss +36 -0
- package/src/styles/_server-resources.scss +163 -0
- package/src/styles/_step-builder.scss +376 -0
- package/src/styles/_step-config.scss +195 -0
- package/src/styles/_tabs.scss +54 -0
- package/src/styles/_tester.scss +111 -0
- package/src/styles/_tokens.scss +141 -0
- package/src/styles/_uptime.scss +61 -0
- package/src/styles.css +4208 -0
- package/src/styles.scss +61 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/* --- ExecutionList ------------------------------------------------------- */
|
|
2
|
+
/* Rows of past executions: a click-to-select list plus a prev/next pager.
|
|
3
|
+
Closer in shape to `.w6w-execution-log` (`_execution-log.scss`) than to
|
|
4
|
+
`.w6w-history-*`: that family lays out a time-proportional strip against a
|
|
5
|
+
shared axis, while this is a plain in-order list of one row per run. The row
|
|
6
|
+
itself is `ListItem` (`.w6w-list-item`, `_lists.scss`) — reused whole, box,
|
|
7
|
+
hover, focus ring, `active` highlight and all — so this partial only owns
|
|
8
|
+
the LIST around the rows: the `ul` reset and the pager strip.
|
|
9
|
+
|
|
10
|
+
Spacing/type come from the scale tokens only (the `lint:tokens` ratchet has
|
|
11
|
+
no baseline entry for this file, so anything literal here would be a new
|
|
12
|
+
violation); colour stays on `_execution-log.scss`'s pill and the shared
|
|
13
|
+
`.w6w-btn` classes. */
|
|
14
|
+
|
|
15
|
+
.w6w-execution-list {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: var(--w6w-sp-3);
|
|
19
|
+
width: 100%;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* A `<ul>`, reset to a bare vertical stack — the marker/indent are the only
|
|
24
|
+
things `_layout.scss`'s `.w6w-stack` doesn't already strip, and rows are
|
|
25
|
+
`<li>` so the list is announced as a list, not a run of cards. */
|
|
26
|
+
.w6w-execution-list-rows {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
gap: var(--w6w-sp-1);
|
|
30
|
+
list-style: none;
|
|
31
|
+
margin: 0;
|
|
32
|
+
padding: 0;
|
|
33
|
+
width: 100%;
|
|
34
|
+
min-width: 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.w6w-execution-list-rows > li {
|
|
38
|
+
min-width: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Both non-list branches (the loading and the empty `<p>`) hang straight off
|
|
42
|
+
the root, so one direct-child rule covers them and neither needs a class the
|
|
43
|
+
pinned markup doesn't have. Same dashed box `.w6w-execution-log-empty`
|
|
44
|
+
uses — one treatment for "nothing here yet" across the run-log family. */
|
|
45
|
+
.w6w-execution-list > p {
|
|
46
|
+
width: 100%;
|
|
47
|
+
margin: 0;
|
|
48
|
+
padding: var(--w6w-sp-4);
|
|
49
|
+
border: 1px dashed var(--w6w-border);
|
|
50
|
+
border-radius: var(--w6w-radius);
|
|
51
|
+
color: var(--w6w-muted);
|
|
52
|
+
font-size: var(--w6w-fs-sm);
|
|
53
|
+
text-align: center;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.w6w-execution-list-pager {
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
justify-content: flex-end;
|
|
60
|
+
gap: var(--w6w-sp-2);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* --- ExecutionFilters --------------------------------------------------- */
|
|
64
|
+
/* One dense row of heterogeneous controls. The control chrome cannot come from
|
|
65
|
+
`_fields.scss`: those rules are anchored on `.w6w-field` (a labelled,
|
|
66
|
+
stacked field with a visible `<span>`), and these controls are labelled
|
|
67
|
+
accessibly (`aria-label`) instead — a visible label per control would triple
|
|
68
|
+
the bar's height. Tokens only, for the same reason as the rules above. */
|
|
69
|
+
|
|
70
|
+
/* The row is width-driven: a wrapped line is formed from each control's
|
|
71
|
+
*hypothetical* size, so six controls plus their gaps sit on one line for as
|
|
72
|
+
long as they fit, and the row breaks by itself once they don't. That is the
|
|
73
|
+
behaviour this bar needs — it renders full width in the studio History page
|
|
74
|
+
and ~500px wide inside the detail modal — so the break follows THIS box
|
|
75
|
+
rather than the viewport, and nothing here may key off a media query. */
|
|
76
|
+
.w6w-execution-filters {
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-wrap: wrap;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: var(--w6w-sp-2);
|
|
81
|
+
width: 100%;
|
|
82
|
+
min-width: 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* These are bare form elements, so a host's own global `input`/`select` chrome
|
|
86
|
+
lands on them too — and in the studio it is decisive: `studio/src/styles.css`
|
|
87
|
+
gives `input[type="search"]`/`input[type="date"]` a `width: 100%` and a
|
|
88
|
+
`margin-top`. A `width: 100%` on a flex item whose `flex-basis` is `auto` IS
|
|
89
|
+
that item's basis, so each date picker asked for the whole bar and the row
|
|
90
|
+
broke into one control per line, while the margin lifted the two inputs off
|
|
91
|
+
the selects' line. Both are pinned back here; at (0,2,1) this selector beats
|
|
92
|
+
a host's bare `input[type=…]` (0,1,1) and `input` (0,0,1) rules without
|
|
93
|
+
needing `!important`, and a host that leaves the controls alone is unaffected
|
|
94
|
+
because `width: auto`/`margin: 0` are what these controls want anyway. */
|
|
95
|
+
.w6w-execution-filters input[type="search"],
|
|
96
|
+
.w6w-execution-filters input[type="date"],
|
|
97
|
+
.w6w-execution-filters select {
|
|
98
|
+
background: var(--w6w-panel-2);
|
|
99
|
+
border: 1px solid var(--w6w-border);
|
|
100
|
+
border-radius: var(--w6w-radius);
|
|
101
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-2-5);
|
|
102
|
+
margin: 0;
|
|
103
|
+
width: auto;
|
|
104
|
+
color: var(--w6w-text);
|
|
105
|
+
font-size: var(--w6w-fs-sm);
|
|
106
|
+
font-family: inherit;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.w6w-execution-filters input[type="search"]:focus-visible,
|
|
110
|
+
.w6w-execution-filters input[type="date"]:focus-visible,
|
|
111
|
+
.w6w-execution-filters select:focus-visible {
|
|
112
|
+
outline: 2px solid var(--w6w-accent);
|
|
113
|
+
outline-offset: 1px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* The dropdowns and the two date pickers show one short, fixed label, so they
|
|
117
|
+
keep their intrinsic width and neither grow nor shrink: the row's spare width
|
|
118
|
+
is the search box's alone. */
|
|
119
|
+
.w6w-execution-filters select,
|
|
120
|
+
.w6w-execution-filters input[type="date"] {
|
|
121
|
+
flex: 0 0 auto;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* The search box is the only control that flexes — it takes the spare width and
|
|
125
|
+
gives it back down to a 160px floor, and that floor is what sets the row's
|
|
126
|
+
breakpoint: 160px of search + the five intrinsic controls + five 8px gaps
|
|
127
|
+
≈ 757px, so the bar is one row from the 760px the layout promises, and wraps
|
|
128
|
+
below it. */
|
|
129
|
+
.w6w-execution-filters-search {
|
|
130
|
+
flex: 1 1 160px;
|
|
131
|
+
min-width: 160px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Clear is a fixed-size control and stays at the end of the row. */
|
|
135
|
+
.w6w-execution-filters-clear {
|
|
136
|
+
flex: 0 0 auto;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* --- ExecutionStats ----------------------------------------------------- */
|
|
140
|
+
/* The `DashboardPage.tsx` `StatCard` shape (big value, muted label) promoted
|
|
141
|
+
out of the page and onto tokens — that page had the value's type ramp and
|
|
142
|
+
weight inline, which is exactly what a shared component must not leave to
|
|
143
|
+
its host. */
|
|
144
|
+
|
|
145
|
+
.w6w-execution-stats {
|
|
146
|
+
display: flex;
|
|
147
|
+
flex-direction: column;
|
|
148
|
+
gap: var(--w6w-sp-2);
|
|
149
|
+
width: 100%;
|
|
150
|
+
min-width: 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.w6w-execution-stats-label {
|
|
154
|
+
margin: 0;
|
|
155
|
+
color: var(--w6w-muted);
|
|
156
|
+
font-size: var(--w6w-fs-sm);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.w6w-execution-stats-cards {
|
|
160
|
+
display: flex;
|
|
161
|
+
flex-wrap: wrap;
|
|
162
|
+
gap: var(--w6w-sp-3);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.w6w-execution-stat {
|
|
166
|
+
display: flex;
|
|
167
|
+
flex-direction: column;
|
|
168
|
+
gap: var(--w6w-sp-0-5);
|
|
169
|
+
flex: 1 1 140px;
|
|
170
|
+
min-width: 0;
|
|
171
|
+
padding: var(--w6w-sp-3);
|
|
172
|
+
border: 1px solid var(--w6w-border);
|
|
173
|
+
border-radius: var(--w6w-radius);
|
|
174
|
+
background: var(--w6w-panel-2);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.w6w-execution-stat-value {
|
|
178
|
+
color: var(--w6w-text);
|
|
179
|
+
font-size: var(--w6w-fs-3xl);
|
|
180
|
+
font-weight: var(--w6w-fw-semibold);
|
|
181
|
+
line-height: var(--w6w-lh-tight);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.w6w-execution-stat-label {
|
|
185
|
+
color: var(--w6w-muted);
|
|
186
|
+
font-size: var(--w6w-fs-sm);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* --- ExecutionDetail ---------------------------------------------------- */
|
|
190
|
+
|
|
191
|
+
.w6w-execution-detail {
|
|
192
|
+
width: 100%;
|
|
193
|
+
min-width: 0;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* Title block left, controls right; the actions keep their width, the name
|
|
197
|
+
wraps or ellipses into whatever is left. */
|
|
198
|
+
.w6w-execution-detail-head {
|
|
199
|
+
display: flex;
|
|
200
|
+
align-items: flex-start;
|
|
201
|
+
justify-content: space-between;
|
|
202
|
+
gap: var(--w6w-sp-3);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.w6w-execution-detail-title {
|
|
206
|
+
display: flex;
|
|
207
|
+
flex-direction: column;
|
|
208
|
+
gap: var(--w6w-sp-0-5);
|
|
209
|
+
min-width: 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.w6w-execution-detail-name {
|
|
213
|
+
margin: 0;
|
|
214
|
+
color: var(--w6w-text);
|
|
215
|
+
font-size: var(--w6w-fs-lg);
|
|
216
|
+
font-weight: var(--w6w-fw-semibold);
|
|
217
|
+
overflow-wrap: anywhere;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.w6w-execution-detail-meta {
|
|
221
|
+
display: flex;
|
|
222
|
+
align-items: center;
|
|
223
|
+
gap: var(--w6w-sp-2);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.w6w-execution-detail-actions {
|
|
227
|
+
display: flex;
|
|
228
|
+
align-items: center;
|
|
229
|
+
gap: var(--w6w-sp-2);
|
|
230
|
+
flex-shrink: 0;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.w6w-execution-detail-id-line {
|
|
234
|
+
margin: 0;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.w6w-execution-detail-id {
|
|
238
|
+
font-family: var(--w6w-font-mono);
|
|
239
|
+
font-size: var(--w6w-fs-sm);
|
|
240
|
+
color: var(--w6w-muted);
|
|
241
|
+
overflow-wrap: anywhere;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* A `<dl>` whose pairs are `<div>`s, so the three facts row up side by side
|
|
245
|
+
instead of stacking as three label/value paragraphs. */
|
|
246
|
+
.w6w-execution-detail-timing {
|
|
247
|
+
display: flex;
|
|
248
|
+
flex-wrap: wrap;
|
|
249
|
+
gap: var(--w6w-sp-5);
|
|
250
|
+
margin: 0;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.w6w-execution-detail-timing-item {
|
|
254
|
+
display: flex;
|
|
255
|
+
flex-direction: column;
|
|
256
|
+
gap: var(--w6w-sp-0-5);
|
|
257
|
+
min-width: 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.w6w-execution-detail-timing-item dt {
|
|
261
|
+
color: var(--w6w-muted);
|
|
262
|
+
font-size: var(--w6w-fs-xs);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.w6w-execution-detail-timing-item dd {
|
|
266
|
+
margin: 0;
|
|
267
|
+
color: var(--w6w-text);
|
|
268
|
+
font-size: var(--w6w-fs-sm);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/* The view-level failure notice: the same danger token `.w6w-btn-danger` and
|
|
272
|
+
the health pills use, tinted rather than filled so it reads as a notice and
|
|
273
|
+
not as a button. */
|
|
274
|
+
.w6w-execution-detail-error-message {
|
|
275
|
+
margin: 0;
|
|
276
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-3);
|
|
277
|
+
border: 1px solid var(--w6w-danger);
|
|
278
|
+
border-radius: var(--w6w-radius);
|
|
279
|
+
background: color-mix(in srgb, var(--w6w-danger) 10%, transparent);
|
|
280
|
+
color: var(--w6w-danger);
|
|
281
|
+
font-size: var(--w6w-fs-sm);
|
|
282
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/* --- StepStatusPill ---------------------------------------------------- */
|
|
2
|
+
/* Mirrors `.w6w-health-pill` shape for shape (see `_health.scss`), with its
|
|
3
|
+
own five-state colour set behind `--w6w-step-color` — never a new global
|
|
4
|
+
`--w6w-*` token, only the base palette (`--w6w-muted`/`--w6w-accent`/
|
|
5
|
+
`--w6w-success`/`--w6w-danger`) this file is scoped to. */
|
|
6
|
+
.w6w-step-pill {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
gap: var(--w6w-sp-1-5);
|
|
10
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-2) var(--w6w-sp-0-5) var(--w6w-sp-1-5);
|
|
11
|
+
border: 1px solid color-mix(in srgb, var(--w6w-step-color) 40%, var(--w6w-border));
|
|
12
|
+
border-radius: 999px;
|
|
13
|
+
background: color-mix(in srgb, var(--w6w-step-color) 12%, transparent);
|
|
14
|
+
color: var(--w6w-text);
|
|
15
|
+
font-size: var(--w6w-fs-xs);
|
|
16
|
+
line-height: var(--w6w-lh-normal);
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
--w6w-step-color: var(--w6w-muted);
|
|
19
|
+
}
|
|
20
|
+
.w6w-step-pill-pending {
|
|
21
|
+
--w6w-step-color: var(--w6w-muted);
|
|
22
|
+
}
|
|
23
|
+
.w6w-step-pill-running {
|
|
24
|
+
--w6w-step-color: var(--w6w-accent);
|
|
25
|
+
}
|
|
26
|
+
.w6w-step-pill-succeeded {
|
|
27
|
+
--w6w-step-color: var(--w6w-success);
|
|
28
|
+
}
|
|
29
|
+
.w6w-step-pill-failed {
|
|
30
|
+
--w6w-step-color: var(--w6w-danger);
|
|
31
|
+
}
|
|
32
|
+
/* Same base colour as `pending` — a dashed border, not a second colour, is
|
|
33
|
+
what keeps this distinct: colour alone is never the only signal, and this
|
|
34
|
+
pill already carries a different text label too. */
|
|
35
|
+
.w6w-step-pill-skipped {
|
|
36
|
+
--w6w-step-color: var(--w6w-muted);
|
|
37
|
+
border-style: dashed;
|
|
38
|
+
}
|
|
39
|
+
/* The two RUN states (`ExecutionStatus`), both deliberately in the same muted
|
|
40
|
+
family as `pending`/`skipped` above: neither is a verdict on the work —
|
|
41
|
+
`queued` hasn't started and `canceled` stopped before reaching one — so
|
|
42
|
+
neither earns `--w6w-success`/`--w6w-danger`/`--w6w-accent`, and this file
|
|
43
|
+
keeps its stated scope (the base palette only, never a new global token).
|
|
44
|
+
`canceled` takes `skipped`'s dashed border for the same reason that one
|
|
45
|
+
does; the two never co-occur in one list (one is a step state, the other a
|
|
46
|
+
run state), and the label carries the meaning regardless. */
|
|
47
|
+
.w6w-step-pill-queued {
|
|
48
|
+
--w6w-step-color: var(--w6w-muted);
|
|
49
|
+
}
|
|
50
|
+
.w6w-step-pill-canceled {
|
|
51
|
+
--w6w-step-color: var(--w6w-muted);
|
|
52
|
+
border-style: dashed;
|
|
53
|
+
}
|
|
54
|
+
.w6w-step-pill-dot {
|
|
55
|
+
flex-shrink: 0;
|
|
56
|
+
width: 8px;
|
|
57
|
+
height: 8px;
|
|
58
|
+
border-radius: 50%;
|
|
59
|
+
background: var(--w6w-step-color);
|
|
60
|
+
}
|
|
61
|
+
.w6w-step-pill-label {
|
|
62
|
+
overflow: hidden;
|
|
63
|
+
text-overflow: ellipsis;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* --- ExecutionLogPanel --------------------------------------------------- */
|
|
67
|
+
/* A vertical ordered list, not `_history-timeline.scss`'s idiom: that
|
|
68
|
+
partial lays out a fixed WINDOW of time-proportional lanes (`left`/`width`
|
|
69
|
+
percentages against a shared axis) for a health-history strip, which has
|
|
70
|
+
no notion of "one row per step" or of steps that haven't happened yet.
|
|
71
|
+
This panel is a plain in-order list of a priori unbounded rows, closer in
|
|
72
|
+
shape to `.w6w-resolved-table`'s row list — reused here as `.w6w-stack`
|
|
73
|
+
(`_layout.scss`) for the two-block (input/output) stack inside a row,
|
|
74
|
+
rather than inventing a second vertical-list treatment.
|
|
75
|
+
|
|
76
|
+
Each row's own box (border/background/border-radius/padding) comes from
|
|
77
|
+
`.w6w-section` (`_sections.scss`), reused rather than duplicated here —
|
|
78
|
+
`ApiCallsPanel.tsx`'s collapsed-by-default `<details>` idiom, applied to
|
|
79
|
+
this panel's rows (REVIEW.md R-1). This file only adds the row-specific
|
|
80
|
+
layout `.w6w-section` doesn't know about: the flex line for the summary's
|
|
81
|
+
pill/label/timing. */
|
|
82
|
+
|
|
83
|
+
/* The optional header row (T1.1.1 A4) — rendered only when the host supplies
|
|
84
|
+
`onDismiss`, and in BOTH branches below, since the empty state is exactly
|
|
85
|
+
where a dismiss control is needed most. Right-aligned, mirroring where
|
|
86
|
+
studio's own `.notice-close` dismiss sits on a panel header; that class is
|
|
87
|
+
studio-scoped CSS and does not exist in this package, so only the placement
|
|
88
|
+
transfers, not the rule. */
|
|
89
|
+
.w6w-execution-log-head {
|
|
90
|
+
display: flex;
|
|
91
|
+
justify-content: flex-end;
|
|
92
|
+
align-items: center;
|
|
93
|
+
gap: var(--w6w-sp-2);
|
|
94
|
+
width: 100%;
|
|
95
|
+
margin-bottom: var(--w6w-sp-2);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.w6w-execution-log {
|
|
99
|
+
display: flex;
|
|
100
|
+
flex-direction: column;
|
|
101
|
+
gap: var(--w6w-sp-3);
|
|
102
|
+
list-style: none;
|
|
103
|
+
margin: 0;
|
|
104
|
+
padding: 0;
|
|
105
|
+
width: 100%;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* `width: 100%` plus padding and a border overflows the parent under the
|
|
109
|
+
default content-box sizing; this package has no global box-sizing reset, so
|
|
110
|
+
it opts in per element (as `_chips.scss` and `_step-config.scss` do). */
|
|
111
|
+
.w6w-execution-log-empty {
|
|
112
|
+
box-sizing: border-box;
|
|
113
|
+
width: 100%;
|
|
114
|
+
padding: var(--w6w-sp-4);
|
|
115
|
+
border: 1px dashed var(--w6w-border);
|
|
116
|
+
border-radius: var(--w6w-radius);
|
|
117
|
+
text-align: center;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.w6w-execution-log-row {
|
|
121
|
+
min-width: 0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.w6w-execution-log-row-header {
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: var(--w6w-sp-2);
|
|
128
|
+
flex-wrap: wrap;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.w6w-execution-log-row-label {
|
|
132
|
+
flex: 1 1 auto;
|
|
133
|
+
min-width: 0;
|
|
134
|
+
font-weight: var(--w6w-fw-medium);
|
|
135
|
+
overflow: hidden;
|
|
136
|
+
text-overflow: ellipsis;
|
|
137
|
+
white-space: nowrap;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* Shrinkable, so a narrow row (the 360px docked panel) wraps the
|
|
141
|
+
"<ts> → <ts> (elapsed)" text inside the row's box. With `flex-shrink: 0` it
|
|
142
|
+
kept its max-content width, wrapped onto its own flex line, and ran past the
|
|
143
|
+
row's border. */
|
|
144
|
+
.w6w-execution-log-timing {
|
|
145
|
+
flex: 0 1 auto;
|
|
146
|
+
min-width: 0;
|
|
147
|
+
color: var(--w6w-muted);
|
|
148
|
+
font-size: var(--w6w-fs-xs);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.w6w-execution-log-json {
|
|
152
|
+
min-width: 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Error blocks (step `error`, run `runError`/`stepErrors`). The box itself is
|
|
156
|
+
`.w6w-result.w6w-error` (`_tester.scss`) — TriggerFillForm's StepError
|
|
157
|
+
visual, reused, not restyled here; these rules only place it. */
|
|
158
|
+
.w6w-execution-log-errors {
|
|
159
|
+
width: 100%;
|
|
160
|
+
margin-bottom: var(--w6w-sp-2);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* A step's error sits after its `.w6w-section` box, inside the same `<li>` —
|
|
164
|
+
closer to its own row than the list's row gap, so it reads as that row's. */
|
|
165
|
+
.w6w-execution-log-row > .w6w-error {
|
|
166
|
+
margin-top: var(--w6w-sp-1-5);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* TriggerFillForm's inline `opacity: 0.75; marginBottom: 4` code line, as tokens. */
|
|
170
|
+
.w6w-execution-log-error-code {
|
|
171
|
+
opacity: 0.75;
|
|
172
|
+
margin-bottom: var(--w6w-sp-1);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.w6w-execution-log-error-label {
|
|
176
|
+
display: block;
|
|
177
|
+
margin-bottom: var(--w6w-sp-1);
|
|
178
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/* Expression input: a field whose contents are inline SEGMENTS — plain text
|
|
2
|
+
plus var/secret/expr chips, edited in place (contentEditable, like a Notion /
|
|
3
|
+
Zapier block field). A small toolbar carries the Insert menu + the {{ }} (fx)
|
|
4
|
+
mode toggle. Theme-aware via the shared tokens. */
|
|
5
|
+
.w6w-expr {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--w6w-sp-1-5);
|
|
9
|
+
}
|
|
10
|
+
/* Inline expression field: ONE input-like box holding the editable surface plus
|
|
11
|
+
a ƒx button that reads as a trailing decoration INSIDE it — the same idiom as
|
|
12
|
+
`.w6w-multiselect` above and `.w6w-expr-sealed` below. The box lives here so
|
|
13
|
+
the standalone uses still render as a field (the `secret` param path and the
|
|
14
|
+
public ExpressionInput export). When this rides inside a `.w6w-fx-wrap`, that
|
|
15
|
+
wrapper is the box and this is flattened — see `.w6w-fx-wrap` below. */
|
|
16
|
+
.w6w-expr-field {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: var(--w6w-sp-1);
|
|
20
|
+
background: var(--w6w-panel-2);
|
|
21
|
+
border: 1px solid var(--w6w-border);
|
|
22
|
+
border-radius: 8px;
|
|
23
|
+
padding: var(--w6w-sp-1) var(--w6w-sp-2);
|
|
24
|
+
min-height: 38px;
|
|
25
|
+
}
|
|
26
|
+
.w6w-expr-field:focus-within {
|
|
27
|
+
border-color: var(--w6w-accent);
|
|
28
|
+
}
|
|
29
|
+
.w6w-expr-field .w6w-expr-editor {
|
|
30
|
+
flex: 1;
|
|
31
|
+
min-width: 0;
|
|
32
|
+
}
|
|
33
|
+
/* The ƒx rides inside the box, so it draws no chrome of its own — only its
|
|
34
|
+
colour states remain. */
|
|
35
|
+
.w6w-expr-field .w6w-expr-edit {
|
|
36
|
+
border: none;
|
|
37
|
+
background: transparent;
|
|
38
|
+
}
|
|
39
|
+
.w6w-expr-edit {
|
|
40
|
+
flex-shrink: 0;
|
|
41
|
+
color: var(--w6w-muted);
|
|
42
|
+
font-family: var(--w6w-font-mono);
|
|
43
|
+
font-size: 13px;
|
|
44
|
+
line-height: 1;
|
|
45
|
+
padding: var(--w6w-sp-1) var(--w6w-sp-1-5);
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
}
|
|
48
|
+
.w6w-expr-edit:hover {
|
|
49
|
+
color: var(--w6w-accent);
|
|
50
|
+
}
|
|
51
|
+
/* Sealed at-rest secret (masked chip + Replace). */
|
|
52
|
+
.w6w-expr-sealed {
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
gap: var(--w6w-sp-1-5);
|
|
56
|
+
background: var(--w6w-panel-2);
|
|
57
|
+
border: 1px solid var(--w6w-border);
|
|
58
|
+
border-radius: 8px;
|
|
59
|
+
padding: 5px var(--w6w-sp-2);
|
|
60
|
+
min-height: 38px;
|
|
61
|
+
}
|
|
62
|
+
.w6w-expr-sealed.is-readonly {
|
|
63
|
+
opacity: 0.7;
|
|
64
|
+
}
|
|
65
|
+
/* Expression editor modal: left data sources | right (editor over preview). */
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* The raw {{ }} input stands alone, so it keeps an input box of its own. */
|
|
2
|
+
.w6w-expr-raw {
|
|
3
|
+
width: 100%;
|
|
4
|
+
background: var(--w6w-panel-2);
|
|
5
|
+
border: 1px solid var(--w6w-border);
|
|
6
|
+
border-radius: 8px;
|
|
7
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-2-5);
|
|
8
|
+
min-height: 38px;
|
|
9
|
+
color: var(--w6w-text);
|
|
10
|
+
font-family: var(--w6w-font-mono);
|
|
11
|
+
font-size: 13px;
|
|
12
|
+
line-height: var(--w6w-lh-relaxed);
|
|
13
|
+
}
|
|
14
|
+
.w6w-expr-raw:focus {
|
|
15
|
+
outline: none;
|
|
16
|
+
border-color: var(--w6w-accent);
|
|
17
|
+
}
|
|
18
|
+
/* The inline editor surface (one continuous field) sits INSIDE
|
|
19
|
+
`.w6w-expr-field`'s box, so it draws no chrome — the border, the background
|
|
20
|
+
and the focus ring all belong to that box. */
|
|
21
|
+
.w6w-expr-editor {
|
|
22
|
+
width: 100%;
|
|
23
|
+
padding: var(--w6w-sp-0-5) 0;
|
|
24
|
+
color: var(--w6w-text);
|
|
25
|
+
font-size: var(--w6w-fs-sm);
|
|
26
|
+
font-family: inherit;
|
|
27
|
+
line-height: var(--w6w-lh-relaxed);
|
|
28
|
+
outline: none;
|
|
29
|
+
white-space: pre-wrap;
|
|
30
|
+
word-break: break-word;
|
|
31
|
+
}
|
|
32
|
+
.w6w-expr-editor.is-readonly,
|
|
33
|
+
.w6w-expr-input.is-readonly {
|
|
34
|
+
opacity: 0.7;
|
|
35
|
+
}
|
|
36
|
+
/* Placeholder for the empty contentEditable field. */
|
|
37
|
+
.w6w-expr-editor.is-empty::before {
|
|
38
|
+
content: attr(data-placeholder);
|
|
39
|
+
color: var(--w6w-muted);
|
|
40
|
+
pointer-events: none;
|
|
41
|
+
}
|
|
42
|
+
/* Masked (secret) fields: mask typed TEXT as dots; chips are exempt — a chip
|
|
43
|
+
shows a name/label, never a secret value. */
|
|
44
|
+
.w6w-expr-editor.is-masked {
|
|
45
|
+
-webkit-text-security: disc;
|
|
46
|
+
text-security: disc;
|
|
47
|
+
}
|
|
48
|
+
.w6w-expr-editor.is-masked .w6w-expr-chip {
|
|
49
|
+
-webkit-text-security: none;
|
|
50
|
+
text-security: none;
|
|
51
|
+
}
|
|
52
|
+
/* Sealed at-rest secret uses a simple flex wrapper (chip + Replace). */
|
|
53
|
+
.w6w-expr-input {
|
|
54
|
+
display: flex;
|
|
55
|
+
flex-wrap: wrap;
|
|
56
|
+
align-items: center;
|
|
57
|
+
gap: var(--w6w-sp-1-5);
|
|
58
|
+
background: var(--w6w-panel-2);
|
|
59
|
+
border: 1px solid var(--w6w-border);
|
|
60
|
+
border-radius: 8px;
|
|
61
|
+
padding: 5px var(--w6w-sp-2);
|
|
62
|
+
min-height: 38px;
|
|
63
|
+
}
|