@yuneta/gobj-ui 7.23.35 → 7.23.37
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/README.md +99 -10
- package/dist/gobj-ui.cjs.js +3325 -654
- package/dist/gobj-ui.es.js +3324 -655
- package/index.js +2 -0
- package/package.json +1 -1
- package/src/c_yui_fsm_graph.css +128 -0
- package/src/c_yui_fsm_graph.js +1015 -0
- package/src/c_yui_gclass.css +524 -0
- package/src/c_yui_gclass.js +1546 -0
- package/src/c_yui_gobj_tree_js.js +11 -27
- package/src/gclass_view_model.js +421 -0
- package/src/gclass_view_model.test.js +310 -0
- package/src/yui_gclass_view.js +42 -15
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
/***********************************************************************
|
|
2
|
+
* c_yui_gclass.css
|
|
3
|
+
*
|
|
4
|
+
* Styling for C_YUI_GCLASS (the gclass viewer, by zones).
|
|
5
|
+
* Monospace identifiers, one accent per zone, dark-aware.
|
|
6
|
+
* No transitions/animations by design (lib-yui convention).
|
|
7
|
+
*
|
|
8
|
+
* Copyright (c) 2026, ArtGins.
|
|
9
|
+
* All Rights Reserved.
|
|
10
|
+
***********************************************************************/
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* One accent per zone, so a reader who has seen this view twice knows
|
|
14
|
+
* which zone they are in before reading its heading. The values are
|
|
15
|
+
* the ones the doc site's interactive pages use, which were already
|
|
16
|
+
* picked to stay legible on both grounds.
|
|
17
|
+
*/
|
|
18
|
+
.C_YUI_GCLASS {
|
|
19
|
+
--gclass-attrs: #2D4EC8;
|
|
20
|
+
--gclass-cmds: #0E6F63;
|
|
21
|
+
--gclass-fsm: #6B4FA8;
|
|
22
|
+
--gclass-live: #9A5B00;
|
|
23
|
+
--gclass-live-bg: rgba(154, 91, 0, .11);
|
|
24
|
+
--gclass-warn: #A3282F;
|
|
25
|
+
--gclass-rule: var(--bulma-border-weak, #e6e6e6);
|
|
26
|
+
--gclass-hair: var(--bulma-border-weak, #ededed);
|
|
27
|
+
--gclass-muted: var(--bulma-text-weak, #6a6a6a);
|
|
28
|
+
--gclass-chip-bg: rgba(0, 0, 0, .05);
|
|
29
|
+
--gclass-none: rgba(0, 0, 0, .10);
|
|
30
|
+
--gclass-mono: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas,
|
|
31
|
+
"Liberation Mono", monospace;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
:root[data-theme="dark"] .C_YUI_GCLASS,
|
|
35
|
+
.C_YUI_GCLASS[data-theme="dark"] {
|
|
36
|
+
--gclass-attrs: #7C93F5;
|
|
37
|
+
--gclass-cmds: #46C4B2;
|
|
38
|
+
--gclass-fsm: #B49AE8;
|
|
39
|
+
--gclass-live: #D9A23F;
|
|
40
|
+
--gclass-live-bg: rgba(217, 162, 63, .14);
|
|
41
|
+
--gclass-warn: #E9737A;
|
|
42
|
+
--gclass-chip-bg: rgba(255, 255, 255, .07);
|
|
43
|
+
--gclass-none: rgba(255, 255, 255, .12);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@media (prefers-color-scheme: dark) {
|
|
47
|
+
:root:not([data-theme="light"]) .C_YUI_GCLASS {
|
|
48
|
+
--gclass-attrs: #7C93F5;
|
|
49
|
+
--gclass-cmds: #46C4B2;
|
|
50
|
+
--gclass-fsm: #B49AE8;
|
|
51
|
+
--gclass-live: #D9A23F;
|
|
52
|
+
--gclass-live-bg: rgba(217, 162, 63, .14);
|
|
53
|
+
--gclass-warn: #E9737A;
|
|
54
|
+
--gclass-chip-bg: rgba(255, 255, 255, .07);
|
|
55
|
+
--gclass-none: rgba(255, 255, 255, .12);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.C_YUI_GCLASS .GCLASS_TOOLBAR {
|
|
60
|
+
border-bottom: 1px solid var(--gclass-rule);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
* Same floor the JSON viewer gives its search box, for the same
|
|
65
|
+
* reason: a box that shrinks to the magnifier fits, and cannot be
|
|
66
|
+
* read or corrected.
|
|
67
|
+
*/
|
|
68
|
+
.C_YUI_GCLASS .GCLASS_SEARCH_CONTROL {
|
|
69
|
+
flex: 1 1 auto;
|
|
70
|
+
min-width: 9rem;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.C_YUI_GCLASS .GCLASS_BODY {
|
|
74
|
+
padding: .75rem;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* The header: the name, and the two numbers a reader asks for before
|
|
79
|
+
* anything else.
|
|
80
|
+
*/
|
|
81
|
+
.C_YUI_GCLASS .GCLASS_HEAD {
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-wrap: wrap;
|
|
84
|
+
align-items: baseline;
|
|
85
|
+
gap: .35rem .6rem;
|
|
86
|
+
padding-bottom: .6rem;
|
|
87
|
+
margin-bottom: .8rem;
|
|
88
|
+
border-bottom: 1px solid var(--gclass-rule);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.C_YUI_GCLASS .GCLASS_NAME {
|
|
92
|
+
font-family: var(--gclass-mono);
|
|
93
|
+
font-size: 1.05rem;
|
|
94
|
+
font-weight: 600;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.C_YUI_GCLASS .GCLASS_INSTANCES {
|
|
98
|
+
display: inline-flex;
|
|
99
|
+
gap: .3rem;
|
|
100
|
+
font-family: var(--gclass-mono);
|
|
101
|
+
font-size: .72rem;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Specificity on purpose: .GCLASS_CHIP is declared further down and
|
|
105
|
+
* would repaint this one grey at equal weight. */
|
|
106
|
+
.C_YUI_GCLASS .GCLASS_HEAD .GCLASS_CURRENT {
|
|
107
|
+
color: var(--gclass-live);
|
|
108
|
+
background: var(--gclass-live-bg);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/*
|
|
112
|
+
* Two columns while there is room for two: the machine grows sideways
|
|
113
|
+
* and everything else grows downwards, so they are the two that must
|
|
114
|
+
* not share a column. Below the breakpoint they stack, which is also
|
|
115
|
+
* the order they are written in.
|
|
116
|
+
*/
|
|
117
|
+
.C_YUI_GCLASS .GCLASS_COLS {
|
|
118
|
+
display: grid;
|
|
119
|
+
grid-template-columns: minmax(0, 1fr);
|
|
120
|
+
gap: 1.2rem;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@media (min-width: 900px) {
|
|
124
|
+
.C_YUI_GCLASS .GCLASS_COLS {
|
|
125
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* In graph mode the machine is above, across the whole width, and
|
|
129
|
+
* what is left stacks in one column. */
|
|
130
|
+
.C_YUI_GCLASS .GCLASS_COLS.is-stacked {
|
|
131
|
+
grid-template-columns: minmax(0, 1fr);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.C_YUI_GCLASS .GCLASS_FULL {
|
|
136
|
+
margin-bottom: 1.2rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.C_YUI_GCLASS .GCLASS_COL {
|
|
140
|
+
display: flex;
|
|
141
|
+
flex-direction: column;
|
|
142
|
+
gap: 1.1rem;
|
|
143
|
+
min-width: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/*
|
|
147
|
+
* A flex item's `min-width` is AUTO, which means "as wide as my
|
|
148
|
+
* content" -- so without this the widest table pushes its zone, its
|
|
149
|
+
* column and the whole viewer past the edge of a phone, and the page
|
|
150
|
+
* itself scrolls sideways however many scrollers are nested inside.
|
|
151
|
+
*/
|
|
152
|
+
.C_YUI_GCLASS .GCLASS_ZONE {
|
|
153
|
+
min-width: 0;
|
|
154
|
+
max-width: 100%;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.C_YUI_GCLASS .GCLASS_ZONE_BODY {
|
|
158
|
+
min-width: 0;
|
|
159
|
+
max-width: 100%;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
* A zone heading is a button: folding a zone is an action, and it goes
|
|
164
|
+
* through the machine like every other one.
|
|
165
|
+
*/
|
|
166
|
+
.C_YUI_GCLASS .GCLASS_ZONE_TOGGLE {
|
|
167
|
+
display: flex;
|
|
168
|
+
align-items: center;
|
|
169
|
+
gap: .4rem;
|
|
170
|
+
width: 100%;
|
|
171
|
+
padding: 0 0 .35rem 0;
|
|
172
|
+
margin-bottom: .5rem;
|
|
173
|
+
background: none;
|
|
174
|
+
border: 0;
|
|
175
|
+
border-bottom: 1px solid var(--gclass-rule);
|
|
176
|
+
color: inherit;
|
|
177
|
+
cursor: pointer;
|
|
178
|
+
text-align: left;
|
|
179
|
+
font-size: .7rem;
|
|
180
|
+
font-weight: 700;
|
|
181
|
+
letter-spacing: .12em;
|
|
182
|
+
text-transform: uppercase;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.C_YUI_GCLASS .GCLASS_ZONE_TOGGLE:focus-visible {
|
|
186
|
+
outline: 2px solid var(--bulma-link, #3273dc);
|
|
187
|
+
outline-offset: 2px;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.C_YUI_GCLASS .GCLASS_ZONE_COUNT {
|
|
191
|
+
margin-left: auto;
|
|
192
|
+
font-family: var(--gclass-mono);
|
|
193
|
+
font-weight: 400;
|
|
194
|
+
letter-spacing: normal;
|
|
195
|
+
color: var(--gclass-muted);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.C_YUI_GCLASS .GCLASS_ZONE_ARROW .yi-chevron-right,
|
|
199
|
+
.C_YUI_GCLASS .GCLASS_ZONE_ARROW .yi-chevron-down {
|
|
200
|
+
width: .8em;
|
|
201
|
+
height: .8em;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.C_YUI_GCLASS .GCLASS_ZONE_ATTRS .GCLASS_ZONE_TITLE { color: var(--gclass-attrs); }
|
|
205
|
+
.C_YUI_GCLASS .GCLASS_ZONE_COMMANDS .GCLASS_ZONE_TITLE { color: var(--gclass-cmds); }
|
|
206
|
+
.C_YUI_GCLASS .GCLASS_ZONE_MACHINE .GCLASS_ZONE_TITLE { color: var(--gclass-fsm); }
|
|
207
|
+
|
|
208
|
+
.C_YUI_GCLASS .GCLASS_ZONE_EMPTY {
|
|
209
|
+
padding: .45rem .6rem;
|
|
210
|
+
border: 1px dashed var(--gclass-rule);
|
|
211
|
+
border-radius: 2px;
|
|
212
|
+
color: var(--gclass-muted);
|
|
213
|
+
font-size: .8rem;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.C_YUI_GCLASS .GCLASS_SUBTITLE {
|
|
217
|
+
margin: .8rem 0 .4rem;
|
|
218
|
+
font-size: .68rem;
|
|
219
|
+
font-weight: 700;
|
|
220
|
+
letter-spacing: .12em;
|
|
221
|
+
text-transform: uppercase;
|
|
222
|
+
color: var(--gclass-muted);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* Tables. Identifiers are monospace everywhere -- they are compared
|
|
227
|
+
* by eye against a source file, and a proportional font breaks that.
|
|
228
|
+
*/
|
|
229
|
+
.C_YUI_GCLASS .GCLASS_TABLE {
|
|
230
|
+
width: 100%;
|
|
231
|
+
border-collapse: collapse;
|
|
232
|
+
font-family: var(--gclass-mono);
|
|
233
|
+
font-size: .76rem;
|
|
234
|
+
font-variant-numeric: tabular-nums;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.C_YUI_GCLASS .GCLASS_TABLE th {
|
|
238
|
+
text-align: left;
|
|
239
|
+
padding: 0 .5rem .3rem 0;
|
|
240
|
+
border-bottom: 1px solid var(--gclass-rule);
|
|
241
|
+
font-family: inherit;
|
|
242
|
+
font-size: .64rem;
|
|
243
|
+
font-weight: 500;
|
|
244
|
+
letter-spacing: .06em;
|
|
245
|
+
text-transform: uppercase;
|
|
246
|
+
color: var(--gclass-muted);
|
|
247
|
+
white-space: nowrap;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.C_YUI_GCLASS .GCLASS_TABLE td {
|
|
251
|
+
padding: .22rem .5rem .22rem 0;
|
|
252
|
+
border-bottom: 1px solid var(--gclass-hair);
|
|
253
|
+
vertical-align: top;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.C_YUI_GCLASS .GCLASS_TABLE tbody tr:last-child td {
|
|
257
|
+
border-bottom: 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.C_YUI_GCLASS .GCLASS_CELL_KEY {
|
|
261
|
+
font-weight: 500;
|
|
262
|
+
white-space: nowrap;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.C_YUI_GCLASS .GCLASS_CELL_TYPE,
|
|
266
|
+
.C_YUI_GCLASS .GCLASS_CELL_DEFAULT,
|
|
267
|
+
.C_YUI_GCLASS .GCLASS_CELL_DESC {
|
|
268
|
+
color: var(--gclass-muted);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.C_YUI_GCLASS .GCLASS_CELL_TYPE { white-space: nowrap; }
|
|
272
|
+
|
|
273
|
+
.C_YUI_GCLASS .GCLASS_CMD_SECTION td {
|
|
274
|
+
padding-top: .7rem;
|
|
275
|
+
font-size: .64rem;
|
|
276
|
+
font-weight: 700;
|
|
277
|
+
letter-spacing: .12em;
|
|
278
|
+
text-transform: uppercase;
|
|
279
|
+
color: var(--gclass-cmds);
|
|
280
|
+
border-bottom: 0;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.C_YUI_GCLASS .GCLASS_CMD_PARAM .GCLASS_CELL_KEY {
|
|
284
|
+
padding-left: .9rem;
|
|
285
|
+
font-weight: 400;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.C_YUI_GCLASS .GCLASS_PARAM_MARK,
|
|
289
|
+
.C_YUI_GCLASS .GCLASS_PARAM_TYPE {
|
|
290
|
+
color: var(--gclass-muted);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.C_YUI_GCLASS .GCLASS_PARAM_NAME {
|
|
294
|
+
color: var(--gclass-cmds);
|
|
295
|
+
margin: 0 .35rem;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/*
|
|
299
|
+
* Chips. A flag that changes what the reader may DO with the thing
|
|
300
|
+
* gets a colour; the rest stay quiet, or the row turns into a
|
|
301
|
+
* fairground.
|
|
302
|
+
*/
|
|
303
|
+
.C_YUI_GCLASS .GCLASS_CHIP {
|
|
304
|
+
display: inline-block;
|
|
305
|
+
padding: 0 .35rem;
|
|
306
|
+
border-radius: 2px;
|
|
307
|
+
background: var(--gclass-chip-bg);
|
|
308
|
+
color: var(--gclass-muted);
|
|
309
|
+
font-size: .64rem;
|
|
310
|
+
line-height: 1.5;
|
|
311
|
+
white-space: nowrap;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.C_YUI_GCLASS .GCLASS_CHIP + .GCLASS_CHIP { margin-left: .2rem; }
|
|
315
|
+
|
|
316
|
+
.C_YUI_GCLASS .GCLASS_FLAG.is-persist { color: var(--gclass-live); }
|
|
317
|
+
.C_YUI_GCLASS .GCLASS_FLAG.is-writable { color: var(--gclass-attrs); }
|
|
318
|
+
.C_YUI_GCLASS .GCLASS_FLAG.is-authz,
|
|
319
|
+
.C_YUI_GCLASS .GCLASS_FLAG.is-required { color: var(--gclass-warn); }
|
|
320
|
+
.C_YUI_GCLASS .GCLASS_EVFLAG.is-output { color: var(--gclass-cmds); }
|
|
321
|
+
.C_YUI_GCLASS .GCLASS_ALIAS { color: var(--gclass-cmds); }
|
|
322
|
+
|
|
323
|
+
.C_YUI_GCLASS .GCLASS_CHIPS {
|
|
324
|
+
display: flex;
|
|
325
|
+
flex-wrap: wrap;
|
|
326
|
+
gap: .25rem;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.C_YUI_GCLASS .GCLASS_CHIPS .GCLASS_CHIP + .GCLASS_CHIP { margin-left: 0; }
|
|
330
|
+
|
|
331
|
+
.C_YUI_GCLASS .GCLASS_METHOD {
|
|
332
|
+
font-family: var(--gclass-mono);
|
|
333
|
+
color: var(--bulma-text-strong, #363636);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/*
|
|
337
|
+
* Every table scrolls INSIDE its own box -- the viewer's body must
|
|
338
|
+
* never scroll sideways, whether it is a matrix with eight states or
|
|
339
|
+
* an attrs table with a long description on a phone.
|
|
340
|
+
*/
|
|
341
|
+
.C_YUI_GCLASS .GCLASS_SCROLL {
|
|
342
|
+
overflow-x: auto;
|
|
343
|
+
max-width: 100%;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.C_YUI_GCLASS .GCLASS_MATRIX {
|
|
347
|
+
width: auto;
|
|
348
|
+
min-width: 100%;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* A description may wrap; an identifier may not. Without this the
|
|
352
|
+
* attrs table is as wide as its longest sentence. */
|
|
353
|
+
.C_YUI_GCLASS .GCLASS_TABLE_ATTRS,
|
|
354
|
+
.C_YUI_GCLASS .GCLASS_TABLE_COMMANDS,
|
|
355
|
+
.C_YUI_GCLASS .GCLASS_TABLE_TRACES {
|
|
356
|
+
min-width: 22rem;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.C_YUI_GCLASS .GCLASS_CELL_DESC {
|
|
360
|
+
min-width: 10rem;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.C_YUI_GCLASS .GCLASS_MATRIX th,
|
|
364
|
+
.C_YUI_GCLASS .GCLASS_MATRIX td {
|
|
365
|
+
border: 1px solid var(--gclass-hair);
|
|
366
|
+
padding: .22rem .45rem;
|
|
367
|
+
white-space: nowrap;
|
|
368
|
+
vertical-align: middle;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.C_YUI_GCLASS .GCLASS_MX_STATE {
|
|
372
|
+
background: var(--gclass-chip-bg);
|
|
373
|
+
color: var(--bulma-text-strong, #363636);
|
|
374
|
+
font-size: .68rem;
|
|
375
|
+
font-weight: 600;
|
|
376
|
+
text-transform: none;
|
|
377
|
+
letter-spacing: normal;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.C_YUI_GCLASS .GCLASS_MX_STATE.is-current {
|
|
381
|
+
background: var(--gclass-live-bg);
|
|
382
|
+
color: var(--gclass-live);
|
|
383
|
+
border-color: var(--gclass-live);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.C_YUI_GCLASS .GCLASS_MX_MARK {
|
|
387
|
+
margin-left: .3rem;
|
|
388
|
+
color: var(--gclass-warn);
|
|
389
|
+
cursor: help;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/*
|
|
393
|
+
* The event column stays put while the states scroll past it.
|
|
394
|
+
*
|
|
395
|
+
* Without this the matrix is unreadable the moment it scrolls: the
|
|
396
|
+
* cells say `● ▸ ST_DISCONNECTED` and nothing on screen says which
|
|
397
|
+
* EVENT does that. It needs an opaque background of its own -- a
|
|
398
|
+
* sticky cell is painted over by whatever slides under it.
|
|
399
|
+
*/
|
|
400
|
+
.C_YUI_GCLASS .GCLASS_MX_EVENT,
|
|
401
|
+
.C_YUI_GCLASS .GCLASS_MX_CORNER {
|
|
402
|
+
position: sticky;
|
|
403
|
+
left: 0;
|
|
404
|
+
z-index: 1;
|
|
405
|
+
background: var(--bulma-scheme-main, #fff);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.C_YUI_GCLASS .GCLASS_MX_EVENT {
|
|
409
|
+
font-weight: 500;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.C_YUI_GCLASS .GCLASS_MX_ACTION { color: var(--gclass-fsm); }
|
|
413
|
+
.C_YUI_GCLASS .GCLASS_MX_ACTION.is-unnamed { cursor: help; }
|
|
414
|
+
.C_YUI_GCLASS .GCLASS_MX_ARROW,
|
|
415
|
+
.C_YUI_GCLASS .GCLASS_MX_NEXT { color: var(--gclass-muted); }
|
|
416
|
+
.C_YUI_GCLASS .GCLASS_MX_ARROW { padding: 0 .15rem; }
|
|
417
|
+
|
|
418
|
+
.C_YUI_GCLASS .GCLASS_MX_CELL.is-current { background: var(--gclass-live-bg); }
|
|
419
|
+
|
|
420
|
+
/*
|
|
421
|
+
* An empty cell is INFORMATION: that event, in that state, is refused
|
|
422
|
+
* with "Event NOT DEFINED in state". Hatching says so; blank would
|
|
423
|
+
* read as "nothing to see here", which is the opposite.
|
|
424
|
+
*/
|
|
425
|
+
.C_YUI_GCLASS .GCLASS_MX_CELL.is-none {
|
|
426
|
+
color: var(--gclass-none);
|
|
427
|
+
text-align: center;
|
|
428
|
+
cursor: help;
|
|
429
|
+
background-image: repeating-linear-gradient(
|
|
430
|
+
135deg, transparent, transparent 5px,
|
|
431
|
+
var(--gclass-none) 5px, var(--gclass-none) 6px);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.C_YUI_GCLASS .GCLASS_LEGEND {
|
|
435
|
+
display: flex;
|
|
436
|
+
flex-wrap: wrap;
|
|
437
|
+
gap: .3rem 1.1rem;
|
|
438
|
+
margin-top: .6rem;
|
|
439
|
+
font-size: .7rem;
|
|
440
|
+
color: var(--gclass-muted);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.C_YUI_GCLASS .GCLASS_LEGEND_ITEM {
|
|
444
|
+
display: inline-flex;
|
|
445
|
+
align-items: center;
|
|
446
|
+
gap: .4rem;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.C_YUI_GCLASS .GCLASS_LEGEND_SWATCH {
|
|
450
|
+
display: inline-block;
|
|
451
|
+
width: 1.4em;
|
|
452
|
+
height: .85em;
|
|
453
|
+
border: 1px solid var(--gclass-hair);
|
|
454
|
+
border-radius: 2px;
|
|
455
|
+
font-style: normal;
|
|
456
|
+
font-size: .7em;
|
|
457
|
+
line-height: 1;
|
|
458
|
+
text-align: center;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.C_YUI_GCLASS .GCLASS_LEGEND_SWATCH.is-none {
|
|
462
|
+
background-image: repeating-linear-gradient(
|
|
463
|
+
135deg, transparent, transparent 5px,
|
|
464
|
+
var(--gclass-none) 5px, var(--gclass-none) 6px);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.C_YUI_GCLASS .GCLASS_LEGEND_SWATCH.is-current {
|
|
468
|
+
background: var(--gclass-live-bg);
|
|
469
|
+
border-color: var(--gclass-live);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.C_YUI_GCLASS .GCLASS_LEGEND_SWATCH.is-unreachable {
|
|
473
|
+
border-color: transparent;
|
|
474
|
+
color: var(--gclass-warn);
|
|
475
|
+
width: auto;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.C_YUI_GCLASS .GCLASS_PUB_EVENT { color: var(--gclass-cmds); }
|
|
479
|
+
|
|
480
|
+
/*
|
|
481
|
+
* The raw view: the description as the backend answered it.
|
|
482
|
+
*/
|
|
483
|
+
.C_YUI_GCLASS .GCLASS_RAW_BODY {
|
|
484
|
+
margin: 0;
|
|
485
|
+
padding: .75rem;
|
|
486
|
+
background: none;
|
|
487
|
+
font-family: var(--gclass-mono);
|
|
488
|
+
font-size: .76rem;
|
|
489
|
+
line-height: 1.45;
|
|
490
|
+
white-space: pre;
|
|
491
|
+
tab-size: 4;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/*
|
|
495
|
+
* The machine's own switch, and the box its graph lives in.
|
|
496
|
+
*
|
|
497
|
+
* A graph needs a HEIGHT: the zone is as tall as its content, and a
|
|
498
|
+
* canvas asked to be "as tall as its content" is 0 pixels tall.
|
|
499
|
+
*/
|
|
500
|
+
.C_YUI_GCLASS .GCLASS_MACHINE_SWITCH {
|
|
501
|
+
margin-bottom: .5rem;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
.C_YUI_GCLASS .GCLASS_GRAPH_MOUNT {
|
|
505
|
+
height: 26rem;
|
|
506
|
+
min-height: 16rem;
|
|
507
|
+
max-height: 70vh;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/*
|
|
511
|
+
* An event declared with no action at all: legal here, and it does
|
|
512
|
+
* nothing. Quieter than an action and louder than an empty cell,
|
|
513
|
+
* because it is neither.
|
|
514
|
+
*/
|
|
515
|
+
.C_YUI_GCLASS .GCLASS_MX_ACTION.is-none-action {
|
|
516
|
+
color: var(--gclass-muted);
|
|
517
|
+
cursor: help;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.C_YUI_GCLASS .GCLASS_LEGEND_SWATCH.is-none-action {
|
|
521
|
+
border-color: transparent;
|
|
522
|
+
color: var(--gclass-muted);
|
|
523
|
+
width: auto;
|
|
524
|
+
}
|