@inf-monkeys-tech/monkeys-design 0.4.34 → 0.4.36

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 (47) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +226 -226
  3. package/dist/components/base/index.js.map +1 -1
  4. package/dist/components/base/index.mjs.map +1 -1
  5. package/dist/components/data-explorer/index.js.map +1 -1
  6. package/dist/components/data-explorer/index.mjs.map +1 -1
  7. package/dist/components/layout/index.js.map +1 -1
  8. package/dist/components/layout/index.mjs.map +1 -1
  9. package/dist/components/login/index.js.map +1 -1
  10. package/dist/components/login/index.mjs.map +1 -1
  11. package/dist/components/toast/index.d.mts +75 -0
  12. package/dist/components/toast/index.d.ts +75 -0
  13. package/dist/components/toast/index.js +283 -0
  14. package/dist/components/toast/index.js.map +1 -0
  15. package/dist/components/toast/index.mjs +273 -0
  16. package/dist/components/toast/index.mjs.map +1 -0
  17. package/dist/components/toolbar/index.js.map +1 -1
  18. package/dist/components/toolbar/index.mjs.map +1 -1
  19. package/dist/components/workbench/index.js.map +1 -1
  20. package/dist/components/workbench/index.mjs.map +1 -1
  21. package/dist/icons/oauth/index.js.map +1 -1
  22. package/dist/icons/oauth/index.mjs.map +1 -1
  23. package/dist/index.d.mts +2 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +284 -10
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +276 -11
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/palette/index.js.map +1 -1
  30. package/dist/palette/index.mjs.map +1 -1
  31. package/dist/registry/index.js.map +1 -1
  32. package/dist/registry/index.mjs.map +1 -1
  33. package/dist/styles/artist-login.scss +374 -374
  34. package/dist/styles/global.scss +21 -21
  35. package/dist/styles/workflow-board.scss +440 -440
  36. package/dist/styles/workflow-nodes.css +340 -340
  37. package/dist/theme-system/index.js.map +1 -1
  38. package/dist/theme-system/index.mjs.map +1 -1
  39. package/dist/themes/artist/index.js.map +1 -1
  40. package/dist/themes/artist/index.mjs.map +1 -1
  41. package/dist/themes/bsd/index.js.map +1 -1
  42. package/dist/themes/bsd/index.mjs.map +1 -1
  43. package/dist/themes/concept/index.js.map +1 -1
  44. package/dist/themes/concept/index.mjs.map +1 -1
  45. package/dist/themes/default/index.js.map +1 -1
  46. package/dist/themes/default/index.mjs.map +1 -1
  47. package/package.json +146 -139
@@ -1,340 +1,340 @@
1
- /* Workflow 节点系统样式 - 来自 workflow-examples */
2
-
3
- .tl-container {
4
- --node-shadows: 0 2px 6px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
5
- --node-shadow-border:
6
- 0 0 0 1px rgba(0, 0, 0, 0.04), 0 2px 6px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
7
- --node-shadow-highlight:
8
- 0 0 0 calc(1.2px / var(--tl-zoom)) var(--tl-color-selected), 0 2px 6px rgba(0, 0, 0, 0.08),
9
- 0 1px 2px rgba(0, 0, 0, 0.04);
10
- /* FIX: Override tldraw's default pointer-events: none to allow Portal popovers to receive events */
11
- pointer-events: auto !important;
12
- }
13
-
14
- .NodeShape {
15
- border-radius: var(--tl-radius-3);
16
- background: var(--tl-color-panel);
17
- box-shadow: var(--node-shadow-border);
18
- width: 100%;
19
- height: fit-content;
20
- display: flex;
21
- flex-direction: column;
22
- padding-bottom: var(--tl-space-3);
23
- }
24
-
25
- .NodeShape .NodeShape-heading {
26
- padding: 0 var(--tl-space-4);
27
- display: flex;
28
- align-items: center;
29
- justify-content: center;
30
- gap: var(--tl-space-4);
31
- height: 40px;
32
- margin-bottom: var(--tl-space-2);
33
- }
34
-
35
- .NodeShape .NodeShape-label {
36
- flex: 1 1 auto;
37
- font-weight: 500;
38
- }
39
-
40
- .NodeShape .NodeShape-output {
41
- font-variant-numeric: tabular-nums;
42
- }
43
-
44
- .NodeShape.NodeShape_executing {
45
- box-shadow:
46
- 0 0 0 calc(2px / var(--tl-zoom)) var(--tl-color-selected),
47
- 0 2px 6px rgba(0, 0, 0, 0.08),
48
- 0 1px 2px rgba(0, 0, 0, 0.04);
49
- }
50
-
51
- .NodeRow {
52
- display: flex;
53
- flex-direction: row;
54
- align-items: center;
55
- justify-content: flex-start;
56
- height: 44px;
57
- gap: var(--tl-space-4);
58
- padding: var(--tl-space-2) var(--tl-space-4);
59
- }
60
-
61
- .NodeRow input,
62
- .NodeRow select {
63
- align-self: stretch;
64
- flex: 1 1 auto;
65
- border: 1px solid var(--tl-color-hint);
66
- padding: 0 var(--tl-space-4);
67
- border-radius: var(--tl-radius-3);
68
- background: none;
69
- font: inherit;
70
- outline: none;
71
- }
72
-
73
- .NodeRow input:focus,
74
- .NodeRow select:focus {
75
- border-color: var(--tl-color-selected);
76
- }
77
-
78
- [data-state='select.idle'] .NodeRow input,
79
- [data-state='select.idle'] .NodeRow select {
80
- pointer-events: all;
81
- }
82
-
83
- .NodeRow select {
84
- -webkit-appearance: none;
85
- -moz-appearance: none;
86
- appearance: none;
87
- background-image: url("data:image/svg+xml;utf8,<svg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'><path fill-rule='evenodd' clip-rule='evenodd' d='M6.27047 12.3161C6.6482 11.9131 7.28103 11.8927 7.68394 12.2705L15 19.1293L22.3161 12.2705C22.719 11.8927 23.3518 11.9131 23.7295 12.3161C24.1073 12.719 24.0869 13.3518 23.6839 13.7295L15.6839 21.2295C15.2993 21.5902 14.7007 21.5902 14.3161 21.2295L6.31606 13.7295C5.91315 13.3518 5.89274 12.719 6.27047 12.3161Z' fill='black'/></svg>");
88
- background-repeat: no-repeat;
89
- background-position: right var(--tl-space-4) center;
90
- background-size: 16px;
91
- }
92
-
93
- .NodeInputRow .NodeInputRow-buttons {
94
- display: none;
95
- position: absolute;
96
- right: 19px;
97
- }
98
-
99
- .NodeInputRow .NodeInputRow-buttons button {
100
- margin-right: -8px;
101
- min-width: 38px;
102
- height: 38px;
103
- }
104
-
105
- .NodeInputRow:has(input:not(:disabled)):hover .NodeInputRow-buttons,
106
- .NodeInputRow:has(input:not(:disabled)):has(input:focus) .NodeInputRow-buttons {
107
- display: flex;
108
- }
109
-
110
- .Port {
111
- position: absolute;
112
- width: 12px;
113
- height: 12px;
114
- border-radius: 50%;
115
- background: var(--tl-color-panel);
116
- box-sizing: border-box;
117
- z-index: 2;
118
- box-shadow:
119
- 0 0 0 1px rgba(0, 0, 0, 0.04),
120
- 0 1px 3px rgba(0, 0, 0, 0.12);
121
- flex: 0 0 auto;
122
- transition: transform 0.05s ease-in-out;
123
- }
124
-
125
- [data-state='select.idle'] .Port {
126
- pointer-events: all;
127
- }
128
-
129
- .Port.Port_hinting {
130
- background: var(--tl-color-selected);
131
- }
132
-
133
- .Port.Port_end {
134
- left: -6px;
135
- }
136
-
137
- .Port.Port_start {
138
- right: -6px;
139
- }
140
-
141
- .Port.Port_eligible {
142
- box-shadow:
143
- 0 0 0 calc(1px / var(--tl-zoom)) var(--tl-color-selected),
144
- 0 0 0 1px rgba(0, 0, 0, 0.04),
145
- 0 1px 3px rgba(0, 0, 0, 0.12);
146
- }
147
-
148
- .ConnectionShape {
149
- stroke-width: 2px;
150
- stroke: var(--tl-color-text-3);
151
- fill: none;
152
- }
153
-
154
- .ConnectionShape.ConnectionShape_realtime {
155
- stroke-dasharray: 4 4;
156
- }
157
-
158
- .ConnectionShape.ConnectionShape_inactive {
159
- stroke: var(--tl-color-hint);
160
- opacity: 0.5;
161
- }
162
-
163
- .ConnectionShapeIndicator {
164
- stroke-width: 2.1px;
165
- stroke-linecap: round;
166
- }
167
-
168
- .ConnectionCenterHandle .ConnectionCenterHandle-hover {
169
- cursor: pointer;
170
- stroke: none;
171
- fill: none;
172
- }
173
-
174
- [data-state='select.idle'] .ConnectionCenterHandle .ConnectionCenterHandle-hover {
175
- pointer-events: all;
176
- }
177
-
178
- .ConnectionCenterHandle .ConnectionCenterHandle-hover:hover {
179
- fill: var(--tl-color-selection-fill);
180
- }
181
-
182
- .ConnectionCenterHandle .ConnectionCenterHandle-ring {
183
- stroke: none;
184
- fill: var(--tl-color-selected);
185
- }
186
-
187
- .ConnectionCenterHandle .ConnectionCenterHandle-icon {
188
- stroke-width: 2px;
189
- stroke: var(--tl-color-selected-contrast);
190
- }
191
-
192
- .OnCanvasComponentPicker {
193
- position: absolute;
194
- top: 0;
195
- left: 0;
196
- z-index: var(--tl-layer-overlays);
197
- --top: 66px;
198
- transform-origin: 0 0;
199
- }
200
-
201
- .OnCanvasComponentPicker .OnCanvasComponentPicker-content {
202
- position: absolute;
203
- margin-top: calc(-1 * var(--top));
204
- width: 150px;
205
- border-radius: var(--tl-radius-3);
206
- background: var(--tl-color-panel);
207
- box-shadow: var(--node-shadow-highlight);
208
- }
209
-
210
- .OnCanvasComponentPicker .OnCanvasComponentPicker-icon {
211
- font-size: 36px;
212
- }
213
-
214
- .OnCanvasComponentPicker.OnCanvasComponentPicker_middle .OnCanvasComponentPicker-content {
215
- margin-left: -75px;
216
- }
217
-
218
- .ConditionalNode-output {
219
- justify-content: flex-end;
220
- }
221
-
222
- .ConditionalNode-output-false {
223
- background: var(--tl-color-muted-0);
224
- border-top: 1px solid var(--tl-color-divider);
225
- margin-bottom: calc(-1 * var(--tl-space-3));
226
- border-bottom-left-radius: var(--tl-radius-3);
227
- border-bottom-right-radius: var(--tl-radius-3);
228
- }
229
-
230
- .NodeValue_placeholder {
231
- display: inline-block;
232
- width: 18px;
233
- height: 10px;
234
- border-radius: 10px;
235
- background: hsl(0, 0%, 0%, 10%);
236
- }
237
-
238
- .SliderNode .tlui-slider__container {
239
- padding: 0;
240
- }
241
-
242
- .SliderNode .tlui-slider__container:has(.tlui-slider__thumb:focus-visible) {
243
- outline: none;
244
- }
245
-
246
- [data-state='select.idle'] .SliderNode .tlui-slider__container {
247
- pointer-events: all;
248
- }
249
-
250
- .WorkflowRegion {
251
- position: absolute;
252
- color: hsl(0, 0%, 70%);
253
- border: 1px dashed currentColor;
254
- border-radius: var(--tl-radius-3);
255
- pointer-events: none;
256
- }
257
-
258
- .WorkflowRegion .WorkflowRegion-button {
259
- position: absolute;
260
- top: 0;
261
- left: -60px;
262
- width: 40px;
263
- height: 40px;
264
- border-radius: 50%;
265
- color: inherit;
266
- background: var(--tl-color-panel);
267
- border: 1px solid currentColor;
268
- display: flex;
269
- align-items: center;
270
- justify-content: center;
271
- cursor: pointer;
272
- }
273
-
274
- .tl-container[data-state='select.idle'] .WorkflowRegion .WorkflowRegion-button {
275
- pointer-events: all;
276
- }
277
-
278
- .WorkflowRegion .WorkflowRegion-button svg {
279
- color: hsl(0, 0%, 60%);
280
- }
281
-
282
- .WorkflowRegion::after {
283
- content: '';
284
- display: block;
285
- width: 20px;
286
- height: 0px;
287
- border-bottom: 1px dashed currentColor;
288
- position: absolute;
289
- top: 20px;
290
- left: -20px;
291
- }
292
-
293
- .WorkflowRegion:has(.WorkflowRegion-button:hover) {
294
- color: var(--tl-color-selected);
295
- }
296
-
297
- .WorkflowRegion.WorkflowRegion_executing {
298
- color: var(--tl-color-selected);
299
- border-style: solid;
300
- }
301
-
302
- .WorkflowRegion.WorkflowRegion_executing::after {
303
- border-bottom-style: solid;
304
- }
305
-
306
- .WorkflowRegion.WorkflowRegion_executing .WorkflowRegion-button {
307
- border-width: 2px;
308
- }
309
-
310
- .WorkflowRegion.WorkflowRegion_executing .WorkflowRegion-button::after {
311
- content: '';
312
- width: 8px;
313
- height: 4px;
314
- border-radius: 100%;
315
- border: 2px solid var(--tl-color-selected);
316
- background: var(--tl-color-panel);
317
- position: absolute;
318
- animation: WorkflowRegion-button-spin 1s linear infinite;
319
- }
320
-
321
- @keyframes WorkflowRegion-button-spin {
322
- 0% {
323
- transform: rotate(0deg) translateY(-19px);
324
- }
325
- 100% {
326
- transform: rotate(360deg) translateY(-19px);
327
- }
328
- }
329
-
330
- .EarthquakeNode-message {
331
- text-align: center;
332
- padding: 24px 12px;
333
- font-size: 12px;
334
- color: #666;
335
- height: 132px; /* 3 * NODE_ROW_HEIGHT_PX (3 * 44) */
336
- display: flex;
337
- align-items: center;
338
- justify-content: center;
339
- }
340
-
1
+ /* Workflow 节点系统样式 - 来自 workflow-examples */
2
+
3
+ .tl-container {
4
+ --node-shadows: 0 2px 6px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
5
+ --node-shadow-border:
6
+ 0 0 0 1px rgba(0, 0, 0, 0.04), 0 2px 6px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
7
+ --node-shadow-highlight:
8
+ 0 0 0 calc(1.2px / var(--tl-zoom)) var(--tl-color-selected), 0 2px 6px rgba(0, 0, 0, 0.08),
9
+ 0 1px 2px rgba(0, 0, 0, 0.04);
10
+ /* FIX: Override tldraw's default pointer-events: none to allow Portal popovers to receive events */
11
+ pointer-events: auto !important;
12
+ }
13
+
14
+ .NodeShape {
15
+ border-radius: var(--tl-radius-3);
16
+ background: var(--tl-color-panel);
17
+ box-shadow: var(--node-shadow-border);
18
+ width: 100%;
19
+ height: fit-content;
20
+ display: flex;
21
+ flex-direction: column;
22
+ padding-bottom: var(--tl-space-3);
23
+ }
24
+
25
+ .NodeShape .NodeShape-heading {
26
+ padding: 0 var(--tl-space-4);
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ gap: var(--tl-space-4);
31
+ height: 40px;
32
+ margin-bottom: var(--tl-space-2);
33
+ }
34
+
35
+ .NodeShape .NodeShape-label {
36
+ flex: 1 1 auto;
37
+ font-weight: 500;
38
+ }
39
+
40
+ .NodeShape .NodeShape-output {
41
+ font-variant-numeric: tabular-nums;
42
+ }
43
+
44
+ .NodeShape.NodeShape_executing {
45
+ box-shadow:
46
+ 0 0 0 calc(2px / var(--tl-zoom)) var(--tl-color-selected),
47
+ 0 2px 6px rgba(0, 0, 0, 0.08),
48
+ 0 1px 2px rgba(0, 0, 0, 0.04);
49
+ }
50
+
51
+ .NodeRow {
52
+ display: flex;
53
+ flex-direction: row;
54
+ align-items: center;
55
+ justify-content: flex-start;
56
+ height: 44px;
57
+ gap: var(--tl-space-4);
58
+ padding: var(--tl-space-2) var(--tl-space-4);
59
+ }
60
+
61
+ .NodeRow input,
62
+ .NodeRow select {
63
+ align-self: stretch;
64
+ flex: 1 1 auto;
65
+ border: 1px solid var(--tl-color-hint);
66
+ padding: 0 var(--tl-space-4);
67
+ border-radius: var(--tl-radius-3);
68
+ background: none;
69
+ font: inherit;
70
+ outline: none;
71
+ }
72
+
73
+ .NodeRow input:focus,
74
+ .NodeRow select:focus {
75
+ border-color: var(--tl-color-selected);
76
+ }
77
+
78
+ [data-state='select.idle'] .NodeRow input,
79
+ [data-state='select.idle'] .NodeRow select {
80
+ pointer-events: all;
81
+ }
82
+
83
+ .NodeRow select {
84
+ -webkit-appearance: none;
85
+ -moz-appearance: none;
86
+ appearance: none;
87
+ background-image: url("data:image/svg+xml;utf8,<svg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'><path fill-rule='evenodd' clip-rule='evenodd' d='M6.27047 12.3161C6.6482 11.9131 7.28103 11.8927 7.68394 12.2705L15 19.1293L22.3161 12.2705C22.719 11.8927 23.3518 11.9131 23.7295 12.3161C24.1073 12.719 24.0869 13.3518 23.6839 13.7295L15.6839 21.2295C15.2993 21.5902 14.7007 21.5902 14.3161 21.2295L6.31606 13.7295C5.91315 13.3518 5.89274 12.719 6.27047 12.3161Z' fill='black'/></svg>");
88
+ background-repeat: no-repeat;
89
+ background-position: right var(--tl-space-4) center;
90
+ background-size: 16px;
91
+ }
92
+
93
+ .NodeInputRow .NodeInputRow-buttons {
94
+ display: none;
95
+ position: absolute;
96
+ right: 19px;
97
+ }
98
+
99
+ .NodeInputRow .NodeInputRow-buttons button {
100
+ margin-right: -8px;
101
+ min-width: 38px;
102
+ height: 38px;
103
+ }
104
+
105
+ .NodeInputRow:has(input:not(:disabled)):hover .NodeInputRow-buttons,
106
+ .NodeInputRow:has(input:not(:disabled)):has(input:focus) .NodeInputRow-buttons {
107
+ display: flex;
108
+ }
109
+
110
+ .Port {
111
+ position: absolute;
112
+ width: 12px;
113
+ height: 12px;
114
+ border-radius: 50%;
115
+ background: var(--tl-color-panel);
116
+ box-sizing: border-box;
117
+ z-index: 2;
118
+ box-shadow:
119
+ 0 0 0 1px rgba(0, 0, 0, 0.04),
120
+ 0 1px 3px rgba(0, 0, 0, 0.12);
121
+ flex: 0 0 auto;
122
+ transition: transform 0.05s ease-in-out;
123
+ }
124
+
125
+ [data-state='select.idle'] .Port {
126
+ pointer-events: all;
127
+ }
128
+
129
+ .Port.Port_hinting {
130
+ background: var(--tl-color-selected);
131
+ }
132
+
133
+ .Port.Port_end {
134
+ left: -6px;
135
+ }
136
+
137
+ .Port.Port_start {
138
+ right: -6px;
139
+ }
140
+
141
+ .Port.Port_eligible {
142
+ box-shadow:
143
+ 0 0 0 calc(1px / var(--tl-zoom)) var(--tl-color-selected),
144
+ 0 0 0 1px rgba(0, 0, 0, 0.04),
145
+ 0 1px 3px rgba(0, 0, 0, 0.12);
146
+ }
147
+
148
+ .ConnectionShape {
149
+ stroke-width: 2px;
150
+ stroke: var(--tl-color-text-3);
151
+ fill: none;
152
+ }
153
+
154
+ .ConnectionShape.ConnectionShape_realtime {
155
+ stroke-dasharray: 4 4;
156
+ }
157
+
158
+ .ConnectionShape.ConnectionShape_inactive {
159
+ stroke: var(--tl-color-hint);
160
+ opacity: 0.5;
161
+ }
162
+
163
+ .ConnectionShapeIndicator {
164
+ stroke-width: 2.1px;
165
+ stroke-linecap: round;
166
+ }
167
+
168
+ .ConnectionCenterHandle .ConnectionCenterHandle-hover {
169
+ cursor: pointer;
170
+ stroke: none;
171
+ fill: none;
172
+ }
173
+
174
+ [data-state='select.idle'] .ConnectionCenterHandle .ConnectionCenterHandle-hover {
175
+ pointer-events: all;
176
+ }
177
+
178
+ .ConnectionCenterHandle .ConnectionCenterHandle-hover:hover {
179
+ fill: var(--tl-color-selection-fill);
180
+ }
181
+
182
+ .ConnectionCenterHandle .ConnectionCenterHandle-ring {
183
+ stroke: none;
184
+ fill: var(--tl-color-selected);
185
+ }
186
+
187
+ .ConnectionCenterHandle .ConnectionCenterHandle-icon {
188
+ stroke-width: 2px;
189
+ stroke: var(--tl-color-selected-contrast);
190
+ }
191
+
192
+ .OnCanvasComponentPicker {
193
+ position: absolute;
194
+ top: 0;
195
+ left: 0;
196
+ z-index: var(--tl-layer-overlays);
197
+ --top: 66px;
198
+ transform-origin: 0 0;
199
+ }
200
+
201
+ .OnCanvasComponentPicker .OnCanvasComponentPicker-content {
202
+ position: absolute;
203
+ margin-top: calc(-1 * var(--top));
204
+ width: 150px;
205
+ border-radius: var(--tl-radius-3);
206
+ background: var(--tl-color-panel);
207
+ box-shadow: var(--node-shadow-highlight);
208
+ }
209
+
210
+ .OnCanvasComponentPicker .OnCanvasComponentPicker-icon {
211
+ font-size: 36px;
212
+ }
213
+
214
+ .OnCanvasComponentPicker.OnCanvasComponentPicker_middle .OnCanvasComponentPicker-content {
215
+ margin-left: -75px;
216
+ }
217
+
218
+ .ConditionalNode-output {
219
+ justify-content: flex-end;
220
+ }
221
+
222
+ .ConditionalNode-output-false {
223
+ background: var(--tl-color-muted-0);
224
+ border-top: 1px solid var(--tl-color-divider);
225
+ margin-bottom: calc(-1 * var(--tl-space-3));
226
+ border-bottom-left-radius: var(--tl-radius-3);
227
+ border-bottom-right-radius: var(--tl-radius-3);
228
+ }
229
+
230
+ .NodeValue_placeholder {
231
+ display: inline-block;
232
+ width: 18px;
233
+ height: 10px;
234
+ border-radius: 10px;
235
+ background: hsl(0, 0%, 0%, 10%);
236
+ }
237
+
238
+ .SliderNode .tlui-slider__container {
239
+ padding: 0;
240
+ }
241
+
242
+ .SliderNode .tlui-slider__container:has(.tlui-slider__thumb:focus-visible) {
243
+ outline: none;
244
+ }
245
+
246
+ [data-state='select.idle'] .SliderNode .tlui-slider__container {
247
+ pointer-events: all;
248
+ }
249
+
250
+ .WorkflowRegion {
251
+ position: absolute;
252
+ color: hsl(0, 0%, 70%);
253
+ border: 1px dashed currentColor;
254
+ border-radius: var(--tl-radius-3);
255
+ pointer-events: none;
256
+ }
257
+
258
+ .WorkflowRegion .WorkflowRegion-button {
259
+ position: absolute;
260
+ top: 0;
261
+ left: -60px;
262
+ width: 40px;
263
+ height: 40px;
264
+ border-radius: 50%;
265
+ color: inherit;
266
+ background: var(--tl-color-panel);
267
+ border: 1px solid currentColor;
268
+ display: flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ cursor: pointer;
272
+ }
273
+
274
+ .tl-container[data-state='select.idle'] .WorkflowRegion .WorkflowRegion-button {
275
+ pointer-events: all;
276
+ }
277
+
278
+ .WorkflowRegion .WorkflowRegion-button svg {
279
+ color: hsl(0, 0%, 60%);
280
+ }
281
+
282
+ .WorkflowRegion::after {
283
+ content: '';
284
+ display: block;
285
+ width: 20px;
286
+ height: 0px;
287
+ border-bottom: 1px dashed currentColor;
288
+ position: absolute;
289
+ top: 20px;
290
+ left: -20px;
291
+ }
292
+
293
+ .WorkflowRegion:has(.WorkflowRegion-button:hover) {
294
+ color: var(--tl-color-selected);
295
+ }
296
+
297
+ .WorkflowRegion.WorkflowRegion_executing {
298
+ color: var(--tl-color-selected);
299
+ border-style: solid;
300
+ }
301
+
302
+ .WorkflowRegion.WorkflowRegion_executing::after {
303
+ border-bottom-style: solid;
304
+ }
305
+
306
+ .WorkflowRegion.WorkflowRegion_executing .WorkflowRegion-button {
307
+ border-width: 2px;
308
+ }
309
+
310
+ .WorkflowRegion.WorkflowRegion_executing .WorkflowRegion-button::after {
311
+ content: '';
312
+ width: 8px;
313
+ height: 4px;
314
+ border-radius: 100%;
315
+ border: 2px solid var(--tl-color-selected);
316
+ background: var(--tl-color-panel);
317
+ position: absolute;
318
+ animation: WorkflowRegion-button-spin 1s linear infinite;
319
+ }
320
+
321
+ @keyframes WorkflowRegion-button-spin {
322
+ 0% {
323
+ transform: rotate(0deg) translateY(-19px);
324
+ }
325
+ 100% {
326
+ transform: rotate(360deg) translateY(-19px);
327
+ }
328
+ }
329
+
330
+ .EarthquakeNode-message {
331
+ text-align: center;
332
+ padding: 24px 12px;
333
+ font-size: 12px;
334
+ color: #666;
335
+ height: 132px; /* 3 * NODE_ROW_HEIGHT_PX (3 * 44) */
336
+ display: flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ }
340
+