@w6w/ui 0.2.11 → 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 +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/WorkflowFlowEditor.d.ts +64 -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/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/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 +7 -3
- package/dist/flow.mjs +3563 -1557
- 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 +2555 -1272
- 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/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 +30 -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/_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 +160 -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 +1290 -77
- 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/src/styles.css
CHANGED
|
@@ -699,7 +699,9 @@ svg.react-flow__connectionline {
|
|
|
699
699
|
* host rule — even a plain `:root { ... }` — wins without !important. Tokens are
|
|
700
700
|
* defined on :root so every `.w6w-*` component inherits them out of the box.
|
|
701
701
|
*/
|
|
702
|
-
/* Light — the base defaults.
|
|
702
|
+
/* Light — the base defaults.
|
|
703
|
+
`--w6w-loop-N` is the For each palette (flow-loop-colors.ts, LOOP_TONES): no red,
|
|
704
|
+
black or green, so a loop never reads as an error port or a success edge. */
|
|
703
705
|
:where(:root) {
|
|
704
706
|
--w6w-bg: #f7f8fa;
|
|
705
707
|
--w6w-panel: #ffffff;
|
|
@@ -715,6 +717,12 @@ svg.react-flow__connectionline {
|
|
|
715
717
|
--w6w-health-down: var(--w6w-danger);
|
|
716
718
|
--w6w-health-unknown: #5f6875;
|
|
717
719
|
--w6w-icon-swatch: #f0f2f6;
|
|
720
|
+
--w6w-loop-1: #2f6fdf;
|
|
721
|
+
--w6w-loop-2: #7c4ddb;
|
|
722
|
+
--w6w-loop-3: #b7791f;
|
|
723
|
+
--w6w-loop-4: #0e8fa8;
|
|
724
|
+
--w6w-loop-5: #b0399f;
|
|
725
|
+
--w6w-loop-6: #4f4fc7;
|
|
718
726
|
--w6w-code-comment: #6b7280;
|
|
719
727
|
--w6w-code-keyword: #8250df;
|
|
720
728
|
--w6w-code-string: #0a7b34;
|
|
@@ -744,6 +752,12 @@ svg.react-flow__connectionline {
|
|
|
744
752
|
--w6w-health-down: var(--w6w-danger);
|
|
745
753
|
--w6w-health-unknown: #9aa3b2;
|
|
746
754
|
--w6w-icon-swatch: #1f232c;
|
|
755
|
+
--w6w-loop-1: #5b9bff;
|
|
756
|
+
--w6w-loop-2: #a98bff;
|
|
757
|
+
--w6w-loop-3: #f0b13a;
|
|
758
|
+
--w6w-loop-4: #3cc6e0;
|
|
759
|
+
--w6w-loop-5: #e47ad6;
|
|
760
|
+
--w6w-loop-6: #8a8aff;
|
|
747
761
|
--w6w-scheme: dark;
|
|
748
762
|
--w6w-code-comment: #7d8797;
|
|
749
763
|
--w6w-code-keyword: #d2a8ff;
|
|
@@ -772,6 +786,12 @@ svg.react-flow__connectionline {
|
|
|
772
786
|
--w6w-health-down: var(--w6w-danger);
|
|
773
787
|
--w6w-health-unknown: #5f6875;
|
|
774
788
|
--w6w-icon-swatch: #f0f2f6;
|
|
789
|
+
--w6w-loop-1: #2f6fdf;
|
|
790
|
+
--w6w-loop-2: #7c4ddb;
|
|
791
|
+
--w6w-loop-3: #b7791f;
|
|
792
|
+
--w6w-loop-4: #0e8fa8;
|
|
793
|
+
--w6w-loop-5: #b0399f;
|
|
794
|
+
--w6w-loop-6: #4f4fc7;
|
|
775
795
|
--w6w-code-comment: #6b7280;
|
|
776
796
|
--w6w-code-keyword: #8250df;
|
|
777
797
|
--w6w-code-string: #0a7b34;
|
|
@@ -797,6 +817,12 @@ svg.react-flow__connectionline {
|
|
|
797
817
|
--w6w-health-down: var(--w6w-danger);
|
|
798
818
|
--w6w-health-unknown: #9aa3b2;
|
|
799
819
|
--w6w-icon-swatch: #1f232c;
|
|
820
|
+
--w6w-loop-1: #5b9bff;
|
|
821
|
+
--w6w-loop-2: #a98bff;
|
|
822
|
+
--w6w-loop-3: #f0b13a;
|
|
823
|
+
--w6w-loop-4: #3cc6e0;
|
|
824
|
+
--w6w-loop-5: #e47ad6;
|
|
825
|
+
--w6w-loop-6: #8a8aff;
|
|
800
826
|
--w6w-code-comment: #7d8797;
|
|
801
827
|
--w6w-code-keyword: #d2a8ff;
|
|
802
828
|
--w6w-code-string: #7ee787;
|
|
@@ -1109,6 +1135,18 @@ select optgroup {
|
|
|
1109
1135
|
margin-top: var(--w6w-sp-0-5);
|
|
1110
1136
|
}
|
|
1111
1137
|
|
|
1138
|
+
/* Combobox (`components/Combobox.tsx`): its <input> sits inside the component's
|
|
1139
|
+
own positioned root, so it is not a direct flex child of `.w6w-field` and would
|
|
1140
|
+
keep its intrinsic width. The root and the input fill the field instead. */
|
|
1141
|
+
.w6w-combobox {
|
|
1142
|
+
width: 100%;
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
.w6w-combobox > input[type=text] {
|
|
1146
|
+
width: 100%;
|
|
1147
|
+
box-sizing: border-box;
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1112
1150
|
/* Material-style multi-select: chips live INSIDE a single input-like box,
|
|
1113
1151
|
followed by the dropdown which reads as the trailing placeholder. */
|
|
1114
1152
|
.w6w-multiselect {
|
|
@@ -1186,6 +1224,49 @@ select optgroup {
|
|
|
1186
1224
|
color: var(--w6w-text);
|
|
1187
1225
|
}
|
|
1188
1226
|
|
|
1227
|
+
.w6w-fx-wrap:has(> .w6w-multiselect-checks) {
|
|
1228
|
+
align-items: flex-start;
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
.w6w-multiselect-checks {
|
|
1232
|
+
padding: var(--w6w-sp-1) 0;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
.w6w-multiselect-checks-toolbar {
|
|
1236
|
+
display: flex;
|
|
1237
|
+
align-items: center;
|
|
1238
|
+
gap: var(--w6w-sp-3);
|
|
1239
|
+
margin-bottom: var(--w6w-sp-2);
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
.w6w-multiselect-checks-options {
|
|
1243
|
+
border: 0;
|
|
1244
|
+
padding: 0;
|
|
1245
|
+
margin: 0;
|
|
1246
|
+
min-width: 0;
|
|
1247
|
+
display: grid;
|
|
1248
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
|
|
1249
|
+
gap: var(--w6w-sp-2) var(--w6w-sp-4);
|
|
1250
|
+
max-height: 240px;
|
|
1251
|
+
overflow-y: auto;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
.w6w-field .w6w-multiselect-check {
|
|
1255
|
+
display: flex;
|
|
1256
|
+
align-items: center;
|
|
1257
|
+
gap: var(--w6w-sp-2);
|
|
1258
|
+
margin: 0;
|
|
1259
|
+
font-size: var(--w6w-fs-sm);
|
|
1260
|
+
cursor: pointer;
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
.w6w-field .w6w-multiselect-check input[type=checkbox] {
|
|
1264
|
+
width: auto;
|
|
1265
|
+
margin: 0;
|
|
1266
|
+
flex-shrink: 0;
|
|
1267
|
+
accent-color: var(--w6w-accent);
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1189
1270
|
/* Incoming state (WorkflowFlowEditor · `IncomingStateField`, mounted by BOTH the
|
|
1190
1271
|
step editor's Test tab and the canvas ▶ Run collect form). The raw JSON box is
|
|
1191
1272
|
an OVERRIDE, so it sits behind a disclosure instead of being the first thing
|
|
@@ -1227,6 +1308,11 @@ select optgroup {
|
|
|
1227
1308
|
gap: var(--w6w-sp-1-5);
|
|
1228
1309
|
}
|
|
1229
1310
|
|
|
1311
|
+
/* A whole-value JSON field's "Use the output of <step>" row (ParamsForm). */
|
|
1312
|
+
.w6w-json-quickbind {
|
|
1313
|
+
align-items: center;
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1230
1316
|
.w6w-seed-chip {
|
|
1231
1317
|
cursor: pointer;
|
|
1232
1318
|
}
|
|
@@ -1240,6 +1326,40 @@ select optgroup {
|
|
|
1240
1326
|
opacity: 0.6;
|
|
1241
1327
|
}
|
|
1242
1328
|
|
|
1329
|
+
/* Run script (ParamsForm `ScriptCodeField`, WorkflowFlowEditor `ScriptBindingsNotice`): the
|
|
1330
|
+
insert row under the code, the collapsed "How to read data", and the quiet conversion note. */
|
|
1331
|
+
.w6w-script-insert {
|
|
1332
|
+
align-items: center;
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
.w6w-script-help > summary {
|
|
1336
|
+
cursor: pointer;
|
|
1337
|
+
width: fit-content;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
.w6w-script-help-examples {
|
|
1341
|
+
margin: var(--w6w-sp-1-5) 0;
|
|
1342
|
+
padding: var(--w6w-sp-1-5) var(--w6w-sp-2);
|
|
1343
|
+
border-radius: 6px;
|
|
1344
|
+
background: var(--w6w-bg);
|
|
1345
|
+
font-size: 0.85em;
|
|
1346
|
+
overflow-x: auto;
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.w6w-script-converted {
|
|
1350
|
+
display: block;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
.w6w-script-converted-undo {
|
|
1354
|
+
border: 0;
|
|
1355
|
+
padding: 0;
|
|
1356
|
+
background: none;
|
|
1357
|
+
font: inherit;
|
|
1358
|
+
color: var(--w6w-accent);
|
|
1359
|
+
cursor: pointer;
|
|
1360
|
+
text-decoration: underline;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1243
1363
|
/* Expression input: a field whose contents are inline SEGMENTS — plain text
|
|
1244
1364
|
plus var/secret/expr chips, edited in place (contentEditable, like a Notion /
|
|
1245
1365
|
Zapier block field). A small toolbar carries the Insert menu + the {{ }} (fx)
|
|
@@ -1330,12 +1450,99 @@ select optgroup {
|
|
|
1330
1450
|
padding: var(--w6w-sp-2-5);
|
|
1331
1451
|
display: flex;
|
|
1332
1452
|
flex-direction: column;
|
|
1333
|
-
gap:
|
|
1453
|
+
gap: var(--w6w-sp-1);
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
/* The seed-mode "Insert as" toggle is a <fieldset> for its group semantics; drop the
|
|
1457
|
+
browser's fieldset chrome so it lays out like the plain row it replaced. */
|
|
1458
|
+
.w6w-exprmodal-insert-as {
|
|
1459
|
+
border: 0;
|
|
1460
|
+
padding: 0;
|
|
1461
|
+
margin: 0;
|
|
1462
|
+
min-inline-size: 0;
|
|
1334
1463
|
}
|
|
1335
1464
|
|
|
1465
|
+
/* A rail section is an accordion item: its header always shows, its body animates open
|
|
1466
|
+
(grid-template-rows 0fr -> 1fr) and only one section is open at a time. */
|
|
1336
1467
|
.w6w-exprmodal-group {
|
|
1337
1468
|
display: flex;
|
|
1338
1469
|
flex-direction: column;
|
|
1470
|
+
}
|
|
1471
|
+
|
|
1472
|
+
.w6w-exprmodal-group-head {
|
|
1473
|
+
display: flex;
|
|
1474
|
+
align-items: center;
|
|
1475
|
+
gap: var(--w6w-sp-1);
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
.w6w-exprmodal-group-toggle {
|
|
1479
|
+
flex: 1;
|
|
1480
|
+
min-width: 0;
|
|
1481
|
+
display: flex;
|
|
1482
|
+
align-items: center;
|
|
1483
|
+
justify-content: space-between;
|
|
1484
|
+
gap: var(--w6w-sp-1);
|
|
1485
|
+
background: transparent;
|
|
1486
|
+
border: 0;
|
|
1487
|
+
border-radius: 4px;
|
|
1488
|
+
padding: var(--w6w-sp-1) var(--w6w-sp-0-5);
|
|
1489
|
+
font: inherit;
|
|
1490
|
+
text-align: left;
|
|
1491
|
+
cursor: pointer;
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
.w6w-exprmodal-group-toggle:focus-visible {
|
|
1495
|
+
outline: 2px solid var(--w6w-accent);
|
|
1496
|
+
outline-offset: 1px;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
.w6w-exprmodal-group-toggle:hover .w6w-exprmodal-group-label,
|
|
1500
|
+
.w6w-exprmodal-group.is-open .w6w-exprmodal-group-label {
|
|
1501
|
+
color: var(--w6w-text);
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
.w6w-exprmodal-group-caret {
|
|
1505
|
+
color: var(--w6w-muted);
|
|
1506
|
+
line-height: 1;
|
|
1507
|
+
transition: transform 200ms ease;
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
.w6w-exprmodal-group.is-open .w6w-exprmodal-group-caret {
|
|
1511
|
+
transform: rotate(90deg);
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1514
|
+
.w6w-exprmodal-group-body {
|
|
1515
|
+
display: grid;
|
|
1516
|
+
grid-template-rows: 0fr;
|
|
1517
|
+
transition: grid-template-rows 200ms ease;
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
.w6w-exprmodal-group.is-open .w6w-exprmodal-group-body {
|
|
1521
|
+
grid-template-rows: 1fr;
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
.w6w-exprmodal-group-inner {
|
|
1525
|
+
min-height: 0;
|
|
1526
|
+
overflow: hidden;
|
|
1527
|
+
display: flex;
|
|
1528
|
+
flex-direction: column;
|
|
1529
|
+
gap: 3px;
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
.w6w-exprmodal-group.is-open .w6w-exprmodal-group-inner {
|
|
1533
|
+
padding-bottom: var(--w6w-sp-1-5);
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1537
|
+
.w6w-exprmodal-group-caret,
|
|
1538
|
+
.w6w-exprmodal-group-body {
|
|
1539
|
+
transition: none;
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
/* A labelled block inside a section (Previous steps' Loop). */
|
|
1543
|
+
.w6w-exprmodal-subgroup {
|
|
1544
|
+
display: flex;
|
|
1545
|
+
flex-direction: column;
|
|
1339
1546
|
gap: 3px;
|
|
1340
1547
|
}
|
|
1341
1548
|
|
|
@@ -1345,7 +1552,6 @@ select optgroup {
|
|
|
1345
1552
|
letter-spacing: 0.04em;
|
|
1346
1553
|
text-transform: uppercase;
|
|
1347
1554
|
color: var(--w6w-muted);
|
|
1348
|
-
margin-bottom: var(--w6w-sp-0-5);
|
|
1349
1555
|
}
|
|
1350
1556
|
|
|
1351
1557
|
.w6w-exprmodal-source {
|
|
@@ -1372,6 +1578,18 @@ select optgroup {
|
|
|
1372
1578
|
color: var(--w6w-accent);
|
|
1373
1579
|
}
|
|
1374
1580
|
|
|
1581
|
+
/* A step's output field: a plain tree row (just the field's own name), not a
|
|
1582
|
+
chip, so a step with many fields reads as a list rather than a wall of boxes. */
|
|
1583
|
+
.w6w-exprmodal-source.w6w-exprmodal-field {
|
|
1584
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-1-5);
|
|
1585
|
+
font-family: var(--w6w-font-mono);
|
|
1586
|
+
font-size: var(--w6w-fs-xs);
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
.w6w-exprmodal-source.w6w-exprmodal-field:hover {
|
|
1590
|
+
color: var(--w6w-accent);
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1375
1593
|
.w6w-exprmodal-source.w6w-expr-chip-secret {
|
|
1376
1594
|
color: var(--w6w-danger);
|
|
1377
1595
|
}
|
|
@@ -1469,22 +1687,6 @@ select optgroup {
|
|
|
1469
1687
|
background: var(--w6w-panel);
|
|
1470
1688
|
}
|
|
1471
1689
|
|
|
1472
|
-
/* The "N fields" toggle with the Metadata toggle stacked under it, so both
|
|
1473
|
-
disclosures share one left edge on a step row. */
|
|
1474
|
-
.w6w-exprmodal-toggle-stack {
|
|
1475
|
-
display: flex;
|
|
1476
|
-
flex: none;
|
|
1477
|
-
flex-direction: column;
|
|
1478
|
-
align-items: flex-start;
|
|
1479
|
-
gap: 3px; /* lint-tokens-allow: 3px sits between no two steps of the spacing scale; tight stack of the fields and Metadata toggles */
|
|
1480
|
-
}
|
|
1481
|
-
|
|
1482
|
-
/* A step with no fields: its Metadata toggle sits at the leaf indentation of
|
|
1483
|
-
`.w6w-exprmodal-subsources` (margin 9px + 1px border + sp-2 padding). */
|
|
1484
|
-
.w6w-exprmodal-meta-row {
|
|
1485
|
-
margin-left: calc(10px + var(--w6w-sp-2)); /* lint-tokens-allow: 9px margin + 1px border of .w6w-exprmodal-subsources */
|
|
1486
|
-
}
|
|
1487
|
-
|
|
1488
1690
|
/* Same 20px-high chrome as `.w6w-exprmodal-render-btn` above — the sizing
|
|
1489
1691
|
precedent for a dense rail control — but a separate class: this toggles
|
|
1490
1692
|
the `.w6w-exprmodal-subsources` block below it, the render-btn inserts a
|
|
@@ -1642,6 +1844,28 @@ select optgroup {
|
|
|
1642
1844
|
gap: var(--w6w-sp-2);
|
|
1643
1845
|
}
|
|
1644
1846
|
|
|
1847
|
+
/* The JSON compose pane (json-binding mode) fills the editor pane like the chips editor does,
|
|
1848
|
+
instead of sitting at its content height over empty space. */
|
|
1849
|
+
.w6w-exprmodal-json {
|
|
1850
|
+
display: flex;
|
|
1851
|
+
flex-direction: column;
|
|
1852
|
+
flex: 1 1 auto;
|
|
1853
|
+
min-height: 180px;
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
.w6w-exprmodal-json > .w6w-json-editor {
|
|
1857
|
+
display: flex;
|
|
1858
|
+
flex-direction: column;
|
|
1859
|
+
flex: 1 1 auto;
|
|
1860
|
+
min-height: 0;
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1863
|
+
/* CodeMirror's own root (the react-codemirror wrapper) — its `.cm-editor` is `height: 100%`. */
|
|
1864
|
+
.w6w-exprmodal-json > .w6w-json-editor > :first-child {
|
|
1865
|
+
flex: 1 1 auto;
|
|
1866
|
+
min-height: 0;
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1645
1869
|
/* fx toggle — an end decoration INSIDE the field, not a button beside it. The
|
|
1646
1870
|
WRAPPER owns the input chrome (background/border/radius/min-height and the
|
|
1647
1871
|
focus ring) and every widget it holds is flattened below, so the value and its
|
|
@@ -1671,7 +1895,9 @@ select optgroup {
|
|
|
1671
1895
|
.w6w-fx-wrap > select,
|
|
1672
1896
|
.w6w-fx-wrap > textarea,
|
|
1673
1897
|
.w6w-fx-wrap > .w6w-multiselect,
|
|
1674
|
-
.w6w-fx-wrap > .w6w-expr
|
|
1898
|
+
.w6w-fx-wrap > .w6w-expr,
|
|
1899
|
+
.w6w-fx-wrap > .w6w-combobox,
|
|
1900
|
+
.w6w-fx-wrap > .w6w-fx-grow {
|
|
1675
1901
|
flex: 1 1 auto;
|
|
1676
1902
|
min-width: 0;
|
|
1677
1903
|
}
|
|
@@ -1998,6 +2224,32 @@ select optgroup {
|
|
|
1998
2224
|
min-width: 0;
|
|
1999
2225
|
}
|
|
2000
2226
|
|
|
2227
|
+
/* ── Hover modifier: ResultViewer — the button overlays the top-right corner of
|
|
2228
|
+
ANY child and is revealed on hover/focus; always shown where there is no hover. */
|
|
2229
|
+
.w6w-copyable--hover {
|
|
2230
|
+
position: relative;
|
|
2231
|
+
align-items: flex-start;
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
.w6w-copyable--hover > .w6w-copyable-btn {
|
|
2235
|
+
position: absolute;
|
|
2236
|
+
top: var(--w6w-sp-1);
|
|
2237
|
+
right: var(--w6w-sp-1);
|
|
2238
|
+
background: var(--w6w-panel);
|
|
2239
|
+
border-color: var(--w6w-border);
|
|
2240
|
+
opacity: 0;
|
|
2241
|
+
}
|
|
2242
|
+
|
|
2243
|
+
.w6w-copyable--hover:hover > .w6w-copyable-btn,
|
|
2244
|
+
.w6w-copyable--hover:focus-within > .w6w-copyable-btn {
|
|
2245
|
+
opacity: 1;
|
|
2246
|
+
}
|
|
2247
|
+
|
|
2248
|
+
@media (hover: none) {
|
|
2249
|
+
.w6w-copyable--hover > .w6w-copyable-btn {
|
|
2250
|
+
opacity: 1;
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2001
2253
|
/* The raw {{ }} input stands alone, so it keeps an input box of its own. */
|
|
2002
2254
|
.w6w-expr-raw {
|
|
2003
2255
|
width: 100%;
|
|
@@ -2308,13 +2560,13 @@ select optgroup {
|
|
|
2308
2560
|
/* Typed key/value rows (the `vars` form element / `data` control step). */
|
|
2309
2561
|
.w6w-datavar-row {
|
|
2310
2562
|
display: grid;
|
|
2311
|
-
grid-template-columns: 1fr 110px 1fr auto;
|
|
2563
|
+
grid-template-columns: minmax(0, 1fr) 110px minmax(0, 1fr) auto;
|
|
2312
2564
|
gap: var(--w6w-sp-1-5);
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2565
|
+
align-items: stretch;
|
|
2566
|
+
}
|
|
2567
|
+
|
|
2568
|
+
.w6w-datavar-row > * {
|
|
2569
|
+
min-width: 0;
|
|
2318
2570
|
}
|
|
2319
2571
|
|
|
2320
2572
|
.w6w-datavar-row input,
|
|
@@ -2349,6 +2601,20 @@ select optgroup {
|
|
|
2349
2601
|
padding: var(--w6w-sp-1-5) var(--w6w-sp-2-5);
|
|
2350
2602
|
}
|
|
2351
2603
|
|
|
2604
|
+
.w6w-datavar-modes {
|
|
2605
|
+
margin-left: auto;
|
|
2606
|
+
}
|
|
2607
|
+
|
|
2608
|
+
.w6w-datavar-modes .active {
|
|
2609
|
+
background: var(--w6w-panel-2);
|
|
2610
|
+
border-color: var(--w6w-accent);
|
|
2611
|
+
color: var(--w6w-accent);
|
|
2612
|
+
}
|
|
2613
|
+
|
|
2614
|
+
.w6w-datavar-error {
|
|
2615
|
+
color: var(--w6w-danger);
|
|
2616
|
+
}
|
|
2617
|
+
|
|
2352
2618
|
/* Buttons */
|
|
2353
2619
|
.w6w-btn {
|
|
2354
2620
|
background: var(--w6w-accent);
|
|
@@ -2663,6 +2929,18 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
2663
2929
|
flex-shrink: 0;
|
|
2664
2930
|
}
|
|
2665
2931
|
|
|
2932
|
+
.w6w-json-customized {
|
|
2933
|
+
align-self: center;
|
|
2934
|
+
border: 1px solid var(--w6w-accent);
|
|
2935
|
+
border-radius: var(--w6w-radius-sm, 3px);
|
|
2936
|
+
padding: 3px 7px;
|
|
2937
|
+
background: color-mix(in srgb, var(--w6w-accent) 8%, transparent);
|
|
2938
|
+
color: var(--w6w-accent);
|
|
2939
|
+
font: inherit;
|
|
2940
|
+
font-size: 11px;
|
|
2941
|
+
cursor: pointer;
|
|
2942
|
+
}
|
|
2943
|
+
|
|
2666
2944
|
.w6w-icon-btn {
|
|
2667
2945
|
display: inline-flex;
|
|
2668
2946
|
align-items: center;
|
|
@@ -2772,6 +3050,39 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
2772
3050
|
}
|
|
2773
3051
|
|
|
2774
3052
|
/* Step builder (sidebar + content) */
|
|
3053
|
+
.w6w-stepbuilder-picker {
|
|
3054
|
+
display: flex;
|
|
3055
|
+
flex-direction: column;
|
|
3056
|
+
gap: var(--w6w-sp-3);
|
|
3057
|
+
height: min(70vh, 560px);
|
|
3058
|
+
min-height: 0;
|
|
3059
|
+
overflow: hidden;
|
|
3060
|
+
}
|
|
3061
|
+
|
|
3062
|
+
.w6w-stepbuilder-picker > .w6w-stepbuilder-search {
|
|
3063
|
+
flex-shrink: 0;
|
|
3064
|
+
}
|
|
3065
|
+
|
|
3066
|
+
.w6w-stepbuilder-picker > .w6w-stepbuilder {
|
|
3067
|
+
flex: 1;
|
|
3068
|
+
min-height: 0;
|
|
3069
|
+
overflow: hidden;
|
|
3070
|
+
}
|
|
3071
|
+
|
|
3072
|
+
.w6w-stepbuilder-picker .w6w-stepbuilder-sidebar {
|
|
3073
|
+
overflow-y: auto;
|
|
3074
|
+
}
|
|
3075
|
+
|
|
3076
|
+
.w6w-stepbuilder-picker .w6w-stepbuilder-content {
|
|
3077
|
+
height: auto;
|
|
3078
|
+
}
|
|
3079
|
+
|
|
3080
|
+
.w6w-stepbuilder-picker .w6w-apppicker-host {
|
|
3081
|
+
height: 100%;
|
|
3082
|
+
min-height: 0;
|
|
3083
|
+
flex: 1;
|
|
3084
|
+
}
|
|
3085
|
+
|
|
2775
3086
|
.w6w-stepbuilder {
|
|
2776
3087
|
display: flex;
|
|
2777
3088
|
gap: var(--w6w-sp-4);
|
|
@@ -3116,6 +3427,28 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3116
3427
|
color: var(--w6w-muted-text, var(--w6w-text));
|
|
3117
3428
|
}
|
|
3118
3429
|
|
|
3430
|
+
/* Triggers tab: the "Search all apps" row under the two columns, outside the
|
|
3431
|
+
grid so the columns keep the host's remaining height. */
|
|
3432
|
+
.w6w-readytouse-footer {
|
|
3433
|
+
flex: 0 0 auto;
|
|
3434
|
+
padding-top: var(--w6w-sp-3);
|
|
3435
|
+
}
|
|
3436
|
+
|
|
3437
|
+
.w6w-readytouse-empty {
|
|
3438
|
+
margin: 0;
|
|
3439
|
+
}
|
|
3440
|
+
|
|
3441
|
+
/* A button that reads as an inline link — the empty state's "Search all apps". */
|
|
3442
|
+
.w6w-linkbtn {
|
|
3443
|
+
padding: 0;
|
|
3444
|
+
border: 0;
|
|
3445
|
+
background: none;
|
|
3446
|
+
font: inherit;
|
|
3447
|
+
color: var(--w6w-accent);
|
|
3448
|
+
cursor: pointer;
|
|
3449
|
+
text-decoration: underline;
|
|
3450
|
+
}
|
|
3451
|
+
|
|
3119
3452
|
/* A Function/Workflow row, distinct from an app row at a glance: an app is
|
|
3120
3453
|
somebody else's service, a Function/Workflow is something YOU built here.
|
|
3121
3454
|
Applied by `CallableRow`, which both the home tab and the Workflows/
|
|
@@ -3140,6 +3473,13 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3140
3473
|
padding-inline: var(--w6w-sp-1);
|
|
3141
3474
|
}
|
|
3142
3475
|
|
|
3476
|
+
/* The add flow's title: the node kind's label, then its editable name. */
|
|
3477
|
+
.w6w-stepbuilder-title {
|
|
3478
|
+
display: inline-flex;
|
|
3479
|
+
align-items: center;
|
|
3480
|
+
gap: var(--w6w-sp-2);
|
|
3481
|
+
}
|
|
3482
|
+
|
|
3143
3483
|
/* Inline step rename (pencil) shown next to the modal title. */
|
|
3144
3484
|
.w6w-step-rename {
|
|
3145
3485
|
display: inline-flex;
|
|
@@ -3158,19 +3498,158 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3158
3498
|
font-family: inherit;
|
|
3159
3499
|
}
|
|
3160
3500
|
|
|
3161
|
-
.w6w-
|
|
3501
|
+
.w6w-router-editor {
|
|
3162
3502
|
display: flex;
|
|
3163
3503
|
flex-direction: column;
|
|
3164
|
-
gap: var(--w6w-sp-
|
|
3165
|
-
flex-shrink: 0;
|
|
3504
|
+
gap: var(--w6w-sp-3);
|
|
3166
3505
|
}
|
|
3167
3506
|
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3507
|
+
.w6w-router-editor > p {
|
|
3508
|
+
margin: 0;
|
|
3509
|
+
}
|
|
3510
|
+
|
|
3511
|
+
.w6w-router-routes {
|
|
3512
|
+
display: flex;
|
|
3513
|
+
flex-direction: column;
|
|
3514
|
+
gap: var(--w6w-sp-2);
|
|
3515
|
+
}
|
|
3516
|
+
|
|
3517
|
+
.w6w-router-route {
|
|
3518
|
+
min-width: 0;
|
|
3519
|
+
}
|
|
3520
|
+
|
|
3521
|
+
.w6w-router-route.is-dragging {
|
|
3522
|
+
opacity: 0.45;
|
|
3523
|
+
}
|
|
3524
|
+
|
|
3525
|
+
.w6w-router-route.is-drop-target {
|
|
3526
|
+
box-shadow: 0 -2px var(--w6w-accent);
|
|
3527
|
+
}
|
|
3528
|
+
|
|
3529
|
+
.w6w-router-route-heading {
|
|
3530
|
+
display: flex;
|
|
3531
|
+
align-items: center;
|
|
3532
|
+
gap: var(--w6w-sp-1);
|
|
3533
|
+
margin-bottom: var(--w6w-sp-1);
|
|
3534
|
+
}
|
|
3535
|
+
|
|
3536
|
+
.w6w-router-route-heading > :last-child {
|
|
3537
|
+
margin-left: auto;
|
|
3538
|
+
}
|
|
3539
|
+
|
|
3540
|
+
.w6w-router-grip {
|
|
3541
|
+
cursor: grab;
|
|
3542
|
+
}
|
|
3543
|
+
|
|
3544
|
+
.w6w-router-grip:active {
|
|
3545
|
+
cursor: grabbing;
|
|
3546
|
+
}
|
|
3547
|
+
|
|
3548
|
+
.w6w-router-route-name {
|
|
3549
|
+
display: inline-flex;
|
|
3550
|
+
align-items: center;
|
|
3551
|
+
gap: var(--w6w-sp-2);
|
|
3552
|
+
border: 0;
|
|
3553
|
+
background: transparent;
|
|
3554
|
+
padding: var(--w6w-sp-1) 0;
|
|
3555
|
+
font: inherit;
|
|
3556
|
+
font-size: var(--w6w-fs-xs);
|
|
3557
|
+
color: var(--w6w-muted);
|
|
3558
|
+
cursor: pointer;
|
|
3559
|
+
}
|
|
3560
|
+
|
|
3561
|
+
.w6w-router-route-name:hover {
|
|
3562
|
+
color: var(--w6w-text);
|
|
3563
|
+
}
|
|
3564
|
+
|
|
3565
|
+
.w6w-router-route-name:disabled {
|
|
3566
|
+
cursor: default;
|
|
3567
|
+
}
|
|
3568
|
+
|
|
3569
|
+
.w6w-router-add {
|
|
3570
|
+
align-self: flex-start;
|
|
3571
|
+
}
|
|
3572
|
+
|
|
3573
|
+
.w6w-condition-editor {
|
|
3574
|
+
position: relative;
|
|
3575
|
+
padding-right: var(--w6w-sp-8);
|
|
3576
|
+
}
|
|
3577
|
+
|
|
3578
|
+
.w6w-condition-row {
|
|
3579
|
+
display: grid;
|
|
3580
|
+
grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto) minmax(0, 1fr);
|
|
3581
|
+
gap: var(--w6w-sp-2);
|
|
3582
|
+
align-items: stretch;
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3585
|
+
.w6w-condition-row > * {
|
|
3586
|
+
min-width: 0;
|
|
3587
|
+
}
|
|
3588
|
+
|
|
3589
|
+
.w6w-condition-row-removable {
|
|
3590
|
+
grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto) minmax(0, 1fr) auto;
|
|
3591
|
+
}
|
|
3592
|
+
|
|
3593
|
+
.w6w-condition-row-boolean {
|
|
3594
|
+
grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto);
|
|
3595
|
+
}
|
|
3596
|
+
|
|
3597
|
+
.w6w-condition-row-boolean.w6w-condition-row-removable {
|
|
3598
|
+
grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto) auto;
|
|
3599
|
+
}
|
|
3600
|
+
|
|
3601
|
+
.w6w-condition-negate {
|
|
3602
|
+
display: flex;
|
|
3603
|
+
align-items: center;
|
|
3604
|
+
gap: var(--w6w-sp-1);
|
|
3605
|
+
font-size: var(--w6w-fs-xs);
|
|
3606
|
+
}
|
|
3607
|
+
|
|
3608
|
+
.w6w-condition-rows {
|
|
3609
|
+
display: flex;
|
|
3610
|
+
flex-direction: column;
|
|
3611
|
+
gap: var(--w6w-sp-2);
|
|
3612
|
+
}
|
|
3613
|
+
|
|
3614
|
+
.w6w-condition-combinator,
|
|
3615
|
+
.w6w-condition-add {
|
|
3616
|
+
align-self: flex-start;
|
|
3617
|
+
}
|
|
3618
|
+
|
|
3619
|
+
.w6w-condition-remove {
|
|
3620
|
+
align-self: center;
|
|
3621
|
+
}
|
|
3622
|
+
|
|
3623
|
+
.w6w-condition-comparison {
|
|
3624
|
+
min-height: var(--w6w-sp-10);
|
|
3625
|
+
padding: var(--w6w-sp-2);
|
|
3626
|
+
background: var(--w6w-panel-2);
|
|
3627
|
+
border: 1px solid var(--w6w-border);
|
|
3628
|
+
border-radius: var(--w6w-radius);
|
|
3629
|
+
color: var(--w6w-text);
|
|
3630
|
+
font: inherit;
|
|
3631
|
+
font-size: var(--w6w-fs-xs);
|
|
3632
|
+
}
|
|
3633
|
+
|
|
3634
|
+
.w6w-condition-mode {
|
|
3635
|
+
position: absolute;
|
|
3636
|
+
right: 0;
|
|
3637
|
+
top: var(--w6w-sp-2);
|
|
3638
|
+
}
|
|
3639
|
+
|
|
3640
|
+
.w6w-stepconfig-header {
|
|
3641
|
+
display: flex;
|
|
3642
|
+
flex-direction: column;
|
|
3643
|
+
gap: var(--w6w-sp-2-5);
|
|
3644
|
+
flex-shrink: 0;
|
|
3645
|
+
}
|
|
3646
|
+
|
|
3647
|
+
/* Connection + action share a row and wrap on narrow widths. */
|
|
3648
|
+
.w6w-stepconfig-row {
|
|
3649
|
+
display: flex;
|
|
3650
|
+
flex-wrap: wrap;
|
|
3651
|
+
gap: var(--w6w-sp-3);
|
|
3652
|
+
align-items: flex-start;
|
|
3174
3653
|
}
|
|
3175
3654
|
|
|
3176
3655
|
.w6w-stepconfig-conn,
|
|
@@ -3593,6 +4072,46 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3593
4072
|
color: white;
|
|
3594
4073
|
}
|
|
3595
4074
|
|
|
4075
|
+
/* A toggle (pause / disable) shows its on state; the divider splits the run controls
|
|
4076
|
+
(run, pause, disable) from the edit controls (edit, copy, delete). */
|
|
4077
|
+
.w6w-node-toolbar-btn[aria-pressed=true] {
|
|
4078
|
+
background: var(--w6w-panel-2);
|
|
4079
|
+
color: var(--w6w-accent);
|
|
4080
|
+
}
|
|
4081
|
+
|
|
4082
|
+
.w6w-node-toolbar-divider {
|
|
4083
|
+
align-self: stretch;
|
|
4084
|
+
width: 1px;
|
|
4085
|
+
margin: 2px var(--w6w-sp-0-5);
|
|
4086
|
+
background: var(--w6w-border);
|
|
4087
|
+
}
|
|
4088
|
+
|
|
4089
|
+
/* Persistent node flags under the card: ⏸ paused (test runs stop before it), ⃠ disabled
|
|
4090
|
+
(skipped in every run). The glyph and the text carry the state, not colour. */
|
|
4091
|
+
.w6w-flow .w6w-node-flag {
|
|
4092
|
+
display: inline-flex;
|
|
4093
|
+
align-items: center;
|
|
4094
|
+
gap: 3px;
|
|
4095
|
+
margin-top: var(--w6w-sp-0-5);
|
|
4096
|
+
margin-right: var(--w6w-sp-1);
|
|
4097
|
+
padding: 0 var(--w6w-sp-1);
|
|
4098
|
+
border: 1px solid var(--w6w-border);
|
|
4099
|
+
border-radius: var(--w6w-radius-sm, 3px);
|
|
4100
|
+
font-size: var(--w6w-fs-xs);
|
|
4101
|
+
background: var(--w6w-panel);
|
|
4102
|
+
color: var(--w6w-text);
|
|
4103
|
+
}
|
|
4104
|
+
|
|
4105
|
+
.w6w-flow .w6w-node-flag-paused {
|
|
4106
|
+
border-color: var(--w6w-accent);
|
|
4107
|
+
color: var(--w6w-accent);
|
|
4108
|
+
}
|
|
4109
|
+
|
|
4110
|
+
/* The card's opacity is inline (it is also the run-status visual), so only the grey is here. */
|
|
4111
|
+
.w6w-flow .w6w-node-disabled > [data-run-status] {
|
|
4112
|
+
filter: grayscale(1);
|
|
4113
|
+
}
|
|
4114
|
+
|
|
3596
4115
|
.w6w-params-optional > summary {
|
|
3597
4116
|
cursor: pointer;
|
|
3598
4117
|
}
|
|
@@ -3611,6 +4130,136 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3611
4130
|
color: var(--w6w-muted, inherit);
|
|
3612
4131
|
}
|
|
3613
4132
|
|
|
4133
|
+
/* For each loops (T2.3.1). The Each item edge — a loop-body link, never
|
|
4134
|
+
serialized — reads as a solid line in its loop's colour (`--w6w-loop-color`,
|
|
4135
|
+
set per edge by `paintLoopEdges`), distinct from the error dash. */
|
|
4136
|
+
.w6w-flow .react-flow__edge.w6w-edge-each .react-flow__edge-path {
|
|
4137
|
+
stroke: var(--w6w-loop-color, var(--w6w-accent));
|
|
4138
|
+
}
|
|
4139
|
+
|
|
4140
|
+
.w6w-flow .react-flow__edge.w6w-edge-each .react-flow__edge-text {
|
|
4141
|
+
fill: var(--w6w-accent);
|
|
4142
|
+
}
|
|
4143
|
+
|
|
4144
|
+
.w6w-flow .react-flow__edge.w6w-edge-each .react-flow__edge-textbg {
|
|
4145
|
+
fill: var(--w6w-panel);
|
|
4146
|
+
}
|
|
4147
|
+
|
|
4148
|
+
/* The Each item handle: in its loop's colour, on the right beside the Done handle. */
|
|
4149
|
+
.w6w-flow .react-flow__handle.w6w-handle-each {
|
|
4150
|
+
background: var(--w6w-loop-color, var(--w6w-accent));
|
|
4151
|
+
border-color: var(--w6w-loop-color, var(--w6w-accent));
|
|
4152
|
+
}
|
|
4153
|
+
|
|
4154
|
+
.w6w-flow .w6w-node-foreach .react-flow__handle-right {
|
|
4155
|
+
top: 72%;
|
|
4156
|
+
}
|
|
4157
|
+
|
|
4158
|
+
.w6w-flow .w6w-node-foreach .react-flow__handle-right.w6w-handle-each {
|
|
4159
|
+
top: 28%;
|
|
4160
|
+
}
|
|
4161
|
+
|
|
4162
|
+
.w6w-flow .w6w-foreach-ports {
|
|
4163
|
+
display: flex;
|
|
4164
|
+
flex-direction: column;
|
|
4165
|
+
justify-content: space-between;
|
|
4166
|
+
align-self: stretch;
|
|
4167
|
+
text-align: right;
|
|
4168
|
+
color: var(--w6w-muted);
|
|
4169
|
+
}
|
|
4170
|
+
|
|
4171
|
+
/* A loop-body step looks like any other step; one dot per enclosing For each, just
|
|
4172
|
+
above its top-right corner (named on hover), is all that marks it. */
|
|
4173
|
+
.w6w-flow .w6w-loop-dots {
|
|
4174
|
+
position: absolute;
|
|
4175
|
+
top: -11px; /* lint-tokens-allow: dot sits just above the card edge */
|
|
4176
|
+
right: var(--w6w-sp-1);
|
|
4177
|
+
display: flex;
|
|
4178
|
+
gap: var(--w6w-sp-0-5);
|
|
4179
|
+
}
|
|
4180
|
+
|
|
4181
|
+
.w6w-flow .w6w-loop-dot {
|
|
4182
|
+
width: 8px;
|
|
4183
|
+
height: 8px;
|
|
4184
|
+
border-radius: 50%;
|
|
4185
|
+
box-shadow: 0 0 0 1.5px var(--w6w-panel);
|
|
4186
|
+
cursor: help;
|
|
4187
|
+
}
|
|
4188
|
+
|
|
4189
|
+
.w6w-flow .w6w-loop-legacy-note {
|
|
4190
|
+
max-width: 220px;
|
|
4191
|
+
margin-top: var(--w6w-sp-1);
|
|
4192
|
+
color: var(--w6w-muted);
|
|
4193
|
+
}
|
|
4194
|
+
|
|
4195
|
+
/* The connect-time loop refusal, anchored to its source node. */
|
|
4196
|
+
.w6w-flow .w6w-loop-notice {
|
|
4197
|
+
max-width: 260px;
|
|
4198
|
+
padding: var(--w6w-sp-1) var(--w6w-sp-2);
|
|
4199
|
+
background: var(--w6w-panel);
|
|
4200
|
+
border: 1px solid var(--w6w-danger);
|
|
4201
|
+
border-radius: 8px;
|
|
4202
|
+
color: var(--w6w-danger);
|
|
4203
|
+
}
|
|
4204
|
+
|
|
4205
|
+
.w6w-flow .w6w-router-ports {
|
|
4206
|
+
align-self: stretch;
|
|
4207
|
+
display: grid;
|
|
4208
|
+
align-items: center;
|
|
4209
|
+
margin: -6px 0;
|
|
4210
|
+
max-width: 120px;
|
|
4211
|
+
text-align: right;
|
|
4212
|
+
color: var(--w6w-muted);
|
|
4213
|
+
pointer-events: none;
|
|
4214
|
+
}
|
|
4215
|
+
|
|
4216
|
+
.w6w-flow .w6w-router-ports > span {
|
|
4217
|
+
overflow: hidden;
|
|
4218
|
+
text-overflow: ellipsis;
|
|
4219
|
+
white-space: nowrap;
|
|
4220
|
+
line-height: 1.2;
|
|
4221
|
+
}
|
|
4222
|
+
|
|
4223
|
+
.w6w-flow .w6w-router-fallback-label {
|
|
4224
|
+
position: absolute;
|
|
4225
|
+
top: calc(100% + 2px);
|
|
4226
|
+
left: calc(50% + 8px);
|
|
4227
|
+
white-space: nowrap;
|
|
4228
|
+
pointer-events: none;
|
|
4229
|
+
color: var(--w6w-muted);
|
|
4230
|
+
}
|
|
4231
|
+
|
|
4232
|
+
/* "Write to state" (step settings): the `validateStateConfig` messages for the current config. */
|
|
4233
|
+
.w6w-state-write-issues {
|
|
4234
|
+
color: var(--w6w-danger);
|
|
4235
|
+
}
|
|
4236
|
+
|
|
4237
|
+
/* "Write to state" mapping rows (Pick fields, Append): the shared `.w6w-datavar-row`
|
|
4238
|
+
input style, laid out as output path → state key → remove. The header row uses the
|
|
4239
|
+
same columns so each label sits over its input. Doubled on the row so it beats
|
|
4240
|
+
`.w6w-datavar-row`'s own columns whatever the partial order. */
|
|
4241
|
+
.w6w-state-map-row,
|
|
4242
|
+
.w6w-datavar-row.w6w-state-map-row {
|
|
4243
|
+
display: grid;
|
|
4244
|
+
grid-template-columns: minmax(0, 1fr) 1rem minmax(0, 1fr) 2rem;
|
|
4245
|
+
gap: var(--w6w-sp-1-5);
|
|
4246
|
+
align-items: center;
|
|
4247
|
+
}
|
|
4248
|
+
|
|
4249
|
+
.w6w-state-map-head {
|
|
4250
|
+
color: var(--w6w-muted);
|
|
4251
|
+
font-size: 12px;
|
|
4252
|
+
}
|
|
4253
|
+
|
|
4254
|
+
.w6w-state-map-arrow {
|
|
4255
|
+
color: var(--w6w-muted);
|
|
4256
|
+
text-align: center;
|
|
4257
|
+
}
|
|
4258
|
+
|
|
4259
|
+
.w6w-state-map-add {
|
|
4260
|
+
align-self: flex-start;
|
|
4261
|
+
}
|
|
4262
|
+
|
|
3614
4263
|
.w6w-section {
|
|
3615
4264
|
border: 1px solid var(--w6w-border);
|
|
3616
4265
|
border-radius: 8px;
|
|
@@ -3652,6 +4301,44 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3652
4301
|
gap: var(--w6w-sp-2-5);
|
|
3653
4302
|
}
|
|
3654
4303
|
|
|
4304
|
+
/* Webhook "Listen for test event": the waiting row, its pulse, and the folded manual payload. */
|
|
4305
|
+
.w6w-listen-waiting {
|
|
4306
|
+
display: flex;
|
|
4307
|
+
align-items: center;
|
|
4308
|
+
gap: var(--w6w-sp-2-5);
|
|
4309
|
+
min-width: 0;
|
|
4310
|
+
}
|
|
4311
|
+
.w6w-listen-waiting code {
|
|
4312
|
+
word-break: break-all;
|
|
4313
|
+
}
|
|
4314
|
+
|
|
4315
|
+
.w6w-listen-pulse {
|
|
4316
|
+
flex-shrink: 0;
|
|
4317
|
+
width: 8px;
|
|
4318
|
+
height: 8px;
|
|
4319
|
+
border-radius: 50%;
|
|
4320
|
+
background: var(--w6w-accent);
|
|
4321
|
+
animation: w6w-listen-pulse 1.2s ease-in-out infinite;
|
|
4322
|
+
}
|
|
4323
|
+
|
|
4324
|
+
@keyframes w6w-listen-pulse {
|
|
4325
|
+
0%, 100% {
|
|
4326
|
+
opacity: 1;
|
|
4327
|
+
}
|
|
4328
|
+
50% {
|
|
4329
|
+
opacity: 0.25;
|
|
4330
|
+
}
|
|
4331
|
+
}
|
|
4332
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4333
|
+
.w6w-listen-pulse {
|
|
4334
|
+
animation: none;
|
|
4335
|
+
}
|
|
4336
|
+
}
|
|
4337
|
+
.w6w-listen-manual > summary {
|
|
4338
|
+
cursor: pointer;
|
|
4339
|
+
margin-bottom: var(--w6w-sp-2);
|
|
4340
|
+
}
|
|
4341
|
+
|
|
3655
4342
|
/* A labeled test-run output block (Result vs Console). */
|
|
3656
4343
|
.w6w-testout {
|
|
3657
4344
|
display: flex;
|
|
@@ -3758,6 +4445,68 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3758
4445
|
baseline bar, `degraded` taller, `down` the full cell, and `unknown` a hatched
|
|
3759
4446
|
outline with no solid fill (nothing was measured: not a good day, not a bad
|
|
3760
4447
|
one). Each cell also carries a `title` with its day and state. */
|
|
4448
|
+
/* ── ResultViewer (T0.1.1) — one result value, shown by format: a collapsible
|
|
4449
|
+
JSON tree, xml/html/markdown source, or vendor html in a sandboxed iframe.
|
|
4450
|
+
The viewer owns its OWN internal spacing only; the host pane spaces it. */
|
|
4451
|
+
.w6w-result-viewer {
|
|
4452
|
+
display: flex;
|
|
4453
|
+
flex-direction: column;
|
|
4454
|
+
gap: var(--w6w-sp-1);
|
|
4455
|
+
min-width: 0;
|
|
4456
|
+
}
|
|
4457
|
+
|
|
4458
|
+
/* The toolbar — Expand all / Collapse all for a tree, Rendered / Source for
|
|
4459
|
+
html and markdown. End-aligned so it sits under the copy button's corner. */
|
|
4460
|
+
.w6w-result-viewer-bar {
|
|
4461
|
+
display: flex;
|
|
4462
|
+
justify-content: flex-end;
|
|
4463
|
+
gap: var(--w6w-sp-1);
|
|
4464
|
+
}
|
|
4465
|
+
|
|
4466
|
+
/* The viewport: the one element that scrolls, capped by the inline `maxHeight`.
|
|
4467
|
+
Mono + 0.85em are `.w6w-result`'s type (above), because both present the same
|
|
4468
|
+
thing to the reader. */
|
|
4469
|
+
.w6w-result-viewer-body {
|
|
4470
|
+
flex: 1 1 auto;
|
|
4471
|
+
min-width: 0;
|
|
4472
|
+
font-family: var(--w6w-font-mono);
|
|
4473
|
+
/* lint-tokens-allow: mirrors `.w6w-result`'s result type size above; the value is pinned by T0.1.1 */
|
|
4474
|
+
font-size: 0.85em;
|
|
4475
|
+
}
|
|
4476
|
+
|
|
4477
|
+
/* A plain-text result wraps instead of scrolling sideways: prose has no
|
|
4478
|
+
meaningful line structure to preserve (a code block does — it keeps `wrap`
|
|
4479
|
+
off by default for that reason). */
|
|
4480
|
+
.w6w-result-viewer-text {
|
|
4481
|
+
margin: 0;
|
|
4482
|
+
white-space: pre-wrap;
|
|
4483
|
+
word-break: break-word;
|
|
4484
|
+
}
|
|
4485
|
+
|
|
4486
|
+
/* One indent step per nesting level, and no list markers: the `<summary>`
|
|
4487
|
+
triangle already says "this node opens". */
|
|
4488
|
+
.w6w-json-children {
|
|
4489
|
+
padding-left: var(--w6w-sp-4);
|
|
4490
|
+
}
|
|
4491
|
+
|
|
4492
|
+
/* Keys and counts recede; values stay the reading colour. */
|
|
4493
|
+
.w6w-json-key,
|
|
4494
|
+
.w6w-json-count {
|
|
4495
|
+
color: var(--w6w-muted);
|
|
4496
|
+
}
|
|
4497
|
+
|
|
4498
|
+
/* The sandboxed frame: fills the body's width and gives the preview a fixed
|
|
4499
|
+
viewport (it cannot size itself to its own content from outside). `display:
|
|
4500
|
+
block` is load-bearing — an inline iframe sits on a text baseline, so the
|
|
4501
|
+
3 px descender made the 320 px body scroll 3 px and drew a stray scrollbar. */
|
|
4502
|
+
.w6w-html-preview {
|
|
4503
|
+
display: block;
|
|
4504
|
+
width: 100%;
|
|
4505
|
+
height: 320px;
|
|
4506
|
+
border: none;
|
|
4507
|
+
background: var(--w6w-panel);
|
|
4508
|
+
}
|
|
4509
|
+
|
|
3761
4510
|
.w6w-uptime-strip {
|
|
3762
4511
|
display: grid;
|
|
3763
4512
|
grid-auto-flow: column;
|
|
@@ -4106,15 +4855,17 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4106
4855
|
/* The expanded form of a clipped value (`resolved-clip.ts`). A block with its
|
|
4107
4856
|
own scroll, so "Show all" can never restore the unbounded inline paste that
|
|
4108
4857
|
buried the other params and the run's result. */
|
|
4858
|
+
.w6w-resolved-copy {
|
|
4859
|
+
margin: var(--w6w-sp-1) 0;
|
|
4860
|
+
}
|
|
4861
|
+
|
|
4109
4862
|
.w6w-resolved-text-full {
|
|
4110
4863
|
display: block;
|
|
4111
|
-
margin:
|
|
4864
|
+
margin: 0;
|
|
4112
4865
|
max-height: 14em;
|
|
4113
4866
|
overflow: auto;
|
|
4114
|
-
padding:
|
|
4115
|
-
|
|
4116
|
-
border: 1px solid var(--w6w-border);
|
|
4117
|
-
border-radius: var(--w6w-radius);
|
|
4867
|
+
padding: 0;
|
|
4868
|
+
padding-right: var(--w6w-sp-10);
|
|
4118
4869
|
font-family: var(--w6w-font-mono);
|
|
4119
4870
|
font-size: 0.85em; /* lint-tokens-allow: matches the sibling code-typography rules above in this same file */
|
|
4120
4871
|
line-height: var(--w6w-lh-normal);
|
|
@@ -4138,6 +4889,44 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4138
4889
|
text-decoration: underline;
|
|
4139
4890
|
}
|
|
4140
4891
|
|
|
4892
|
+
/* Every CodeMirror code view (`JsonEditor`, `CodeEditor`, `YamlEditor`) FILLS
|
|
4893
|
+
its bordered box. The border is on `.cm-editor`, which react-codemirror
|
|
4894
|
+
sizes with the `height` / `minHeight` / `maxHeight` props and whose
|
|
4895
|
+
`.cm-scroller` it gives `height: 100%`. With only a min/max height (the Data
|
|
4896
|
+
page's Document modal) that percentage has nothing definite to resolve
|
|
4897
|
+
against, so the scroller — and the gutter column inside it — stopped at the
|
|
4898
|
+
last content line, the horizontal scrollbar sat right under it, and the rest
|
|
4899
|
+
of the box was empty.
|
|
4900
|
+
|
|
4901
|
+
The react-codemirror root (the wrapper's first child) is a one-cell grid.
|
|
4902
|
+
A grid area is definite once its track is sized, so `.cm-editor`, stretched
|
|
4903
|
+
into it, has a definite height whether that came from `height`, from
|
|
4904
|
+
`minHeight` or from the content (capped by `maxHeight`), and the scroller and
|
|
4905
|
+
the gutters fill it. `minmax(0, 1fr)` keeps a long line from widening the
|
|
4906
|
+
editor: the scroller scrolls it instead. The wrapper is a flex column so a
|
|
4907
|
+
wrapper given a definite height (a flex item with `min-height: 0`, as in
|
|
4908
|
+
`_step-config.scss`) hands that height down to the editor.
|
|
4909
|
+
|
|
4910
|
+
Everything sits under `:where()` (specificity 0 for the wrapper part), so a
|
|
4911
|
+
call site's own layout for the same elements — `_expression-modal.scss`'s
|
|
4912
|
+
JSON pane, a host's dialog — still wins. */
|
|
4913
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) {
|
|
4914
|
+
display: flex;
|
|
4915
|
+
flex-direction: column;
|
|
4916
|
+
}
|
|
4917
|
+
|
|
4918
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) > :first-child {
|
|
4919
|
+
display: grid;
|
|
4920
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4921
|
+
flex: 1 1 auto;
|
|
4922
|
+
min-height: 0;
|
|
4923
|
+
}
|
|
4924
|
+
|
|
4925
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) .cm-scroller,
|
|
4926
|
+
:where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) .cm-gutters {
|
|
4927
|
+
min-height: 100%;
|
|
4928
|
+
}
|
|
4929
|
+
|
|
4141
4930
|
.w6w-icon-button {
|
|
4142
4931
|
display: inline-flex;
|
|
4143
4932
|
align-items: center;
|
|
@@ -4434,60 +5223,213 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4434
5223
|
min-width: 0;
|
|
4435
5224
|
}
|
|
4436
5225
|
|
|
4437
|
-
.w6w-execution-log-row-header {
|
|
5226
|
+
.w6w-execution-log-row-header {
|
|
5227
|
+
display: flex;
|
|
5228
|
+
align-items: center;
|
|
5229
|
+
gap: var(--w6w-sp-2);
|
|
5230
|
+
flex-wrap: wrap;
|
|
5231
|
+
}
|
|
5232
|
+
|
|
5233
|
+
/* Label over "App · Action": takes the row's free width, so the timing stays right-aligned. */
|
|
5234
|
+
.w6w-execution-log-row-title {
|
|
5235
|
+
display: flex;
|
|
5236
|
+
flex-direction: column;
|
|
5237
|
+
flex: 1 1 auto;
|
|
5238
|
+
min-width: 0;
|
|
5239
|
+
gap: var(--w6w-sp-0-5);
|
|
5240
|
+
}
|
|
5241
|
+
|
|
5242
|
+
.w6w-execution-log-row-uses {
|
|
5243
|
+
color: var(--w6w-muted);
|
|
5244
|
+
font-size: var(--w6w-fs-xs);
|
|
5245
|
+
overflow: hidden;
|
|
5246
|
+
text-overflow: ellipsis;
|
|
5247
|
+
white-space: nowrap;
|
|
5248
|
+
}
|
|
5249
|
+
|
|
5250
|
+
/* "Trigger" / "Node": a small outlined tag before the label; a trigger takes the accent. */
|
|
5251
|
+
.w6w-execution-log-kind {
|
|
5252
|
+
flex: 0 0 auto;
|
|
5253
|
+
padding: 0 var(--w6w-sp-1-5);
|
|
5254
|
+
border: 1px solid var(--w6w-border);
|
|
5255
|
+
border-radius: var(--w6w-radius);
|
|
5256
|
+
color: var(--w6w-muted);
|
|
5257
|
+
font-size: var(--w6w-fs-xs);
|
|
5258
|
+
line-height: var(--w6w-lh-tight);
|
|
5259
|
+
}
|
|
5260
|
+
|
|
5261
|
+
.w6w-execution-log-kind-trigger {
|
|
5262
|
+
border-color: var(--w6w-accent);
|
|
5263
|
+
color: var(--w6w-accent);
|
|
5264
|
+
}
|
|
5265
|
+
|
|
5266
|
+
.w6w-execution-log-row-label {
|
|
5267
|
+
min-width: 0;
|
|
5268
|
+
font-weight: var(--w6w-fw-medium);
|
|
5269
|
+
overflow: hidden;
|
|
5270
|
+
text-overflow: ellipsis;
|
|
5271
|
+
white-space: nowrap;
|
|
5272
|
+
}
|
|
5273
|
+
|
|
5274
|
+
/* Shrinkable, so a narrow row (the 360px docked panel) wraps the
|
|
5275
|
+
"<ts> → <ts> (elapsed)" text inside the row's box. With `flex-shrink: 0` it
|
|
5276
|
+
kept its max-content width, wrapped onto its own flex line, and ran past the
|
|
5277
|
+
row's border. */
|
|
5278
|
+
.w6w-execution-log-skip-reason {
|
|
5279
|
+
flex: 0 0 auto;
|
|
5280
|
+
color: var(--w6w-muted);
|
|
5281
|
+
font-size: var(--w6w-fs-xs);
|
|
5282
|
+
}
|
|
5283
|
+
|
|
5284
|
+
/* Steps on other paths (not part of this run): one muted, collapsed line after the list. */
|
|
5285
|
+
.w6w-execution-log-off-path {
|
|
5286
|
+
margin-top: var(--w6w-sp-2);
|
|
5287
|
+
}
|
|
5288
|
+
.w6w-execution-log-off-path summary {
|
|
5289
|
+
cursor: pointer;
|
|
5290
|
+
}
|
|
5291
|
+
.w6w-execution-log-off-path ul {
|
|
5292
|
+
margin: var(--w6w-sp-1) 0 0;
|
|
5293
|
+
padding-left: var(--w6w-sp-4);
|
|
5294
|
+
}
|
|
5295
|
+
|
|
5296
|
+
.w6w-execution-log-timing {
|
|
5297
|
+
flex: 0 1 auto;
|
|
5298
|
+
min-width: 0;
|
|
5299
|
+
color: var(--w6w-muted);
|
|
5300
|
+
font-size: var(--w6w-fs-xs);
|
|
5301
|
+
}
|
|
5302
|
+
|
|
5303
|
+
.w6w-execution-log-json {
|
|
5304
|
+
min-width: 0;
|
|
5305
|
+
}
|
|
5306
|
+
.w6w-execution-log-json > summary {
|
|
5307
|
+
cursor: pointer;
|
|
5308
|
+
}
|
|
5309
|
+
.w6w-execution-log-json > .w6w-result-viewer {
|
|
5310
|
+
margin-top: var(--w6w-sp-2);
|
|
5311
|
+
}
|
|
5312
|
+
|
|
5313
|
+
/* Error blocks (step `error`, run `runError`/`stepErrors`). The box itself is
|
|
5314
|
+
`.w6w-result.w6w-error` (`_tester.scss`) — TriggerFillForm's StepError
|
|
5315
|
+
visual, reused, not restyled here; these rules only place it. */
|
|
5316
|
+
.w6w-execution-log-errors {
|
|
5317
|
+
width: 100%;
|
|
5318
|
+
margin-bottom: var(--w6w-sp-2);
|
|
5319
|
+
}
|
|
5320
|
+
|
|
5321
|
+
/* A step's error sits after its `.w6w-section` box, inside the same `<li>` —
|
|
5322
|
+
closer to its own row than the list's row gap, so it reads as that row's. */
|
|
5323
|
+
.w6w-execution-log-row > .w6w-error {
|
|
5324
|
+
margin-top: var(--w6w-sp-1-5);
|
|
5325
|
+
}
|
|
5326
|
+
|
|
5327
|
+
/* TriggerFillForm's inline `opacity: 0.75; marginBottom: 4` code line, as tokens. */
|
|
5328
|
+
.w6w-execution-log-error-code {
|
|
5329
|
+
opacity: 0.75;
|
|
5330
|
+
margin-bottom: var(--w6w-sp-1);
|
|
5331
|
+
}
|
|
5332
|
+
|
|
5333
|
+
.w6w-execution-log-error-label {
|
|
5334
|
+
display: block;
|
|
5335
|
+
margin-bottom: var(--w6w-sp-1);
|
|
5336
|
+
}
|
|
5337
|
+
|
|
5338
|
+
/* --- For each iterations (T1.5.1) ----------------------------------------
|
|
5339
|
+
Chips carry the status as TEXT as well as colour; failed/running also differ
|
|
5340
|
+
in border style, so colour is never the only signal. */
|
|
5341
|
+
.w6w-execution-log-foreach {
|
|
5342
|
+
margin-top: var(--w6w-sp-2);
|
|
5343
|
+
padding-left: var(--w6w-sp-3);
|
|
5344
|
+
border-left: 2px solid var(--w6w-border);
|
|
5345
|
+
}
|
|
5346
|
+
|
|
5347
|
+
.w6w-execution-log-iteration-chips {
|
|
5348
|
+
display: flex;
|
|
5349
|
+
flex-wrap: wrap;
|
|
5350
|
+
gap: var(--w6w-sp-1);
|
|
5351
|
+
}
|
|
5352
|
+
|
|
5353
|
+
.w6w-execution-log-iteration-chip {
|
|
5354
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-2);
|
|
5355
|
+
border: 1px solid var(--w6w-border);
|
|
5356
|
+
border-radius: 999px;
|
|
5357
|
+
font-size: var(--w6w-fs-xs);
|
|
5358
|
+
white-space: nowrap;
|
|
5359
|
+
}
|
|
5360
|
+
|
|
5361
|
+
.w6w-execution-log-iteration-chip-succeeded {
|
|
5362
|
+
border-color: var(--w6w-success);
|
|
5363
|
+
}
|
|
5364
|
+
|
|
5365
|
+
.w6w-execution-log-iteration-chip-failed {
|
|
5366
|
+
border-color: var(--w6w-danger);
|
|
5367
|
+
border-width: 2px;
|
|
5368
|
+
}
|
|
5369
|
+
|
|
5370
|
+
.w6w-execution-log-iteration-chip-running {
|
|
5371
|
+
border-color: var(--w6w-accent);
|
|
5372
|
+
border-style: dashed;
|
|
5373
|
+
}
|
|
5374
|
+
|
|
5375
|
+
.w6w-execution-log-subrows {
|
|
5376
|
+
display: flex;
|
|
5377
|
+
flex-direction: column;
|
|
5378
|
+
gap: var(--w6w-sp-2);
|
|
5379
|
+
margin: 0;
|
|
5380
|
+
padding: 0;
|
|
5381
|
+
list-style: none;
|
|
5382
|
+
}
|
|
5383
|
+
|
|
5384
|
+
.w6w-execution-log-subrow-head {
|
|
4438
5385
|
display: flex;
|
|
4439
5386
|
align-items: center;
|
|
5387
|
+
justify-content: space-between;
|
|
4440
5388
|
gap: var(--w6w-sp-2);
|
|
4441
|
-
flex-wrap: wrap;
|
|
4442
5389
|
}
|
|
4443
5390
|
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
font-
|
|
4448
|
-
|
|
4449
|
-
text-overflow: ellipsis;
|
|
4450
|
-
white-space: nowrap;
|
|
5391
|
+
/* An If / Stop / Router row's resolved comparisons. Operands are arbitrary
|
|
5392
|
+
resolved values (long URLs), so they wrap rather than widen the panel. */
|
|
5393
|
+
.w6w-execution-log-conditions {
|
|
5394
|
+
font-size: var(--w6w-fs-xs);
|
|
5395
|
+
table-layout: auto;
|
|
4451
5396
|
}
|
|
4452
5397
|
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
kept its max-content width, wrapped onto its own flex line, and ran past the
|
|
4456
|
-
row's border. */
|
|
4457
|
-
.w6w-execution-log-timing {
|
|
4458
|
-
flex: 0 1 auto;
|
|
4459
|
-
min-width: 0;
|
|
4460
|
-
color: var(--w6w-muted);
|
|
4461
|
-
font-size: var(--w6w-fs-xs);
|
|
5398
|
+
.w6w-execution-log-conditions code {
|
|
5399
|
+
word-break: break-all;
|
|
4462
5400
|
}
|
|
4463
5401
|
|
|
4464
|
-
.w6w-execution-log-
|
|
4465
|
-
|
|
5402
|
+
.w6w-execution-log-condition-true {
|
|
5403
|
+
color: var(--w6w-success);
|
|
4466
5404
|
}
|
|
4467
5405
|
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
visual, reused, not restyled here; these rules only place it. */
|
|
4471
|
-
.w6w-execution-log-errors {
|
|
4472
|
-
width: 100%;
|
|
4473
|
-
margin-bottom: var(--w6w-sp-2);
|
|
5406
|
+
.w6w-execution-log-condition-false {
|
|
5407
|
+
color: var(--w6w-danger);
|
|
4474
5408
|
}
|
|
4475
5409
|
|
|
4476
|
-
/* A step's
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
5410
|
+
/* A step's State block: its state writes in recorded order (`state.<path>: old → new`),
|
|
5411
|
+
warnings marked, then the run's state after this step. Values are arbitrary JSON,
|
|
5412
|
+
so rows wrap rather than widen the panel. */
|
|
5413
|
+
.w6w-execution-log-state {
|
|
5414
|
+
min-width: 0;
|
|
4480
5415
|
}
|
|
4481
5416
|
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
5417
|
+
.w6w-execution-log-state-writes {
|
|
5418
|
+
display: flex;
|
|
5419
|
+
flex-direction: column;
|
|
5420
|
+
gap: var(--w6w-sp-0-5);
|
|
5421
|
+
margin: 0;
|
|
5422
|
+
padding: 0;
|
|
5423
|
+
list-style: none;
|
|
5424
|
+
font-family: var(--w6w-font-mono);
|
|
5425
|
+
word-break: break-all;
|
|
4486
5426
|
}
|
|
4487
5427
|
|
|
4488
|
-
.w6w-execution-log-
|
|
4489
|
-
|
|
4490
|
-
|
|
5428
|
+
.w6w-execution-log-state-warning {
|
|
5429
|
+
padding-left: var(--w6w-sp-1-5);
|
|
5430
|
+
border-left: 2px solid var(--w6w-danger);
|
|
5431
|
+
color: var(--w6w-danger);
|
|
5432
|
+
font-family: inherit;
|
|
4491
5433
|
}
|
|
4492
5434
|
|
|
4493
5435
|
/* --- ExecutionList ------------------------------------------------------- */
|
|
@@ -4526,9 +5468,30 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4526
5468
|
}
|
|
4527
5469
|
|
|
4528
5470
|
.w6w-execution-list-rows > li {
|
|
5471
|
+
display: flex;
|
|
5472
|
+
align-items: center;
|
|
5473
|
+
gap: var(--w6w-sp-1);
|
|
5474
|
+
min-width: 0;
|
|
5475
|
+
}
|
|
5476
|
+
|
|
5477
|
+
/* The row stays the full-width click target; a Re-run control, when the host
|
|
5478
|
+
offers one, sits beside it rather than inside it (a button cannot nest in
|
|
5479
|
+
the row's own `<button>`). */
|
|
5480
|
+
.w6w-execution-list-rows > li > .w6w-list-item {
|
|
5481
|
+
flex: 1 1 auto;
|
|
4529
5482
|
min-width: 0;
|
|
4530
5483
|
}
|
|
4531
5484
|
|
|
5485
|
+
.w6w-execution-list-rerun {
|
|
5486
|
+
flex-shrink: 0;
|
|
5487
|
+
}
|
|
5488
|
+
|
|
5489
|
+
/* The row's input snippet: inline in the subtitle, so the subtitle's own
|
|
5490
|
+
one-line ellipsis cuts it — no box of its own, just the code face. */
|
|
5491
|
+
.w6w-execution-input-preview {
|
|
5492
|
+
font-family: var(--w6w-font-mono);
|
|
5493
|
+
}
|
|
5494
|
+
|
|
4532
5495
|
/* Both non-list branches (the loading and the empty `<p>`) hang straight off
|
|
4533
5496
|
the root, so one direct-child rule covers them and neither needs a class the
|
|
4534
5497
|
pinned markup doesn't have. Same dashed box `.w6w-execution-log-empty`
|
|
@@ -4681,6 +5644,12 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4681
5644
|
min-width: 0;
|
|
4682
5645
|
}
|
|
4683
5646
|
|
|
5647
|
+
/* The Back control sits alone on its own line, flush left, so the detail
|
|
5648
|
+
reads as a page the list was swapped for. */
|
|
5649
|
+
.w6w-execution-detail-back {
|
|
5650
|
+
display: flex;
|
|
5651
|
+
}
|
|
5652
|
+
|
|
4684
5653
|
/* Title block left, controls right; the actions keep their width, the name
|
|
4685
5654
|
wraps or ellipses into whatever is left. */
|
|
4686
5655
|
.w6w-execution-detail-head {
|
|
@@ -4718,6 +5687,13 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4718
5687
|
flex-shrink: 0;
|
|
4719
5688
|
}
|
|
4720
5689
|
|
|
5690
|
+
/* Glyph + label on one baseline (`.w6w-btn` itself is not a flex box). */
|
|
5691
|
+
.w6w-execution-detail-rerun {
|
|
5692
|
+
display: inline-flex;
|
|
5693
|
+
align-items: center;
|
|
5694
|
+
gap: var(--w6w-sp-1);
|
|
5695
|
+
}
|
|
5696
|
+
|
|
4721
5697
|
.w6w-execution-detail-id-line {
|
|
4722
5698
|
margin: 0;
|
|
4723
5699
|
}
|
|
@@ -4769,6 +5745,45 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4769
5745
|
font-size: var(--w6w-fs-sm);
|
|
4770
5746
|
}
|
|
4771
5747
|
|
|
5748
|
+
/* "Re-run": marks an execution started by History's Re-run — on its list row
|
|
5749
|
+
(after the title) and on its detail ("Re-run of <id>"). */
|
|
5750
|
+
.w6w-execution-rerun-tag {
|
|
5751
|
+
display: inline-block;
|
|
5752
|
+
margin-left: var(--w6w-sp-2);
|
|
5753
|
+
padding: 0 var(--w6w-sp-1-5);
|
|
5754
|
+
border: 1px solid var(--w6w-accent);
|
|
5755
|
+
border-radius: var(--w6w-radius);
|
|
5756
|
+
color: var(--w6w-accent);
|
|
5757
|
+
font-size: var(--w6w-fs-xs);
|
|
5758
|
+
line-height: var(--w6w-lh-tight);
|
|
5759
|
+
vertical-align: middle;
|
|
5760
|
+
}
|
|
5761
|
+
|
|
5762
|
+
.w6w-execution-detail-rerun-of {
|
|
5763
|
+
display: flex;
|
|
5764
|
+
align-items: center;
|
|
5765
|
+
gap: var(--w6w-sp-1-5);
|
|
5766
|
+
margin: 0;
|
|
5767
|
+
}
|
|
5768
|
+
|
|
5769
|
+
.w6w-execution-detail-rerun-of .w6w-execution-rerun-tag {
|
|
5770
|
+
margin-left: 0;
|
|
5771
|
+
}
|
|
5772
|
+
|
|
5773
|
+
.w6w-execution-detail-rerun-of code {
|
|
5774
|
+
font-family: var(--w6w-font-mono);
|
|
5775
|
+
font-size: var(--w6w-fs-sm);
|
|
5776
|
+
}
|
|
5777
|
+
|
|
5778
|
+
.w6w-execution-detail-rerun-of-link {
|
|
5779
|
+
padding: 0;
|
|
5780
|
+
border: none;
|
|
5781
|
+
background: none;
|
|
5782
|
+
color: var(--w6w-accent);
|
|
5783
|
+
cursor: pointer;
|
|
5784
|
+
text-decoration: underline;
|
|
5785
|
+
}
|
|
5786
|
+
|
|
4772
5787
|
/*
|
|
4773
5788
|
* Server resources — the four presentational variants from
|
|
4774
5789
|
* `src/components/ServerResources.tsx` (card, small card, rail, badge).
|
|
@@ -5577,6 +6592,170 @@ button.w6w-rel-open:focus-visible strong {
|
|
|
5577
6592
|
opacity: 1;
|
|
5578
6593
|
}
|
|
5579
6594
|
|
|
6595
|
+
/* Data stores (F-2): DataStoreList, ColumnsEditor, CsvPanel and the data-grid/entry rules ported from Studio's Data store detail page. */
|
|
6596
|
+
.w6w-data-store-list {
|
|
6597
|
+
display: flex;
|
|
6598
|
+
flex-direction: column;
|
|
6599
|
+
gap: var(--w6w-sp-3);
|
|
6600
|
+
}
|
|
6601
|
+
|
|
6602
|
+
.w6w-data-store-list-head {
|
|
6603
|
+
display: flex;
|
|
6604
|
+
justify-content: space-between;
|
|
6605
|
+
align-items: flex-start;
|
|
6606
|
+
gap: var(--w6w-sp-4);
|
|
6607
|
+
}
|
|
6608
|
+
|
|
6609
|
+
.w6w-data-store-list-heading {
|
|
6610
|
+
min-width: 0;
|
|
6611
|
+
}
|
|
6612
|
+
|
|
6613
|
+
.w6w-data-store-list-actions {
|
|
6614
|
+
display: flex;
|
|
6615
|
+
gap: var(--w6w-sp-2);
|
|
6616
|
+
flex-shrink: 0;
|
|
6617
|
+
}
|
|
6618
|
+
|
|
6619
|
+
.w6w-data-columns-head {
|
|
6620
|
+
display: flex;
|
|
6621
|
+
justify-content: space-between;
|
|
6622
|
+
align-items: center;
|
|
6623
|
+
}
|
|
6624
|
+
|
|
6625
|
+
.w6w-data-columns-list {
|
|
6626
|
+
list-style: none;
|
|
6627
|
+
margin: 0;
|
|
6628
|
+
padding: 0;
|
|
6629
|
+
display: flex;
|
|
6630
|
+
flex-direction: column;
|
|
6631
|
+
gap: var(--w6w-sp-2);
|
|
6632
|
+
}
|
|
6633
|
+
|
|
6634
|
+
.w6w-data-columns-row {
|
|
6635
|
+
display: flex;
|
|
6636
|
+
flex-wrap: wrap;
|
|
6637
|
+
align-items: center;
|
|
6638
|
+
gap: var(--w6w-sp-2);
|
|
6639
|
+
}
|
|
6640
|
+
|
|
6641
|
+
.w6w-data-columns-required {
|
|
6642
|
+
display: flex;
|
|
6643
|
+
align-items: center;
|
|
6644
|
+
gap: var(--w6w-sp-1);
|
|
6645
|
+
}
|
|
6646
|
+
|
|
6647
|
+
.w6w-data-columns-error {
|
|
6648
|
+
flex-basis: 100%;
|
|
6649
|
+
}
|
|
6650
|
+
|
|
6651
|
+
.w6w-data-entries-toolbar {
|
|
6652
|
+
display: flex;
|
|
6653
|
+
align-items: center;
|
|
6654
|
+
gap: var(--w6w-sp-2);
|
|
6655
|
+
margin: var(--w6w-sp-3) 0;
|
|
6656
|
+
}
|
|
6657
|
+
|
|
6658
|
+
.w6w-data-entries-toolbar input[type=search] {
|
|
6659
|
+
flex: 1;
|
|
6660
|
+
max-width: 20rem;
|
|
6661
|
+
/* Same box as `.w6w-field` inputs — no host page styles a bare search input. */
|
|
6662
|
+
background: var(--w6w-panel-2);
|
|
6663
|
+
border: 1px solid var(--w6w-border);
|
|
6664
|
+
border-radius: 8px;
|
|
6665
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-2-5);
|
|
6666
|
+
color: var(--w6w-text);
|
|
6667
|
+
font-size: var(--w6w-fs-sm);
|
|
6668
|
+
font-family: inherit;
|
|
6669
|
+
}
|
|
6670
|
+
|
|
6671
|
+
.w6w-data-entries-toolbar input[type=search]:focus {
|
|
6672
|
+
outline: none;
|
|
6673
|
+
border-color: var(--w6w-accent);
|
|
6674
|
+
}
|
|
6675
|
+
|
|
6676
|
+
/* Entries open a viewer. Keep the list quiet and bounded, even for long keys or JSON. */
|
|
6677
|
+
.w6w-data-entry-list {
|
|
6678
|
+
table-layout: fixed;
|
|
6679
|
+
}
|
|
6680
|
+
|
|
6681
|
+
.w6w-data-entry-key,
|
|
6682
|
+
.w6w-data-entry-preview {
|
|
6683
|
+
display: block;
|
|
6684
|
+
width: 100%;
|
|
6685
|
+
overflow: hidden;
|
|
6686
|
+
white-space: nowrap;
|
|
6687
|
+
text-overflow: ellipsis;
|
|
6688
|
+
}
|
|
6689
|
+
|
|
6690
|
+
.w6w-data-entry-key {
|
|
6691
|
+
appearance: none;
|
|
6692
|
+
border: 0;
|
|
6693
|
+
border-radius: 0;
|
|
6694
|
+
background: transparent;
|
|
6695
|
+
padding: 0;
|
|
6696
|
+
color: inherit;
|
|
6697
|
+
font: inherit;
|
|
6698
|
+
text-align: left;
|
|
6699
|
+
cursor: pointer;
|
|
6700
|
+
}
|
|
6701
|
+
|
|
6702
|
+
.w6w-data-entry-key:focus-visible {
|
|
6703
|
+
outline: 2px solid var(--w6w-accent);
|
|
6704
|
+
outline-offset: 2px;
|
|
6705
|
+
}
|
|
6706
|
+
|
|
6707
|
+
.w6w-data-entry-delete {
|
|
6708
|
+
margin-inline-end: auto;
|
|
6709
|
+
}
|
|
6710
|
+
|
|
6711
|
+
/* The wide-table pane: the sheet scrolls INSIDE this box, so a 24-column
|
|
6712
|
+
table never widens its container and the page itself never overflows. */
|
|
6713
|
+
.w6w-data-grid-scroll {
|
|
6714
|
+
overflow-x: auto;
|
|
6715
|
+
max-width: 100%;
|
|
6716
|
+
}
|
|
6717
|
+
|
|
6718
|
+
.w6w-data-grid-scroll input {
|
|
6719
|
+
min-width: var(--w6w-sp-16);
|
|
6720
|
+
}
|
|
6721
|
+
|
|
6722
|
+
.w6w-data-cell {
|
|
6723
|
+
display: flex;
|
|
6724
|
+
flex-direction: column;
|
|
6725
|
+
gap: var(--w6w-sp-1);
|
|
6726
|
+
}
|
|
6727
|
+
|
|
6728
|
+
.w6w-data-cell-error {
|
|
6729
|
+
color: var(--w6w-danger);
|
|
6730
|
+
font-size: var(--w6w-fs-xs);
|
|
6731
|
+
}
|
|
6732
|
+
|
|
6733
|
+
.w6w-data-row-actions {
|
|
6734
|
+
display: flex;
|
|
6735
|
+
align-items: center;
|
|
6736
|
+
gap: var(--w6w-sp-2);
|
|
6737
|
+
}
|
|
6738
|
+
|
|
6739
|
+
.w6w-data-entry-editor {
|
|
6740
|
+
margin-top: var(--w6w-sp-4);
|
|
6741
|
+
}
|
|
6742
|
+
|
|
6743
|
+
.w6w-data-entry-editor-actions {
|
|
6744
|
+
display: flex;
|
|
6745
|
+
gap: var(--w6w-sp-2);
|
|
6746
|
+
margin-top: var(--w6w-sp-3);
|
|
6747
|
+
}
|
|
6748
|
+
|
|
6749
|
+
.w6w-data-csv-panel {
|
|
6750
|
+
margin-bottom: var(--w6w-sp-4);
|
|
6751
|
+
}
|
|
6752
|
+
|
|
6753
|
+
.w6w-data-csv-panel-actions {
|
|
6754
|
+
display: flex;
|
|
6755
|
+
align-items: center;
|
|
6756
|
+
gap: var(--w6w-sp-3);
|
|
6757
|
+
}
|
|
6758
|
+
|
|
5580
6759
|
.w6w-empty-state {
|
|
5581
6760
|
position: relative;
|
|
5582
6761
|
min-height: 10rem;
|
|
@@ -5887,6 +7066,40 @@ button.w6w-rel-open:focus-visible strong {
|
|
|
5887
7066
|
background: var(--w6w-panel-2);
|
|
5888
7067
|
}
|
|
5889
7068
|
|
|
7069
|
+
.w6w-canvas-menu {
|
|
7070
|
+
top: auto;
|
|
7071
|
+
z-index: 10;
|
|
7072
|
+
flex-direction: column;
|
|
7073
|
+
min-width: 170px;
|
|
7074
|
+
}
|
|
7075
|
+
.w6w-canvas-menu .w6w-note-menu-item {
|
|
7076
|
+
font-weight: var(--w6w-fw-medium);
|
|
7077
|
+
}
|
|
7078
|
+
.w6w-canvas-menu .w6w-note-menu-item:focus-visible {
|
|
7079
|
+
outline: none;
|
|
7080
|
+
background: var(--w6w-panel-2);
|
|
7081
|
+
}
|
|
7082
|
+
.w6w-canvas-menu .w6w-note-menu-item.danger {
|
|
7083
|
+
color: var(--w6w-danger);
|
|
7084
|
+
}
|
|
7085
|
+
.w6w-canvas-menu .w6w-note-menu-item.separated {
|
|
7086
|
+
position: relative;
|
|
7087
|
+
margin-top: var(--w6w-sp-2);
|
|
7088
|
+
}
|
|
7089
|
+
.w6w-canvas-menu .w6w-note-menu-item.separated::before {
|
|
7090
|
+
content: "";
|
|
7091
|
+
position: absolute;
|
|
7092
|
+
top: calc(-1 * var(--w6w-sp-1) - 0.5px);
|
|
7093
|
+
right: 0;
|
|
7094
|
+
left: 0;
|
|
7095
|
+
border-top: 1px solid var(--w6w-border);
|
|
7096
|
+
}
|
|
7097
|
+
.w6w-canvas-menu .w6w-note-menu-item[aria-disabled=true] {
|
|
7098
|
+
opacity: 0.45;
|
|
7099
|
+
cursor: default;
|
|
7100
|
+
background: transparent;
|
|
7101
|
+
}
|
|
7102
|
+
|
|
5890
7103
|
.w6w-note-size-1 {
|
|
5891
7104
|
font-size: var(--w6w-fs-xl);
|
|
5892
7105
|
}
|