@w6w/ui 0.2.0 → 0.2.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/CHANGELOG.md +146 -2
  2. package/README.md +28 -10
  3. package/dist/AppPicker.d.ts +58 -2
  4. package/dist/CanvasContextMenu.d.ts +19 -0
  5. package/dist/CanvasLayer.d.ts +38 -0
  6. package/dist/{CodeBlock-Dot3Pd7P.js → CodeBlock-C-oIIYfC.js} +1436 -555
  7. package/dist/CodeBlock-C-oIIYfC.js.map +1 -0
  8. package/dist/CodeBlock-CymlfyeA.cjs +15 -0
  9. package/dist/CodeBlock-CymlfyeA.cjs.map +1 -0
  10. package/dist/CodeEditor.d.ts +4 -1
  11. package/dist/ConditionEditor.d.ts +11 -0
  12. package/dist/EditConnectionModal.d.ts +6 -1
  13. package/dist/JsonEditor.d.ts +20 -0
  14. package/dist/Markdown.d.ts +25 -0
  15. package/dist/ParamCustomization.d.ts +5 -0
  16. package/dist/ParamsForm.d.ts +18 -4
  17. package/dist/RouterEditor.d.ts +5 -0
  18. package/dist/StepBuilderModal.d.ts +103 -15
  19. package/dist/StepNameEditor.d.ts +11 -0
  20. package/dist/StopEditor.d.ts +5 -0
  21. package/dist/TriggerFillForm.d.ts +14 -1
  22. package/dist/WebhookListenPanel.d.ts +28 -0
  23. package/dist/WorkflowConnections.d.ts +29 -0
  24. package/dist/WorkflowFlowEditor.d.ts +74 -7
  25. package/dist/app-pages.d.ts +2 -0
  26. package/dist/assets/script-completion.worker-DDJKkj5M.js +8290 -0
  27. package/dist/assets/script-completion.worker-DDJKkj5M.js.map +1 -0
  28. package/dist/canvas-context-menu.d.ts +27 -0
  29. package/dist/canvas-types.d.ts +36 -0
  30. package/dist/canvas-utils.d.ts +44 -0
  31. package/dist/code.cjs +1 -1
  32. package/dist/code.mjs +3 -4
  33. package/dist/code.mjs.map +1 -1
  34. package/dist/components/AnchoredFlyout.d.ts +7 -0
  35. package/dist/components/AuthFieldsForm.d.ts +11 -0
  36. package/dist/components/BudgetMeter.d.ts +15 -0
  37. package/dist/components/CallableList.d.ts +3 -2
  38. package/dist/components/ColumnsEditor.d.ts +27 -0
  39. package/dist/components/Combobox.d.ts +19 -1
  40. package/dist/components/ConnectionList.d.ts +2 -3
  41. package/dist/components/CredentialPicker.d.ts +35 -0
  42. package/dist/components/CsvPanel.d.ts +21 -0
  43. package/dist/components/DataEntryEditor.d.ts +38 -0
  44. package/dist/components/DataEntryList.d.ts +33 -0
  45. package/dist/components/DataStoreList.d.ts +33 -0
  46. package/dist/components/DataTable.d.ts +27 -0
  47. package/dist/components/DataTableGrid.d.ts +46 -0
  48. package/dist/components/EmptyState.d.ts +9 -0
  49. package/dist/components/EventbriteTriggerPicker.d.ts +7 -0
  50. package/dist/components/ExecutionDetail.d.ts +17 -1
  51. package/dist/components/ExecutionList.d.ts +19 -1
  52. package/dist/components/ExecutionLogPanel.d.ts +61 -3
  53. package/dist/components/ExpressionEditorModal.d.ts +33 -10
  54. package/dist/components/ExpressionOptions.d.ts +101 -15
  55. package/dist/components/HtmlPreview.d.ts +7 -0
  56. package/dist/components/JsonTree.d.ts +32 -0
  57. package/dist/components/ResolvedParams.d.ts +6 -1
  58. package/dist/components/ResultViewer.d.ts +46 -0
  59. package/dist/components/ScriptBindingsNotice.d.ts +31 -0
  60. package/dist/components/ScriptCodeField.d.ts +13 -0
  61. package/dist/components/StepStatusPill.d.ts +7 -0
  62. package/dist/components/expression-authoring.d.ts +13 -0
  63. package/dist/components/expression-dom.d.ts +17 -2
  64. package/dist/components/expression-template.d.ts +25 -3
  65. package/dist/components/icons.d.ts +1 -1
  66. package/dist/components/json-compose.d.ts +53 -0
  67. package/dist/components/result-format.d.ts +13 -0
  68. package/dist/condition-editor.d.ts +44 -0
  69. package/dist/data-stores/data-store-view.d.ts +371 -0
  70. package/dist/dynamic-fields.d.ts +60 -0
  71. package/dist/editor-theme.d.ts +24 -0
  72. package/dist/eventbrite-trigger-selection.d.ts +13 -0
  73. package/dist/flow-connect.d.ts +22 -16
  74. package/dist/flow-delete.d.ts +16 -0
  75. package/dist/flow-fanout.d.ts +2 -2
  76. package/dist/flow-history.d.ts +75 -0
  77. package/dist/flow-layout.d.ts +13 -0
  78. package/dist/flow-loop-colors.d.ts +39 -0
  79. package/dist/flow-loop.d.ts +98 -0
  80. package/dist/flow-node-flags.d.ts +14 -0
  81. package/dist/flow-problems.d.ts +69 -0
  82. package/dist/flow-state.d.ts +20 -0
  83. package/dist/flow-types.d.ts +155 -10
  84. package/dist/flow-utils.d.ts +33 -12
  85. package/dist/flow.cjs +4 -2
  86. package/dist/flow.cjs.map +1 -1
  87. package/dist/flow.d.ts +15 -2
  88. package/dist/flow.mjs +3737 -1350
  89. package/dist/flow.mjs.map +1 -1
  90. package/dist/index.cjs +2 -1
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.d.ts +43 -5
  93. package/dist/index.mjs +2855 -1333
  94. package/dist/index.mjs.map +1 -1
  95. package/dist/node-samples-ChdyMBnJ.cjs +22 -0
  96. package/dist/node-samples-ChdyMBnJ.cjs.map +1 -0
  97. package/dist/node-samples-DkJL07EX.js +12302 -0
  98. package/dist/node-samples-DkJL07EX.js.map +1 -0
  99. package/dist/node-samples.d.ts +80 -0
  100. package/dist/note-markdown.d.ts +22 -0
  101. package/dist/output-shape.d.ts +30 -14
  102. package/dist/param-customization.d.ts +7 -0
  103. package/dist/provider.d.ts +174 -13
  104. package/dist/resolve-params.d.ts +50 -11
  105. package/dist/run-visuals.d.ts +18 -22
  106. package/dist/script-bindings.d.ts +63 -0
  107. package/dist/script-completion-service.d.ts +9 -0
  108. package/dist/script-completion.worker.d.ts +1 -0
  109. package/dist/script-completions.d.ts +2 -0
  110. package/dist/state-shape.d.ts +38 -0
  111. package/dist/step-preview-state.d.ts +155 -6
  112. package/dist/step-problems.d.ts +64 -0
  113. package/dist/test-inputs.d.ts +25 -0
  114. package/dist/trigger-registration.d.ts +28 -0
  115. package/dist/types.d.ts +179 -11
  116. package/dist/use-app-action-defs.d.ts +9 -1
  117. package/dist/use-dynamic-fields.d.ts +23 -0
  118. package/dist/use-test-input.d.ts +18 -0
  119. package/dist/workflow-connections.d.ts +30 -0
  120. package/package.json +18 -7
  121. package/src/code.css +60 -6
  122. package/src/styles/_budget-meter.scss +46 -0
  123. package/src/styles/_callable-list.scss +15 -6
  124. package/src/styles/_canvas.scss +353 -0
  125. package/src/styles/_code-editor.scss +35 -0
  126. package/src/styles/_code.scss +6 -5
  127. package/src/styles/_connections.scss +2 -14
  128. package/src/styles/_copyable.scss +24 -0
  129. package/src/styles/_data-stores.scss +138 -0
  130. package/src/styles/_data-table.scss +55 -0
  131. package/src/styles/_data-vars.scss +17 -6
  132. package/src/styles/_empty-state.scss +21 -0
  133. package/src/styles/_execution-history.scss +73 -0
  134. package/src/styles/_execution-log.scss +145 -1
  135. package/src/styles/_expression-modal.scss +106 -16
  136. package/src/styles/_fields.scss +11 -0
  137. package/src/styles/_flow.scss +171 -0
  138. package/src/styles/_fx.scss +26 -1
  139. package/src/styles/_incoming-state.scss +33 -0
  140. package/src/styles/_layout.scss +10 -0
  141. package/src/styles/_markdown.scss +20 -0
  142. package/src/styles/_modal.scss +12 -0
  143. package/src/styles/_multiselect.scss +35 -0
  144. package/src/styles/_sections.scss +36 -0
  145. package/src/styles/_step-builder.scss +145 -0
  146. package/src/styles/_tester.scss +57 -14
  147. package/src/styles/_tokens.scss +27 -1
  148. package/src/styles.css +1861 -115
  149. package/src/styles.scss +7 -0
  150. package/dist/CodeBlock-CZu4TFSi.cjs +0 -15
  151. package/dist/CodeBlock-CZu4TFSi.cjs.map +0 -1
  152. package/dist/CodeBlock-Dot3Pd7P.js.map +0 -1
  153. package/dist/ConfirmModal-ChoiGy2K.cjs +0 -11
  154. package/dist/ConfirmModal-ChoiGy2K.cjs.map +0 -1
  155. package/dist/ConfirmModal-Wx3i8F1n.js +0 -6359
  156. package/dist/ConfirmModal-Wx3i8F1n.js.map +0 -1
  157. package/dist/Copyable-1niV9gUa.js +0 -771
  158. package/dist/Copyable-1niV9gUa.js.map +0 -1
  159. package/dist/Copyable-CYZU1o4X.cjs +0 -2
  160. package/dist/Copyable-CYZU1o4X.cjs.map +0 -1
@@ -1,4 +1,14 @@
1
1
  /* Layout helpers */
2
+
3
+ /* A vertical column whose direct children are cards/panels. ONE gap, from the
4
+ shared spacing scale — never a per-screen number and never a second gap: do
5
+ not add this class to a container whose parent already gaps its children. */
6
+ .w6w-card-stack {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--w6w-sp-4);
10
+ }
11
+
2
12
  .w6w-stack {
3
13
  display: flex;
4
14
  flex-direction: column;
@@ -0,0 +1,20 @@
1
+ /* Markdown: the leading YAML frontmatter, collapsed above the rendered body. The body itself
2
+ is unstyled here — the host styles it through the `className` it passes. */
3
+ .w6w-md-frontmatter {
4
+ margin-bottom: var(--w6w-sp-2);
5
+ border: 1px solid var(--w6w-border);
6
+ border-radius: 8px;
7
+ padding: var(--w6w-sp-1-5) var(--w6w-sp-2-5);
8
+ font-size: var(--w6w-fs-sm);
9
+ }
10
+ .w6w-md-frontmatter > summary {
11
+ cursor: pointer;
12
+ color: var(--w6w-muted);
13
+ }
14
+ .w6w-md-frontmatter > pre {
15
+ margin: var(--w6w-sp-2) 0 0;
16
+ overflow-x: auto;
17
+ font-family: var(--w6w-font-mono);
18
+ white-space: pre-wrap;
19
+ overflow-wrap: anywhere;
20
+ }
@@ -123,3 +123,15 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
123
123
  gap: var(--w6w-sp-1);
124
124
  flex-shrink: 0;
125
125
  }
126
+
127
+ .w6w-json-customized {
128
+ align-self: center;
129
+ border: 1px solid var(--w6w-accent);
130
+ border-radius: var(--w6w-radius-sm, 3px);
131
+ padding: 3px 7px;
132
+ background: color-mix(in srgb, var(--w6w-accent) 8%, transparent);
133
+ color: var(--w6w-accent);
134
+ font: inherit;
135
+ font-size: 11px;
136
+ cursor: pointer;
137
+ }
@@ -67,3 +67,38 @@
67
67
  background: var(--w6w-border);
68
68
  color: var(--w6w-text);
69
69
  }
70
+
71
+ // An explicit schema hint exposes all choices as checkboxes without changing the value shape.
72
+ .w6w-fx-wrap:has(> .w6w-multiselect-checks) { align-items: flex-start; }
73
+ .w6w-multiselect-checks { padding: var(--w6w-sp-1) 0; }
74
+ .w6w-multiselect-checks-toolbar {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: var(--w6w-sp-3);
78
+ margin-bottom: var(--w6w-sp-2);
79
+ }
80
+ .w6w-multiselect-checks-options {
81
+ border: 0;
82
+ padding: 0;
83
+ margin: 0;
84
+ min-width: 0;
85
+ display: grid;
86
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
87
+ gap: var(--w6w-sp-2) var(--w6w-sp-4);
88
+ max-height: 240px;
89
+ overflow-y: auto;
90
+ }
91
+ .w6w-field .w6w-multiselect-check {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: var(--w6w-sp-2);
95
+ margin: 0;
96
+ font-size: var(--w6w-fs-sm);
97
+ cursor: pointer;
98
+ }
99
+ .w6w-field .w6w-multiselect-check input[type="checkbox"] {
100
+ width: auto;
101
+ margin: 0;
102
+ flex-shrink: 0;
103
+ accent-color: var(--w6w-accent);
104
+ }
@@ -33,4 +33,40 @@
33
33
  align-items: center;
34
34
  gap: var(--w6w-sp-2-5);
35
35
  }
36
+ /* Webhook "Listen for test event": the waiting row, its pulse, and the folded manual payload. */
37
+ .w6w-listen-waiting {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: var(--w6w-sp-2-5);
41
+ min-width: 0;
42
+ code {
43
+ word-break: break-all;
44
+ }
45
+ }
46
+ .w6w-listen-pulse {
47
+ flex-shrink: 0;
48
+ width: 8px;
49
+ height: 8px;
50
+ border-radius: 50%;
51
+ background: var(--w6w-accent);
52
+ animation: w6w-listen-pulse 1.2s ease-in-out infinite;
53
+ }
54
+ @keyframes w6w-listen-pulse {
55
+ 0%,
56
+ 100% {
57
+ opacity: 1;
58
+ }
59
+ 50% {
60
+ opacity: 0.25;
61
+ }
62
+ }
63
+ @media (prefers-reduced-motion: reduce) {
64
+ .w6w-listen-pulse {
65
+ animation: none;
66
+ }
67
+ }
68
+ .w6w-listen-manual > summary {
69
+ cursor: pointer;
70
+ margin-bottom: var(--w6w-sp-2);
71
+ }
36
72
  /* A labeled test-run output block (Result vs Console). */
@@ -12,6 +12,33 @@
12
12
  }
13
13
 
14
14
  /* Step builder (sidebar + content) */
15
+ .w6w-stepbuilder-picker {
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: var(--w6w-sp-3);
19
+ height: min(70vh, 560px);
20
+ min-height: 0;
21
+ overflow: hidden;
22
+ }
23
+ .w6w-stepbuilder-picker > .w6w-stepbuilder-search {
24
+ flex-shrink: 0;
25
+ }
26
+ .w6w-stepbuilder-picker > .w6w-stepbuilder {
27
+ flex: 1;
28
+ min-height: 0;
29
+ overflow: hidden;
30
+ }
31
+ .w6w-stepbuilder-picker .w6w-stepbuilder-sidebar {
32
+ overflow-y: auto;
33
+ }
34
+ .w6w-stepbuilder-picker .w6w-stepbuilder-content {
35
+ height: auto;
36
+ }
37
+ .w6w-stepbuilder-picker .w6w-apppicker-host {
38
+ height: 100%;
39
+ min-height: 0;
40
+ flex: 1;
41
+ }
15
42
  .w6w-stepbuilder {
16
43
  display: flex;
17
44
  gap: var(--w6w-sp-4);
@@ -335,6 +362,28 @@
335
362
  color: var(--w6w-muted-text, var(--w6w-text));
336
363
  }
337
364
 
365
+ /* Triggers tab: the "Search all apps" row under the two columns, outside the
366
+ grid so the columns keep the host's remaining height. */
367
+ .w6w-readytouse-footer {
368
+ flex: 0 0 auto;
369
+ padding-top: var(--w6w-sp-3);
370
+ }
371
+
372
+ .w6w-readytouse-empty {
373
+ margin: 0;
374
+ }
375
+
376
+ /* A button that reads as an inline link — the empty state's "Search all apps". */
377
+ .w6w-linkbtn {
378
+ padding: 0;
379
+ border: 0;
380
+ background: none;
381
+ font: inherit;
382
+ color: var(--w6w-accent);
383
+ cursor: pointer;
384
+ text-decoration: underline;
385
+ }
386
+
338
387
  /* A Function/Workflow row, distinct from an app row at a glance: an app is
339
388
  somebody else's service, a Function/Workflow is something YOU built here.
340
389
  Applied by `CallableRow`, which both the home tab and the Workflows/
@@ -358,6 +407,12 @@
358
407
  /* Horizontal breathing room so header/footer align with the padded body. */
359
408
  padding-inline: var(--w6w-sp-1);
360
409
  }
410
+ /* The add flow's title: the node kind's label, then its editable name. */
411
+ .w6w-stepbuilder-title {
412
+ display: inline-flex;
413
+ align-items: center;
414
+ gap: var(--w6w-sp-2);
415
+ }
361
416
  /* Inline step rename (pencil) shown next to the modal title. */
362
417
  .w6w-step-rename {
363
418
  display: inline-flex;
@@ -374,3 +429,93 @@
374
429
  font-size: 0.9em;
375
430
  font-family: inherit;
376
431
  }
432
+
433
+ .w6w-router-editor {
434
+ display: flex;
435
+ flex-direction: column;
436
+ gap: var(--w6w-sp-3);
437
+ }
438
+ .w6w-router-editor > p { margin: 0; }
439
+ .w6w-router-routes {
440
+ display: flex;
441
+ flex-direction: column;
442
+ gap: var(--w6w-sp-2);
443
+ }
444
+ .w6w-router-route {
445
+ min-width: 0;
446
+ }
447
+ .w6w-router-route.is-dragging { opacity: 0.45; }
448
+ .w6w-router-route.is-drop-target { box-shadow: 0 -2px var(--w6w-accent); }
449
+ .w6w-router-route-heading {
450
+ display: flex;
451
+ align-items: center;
452
+ gap: var(--w6w-sp-1);
453
+ margin-bottom: var(--w6w-sp-1);
454
+ }
455
+ .w6w-router-route-heading > :last-child { margin-left: auto; }
456
+ .w6w-router-grip { cursor: grab; }
457
+ .w6w-router-grip:active { cursor: grabbing; }
458
+ .w6w-router-route-name {
459
+ display: inline-flex;
460
+ align-items: center;
461
+ gap: var(--w6w-sp-2);
462
+ border: 0;
463
+ background: transparent;
464
+ padding: var(--w6w-sp-1) 0;
465
+ font: inherit;
466
+ font-size: var(--w6w-fs-xs);
467
+ color: var(--w6w-muted);
468
+ cursor: pointer;
469
+ }
470
+ .w6w-router-route-name:hover { color: var(--w6w-text); }
471
+ .w6w-router-route-name:disabled { cursor: default; }
472
+ .w6w-router-add { align-self: flex-start; }
473
+ .w6w-condition-editor {
474
+ position: relative;
475
+ padding-right: var(--w6w-sp-8);
476
+ }
477
+ .w6w-condition-row {
478
+ display: grid;
479
+ grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto) minmax(0, 1fr);
480
+ gap: var(--w6w-sp-2);
481
+ align-items: stretch;
482
+ }
483
+ .w6w-condition-row > * { min-width: 0; }
484
+ .w6w-condition-row-removable {
485
+ grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto) minmax(0, 1fr) auto;
486
+ }
487
+ .w6w-condition-row-boolean {
488
+ grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto);
489
+ }
490
+ .w6w-condition-row-boolean.w6w-condition-row-removable {
491
+ grid-template-columns: auto minmax(0, 1fr) minmax(100px, auto) auto;
492
+ }
493
+ .w6w-condition-negate {
494
+ display: flex;
495
+ align-items: center;
496
+ gap: var(--w6w-sp-1);
497
+ font-size: var(--w6w-fs-xs);
498
+ }
499
+ .w6w-condition-rows {
500
+ display: flex;
501
+ flex-direction: column;
502
+ gap: var(--w6w-sp-2);
503
+ }
504
+ .w6w-condition-combinator,
505
+ .w6w-condition-add { align-self: flex-start; }
506
+ .w6w-condition-remove { align-self: center; }
507
+ .w6w-condition-comparison {
508
+ min-height: var(--w6w-sp-10);
509
+ padding: var(--w6w-sp-2);
510
+ background: var(--w6w-panel-2);
511
+ border: 1px solid var(--w6w-border);
512
+ border-radius: var(--w6w-radius);
513
+ color: var(--w6w-text);
514
+ font: inherit;
515
+ font-size: var(--w6w-fs-xs);
516
+ }
517
+ .w6w-condition-mode {
518
+ position: absolute;
519
+ right: 0;
520
+ top: var(--w6w-sp-2);
521
+ }
@@ -36,7 +36,7 @@
36
36
 
37
37
  /* Host-embedded ActionTestForm (studio's ConnectionTesterModal wraps it in its
38
38
  OWN full modal). The widget then fills that modal as a full-height flex column:
39
- the params + saved-tests region scrolls, and the action bar is a bottom-pinned,
39
+ the params / result / saved-tests cards scroll, and the action bar is a bottom-pinned,
40
40
  non-scrolling footer. These classes are only applied in `embedded` mode, so the
41
41
  inline / own-pop-out layout is untouched. */
42
42
  .w6w-tester-embedded-root {
@@ -54,19 +54,6 @@
54
54
  min-height: 0;
55
55
  overflow: auto;
56
56
  }
57
- .w6w-tester-embedded-cols {
58
- display: flex;
59
- gap: var(--w6w-sp-4);
60
- align-items: flex-start;
61
- }
62
- .w6w-tester-embedded-main {
63
- flex: 1;
64
- min-width: 0;
65
- }
66
- .w6w-tester-embedded-rail {
67
- width: 260px;
68
- flex-shrink: 0;
69
- }
70
57
  /* The action bar as a pinned footer: kept out of the scroll region and separated
71
58
  with a top border so Run / Save / Delete stay visible however long the params. */
72
59
  .w6w-tester-actions-footer {
@@ -109,3 +96,59 @@
109
96
  baseline bar, `degraded` taller, `down` the full cell, and `unknown` a hatched
110
97
  outline with no solid fill (nothing was measured: not a good day, not a bad
111
98
  one). Each cell also carries a `title` with its day and state. */
99
+
100
+ /* ── ResultViewer (T0.1.1) — one result value, shown by format: a collapsible
101
+ JSON tree, xml/html/markdown source, or vendor html in a sandboxed iframe.
102
+ The viewer owns its OWN internal spacing only; the host pane spaces it. */
103
+ .w6w-result-viewer {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: var(--w6w-sp-1);
107
+ min-width: 0;
108
+ }
109
+ /* The toolbar — Expand all / Collapse all for a tree, Rendered / Source for
110
+ html and markdown. End-aligned so it sits under the copy button's corner. */
111
+ .w6w-result-viewer-bar {
112
+ display: flex;
113
+ justify-content: flex-end;
114
+ gap: var(--w6w-sp-1);
115
+ }
116
+ /* The viewport: the one element that scrolls, capped by the inline `maxHeight`.
117
+ Mono + 0.85em are `.w6w-result`'s type (above), because both present the same
118
+ thing to the reader. */
119
+ .w6w-result-viewer-body {
120
+ flex: 1 1 auto;
121
+ min-width: 0;
122
+ font-family: var(--w6w-font-mono);
123
+ /* lint-tokens-allow: mirrors `.w6w-result`'s result type size above; the value is pinned by T0.1.1 */
124
+ font-size: 0.85em;
125
+ }
126
+ /* A plain-text result wraps instead of scrolling sideways: prose has no
127
+ meaningful line structure to preserve (a code block does — it keeps `wrap`
128
+ off by default for that reason). */
129
+ .w6w-result-viewer-text {
130
+ margin: 0;
131
+ white-space: pre-wrap;
132
+ word-break: break-word;
133
+ }
134
+ /* One indent step per nesting level, and no list markers: the `<summary>`
135
+ triangle already says "this node opens". */
136
+ .w6w-json-children {
137
+ padding-left: var(--w6w-sp-4);
138
+ }
139
+ /* Keys and counts recede; values stay the reading colour. */
140
+ .w6w-json-key,
141
+ .w6w-json-count {
142
+ color: var(--w6w-muted);
143
+ }
144
+ /* The sandboxed frame: fills the body's width and gives the preview a fixed
145
+ viewport (it cannot size itself to its own content from outside). `display:
146
+ block` is load-bearing — an inline iframe sits on a text baseline, so the
147
+ 3 px descender made the 320 px body scroll 3 px and drew a stray scrollbar. */
148
+ .w6w-html-preview {
149
+ display: block;
150
+ width: 100%;
151
+ height: 320px;
152
+ border: none;
153
+ background: var(--w6w-panel);
154
+ }
@@ -26,7 +26,9 @@
26
26
  * defined on :root so every `.w6w-*` component inherits them out of the box.
27
27
  */
28
28
 
29
- /* Light — the base defaults. */
29
+ /* Light — the base defaults.
30
+ `--w6w-loop-N` is the For each palette (flow-loop-colors.ts, LOOP_TONES): no red,
31
+ black or green, so a loop never reads as an error port or a success edge. */
30
32
  :where(:root) {
31
33
  --w6w-bg: #f7f8fa;
32
34
  --w6w-panel: #ffffff;
@@ -42,6 +44,12 @@
42
44
  --w6w-health-down: var(--w6w-danger);
43
45
  --w6w-health-unknown: #5f6875;
44
46
  --w6w-icon-swatch: #f0f2f6;
47
+ --w6w-loop-1: #2f6fdf;
48
+ --w6w-loop-2: #7c4ddb;
49
+ --w6w-loop-3: #b7791f;
50
+ --w6w-loop-4: #0e8fa8;
51
+ --w6w-loop-5: #b0399f;
52
+ --w6w-loop-6: #4f4fc7;
45
53
  --w6w-code-comment: #6b7280;
46
54
  --w6w-code-keyword: #8250df;
47
55
  --w6w-code-string: #0a7b34;
@@ -71,6 +79,12 @@
71
79
  --w6w-health-down: var(--w6w-danger);
72
80
  --w6w-health-unknown: #9aa3b2;
73
81
  --w6w-icon-swatch: #1f232c;
82
+ --w6w-loop-1: #5b9bff;
83
+ --w6w-loop-2: #a98bff;
84
+ --w6w-loop-3: #f0b13a;
85
+ --w6w-loop-4: #3cc6e0;
86
+ --w6w-loop-5: #e47ad6;
87
+ --w6w-loop-6: #8a8aff;
74
88
  --w6w-scheme: dark;
75
89
  --w6w-code-comment: #7d8797;
76
90
  --w6w-code-keyword: #d2a8ff;
@@ -100,6 +114,12 @@
100
114
  --w6w-health-down: var(--w6w-danger);
101
115
  --w6w-health-unknown: #5f6875;
102
116
  --w6w-icon-swatch: #f0f2f6;
117
+ --w6w-loop-1: #2f6fdf;
118
+ --w6w-loop-2: #7c4ddb;
119
+ --w6w-loop-3: #b7791f;
120
+ --w6w-loop-4: #0e8fa8;
121
+ --w6w-loop-5: #b0399f;
122
+ --w6w-loop-6: #4f4fc7;
103
123
  --w6w-code-comment: #6b7280;
104
124
  --w6w-code-keyword: #8250df;
105
125
  --w6w-code-string: #0a7b34;
@@ -124,6 +144,12 @@
124
144
  --w6w-health-down: var(--w6w-danger);
125
145
  --w6w-health-unknown: #9aa3b2;
126
146
  --w6w-icon-swatch: #1f232c;
147
+ --w6w-loop-1: #5b9bff;
148
+ --w6w-loop-2: #a98bff;
149
+ --w6w-loop-3: #f0b13a;
150
+ --w6w-loop-4: #3cc6e0;
151
+ --w6w-loop-5: #e47ad6;
152
+ --w6w-loop-6: #8a8aff;
127
153
  --w6w-code-comment: #7d8797;
128
154
  --w6w-code-keyword: #d2a8ff;
129
155
  --w6w-code-string: #7ee787;