@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
@@ -0,0 +1,353 @@
1
+ .w6w-canvas-layer {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ width: 0;
6
+ height: 0;
7
+ overflow: visible;
8
+ pointer-events: none;
9
+ }
10
+ .w6w-canvas-section,
11
+ .w6w-canvas-note {
12
+ position: absolute;
13
+ box-sizing: border-box;
14
+ border: 1px solid var(--w6w-canvas-color, var(--w6w-border));
15
+ border-radius: var(--w6w-radius, 6px);
16
+ background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 14%, transparent);
17
+ pointer-events: none;
18
+ }
19
+ // A note reads as a sticky: an opaque tint of its colour over the panel, so it stays legible in
20
+ // both themes and over a section or the grid.
21
+ .w6w-canvas-note {
22
+ border-color: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-border)) 55%, var(--w6w-panel));
23
+ background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 32%, var(--w6w-panel));
24
+ box-shadow: 0 1px 3px rgb(0 0 0 / 12%);
25
+ }
26
+ .w6w-canvas-note.selected,
27
+ .w6w-canvas-section.selected {
28
+ outline: 2px solid var(--w6w-accent);
29
+ outline-offset: 2px;
30
+ }
31
+ .w6w-canvas-note-body {
32
+ pointer-events: auto;
33
+ color: var(--w6w-text);
34
+ }
35
+ // A section's label sits above its frame's top-left corner, never inside the frame.
36
+ .w6w-canvas-section-title {
37
+ position: absolute;
38
+ max-width: 320px;
39
+ overflow: hidden;
40
+ padding: var(--w6w-sp-0-5) var(--w6w-sp-1-5);
41
+ border-radius: 6px;
42
+ color: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-text)) 55%, var(--w6w-text));
43
+ font-size: var(--w6w-fs-sm);
44
+ font-weight: var(--w6w-fw-semibold);
45
+ text-overflow: ellipsis;
46
+ white-space: nowrap;
47
+ }
48
+ .w6w-canvas-section-title.editable {
49
+ pointer-events: auto;
50
+ cursor: grab;
51
+ touch-action: none;
52
+ }
53
+ .w6w-canvas-section-title.editable:hover {
54
+ background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 18%, transparent);
55
+ }
56
+ .w6w-canvas-note-body {
57
+ box-sizing: border-box;
58
+ height: 100%;
59
+ overflow: auto;
60
+ padding: var(--w6w-sp-3) var(--w6w-sp-3);
61
+ font-size: var(--w6w-fs-sm);
62
+ line-height: var(--w6w-lh-normal);
63
+ overflow-wrap: anywhere;
64
+ h1,
65
+ h2,
66
+ h3,
67
+ h4,
68
+ h5,
69
+ h6,
70
+ p,
71
+ ul,
72
+ ol {
73
+ margin: 0 0 var(--w6w-sp-1);
74
+ }
75
+ h1 {
76
+ font-size: var(--w6w-fs-2xl);
77
+ line-height: var(--w6w-lh-tight);
78
+ }
79
+ h2 {
80
+ font-size: var(--w6w-fs-xl);
81
+ line-height: var(--w6w-lh-tight);
82
+ }
83
+ h3 {
84
+ font-size: var(--w6w-fs-lg);
85
+ line-height: var(--w6w-lh-tight);
86
+ }
87
+ h4,
88
+ h5,
89
+ h6 {
90
+ font-size: var(--w6w-fs-base);
91
+ }
92
+ }
93
+ // The in-place editor shares the view's box and type, so editing does not shift the text.
94
+ .w6w-canvas-note-editor {
95
+ outline: none;
96
+ cursor: text;
97
+ > div,
98
+ > h1,
99
+ > h2,
100
+ > h3,
101
+ > h4,
102
+ > h5,
103
+ > h6 {
104
+ margin: 0;
105
+ }
106
+ }
107
+ // The note's corner resize grip: two diagonal strokes, shown on hover or when selected.
108
+ .w6w-note-resize {
109
+ position: absolute;
110
+ right: var(--w6w-sp-0-5);
111
+ bottom: var(--w6w-sp-0-5);
112
+ width: 14px;
113
+ height: 14px;
114
+ cursor: nwse-resize;
115
+ pointer-events: auto;
116
+ touch-action: none;
117
+ opacity: 0;
118
+ background: linear-gradient(
119
+ 135deg,
120
+ transparent 45%,
121
+ var(--w6w-muted) 45% 52%,
122
+ transparent 52% 70%,
123
+ var(--w6w-muted) 70% 77%,
124
+ transparent 77%
125
+ );
126
+ }
127
+ .w6w-canvas-note:hover .w6w-note-resize,
128
+ .w6w-canvas-note.selected .w6w-note-resize,
129
+ .w6w-canvas-section.selected .w6w-note-resize {
130
+ opacity: 1;
131
+ }
132
+ .w6w-canvas-note-empty {
133
+ color: var(--w6w-muted);
134
+ font-style: italic;
135
+ }
136
+
137
+ // The selected note's floating toolbar.
138
+ .w6w-note-toolbar {
139
+ position: absolute;
140
+ display: flex;
141
+ align-items: center;
142
+ gap: var(--w6w-sp-0-5);
143
+ padding: var(--w6w-sp-1);
144
+ background: var(--w6w-panel);
145
+ color: var(--w6w-text);
146
+ border: 1px solid var(--w6w-border);
147
+ border-radius: 10px;
148
+ box-shadow: 0 6px 20px rgb(0 0 0 / 18%);
149
+ font-size: var(--w6w-fs-sm);
150
+ white-space: nowrap;
151
+ pointer-events: auto;
152
+ .w6w-icon-btn {
153
+ gap: var(--w6w-sp-1);
154
+ padding: var(--w6w-sp-1-5);
155
+ color: var(--w6w-text);
156
+ }
157
+ }
158
+ .w6w-note-toolbar-group {
159
+ position: relative;
160
+ display: inline-flex;
161
+ }
162
+ .w6w-note-toolbar-sep {
163
+ align-self: stretch;
164
+ width: 1px;
165
+ margin: var(--w6w-sp-0-5) var(--w6w-sp-0-5);
166
+ background: var(--w6w-border);
167
+ }
168
+ .w6w-note-grip {
169
+ cursor: grab;
170
+ touch-action: none;
171
+ }
172
+ .w6w-note-grip:active {
173
+ cursor: grabbing;
174
+ }
175
+ // The section toolbar's label field reads as the label until focused. Sized by its `size`
176
+ // attribute, so a host's global `input { width: 100% }` must not collapse it inside the flex row.
177
+ .w6w-note-toolbar .w6w-section-title-input {
178
+ flex: none;
179
+ width: auto;
180
+ margin: 0;
181
+ padding: var(--w6w-sp-1) var(--w6w-sp-1-5);
182
+ border: 1px solid transparent;
183
+ border-radius: 6px;
184
+ background: transparent;
185
+ color: inherit;
186
+ font: inherit;
187
+ font-weight: var(--w6w-fw-semibold);
188
+ }
189
+ .w6w-note-toolbar .w6w-section-title-input:hover {
190
+ border-color: var(--w6w-border);
191
+ }
192
+ .w6w-note-toolbar .w6w-section-title-input:focus {
193
+ border-color: var(--w6w-accent);
194
+ outline: none;
195
+ }
196
+ .w6w-note-size-btn {
197
+ font-weight: var(--w6w-fw-semibold);
198
+ }
199
+ .w6w-note-delete:hover {
200
+ color: var(--w6w-danger);
201
+ }
202
+ .w6w-note-swatch {
203
+ width: 16px;
204
+ height: 16px;
205
+ border-radius: 50%;
206
+ background: var(--w6w-canvas-color);
207
+ box-shadow: inset 0 0 0 1px rgb(0 0 0 / 15%);
208
+ }
209
+ .w6w-note-menu {
210
+ position: absolute;
211
+ top: calc(100% + var(--w6w-sp-2));
212
+ left: 0;
213
+ z-index: 1;
214
+ display: flex;
215
+ padding: var(--w6w-sp-1);
216
+ background: var(--w6w-panel);
217
+ border: 1px solid var(--w6w-border);
218
+ border-radius: 10px;
219
+ box-shadow: 0 6px 20px rgb(0 0 0 / 18%);
220
+ }
221
+ .w6w-note-menu-colors {
222
+ display: grid;
223
+ grid-template-columns: repeat(5, 24px);
224
+ gap: var(--w6w-sp-1-5);
225
+ padding: var(--w6w-sp-2);
226
+ }
227
+ .w6w-note-swatch-btn {
228
+ position: relative;
229
+ width: 24px;
230
+ height: 24px;
231
+ padding: 0;
232
+ border: 2px solid transparent;
233
+ border-radius: 50%;
234
+ background: var(--w6w-canvas-color);
235
+ box-shadow: inset 0 0 0 1px rgb(0 0 0 / 15%);
236
+ cursor: pointer;
237
+ }
238
+ .w6w-note-swatch-btn.active {
239
+ border-color: var(--w6w-panel);
240
+ box-shadow: 0 0 0 2px var(--w6w-accent);
241
+ }
242
+ .w6w-note-swatch-custom {
243
+ overflow: hidden;
244
+ background: conic-gradient(#f87171, #facc15, #4ade80, #60a5fa, #a78bfa, #f87171);
245
+ input {
246
+ position: absolute;
247
+ inset: 0;
248
+ width: 100%;
249
+ height: 100%;
250
+ opacity: 0;
251
+ cursor: pointer;
252
+ }
253
+ }
254
+ .w6w-note-menu-sizes {
255
+ flex-direction: column;
256
+ min-width: 150px;
257
+ }
258
+ .w6w-note-menu-item {
259
+ padding: var(--w6w-sp-1) var(--w6w-sp-2);
260
+ border: 0;
261
+ border-radius: 6px;
262
+ background: transparent;
263
+ color: inherit;
264
+ text-align: left;
265
+ font-weight: var(--w6w-fw-semibold);
266
+ cursor: pointer;
267
+ }
268
+ .w6w-note-menu-item:hover {
269
+ background: var(--w6w-panel-2);
270
+ }
271
+ // The canvas right-click menu (CanvasContextMenu): the note menu's panel and items,
272
+ // placed at the pointer instead of under a toolbar button.
273
+ .w6w-canvas-menu {
274
+ top: auto;
275
+ z-index: 10;
276
+ flex-direction: column;
277
+ min-width: 170px;
278
+ .w6w-note-menu-item {
279
+ font-weight: var(--w6w-fw-medium);
280
+ }
281
+ .w6w-note-menu-item:focus-visible {
282
+ outline: none;
283
+ background: var(--w6w-panel-2);
284
+ }
285
+ .w6w-note-menu-item.danger {
286
+ color: var(--w6w-danger);
287
+ }
288
+ .w6w-note-menu-item.separated {
289
+ position: relative;
290
+ margin-top: var(--w6w-sp-2);
291
+ }
292
+ .w6w-note-menu-item.separated::before {
293
+ content: "";
294
+ position: absolute;
295
+ top: calc(-1 * var(--w6w-sp-1) - 0.5px);
296
+ right: 0;
297
+ left: 0;
298
+ border-top: 1px solid var(--w6w-border);
299
+ }
300
+ .w6w-note-menu-item[aria-disabled="true"] {
301
+ opacity: 0.45;
302
+ cursor: default;
303
+ background: transparent;
304
+ }
305
+ }
306
+ .w6w-note-size-1 {
307
+ font-size: var(--w6w-fs-xl);
308
+ }
309
+ .w6w-note-size-2 {
310
+ font-size: var(--w6w-fs-lg);
311
+ }
312
+ .w6w-note-size-3 {
313
+ font-size: var(--w6w-fs-base);
314
+ }
315
+ .w6w-note-size-0 {
316
+ font-size: var(--w6w-fs-sm);
317
+ font-weight: var(--w6w-fw-regular);
318
+ }
319
+
320
+ // The editor's top-left tool strip: "+ Node", then the canvas tools as icon buttons.
321
+ .w6w-flow-tools {
322
+ display: flex;
323
+ align-items: center;
324
+ gap: var(--w6w-sp-1-5);
325
+ }
326
+ .w6w-flow-tool {
327
+ padding: var(--w6w-sp-2);
328
+ background: var(--w6w-panel);
329
+ color: var(--w6w-text);
330
+ border: 1px solid var(--w6w-border);
331
+ }
332
+ .w6w-flow-tool.active {
333
+ border-color: var(--w6w-accent);
334
+ color: var(--w6w-accent);
335
+ background: color-mix(in srgb, var(--w6w-accent) 12%, var(--w6w-panel));
336
+ }
337
+
338
+ // The draw-section surface and the frame being dragged on it.
339
+ .w6w-section-draw {
340
+ position: absolute;
341
+ inset: 0;
342
+ z-index: 4;
343
+ cursor: crosshair;
344
+ touch-action: none;
345
+ }
346
+ .w6w-section-draw-rect {
347
+ position: absolute;
348
+ box-sizing: border-box;
349
+ border: 2px dashed var(--w6w-accent);
350
+ border-radius: var(--w6w-radius, 6px);
351
+ background: color-mix(in srgb, var(--w6w-accent) 10%, transparent);
352
+ pointer-events: none;
353
+ }
@@ -0,0 +1,35 @@
1
+ /* Every CodeMirror code view (`JsonEditor`, `CodeEditor`, `YamlEditor`) FILLS
2
+ its bordered box. The border is on `.cm-editor`, which react-codemirror
3
+ sizes with the `height` / `minHeight` / `maxHeight` props and whose
4
+ `.cm-scroller` it gives `height: 100%`. With only a min/max height (the Data
5
+ page's Document modal) that percentage has nothing definite to resolve
6
+ against, so the scroller — and the gutter column inside it — stopped at the
7
+ last content line, the horizontal scrollbar sat right under it, and the rest
8
+ of the box was empty.
9
+
10
+ The react-codemirror root (the wrapper's first child) is a one-cell grid.
11
+ A grid area is definite once its track is sized, so `.cm-editor`, stretched
12
+ into it, has a definite height whether that came from `height`, from
13
+ `minHeight` or from the content (capped by `maxHeight`), and the scroller and
14
+ the gutters fill it. `minmax(0, 1fr)` keeps a long line from widening the
15
+ editor: the scroller scrolls it instead. The wrapper is a flex column so a
16
+ wrapper given a definite height (a flex item with `min-height: 0`, as in
17
+ `_step-config.scss`) hands that height down to the editor.
18
+
19
+ Everything sits under `:where()` (specificity 0 for the wrapper part), so a
20
+ call site's own layout for the same elements — `_expression-modal.scss`'s
21
+ JSON pane, a host's dialog — still wins. */
22
+ :where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) {
23
+ display: flex;
24
+ flex-direction: column;
25
+ }
26
+ :where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) > :first-child {
27
+ display: grid;
28
+ grid-template-columns: minmax(0, 1fr);
29
+ flex: 1 1 auto;
30
+ min-height: 0;
31
+ }
32
+ :where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) .cm-scroller,
33
+ :where(.w6w-json-editor, .w6w-code-editor, .w6w-yaml-editor) .cm-gutters {
34
+ min-height: 100%;
35
+ }
@@ -108,15 +108,16 @@
108
108
  /* The expanded form of a clipped value (`resolved-clip.ts`). A block with its
109
109
  own scroll, so "Show all" can never restore the unbounded inline paste that
110
110
  buried the other params and the run's result. */
111
+ .w6w-resolved-copy {
112
+ margin: var(--w6w-sp-1) 0;
113
+ }
111
114
  .w6w-resolved-text-full {
112
115
  display: block;
113
- margin: var(--w6w-sp-1) 0;
116
+ margin: 0;
114
117
  max-height: 14em;
115
118
  overflow: auto;
116
- padding: var(--w6w-sp-2);
117
- background: var(--w6w-panel-2);
118
- border: 1px solid var(--w6w-border);
119
- border-radius: var(--w6w-radius);
119
+ padding: 0;
120
+ padding-right: var(--w6w-sp-10);
120
121
  font-family: var(--w6w-font-mono);
121
122
  font-size: 0.85em; /* lint-tokens-allow: matches the sibling code-typography rules above in this same file */
122
123
  line-height: var(--w6w-lh-normal);
@@ -18,23 +18,11 @@
18
18
  gap: var(--w6w-sp-2);
19
19
  flex-shrink: 0;
20
20
  }
21
- .w6w-connection-rows {
22
- list-style: none;
23
- margin: 0;
24
- padding: 0;
25
- display: flex;
26
- flex-direction: column;
27
- gap: var(--w6w-sp-1);
28
- }
29
- .w6w-connection-row {
30
- display: flex;
21
+ .w6w-connection-cell-name {
22
+ display: inline-flex;
31
23
  align-items: center;
32
24
  gap: var(--w6w-sp-2);
33
25
  }
34
- .w6w-connection-row-main {
35
- flex: 1;
36
- min-width: 0;
37
- }
38
26
  .w6w-connection-row-actions {
39
27
  display: flex;
40
28
  gap: var(--w6w-sp-1-5);
@@ -145,3 +145,27 @@
145
145
  flex: 1 1 auto;
146
146
  min-width: 0;
147
147
  }
148
+
149
+ /* ── Hover modifier: ResultViewer — the button overlays the top-right corner of
150
+ ANY child and is revealed on hover/focus; always shown where there is no hover. */
151
+ .w6w-copyable--hover {
152
+ position: relative;
153
+ align-items: flex-start;
154
+ }
155
+ .w6w-copyable--hover > .w6w-copyable-btn {
156
+ position: absolute;
157
+ top: var(--w6w-sp-1);
158
+ right: var(--w6w-sp-1);
159
+ background: var(--w6w-panel);
160
+ border-color: var(--w6w-border);
161
+ opacity: 0;
162
+ }
163
+ .w6w-copyable--hover:hover > .w6w-copyable-btn,
164
+ .w6w-copyable--hover:focus-within > .w6w-copyable-btn {
165
+ opacity: 1;
166
+ }
167
+ @media (hover: none) {
168
+ .w6w-copyable--hover > .w6w-copyable-btn {
169
+ opacity: 1;
170
+ }
171
+ }
@@ -0,0 +1,138 @@
1
+ /* Data stores (F-2): DataStoreList, ColumnsEditor, CsvPanel and the data-grid/entry rules ported from Studio's Data store detail page. */
2
+ .w6w-data-store-list {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--w6w-sp-3);
6
+ }
7
+ .w6w-data-store-list-head {
8
+ display: flex;
9
+ justify-content: space-between;
10
+ align-items: flex-start;
11
+ gap: var(--w6w-sp-4);
12
+ }
13
+ .w6w-data-store-list-heading {
14
+ min-width: 0;
15
+ }
16
+ .w6w-data-store-list-actions {
17
+ display: flex;
18
+ gap: var(--w6w-sp-2);
19
+ flex-shrink: 0;
20
+ }
21
+ .w6w-data-columns-head {
22
+ display: flex;
23
+ justify-content: space-between;
24
+ align-items: center;
25
+ }
26
+ .w6w-data-columns-list {
27
+ list-style: none;
28
+ margin: 0;
29
+ padding: 0;
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--w6w-sp-2);
33
+ }
34
+ .w6w-data-columns-row {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ align-items: center;
38
+ gap: var(--w6w-sp-2);
39
+ }
40
+ .w6w-data-columns-required {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: var(--w6w-sp-1);
44
+ }
45
+ .w6w-data-columns-error {
46
+ flex-basis: 100%;
47
+ }
48
+ .w6w-data-entries-toolbar {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: var(--w6w-sp-2);
52
+ margin: var(--w6w-sp-3) 0;
53
+ }
54
+ .w6w-data-entries-toolbar input[type="search"] {
55
+ flex: 1;
56
+ max-width: 20rem;
57
+ /* Same box as `.w6w-field` inputs — no host page styles a bare search input. */
58
+ background: var(--w6w-panel-2);
59
+ border: 1px solid var(--w6w-border);
60
+ border-radius: 8px;
61
+ padding: var(--w6w-sp-2) var(--w6w-sp-2-5);
62
+ color: var(--w6w-text);
63
+ font-size: var(--w6w-fs-sm);
64
+ font-family: inherit;
65
+ }
66
+ .w6w-data-entries-toolbar input[type="search"]:focus {
67
+ outline: none;
68
+ border-color: var(--w6w-accent);
69
+ }
70
+ /* Entries open a viewer. Keep the list quiet and bounded, even for long keys or JSON. */
71
+ .w6w-data-entry-list {
72
+ table-layout: fixed;
73
+ }
74
+ .w6w-data-entry-key,
75
+ .w6w-data-entry-preview {
76
+ display: block;
77
+ width: 100%;
78
+ overflow: hidden;
79
+ white-space: nowrap;
80
+ text-overflow: ellipsis;
81
+ }
82
+ .w6w-data-entry-key {
83
+ appearance: none;
84
+ border: 0;
85
+ border-radius: 0;
86
+ background: transparent;
87
+ padding: 0;
88
+ color: inherit;
89
+ font: inherit;
90
+ text-align: left;
91
+ cursor: pointer;
92
+ }
93
+ .w6w-data-entry-key:focus-visible {
94
+ outline: 2px solid var(--w6w-accent);
95
+ outline-offset: 2px;
96
+ }
97
+ .w6w-data-entry-delete {
98
+ margin-inline-end: auto;
99
+ }
100
+ /* The wide-table pane: the sheet scrolls INSIDE this box, so a 24-column
101
+ table never widens its container and the page itself never overflows. */
102
+ .w6w-data-grid-scroll {
103
+ overflow-x: auto;
104
+ max-width: 100%;
105
+ }
106
+ .w6w-data-grid-scroll input {
107
+ min-width: var(--w6w-sp-16);
108
+ }
109
+ .w6w-data-cell {
110
+ display: flex;
111
+ flex-direction: column;
112
+ gap: var(--w6w-sp-1);
113
+ }
114
+ .w6w-data-cell-error {
115
+ color: var(--w6w-danger);
116
+ font-size: var(--w6w-fs-xs);
117
+ }
118
+ .w6w-data-row-actions {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: var(--w6w-sp-2);
122
+ }
123
+ .w6w-data-entry-editor {
124
+ margin-top: var(--w6w-sp-4);
125
+ }
126
+ .w6w-data-entry-editor-actions {
127
+ display: flex;
128
+ gap: var(--w6w-sp-2);
129
+ margin-top: var(--w6w-sp-3);
130
+ }
131
+ .w6w-data-csv-panel {
132
+ margin-bottom: var(--w6w-sp-4);
133
+ }
134
+ .w6w-data-csv-panel-actions {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: var(--w6w-sp-3);
138
+ }
@@ -0,0 +1,55 @@
1
+ /* The frame is the ONLY element of a DataTable that draws an outer border and a
2
+ radius (T-3). `overflow: hidden` clips the cells at the rounded corners, so
3
+ the table below never needs an outer edge of its own. */
4
+ .w6w-data-table-frame {
5
+ border: 1px solid var(--w6w-border);
6
+ border-radius: var(--w6w-radius);
7
+ background: var(--w6w-panel);
8
+ overflow: hidden;
9
+ }
10
+ /* No outer border here (T-3): the frame above already draws it. */
11
+ .w6w-data-table {
12
+ width: 100%;
13
+ border-collapse: collapse;
14
+ color: var(--w6w-text);
15
+ }
16
+ /* Inner separators only (T-3): a right border on every cell but the last column
17
+ and a bottom border on every row but the last. First column, first row, last
18
+ column and last row therefore paint nothing on the outside — one border per
19
+ outer edge, from the frame. */
20
+ .w6w-data-table th,
21
+ .w6w-data-table td {
22
+ border-right: 1px solid var(--w6w-border);
23
+ border-bottom: 1px solid var(--w6w-border);
24
+ padding: var(--w6w-sp-2) var(--w6w-sp-3);
25
+ text-align: left;
26
+ vertical-align: middle;
27
+ }
28
+ .w6w-data-table th:last-child,
29
+ .w6w-data-table td:last-child {
30
+ border-right: 0;
31
+ }
32
+ .w6w-data-table tbody tr:last-child > td {
33
+ border-bottom: 0;
34
+ }
35
+ /* Header-only table (rows=[] + loading, e.g. a list still fetching): there is no
36
+ `tbody tr:last-child` to strip, so the header's bottom border would sit right
37
+ on top of the frame's own bottom edge and paint it twice. With no body row the
38
+ header is the last row, so it paints no bottom border — the frame supplies it. */
39
+ .w6w-data-table:not(:has(tbody tr)) th {
40
+ border-bottom: 0;
41
+ }
42
+ .w6w-data-table th {
43
+ color: var(--w6w-muted);
44
+ }
45
+ .w6w-data-table-row-clickable {
46
+ cursor: pointer;
47
+ }
48
+ .w6w-data-table-row-clickable:hover {
49
+ background: var(--w6w-panel-2);
50
+ }
51
+ .w6w-data-table-link {
52
+ display: block;
53
+ color: inherit;
54
+ text-decoration: none;
55
+ }
@@ -1,12 +1,12 @@
1
1
  .w6w-datavar-row {
2
2
  display: grid;
3
- grid-template-columns: 1fr 110px 1fr auto;
3
+ // A long expression must not widen its track and shift the other columns in that row.
4
+ grid-template-columns: minmax(0, 1fr) 110px minmax(0, 1fr) auto;
4
5
  gap: var(--w6w-sp-1-5);
5
- /* Align to the end so that on an `expression` row — where the value cell is a
6
- taller ExpressionInput (toolbar above its editor) — the key/type/remove
7
- cells line up with the editor at the bottom, not the toolbar. Single-line
8
- rows are unaffected (every cell is the same height). */
9
- align-items: end;
6
+ align-items: stretch;
7
+ }
8
+ .w6w-datavar-row > * {
9
+ min-width: 0;
10
10
  }
11
11
  .w6w-datavar-row input,
12
12
  .w6w-datavar-row select {
@@ -36,3 +36,14 @@
36
36
  .w6w-datavar-row .w6w-btn {
37
37
  padding: var(--w6w-sp-1-5) var(--w6w-sp-2-5);
38
38
  }
39
+ .w6w-datavar-modes {
40
+ margin-left: auto;
41
+ }
42
+ .w6w-datavar-modes .active {
43
+ background: var(--w6w-panel-2);
44
+ border-color: var(--w6w-accent);
45
+ color: var(--w6w-accent);
46
+ }
47
+ .w6w-datavar-error {
48
+ color: var(--w6w-danger);
49
+ }
@@ -0,0 +1,21 @@
1
+ .w6w-empty-state {
2
+ position: relative;
3
+ min-height: 10rem;
4
+ background: var(--w6w-panel);
5
+ color: var(--w6w-text);
6
+ border: 1px solid var(--w6w-border);
7
+ }
8
+ .w6w-empty-state-inner {
9
+ position: absolute;
10
+ top: 50%;
11
+ left: 50%;
12
+ transform: translate(-50%, -50%);
13
+ display: flex;
14
+ flex-direction: column;
15
+ align-items: center;
16
+ gap: var(--w6w-sp-2);
17
+ text-align: center;
18
+ }
19
+ .w6w-empty-state-body {
20
+ color: var(--w6w-muted);
21
+ }