@axiapps/axi-design 1.36.0 → 1.37.1
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/dist/axi.css +87 -4
- package/package.json +1 -1
- package/src/data.css +79 -3
- package/src/prose.css +8 -1
package/dist/axi.css
CHANGED
|
@@ -2402,9 +2402,76 @@ textarea.axi-input {
|
|
|
2402
2402
|
/* The row under the cursor comes forward on the neutral ramp. Not an ink:
|
|
2403
2403
|
hovering a row is not a status, and forty rows that each flash a colour on
|
|
2404
2404
|
the way past the one you want is the tinted-everything failure rule 2 is
|
|
2405
|
-
about.
|
|
2406
|
-
|
|
2405
|
+
about.
|
|
2406
|
+
|
|
2407
|
+
ONE SURFACE, MANY ELEMENTS - the attachment below, and on the sticky head,
|
|
2408
|
+
the pinned column and the prose table's head, which are the four places in
|
|
2409
|
+
this language where that is the shape of the problem. Everywhere else a
|
|
2410
|
+
themed fill lands on a single box: a panel, a rail, a toolbar, one hovered
|
|
2411
|
+
row of a palette. A table's surfaces are ASSEMBLED. A hovered row is every
|
|
2412
|
+
cell in it, a sticky head is a row of `th`, a pinned name column is one cell
|
|
2413
|
+
per row - one strip to the eye and N painting areas to the renderer. A theme
|
|
2414
|
+
is allowed to make any surface a gradient and glass makes all three of them
|
|
2415
|
+
one, so each cell restarts the ramp and the strip arrives as a row of
|
|
2416
|
+
separately lit boxes with a seam at every boundary.
|
|
2417
|
+
|
|
2418
|
+
Fixed is the same idiom as `body`, `.axi-mast` and `.axi-sheet`, for the
|
|
2419
|
+
reason .axi-mast gives at length: an element shows its SHARE of one light
|
|
2420
|
+
rather than its own private copy of it. Give the cells of a strip a shared
|
|
2421
|
+
painting area and they resolve back into the one surface they were always
|
|
2422
|
+
drawing. Note what the fix does NOT depend on: which box ends up shared. A
|
|
2423
|
+
filtered ancestor - any panel under a glass theme, since --axi-surface-filter
|
|
2424
|
+
is a backdrop-filter and establishes a containing block, the trap that
|
|
2425
|
+
token's own comment points at - takes the painting area from the viewport and
|
|
2426
|
+
makes it the panel's. Both are shared by every cell in the band, so both are
|
|
2427
|
+
continuous; the ancestor only decides where the light sits, which is a
|
|
2428
|
+
question with no wrong answer here. What is not available is the obvious
|
|
2429
|
+
alternative of filling the container and leaving the cells transparent: a
|
|
2430
|
+
sticky head has to carry its own fill, because a fill on `thead` stays
|
|
2431
|
+
behind while the cells travel. */
|
|
2432
|
+
.axi-table tbody tr:hover :is(td, th) {
|
|
2433
|
+
background: var(--axi-surface-raised);
|
|
2434
|
+
background-attachment: fixed;
|
|
2435
|
+
color: var(--axi-text);
|
|
2436
|
+
}
|
|
2407
2437
|
/* The measured value in a row, as opposed to its supporting numbers. */
|
|
2438
|
+
/* A row that is the one currently shown somewhere else -- a detail pane, a
|
|
2439
|
+
chart, a second table. `aria-current`, for the same reason `aria-sort` above
|
|
2440
|
+
carries the sorted column and `.axi-rail__item[aria-current]` carries the
|
|
2441
|
+
chosen place: the attribute a screen reader already needs in order to announce
|
|
2442
|
+
the row is the whole fact, and a class beside it would be a second source of
|
|
2443
|
+
truth for one thing.
|
|
2444
|
+
|
|
2445
|
+
The MARK is the leading edge, not the fill, and that is the whole design. The
|
|
2446
|
+
hover directly above already raises a row, so any selection drawn as a fill
|
|
2447
|
+
has to find a neutral step that hover is not using -- and there isn't one. The
|
|
2448
|
+
ramp a theme is guaranteed to give is ground, surface, surface-raised; the
|
|
2449
|
+
fourth token, --axi-surface-float, is not a step on it at all but a promise of
|
|
2450
|
+
OPACITY for things that sit over content, which is why the default theme sets
|
|
2451
|
+
it equal to --axi-surface and glass sets it darker than --axi-surface-raised.
|
|
2452
|
+
A selection filled from it is invisible in one theme and a step backwards in
|
|
2453
|
+
the other. This is the trap the token's name invites and the reason this
|
|
2454
|
+
comment says so: float is an axis, not a rung.
|
|
2455
|
+
|
|
2456
|
+
So selection and hover share the raised fill and are told apart by the edge,
|
|
2457
|
+
the same answer and the same reasoning as `.axi-rail__nav--quiet`. The first
|
|
2458
|
+
cell of every body row reserves a transparent control-weight border for it, so
|
|
2459
|
+
lighting the edge costs no reflow -- again exactly what `.axi-rail__item`
|
|
2460
|
+
does. One edge is a mark; rule 8's refusal is of a BOX around a row, which is
|
|
2461
|
+
what turns a list of numbers into a grid.
|
|
2462
|
+
|
|
2463
|
+
The attachment is the one-surface-many-elements case, same as the hover. */
|
|
2464
|
+
.axi-table :where(tbody tr) > :where(td, th):first-child {
|
|
2465
|
+
border-inline-start: var(--axi-border-control) solid transparent;
|
|
2466
|
+
}
|
|
2467
|
+
.axi-table tbody tr[aria-current] :is(td, th) {
|
|
2468
|
+
background: var(--axi-surface-raised);
|
|
2469
|
+
background-attachment: fixed;
|
|
2470
|
+
color: var(--axi-text);
|
|
2471
|
+
}
|
|
2472
|
+
.axi-table tbody tr[aria-current] > :is(td, th):first-child {
|
|
2473
|
+
border-inline-start-color: var(--axi-accent);
|
|
2474
|
+
}
|
|
2408
2475
|
.axi-table__num { color: var(--axi-text); }
|
|
2409
2476
|
/* A name cell: an icon, a diamond or a rank beside the label. */
|
|
2410
2477
|
.axi-table__who { display: flex; align-items: center; gap: 9px; }
|
|
@@ -2453,8 +2520,14 @@ textarea.axi-input {
|
|
|
2453
2520
|
--axi-surface-float exists: rows travel behind both of these, and a glass
|
|
2454
2521
|
theme's ordinary surfaces are alpha, so a head at --axi-surface-raised
|
|
2455
2522
|
would have numbers sliding through it. Opaque is not a look here, it is
|
|
2456
|
-
the requirement.
|
|
2523
|
+
the requirement.
|
|
2524
|
+
|
|
2525
|
+
Opaque and a gradient, under glass, which is why the attachment is here:
|
|
2526
|
+
the head is a row of cells and this is the one-surface-many-elements case
|
|
2527
|
+
the hover rule explains. Nothing about the sticky positioning changes it -
|
|
2528
|
+
a sticky box is still its own painting area. */
|
|
2457
2529
|
background: var(--axi-surface-float);
|
|
2530
|
+
background-attachment: fixed;
|
|
2458
2531
|
border-bottom: var(--axi-border-control) solid var(--axi-ink-line);
|
|
2459
2532
|
}
|
|
2460
2533
|
/* The first column stays. It holds the row's name, and a name scrolled out of
|
|
@@ -2466,7 +2539,10 @@ textarea.axi-input {
|
|
|
2466
2539
|
position: sticky;
|
|
2467
2540
|
left: 0;
|
|
2468
2541
|
z-index: 1;
|
|
2542
|
+
/* The same strip as the head, turned ninety degrees, so the same attachment:
|
|
2543
|
+
one cell per row means forty painting areas down a single column. */
|
|
2469
2544
|
background: var(--axi-surface-float);
|
|
2545
|
+
background-attachment: fixed;
|
|
2470
2546
|
border-right: var(--axi-border-control) solid var(--axi-ink-line);
|
|
2471
2547
|
}
|
|
2472
2548
|
/* The corner belongs to both and has to outrank both. */
|
|
@@ -2836,9 +2912,16 @@ textarea.axi-input {
|
|
|
2836
2912
|
overflow: hidden;
|
|
2837
2913
|
font-size: 13.5px;
|
|
2838
2914
|
}
|
|
2915
|
+
/* A markdown table's head is a row of cells filled from a themed surface, so
|
|
2916
|
+
it is the one-surface-many-elements case `.axi-table tbody tr:hover` sets
|
|
2917
|
+
out in data.css, and it takes the same attachment. Nothing here is sticky,
|
|
2918
|
+
which makes no difference: the seam is per-cell repetition of the gradient,
|
|
2919
|
+
not anything to do with scrolling. */
|
|
2839
2920
|
.axi-prose th {
|
|
2840
2921
|
text-align: left; padding: 10px 12px;
|
|
2841
|
-
background: var(--axi-surface-raised);
|
|
2922
|
+
background: var(--axi-surface-raised);
|
|
2923
|
+
background-attachment: fixed;
|
|
2924
|
+
color: var(--axi-text);
|
|
2842
2925
|
font: var(--axi-t-micro); letter-spacing: var(--axi-ls-micro); text-transform: uppercase;
|
|
2843
2926
|
}
|
|
2844
2927
|
.axi-prose td { padding: 10px 12px; border-top: var(--axi-border-hairline) solid var(--axi-rule); }
|
package/package.json
CHANGED
package/src/data.css
CHANGED
|
@@ -100,9 +100,76 @@
|
|
|
100
100
|
/* The row under the cursor comes forward on the neutral ramp. Not an ink:
|
|
101
101
|
hovering a row is not a status, and forty rows that each flash a colour on
|
|
102
102
|
the way past the one you want is the tinted-everything failure rule 2 is
|
|
103
|
-
about.
|
|
104
|
-
|
|
103
|
+
about.
|
|
104
|
+
|
|
105
|
+
ONE SURFACE, MANY ELEMENTS - the attachment below, and on the sticky head,
|
|
106
|
+
the pinned column and the prose table's head, which are the four places in
|
|
107
|
+
this language where that is the shape of the problem. Everywhere else a
|
|
108
|
+
themed fill lands on a single box: a panel, a rail, a toolbar, one hovered
|
|
109
|
+
row of a palette. A table's surfaces are ASSEMBLED. A hovered row is every
|
|
110
|
+
cell in it, a sticky head is a row of `th`, a pinned name column is one cell
|
|
111
|
+
per row - one strip to the eye and N painting areas to the renderer. A theme
|
|
112
|
+
is allowed to make any surface a gradient and glass makes all three of them
|
|
113
|
+
one, so each cell restarts the ramp and the strip arrives as a row of
|
|
114
|
+
separately lit boxes with a seam at every boundary.
|
|
115
|
+
|
|
116
|
+
Fixed is the same idiom as `body`, `.axi-mast` and `.axi-sheet`, for the
|
|
117
|
+
reason .axi-mast gives at length: an element shows its SHARE of one light
|
|
118
|
+
rather than its own private copy of it. Give the cells of a strip a shared
|
|
119
|
+
painting area and they resolve back into the one surface they were always
|
|
120
|
+
drawing. Note what the fix does NOT depend on: which box ends up shared. A
|
|
121
|
+
filtered ancestor - any panel under a glass theme, since --axi-surface-filter
|
|
122
|
+
is a backdrop-filter and establishes a containing block, the trap that
|
|
123
|
+
token's own comment points at - takes the painting area from the viewport and
|
|
124
|
+
makes it the panel's. Both are shared by every cell in the band, so both are
|
|
125
|
+
continuous; the ancestor only decides where the light sits, which is a
|
|
126
|
+
question with no wrong answer here. What is not available is the obvious
|
|
127
|
+
alternative of filling the container and leaving the cells transparent: a
|
|
128
|
+
sticky head has to carry its own fill, because a fill on `thead` stays
|
|
129
|
+
behind while the cells travel. */
|
|
130
|
+
.axi-table tbody tr:hover :is(td, th) {
|
|
131
|
+
background: var(--axi-surface-raised);
|
|
132
|
+
background-attachment: fixed;
|
|
133
|
+
color: var(--axi-text);
|
|
134
|
+
}
|
|
105
135
|
/* The measured value in a row, as opposed to its supporting numbers. */
|
|
136
|
+
/* A row that is the one currently shown somewhere else -- a detail pane, a
|
|
137
|
+
chart, a second table. `aria-current`, for the same reason `aria-sort` above
|
|
138
|
+
carries the sorted column and `.axi-rail__item[aria-current]` carries the
|
|
139
|
+
chosen place: the attribute a screen reader already needs in order to announce
|
|
140
|
+
the row is the whole fact, and a class beside it would be a second source of
|
|
141
|
+
truth for one thing.
|
|
142
|
+
|
|
143
|
+
The MARK is the leading edge, not the fill, and that is the whole design. The
|
|
144
|
+
hover directly above already raises a row, so any selection drawn as a fill
|
|
145
|
+
has to find a neutral step that hover is not using -- and there isn't one. The
|
|
146
|
+
ramp a theme is guaranteed to give is ground, surface, surface-raised; the
|
|
147
|
+
fourth token, --axi-surface-float, is not a step on it at all but a promise of
|
|
148
|
+
OPACITY for things that sit over content, which is why the default theme sets
|
|
149
|
+
it equal to --axi-surface and glass sets it darker than --axi-surface-raised.
|
|
150
|
+
A selection filled from it is invisible in one theme and a step backwards in
|
|
151
|
+
the other. This is the trap the token's name invites and the reason this
|
|
152
|
+
comment says so: float is an axis, not a rung.
|
|
153
|
+
|
|
154
|
+
So selection and hover share the raised fill and are told apart by the edge,
|
|
155
|
+
the same answer and the same reasoning as `.axi-rail__nav--quiet`. The first
|
|
156
|
+
cell of every body row reserves a transparent control-weight border for it, so
|
|
157
|
+
lighting the edge costs no reflow -- again exactly what `.axi-rail__item`
|
|
158
|
+
does. One edge is a mark; rule 8's refusal is of a BOX around a row, which is
|
|
159
|
+
what turns a list of numbers into a grid.
|
|
160
|
+
|
|
161
|
+
The attachment is the one-surface-many-elements case, same as the hover. */
|
|
162
|
+
.axi-table :where(tbody tr) > :where(td, th):first-child {
|
|
163
|
+
border-inline-start: var(--axi-border-control) solid transparent;
|
|
164
|
+
}
|
|
165
|
+
.axi-table tbody tr[aria-current] :is(td, th) {
|
|
166
|
+
background: var(--axi-surface-raised);
|
|
167
|
+
background-attachment: fixed;
|
|
168
|
+
color: var(--axi-text);
|
|
169
|
+
}
|
|
170
|
+
.axi-table tbody tr[aria-current] > :is(td, th):first-child {
|
|
171
|
+
border-inline-start-color: var(--axi-accent);
|
|
172
|
+
}
|
|
106
173
|
.axi-table__num { color: var(--axi-text); }
|
|
107
174
|
/* A name cell: an icon, a diamond or a rank beside the label. */
|
|
108
175
|
.axi-table__who { display: flex; align-items: center; gap: 9px; }
|
|
@@ -151,8 +218,14 @@
|
|
|
151
218
|
--axi-surface-float exists: rows travel behind both of these, and a glass
|
|
152
219
|
theme's ordinary surfaces are alpha, so a head at --axi-surface-raised
|
|
153
220
|
would have numbers sliding through it. Opaque is not a look here, it is
|
|
154
|
-
the requirement.
|
|
221
|
+
the requirement.
|
|
222
|
+
|
|
223
|
+
Opaque and a gradient, under glass, which is why the attachment is here:
|
|
224
|
+
the head is a row of cells and this is the one-surface-many-elements case
|
|
225
|
+
the hover rule explains. Nothing about the sticky positioning changes it -
|
|
226
|
+
a sticky box is still its own painting area. */
|
|
155
227
|
background: var(--axi-surface-float);
|
|
228
|
+
background-attachment: fixed;
|
|
156
229
|
border-bottom: var(--axi-border-control) solid var(--axi-ink-line);
|
|
157
230
|
}
|
|
158
231
|
/* The first column stays. It holds the row's name, and a name scrolled out of
|
|
@@ -164,7 +237,10 @@
|
|
|
164
237
|
position: sticky;
|
|
165
238
|
left: 0;
|
|
166
239
|
z-index: 1;
|
|
240
|
+
/* The same strip as the head, turned ninety degrees, so the same attachment:
|
|
241
|
+
one cell per row means forty painting areas down a single column. */
|
|
167
242
|
background: var(--axi-surface-float);
|
|
243
|
+
background-attachment: fixed;
|
|
168
244
|
border-right: var(--axi-border-control) solid var(--axi-ink-line);
|
|
169
245
|
}
|
|
170
246
|
/* The corner belongs to both and has to outrank both. */
|
package/src/prose.css
CHANGED
|
@@ -76,9 +76,16 @@
|
|
|
76
76
|
overflow: hidden;
|
|
77
77
|
font-size: 13.5px;
|
|
78
78
|
}
|
|
79
|
+
/* A markdown table's head is a row of cells filled from a themed surface, so
|
|
80
|
+
it is the one-surface-many-elements case `.axi-table tbody tr:hover` sets
|
|
81
|
+
out in data.css, and it takes the same attachment. Nothing here is sticky,
|
|
82
|
+
which makes no difference: the seam is per-cell repetition of the gradient,
|
|
83
|
+
not anything to do with scrolling. */
|
|
79
84
|
.axi-prose th {
|
|
80
85
|
text-align: left; padding: 10px 12px;
|
|
81
|
-
background: var(--axi-surface-raised);
|
|
86
|
+
background: var(--axi-surface-raised);
|
|
87
|
+
background-attachment: fixed;
|
|
88
|
+
color: var(--axi-text);
|
|
82
89
|
font: var(--axi-t-micro); letter-spacing: var(--axi-ls-micro); text-transform: uppercase;
|
|
83
90
|
}
|
|
84
91
|
.axi-prose td { padding: 10px 12px; border-top: var(--axi-border-hairline) solid var(--axi-rule); }
|