@adia-ai/web-components 0.0.22 → 0.0.24
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/components/action-list/action-list.css +13 -4
- package/components/avatar/avatar.css +8 -9
- package/components/button/button.css +30 -25
- package/components/check/check.css +34 -32
- package/components/drawer/drawer.css +356 -349
- package/components/drawer/drawer.js +44 -11
- package/components/input/input.css +19 -12
- package/components/kbd/kbd.css +1 -1
- package/components/menu/menu.css +22 -11
- package/components/modal/modal.js +12 -11
- package/components/option-card/option-card.css +33 -37
- package/components/radio/radio.css +22 -19
- package/components/range/range.css +8 -4
- package/components/rating/rating.css +7 -4
- package/components/segment/segment.css +11 -8
- package/components/switch/switch.css +22 -16
- package/components/tag/tag.css +7 -4
- package/components/textarea/textarea.css +10 -5
- package/components/toast/toast.css +27 -26
- package/components/toggle-group/toggle-group.css +10 -4
- package/components/tree/tree.css +21 -9
- package/package.json +1 -1
- package/patterns/app-nav/app-nav.js +13 -0
- package/patterns/app-nav-item/app-nav-item.css +32 -26
- package/patterns/section-nav-item/section-nav-item.css +31 -21
package/components/tree/tree.css
CHANGED
|
@@ -90,10 +90,7 @@
|
|
|
90
90
|
box-shadow: var(--tree-focus-ring);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
:scope[selected]
|
|
94
|
-
background: var(--tree-bg-selected);
|
|
95
|
-
color: var(--tree-fg);
|
|
96
|
-
}
|
|
93
|
+
/* :scope[selected] rules moved outside @scope — see tree-ui Safari note at end of file. */
|
|
97
94
|
|
|
98
95
|
/* ── Chevron ── */
|
|
99
96
|
[slot="chevron"] {
|
|
@@ -120,9 +117,7 @@
|
|
|
120
117
|
flex-shrink: 0;
|
|
121
118
|
}
|
|
122
119
|
|
|
123
|
-
:scope[selected]
|
|
124
|
-
color: var(--tree-fg);
|
|
125
|
-
}
|
|
120
|
+
/* :scope[selected] icon override moved outside @scope — see Safari note at end of file. */
|
|
126
121
|
|
|
127
122
|
/* ── Text ── */
|
|
128
123
|
[slot="text"] {
|
|
@@ -142,13 +137,30 @@
|
|
|
142
137
|
transition: opacity var(--tree-duration) var(--tree-easing);
|
|
143
138
|
}
|
|
144
139
|
|
|
145
|
-
[slot="row"]:hover [slot="actions"]
|
|
146
|
-
:scope[selected] > [slot="row"] [slot="actions"] {
|
|
140
|
+
[slot="row"]:hover [slot="actions"] {
|
|
147
141
|
opacity: 1;
|
|
148
142
|
}
|
|
143
|
+
/* :scope[selected] > [slot="row"] [slot="actions"] moved outside @scope. */
|
|
149
144
|
|
|
150
145
|
/* ── Children — collapsed state ── */
|
|
151
146
|
:scope:not([open]) > tree-item-ui {
|
|
152
147
|
display: none;
|
|
153
148
|
}
|
|
154
149
|
}
|
|
150
|
+
|
|
151
|
+
/* Safari 17.x bug: `:scope[selected]` (Flavor B — attribute-removal restyle)
|
|
152
|
+
doesn't restyle on attribute removal inside `@scope`. Selectors moved
|
|
153
|
+
out as plain `tree-ui[selected] …` rules (the @scope is `(tree-ui)`, so
|
|
154
|
+
`:scope` resolved to `tree-ui`). Custom-property tokens from
|
|
155
|
+
`:where(:scope)` still resolve via inheritance. See
|
|
156
|
+
docs/BROWSER-COMPAT.md §3a. */
|
|
157
|
+
tree-ui[selected] > [slot="row"] {
|
|
158
|
+
background: var(--tree-bg-selected);
|
|
159
|
+
color: var(--tree-fg);
|
|
160
|
+
}
|
|
161
|
+
tree-ui[selected] > [slot="row"] [slot="icon"] {
|
|
162
|
+
color: var(--tree-fg);
|
|
163
|
+
}
|
|
164
|
+
tree-ui[selected] > [slot="row"] [slot="actions"] {
|
|
165
|
+
opacity: 1;
|
|
166
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adia-ai/web-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"description": "AdiaUI web components — vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui-utils.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -71,6 +71,7 @@ class AdiaAppNav extends AdiaElement {
|
|
|
71
71
|
const item = e.target.closest('app-nav-item-ui');
|
|
72
72
|
if (item && this.contains(item)) {
|
|
73
73
|
this.select(item);
|
|
74
|
+
this.#flushHoverState();
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
76
77
|
|
|
@@ -88,6 +89,18 @@ class AdiaAppNav extends AdiaElement {
|
|
|
88
89
|
}
|
|
89
90
|
};
|
|
90
91
|
|
|
92
|
+
// Safari macOS leaves `:hover` stuck on items the cursor passed through
|
|
93
|
+
// when the DOM mutates during click+route navigation (no `mouseleave`
|
|
94
|
+
// fires). Toggling pointer-events on the container forces Safari to
|
|
95
|
+
// re-evaluate hover state on next paint without flickering layout.
|
|
96
|
+
// Documented in docs/BROWSER-COMPAT.md §3a.
|
|
97
|
+
#flushHoverState() {
|
|
98
|
+
this.style.pointerEvents = 'none';
|
|
99
|
+
requestAnimationFrame(() => {
|
|
100
|
+
this.style.pointerEvents = '';
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
91
104
|
disconnected() {
|
|
92
105
|
this.removeEventListener('click', this.#onClick);
|
|
93
106
|
this.#ro?.disconnect();
|
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
/* Safari 17.x bug: `:scope:hover` (Flavor A) and `:scope[selected]`
|
|
2
|
+
(Flavor B — attribute-removal restyle) both fail inside `@scope`.
|
|
3
|
+
Selectors moved out — custom props from `:where(:scope)` are still set
|
|
4
|
+
on the element via inheritance. Specificity (0,1,1 / 0,2,1) preserved.
|
|
5
|
+
Safari < 18 is below the §1 floor (ADR-0007); fix protects opt-in
|
|
6
|
+
consumers extending below the floor and is harmlessly redundant on
|
|
7
|
+
engines without the bug. */
|
|
8
|
+
app-nav-item-ui:hover {
|
|
9
|
+
background: var(--nav-item-bg-hover);
|
|
10
|
+
color: var(--nav-item-fg-hover);
|
|
11
|
+
}
|
|
12
|
+
app-nav-item-ui:hover [slot="icon"] {
|
|
13
|
+
color: var(--nav-item-fg-hover);
|
|
14
|
+
}
|
|
15
|
+
app-nav-item-ui[selected] {
|
|
16
|
+
background: var(--nav-item-bg-selected);
|
|
17
|
+
color: var(--nav-item-fg-selected);
|
|
18
|
+
font-weight: var(--nav-item-selected-weight);
|
|
19
|
+
}
|
|
20
|
+
app-nav-item-ui[selected] [slot="icon"] {
|
|
21
|
+
color: var(--nav-item-icon-fg-selected);
|
|
22
|
+
}
|
|
23
|
+
app-nav-item-ui[selected] [slot="icon"]:empty::before {
|
|
24
|
+
content: '';
|
|
25
|
+
width: 2px;
|
|
26
|
+
height: 1em;
|
|
27
|
+
border-radius: 1px;
|
|
28
|
+
background: var(--nav-item-accent);
|
|
29
|
+
}
|
|
30
|
+
|
|
1
31
|
@scope (app-nav-item-ui) {
|
|
2
32
|
:where(:scope) {
|
|
3
33
|
--nav-item-accent: var(--a-accent);
|
|
@@ -40,30 +70,13 @@
|
|
|
40
70
|
outline: none;
|
|
41
71
|
}
|
|
42
72
|
|
|
43
|
-
:scope:hover {
|
|
44
|
-
background: var(--nav-item-bg-hover);
|
|
45
|
-
color: var(--nav-item-fg-hover);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
:scope:hover [slot="icon"] {
|
|
49
|
-
color: var(--nav-item-fg-hover);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
73
|
:scope:focus-visible {
|
|
53
74
|
background: var(--nav-item-bg-hover);
|
|
54
75
|
color: var(--nav-item-fg-hover);
|
|
55
76
|
outline: none;
|
|
56
77
|
}
|
|
57
78
|
|
|
58
|
-
:scope[selected]
|
|
59
|
-
background: var(--nav-item-bg-selected);
|
|
60
|
-
color: var(--nav-item-fg-selected);
|
|
61
|
-
font-weight: var(--nav-item-selected-weight);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
:scope[selected] [slot="icon"] {
|
|
65
|
-
color: var(--nav-item-icon-fg-selected);
|
|
66
|
-
}
|
|
79
|
+
/* :scope[selected] rules moved outside @scope — see Safari 17.x bug note at top. */
|
|
67
80
|
|
|
68
81
|
/* Icon slot — always present, reserves space even when empty */
|
|
69
82
|
[slot="icon"] {
|
|
@@ -81,14 +94,7 @@
|
|
|
81
94
|
--a-icon-size: calc(var(--nav-item-icon-font-size) + 2px);
|
|
82
95
|
}
|
|
83
96
|
|
|
84
|
-
/* Selected accent line
|
|
85
|
-
:scope[selected] [slot="icon"]:empty::before {
|
|
86
|
-
content: '';
|
|
87
|
-
width: 2px;
|
|
88
|
-
height: 1em;
|
|
89
|
-
border-radius: 1px;
|
|
90
|
-
background: var(--nav-item-accent);
|
|
91
|
-
}
|
|
97
|
+
/* Selected accent line on empty icon slot moved outside @scope — see Safari 17.x bug note at top. */
|
|
92
98
|
|
|
93
99
|
[slot="text"] {
|
|
94
100
|
flex: 1;
|
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
/* Safari 17.x bug: `:scope:hover` (Flavor A) and `:scope[selected]`
|
|
2
|
+
(Flavor B — attribute-removal restyle) both fail inside `@scope`.
|
|
3
|
+
Selectors moved out. `:focus-visible` matches correctly inside `@scope`,
|
|
4
|
+
so the combined `:hover, :focus-visible` rule was split — `:hover`
|
|
5
|
+
moves out, `:focus-visible` stays. See docs/BROWSER-COMPAT.md §3a. */
|
|
6
|
+
section-nav-item-ui:hover:not([disabled]) {
|
|
7
|
+
background: var(--section-nav-item-bg-hover);
|
|
8
|
+
color: var(--section-nav-item-fg-hover);
|
|
9
|
+
}
|
|
10
|
+
section-nav-item-ui:hover:not([disabled]) > icon-ui {
|
|
11
|
+
color: var(--section-nav-item-fg-hover);
|
|
12
|
+
}
|
|
13
|
+
section-nav-item-ui[selected] {
|
|
14
|
+
background: var(--section-nav-item-bg-selected);
|
|
15
|
+
color: var(--section-nav-item-fg-selected);
|
|
16
|
+
font-weight: var(--section-nav-item-selected-weight);
|
|
17
|
+
}
|
|
18
|
+
section-nav-item-ui[selected] > icon-ui {
|
|
19
|
+
color: var(--section-nav-item-icon-fg-selected);
|
|
20
|
+
}
|
|
21
|
+
section-nav-item-ui[selected]:not(:has(> icon-ui))::before {
|
|
22
|
+
content: '';
|
|
23
|
+
position: absolute;
|
|
24
|
+
inset-inline-start: calc(var(--section-nav-item-row-px) - var(--a-space-1));
|
|
25
|
+
inset-block: 25%;
|
|
26
|
+
width: 2px;
|
|
27
|
+
border-radius: 1px;
|
|
28
|
+
background: var(--section-nav-item-accent);
|
|
29
|
+
}
|
|
30
|
+
|
|
1
31
|
@scope (section-nav-item-ui) {
|
|
2
32
|
:where(:scope) {
|
|
3
33
|
--section-nav-item-row-height: var(--a-size);
|
|
@@ -58,35 +88,15 @@
|
|
|
58
88
|
text-overflow: ellipsis;
|
|
59
89
|
}
|
|
60
90
|
|
|
61
|
-
:scope:hover:not([disabled]),
|
|
62
91
|
:scope:focus-visible:not([disabled]) {
|
|
63
92
|
background: var(--section-nav-item-bg-hover);
|
|
64
93
|
color: var(--section-nav-item-fg-hover);
|
|
65
94
|
}
|
|
66
|
-
:scope:hover:not([disabled]) > icon-ui,
|
|
67
95
|
:scope:focus-visible:not([disabled]) > icon-ui {
|
|
68
96
|
color: var(--section-nav-item-fg-hover);
|
|
69
97
|
}
|
|
70
98
|
|
|
71
|
-
:scope[selected]
|
|
72
|
-
background: var(--section-nav-item-bg-selected);
|
|
73
|
-
color: var(--section-nav-item-fg-selected);
|
|
74
|
-
font-weight: var(--section-nav-item-selected-weight);
|
|
75
|
-
}
|
|
76
|
-
:scope[selected] > icon-ui {
|
|
77
|
-
color: var(--section-nav-item-icon-fg-selected);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/* Selected accent bar — shown only when no leading icon */
|
|
81
|
-
:scope[selected]:not(:has(> icon-ui))::before {
|
|
82
|
-
content: '';
|
|
83
|
-
position: absolute;
|
|
84
|
-
inset-inline-start: calc(var(--section-nav-item-row-px) - var(--a-space-1));
|
|
85
|
-
inset-block: 25%;
|
|
86
|
-
width: 2px;
|
|
87
|
-
border-radius: 1px;
|
|
88
|
-
background: var(--section-nav-item-accent);
|
|
89
|
-
}
|
|
99
|
+
/* :scope[selected] rules moved outside @scope — see Safari 17.x bug note at top. */
|
|
90
100
|
|
|
91
101
|
:scope[disabled] {
|
|
92
102
|
color: var(--section-nav-item-fg-disabled);
|