@apliteni/apliteni-ui 0.69.0 → 0.70.0
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/package.json +1 -1
- package/react/dist/index.css +5 -0
- package/src/styles/callout.css +2 -0
- package/src/styles/card.css +1 -0
- package/src/styles/code.css +1 -0
- package/src/styles/dropdown.css +9 -0
- package/src/styles/feedback.css +2 -0
- package/src/styles/footer.css +3 -0
- package/src/styles/layout.css +1 -0
- package/src/styles/topbar.css +14 -1
package/package.json
CHANGED
package/react/dist/index.css
CHANGED
|
@@ -420,6 +420,11 @@
|
|
|
420
420
|
box-shadow: var(--ring);
|
|
421
421
|
border-radius: 4px;
|
|
422
422
|
}
|
|
423
|
+
.ui-table__selection input[type=checkbox]:focus-visible {
|
|
424
|
+
outline: 2px solid transparent;
|
|
425
|
+
box-shadow: var(--ring);
|
|
426
|
+
border-radius: var(--radius-xs);
|
|
427
|
+
}
|
|
423
428
|
.rx-caret {
|
|
424
429
|
margin-left: 2px;
|
|
425
430
|
width: 16px;
|
package/src/styles/callout.css
CHANGED
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
/* Tone ink keeps actions readable on the neutral surface. */
|
|
68
68
|
.ui-toast__action { flex: none; align-self: center; background: none; border: 0; padding: 4px 9px; border-radius: var(--radius-xs); font: inherit; font-weight: var(--weight-medium); color: var(--toast-action-ink); cursor: pointer; }
|
|
69
69
|
.ui-toast__action:hover { background: color-mix(in srgb, var(--bg) 55%, transparent); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
|
|
70
|
+
.ui-toast__action:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
70
71
|
|
|
71
72
|
.ui-toast__close { flex: none; align-self: flex-start; background: none; border: 0; /* muted-ink: glyph — dismiss icon */ color: var(--muted); cursor: pointer; padding: 2px; display: grid; place-items: center; position: relative; font: inherit; }
|
|
72
73
|
.ui-toast__close svg { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 2.5; }
|
|
@@ -90,6 +91,7 @@
|
|
|
90
91
|
transform: translate(-50%, -50%);
|
|
91
92
|
}
|
|
92
93
|
.ui-toast__close:hover { color: var(--text); }
|
|
94
|
+
.ui-toast__close:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
93
95
|
|
|
94
96
|
/* auto-dismiss progress bar — .is-running is added by wireToastStack() */
|
|
95
97
|
.ui-toast__timer { position: absolute; left: 0; bottom: 0; height: 3px; width: 100%; background: var(--toast-accent); opacity: 0.85; transform-origin: left; }
|
package/src/styles/card.css
CHANGED
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
}
|
|
59
59
|
/* The lift alone: the kit casts no shadow anywhere (#295), and cards are flat (#284). */
|
|
60
60
|
.ui-card--interactive:hover { transform: translateY(-2px); }
|
|
61
|
+
.ui-card--interactive:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
61
62
|
|
|
62
63
|
/* card() emits the title as an h2, so the text face is named here rather than
|
|
63
64
|
left to the element. why: docs/specification.md#labels-and-titles */
|
package/src/styles/code.css
CHANGED
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
}
|
|
52
52
|
.ui-snippet__copy:hover { color: var(--accent); }
|
|
53
53
|
.ui-snippet--reveal .ui-snippet__copy:hover { color: var(--strong); }
|
|
54
|
+
.ui-snippet__copy:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
54
55
|
.ui-snippet__copy svg { width: 13px; height: 13px; stroke: currentColor; fill: none; stroke-width: 2.8; }
|
|
55
56
|
|
|
56
57
|
/* Shell token highlighting (matches viz/account.mjs classes) */
|
package/src/styles/dropdown.css
CHANGED
|
@@ -95,6 +95,15 @@
|
|
|
95
95
|
.ui-dropdown__panel.is-end { left: auto; right: 0; }
|
|
96
96
|
.ui-dropdown__panel.is-scroll { max-height: 300px; overflow-y: auto; }
|
|
97
97
|
|
|
98
|
+
/* Chrome makes a scroll container a keyboard stop on its own — no tabindex, no
|
|
99
|
+
author rule — so `.is-scroll` took the browser's outline, black in light mode.
|
|
100
|
+
#457 refused that, and #487's review measured it here. Written for every panel
|
|
101
|
+
rather than the scrolling one, as the palette and the drawer write it, because
|
|
102
|
+
a panel that takes focus any other way has the same claim on the ring. The
|
|
103
|
+
ring is COMPOSED with the floating treatment rather than over it: a box-shadow
|
|
104
|
+
list replaces the whole list. why: docs/specification.md#elevation */
|
|
105
|
+
.ui-dropdown__panel:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring), inset 0 0 0 1px var(--elev-edge, var(--border)), var(--elev-drop); }
|
|
106
|
+
|
|
98
107
|
/* Opening upward. The kit releases its own `top` here so that nothing outside
|
|
99
108
|
the kit has to: an absolute box with both edges pinned is stretched between
|
|
100
109
|
them, and a consumer who set `bottom` and left our `top` standing got a
|
package/src/styles/feedback.css
CHANGED
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
.ui-fbc__chip svg { width: 14px; height: 14px; flex: none; opacity: .85; stroke-width: 2.7; }
|
|
79
79
|
.ui-fbc__x { margin-left: auto; background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ /* muted-ink: glyph — dismiss icon */ color: var(--dim); border: 0; width: 28px; height: 28px; border-radius: 8px; cursor: pointer; display: grid; place-items: center; flex: none; font: inherit; }
|
|
80
80
|
.ui-fbc__x:hover { color: var(--strong); }
|
|
81
|
+
.ui-fbc__x:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
81
82
|
.ui-fbc__x svg { width: 14px; height: 14px; stroke-width: 2.7; }
|
|
82
83
|
.ui-fbc__quote { margin: 14px 20px 0; background: var(--surface); /* ring-gap: inherit — decorative or text-only surface has no nested focus target. */ border-radius: 12px; padding: 12px 15px; display: flex; gap: 11px; }
|
|
83
84
|
.ui-fbc__qm { color: var(--accent); font-size: var(--text-xl); font-weight: var(--weight-bold); line-height: .9; flex: none; opacity: .55; }
|
|
@@ -94,6 +95,7 @@
|
|
|
94
95
|
.ui-fbbtn { font-family: var(--font-sans); font-size: calc(var(--text-sm) + 0.5px); font-weight: var(--weight-semibold); border-radius: 10px; padding: 9px 17px; cursor: pointer; border: 0; transition: filter var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease); }
|
|
95
96
|
.ui-fbbtn.ghost { background: transparent; color: var(--text); }
|
|
96
97
|
.ui-fbbtn.ghost:hover { color: var(--strong); background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
|
|
98
|
+
.ui-fbbtn:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
97
99
|
.ui-fbbtn.primary { background: var(--accent-strong); color: var(--accent-contrast); display: inline-flex; align-items: center; gap: 9px; }
|
|
98
100
|
.ui-fbbtn.primary:hover { filter: brightness(1.08); }
|
|
99
101
|
/* Same flat pair as .ui-btn:disabled, for the same reason (#220). */
|
package/src/styles/footer.css
CHANGED
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
transform var(--dur-fast) var(--ease);
|
|
63
63
|
}
|
|
64
64
|
.ui-footer__social:hover { color: var(--accent); border-color: var(--accent); transform: translateY(-1px); }
|
|
65
|
+
.ui-footer__social:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
65
66
|
.ui-footer__social svg { width: 17px; height: 17px; display: block; }
|
|
66
67
|
|
|
67
68
|
/* Link columns */
|
|
@@ -85,6 +86,7 @@
|
|
|
85
86
|
transition: color var(--dur-fast) var(--ease);
|
|
86
87
|
}
|
|
87
88
|
.ui-footer__links a:hover { color: var(--footer-link-hover); }
|
|
89
|
+
.ui-footer__links a:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
88
90
|
|
|
89
91
|
/* Legal bar — shared by every variant */
|
|
90
92
|
.ui-footer__bar {
|
|
@@ -102,6 +104,7 @@
|
|
|
102
104
|
.ui-footer__legal-links { display: flex; gap: 22px; flex-wrap: wrap; }
|
|
103
105
|
.ui-footer__legal-links a { color: var(--footer-link); text-decoration: none; transition: color var(--dur-fast) var(--ease); }
|
|
104
106
|
.ui-footer__legal-links a:hover { color: var(--footer-link-hover); }
|
|
107
|
+
.ui-footer__legal-links a:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
105
108
|
.ui-footer__switcher { display: inline-flex; align-items: center; gap: 12px; margin-left: auto; }
|
|
106
109
|
|
|
107
110
|
/* slim — a single legal row, no divider above it. */
|
package/src/styles/layout.css
CHANGED
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
/* Carries the shell's class as well as its own, for the same reason the rail
|
|
84
84
|
rows do (see nav.css): a host stylesheet's `a:link` is (0,1,1). */
|
|
85
85
|
.ui-app .ui-app__brand { color: var(--strong); }
|
|
86
|
+
.ui-app__brand:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
86
87
|
.ui-app__brand svg { display: block; flex: none; }
|
|
87
88
|
|
|
88
89
|
/* The head band: the product's mark, and the rail's own control at the far end of
|
package/src/styles/topbar.css
CHANGED
|
@@ -41,6 +41,9 @@
|
|
|
41
41
|
.brand svg { display: block; flex: none; }
|
|
42
42
|
/* Topbar wordmark runs a touch smaller than the auth-card lockup. */
|
|
43
43
|
.topbar .brand { font-size: var(--text-sm); }
|
|
44
|
+
/* The lockup is a link, so it takes focus: the shared ring, with a radius of its
|
|
45
|
+
own because the mark and the word have no box to borrow one from. #482 */
|
|
46
|
+
.brand:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
44
47
|
.topbar .spacer { flex: 1; }
|
|
45
48
|
|
|
46
49
|
/* Deck / Text (segmented, pill) */
|
|
@@ -67,6 +70,7 @@
|
|
|
67
70
|
}
|
|
68
71
|
.dtsw a:hover { color: var(--strong); }
|
|
69
72
|
.dtsw a.cur { color: var(--strong); background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
|
|
73
|
+
.dtsw a:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
70
74
|
|
|
71
75
|
/* Theme toggle — a single icon-only switch (no label). */
|
|
72
76
|
.toggle {
|
|
@@ -86,6 +90,7 @@
|
|
|
86
90
|
border-color var(--dur-fast) var(--ease);
|
|
87
91
|
}
|
|
88
92
|
.toggle:hover { transform: translateY(-1px); border-color: var(--border-strong); }
|
|
93
|
+
.toggle:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
89
94
|
.toggle .ic { width: 17px; height: 17px; display: inline-block; color: var(--text); }
|
|
90
95
|
.toggle .ic svg { display: block; width: 100%; height: 100%; stroke-width: 2.2; }
|
|
91
96
|
|
|
@@ -107,6 +112,7 @@
|
|
|
107
112
|
transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
|
|
108
113
|
}
|
|
109
114
|
.vsw__btn:hover { border-color: var(--accent); }
|
|
115
|
+
.vsw__btn:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
110
116
|
.vsw__btn .lbl { color: var(--text); }
|
|
111
117
|
.vsw__btn .cur { color: var(--strong); font-weight: 600; letter-spacing: 0.01em; }
|
|
112
118
|
.vsw__btn .car {
|
|
@@ -180,9 +186,14 @@
|
|
|
180
186
|
transition: background var(--dur-fast) var(--ease);
|
|
181
187
|
}
|
|
182
188
|
/* Menu rows use the reading surface and an edge on hover — see
|
|
183
|
-
src/styles/dropdown.css:
|
|
189
|
+
src/styles/dropdown.css:164 `.ui-dropdown__item:hover`.
|
|
184
190
|
why: docs/specification.md#elevation */
|
|
185
191
|
.vopt:hover { outline: 1px solid var(--control-edge); outline-offset: -1px; background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
|
|
192
|
+
/* The row is a keyboard stop: src/components/dropdown.js:554
|
|
193
|
+
`items[next < 0 ? 0 : next]?.focus()` moves focus onto a `[data-dd-item]` with
|
|
194
|
+
the arrow keys, and this is one. It takes the ring on its own 10px radius, the
|
|
195
|
+
same way `.amenu a` above does. #482 */
|
|
196
|
+
.vopt:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
186
197
|
.vopt .vname { font-family: var(--font-sans); font-size: calc(var(--text-sm) - 0.5px); color: var(--strong); font-weight: 600; letter-spacing: 0.01em; }
|
|
187
198
|
.vopt .vmeta { font-size: var(--text-xs); color: var(--text); margin-top: 2px; }
|
|
188
199
|
.vopt .vbadge {
|
|
@@ -221,6 +232,7 @@
|
|
|
221
232
|
transition: border-color var(--dur-fast) var(--ease);
|
|
222
233
|
}
|
|
223
234
|
.acct .avatar:hover { border-color: var(--accent); }
|
|
235
|
+
.avatar:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); }
|
|
224
236
|
.amenu {
|
|
225
237
|
position: absolute;
|
|
226
238
|
right: 0; top: 44px;
|
|
@@ -259,6 +271,7 @@
|
|
|
259
271
|
.amenu .ahead .aem { color: var(--text); font-size: calc(var(--text-xs) + 0.5px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
260
272
|
.amenu a { display: flex; align-items: center; gap: 11px; padding: 10px 15px; color: var(--text); text-decoration: none; font-family: var(--font-sans); font-size: var(--text-sm); cursor: pointer; }
|
|
261
273
|
.amenu a:hover { outline: 1px solid var(--control-edge); outline-offset: -1px; background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
|
|
274
|
+
.amenu a:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: var(--radius-xs); }
|
|
262
275
|
.amenu a.cur { color: var(--accent); }
|
|
263
276
|
.amenu a svg { width: 19px; height: 19px; flex: none; stroke: currentColor; fill: none; stroke-width: 2; opacity: 0.85; }
|
|
264
277
|
.amenu .asep { height: 1px; background: var(--border); margin: 5px 0; }
|