Skip to content

Commit 73ef9b3

Browse files
committed
Update tree1 component and test.html
1 parent e29e6b4 commit 73ef9b3

File tree

3 files changed

+48
-14
lines changed

3 files changed

+48
-14
lines changed

tests/test.html

+27-5
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,24 @@
7575
</u1-tree1>
7676
<u1-tree1 draggable="true">
7777
<u1-ico slot=icon icon=drag_indicator>x</u1-ico>
78-
Draggable
78+
<label>
79+
Draggable
80+
<input placeholder="same baseline">
81+
</label>
82+
<button>clickable</button>
83+
</u1-tree1>
84+
85+
<u1-tree1>
86+
<input type=checkbox slot=icon id="check1">
87+
Checkbox
88+
<u1-tree1>
89+
<input type=checkbox slot=icon id="check2">
90+
Checkbox
91+
</u1-tree1>
92+
<u1-tree1>
93+
<input type=checkbox slot=icon id="check3">
94+
Checkbox
95+
</u1-tree1>
7996
</u1-tree1>
8097

8198
</u1-tree1>
@@ -88,7 +105,7 @@
88105

89106
<section>
90107

91-
<u1-code element=demo editable trim></u1-code>
108+
<u1-code element=demo editable trim> </u1-code>
92109

93110
<u1-code trim editable>
94111
<style>
@@ -105,6 +122,11 @@
105122
u1-tree1::part(row):hover {
106123
background:#00000004;
107124
}
125+
u1-tree1[aria-grabbed=true] {
126+
transition:.2s .2s;
127+
opacity:.4;
128+
outline-width:0 !important;
129+
}
108130
</style>
109131
</u1-code>
110132

@@ -138,8 +160,6 @@
138160

139161

140162

141-
142-
143163
<script type=module>
144164
/* drag & drop experiment */
145165

@@ -167,7 +187,8 @@
167187
ondragstart({target, event}) {
168188
if (target.tagName !== 'U1-TREE1') return;
169189
dragSrcEl = target;
170-
event.dataTransfer.effectAllowed = 'move';
190+
dragSrcEl.setAttribute('aria-grabbed', 'true'); // deprecated, but currently the best markup?
191+
event.dataTransfer.effectAllowed = 'move'; // needed?
171192
},
172193
ondragover({closest, event}) {
173194
event.preventDefault();
@@ -221,6 +242,7 @@
221242
},
222243
ondragend() {
223244
dropPositionIndicator.style.display = 'none';
245+
dragSrcEl.removeAttribute('aria-grabbed');
224246
dragSrcEl = null;
225247
},
226248
resetExpandTimer(item) {

tree1.css

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@ u1-tree1::part(row):focus {
1010
u1-tree1[aria-selected=true]::part(row) {
1111
background:#00000008;
1212
}
13+
u1-tree1[draggable]::part(row) {
14+
cursor:grab;
15+
}
1316

1417

1518
u1-tree1:not(:defined) {
16-
padding:.2em 0 0 0;
19+
padding-block-start:.2em;
1720
display:list-item;
1821
list-style-position: inside;
1922
> u1-tree1 {
20-
padding-left:1.2em;
23+
padding-inline-start:1.2em;
24+
2125
}
2226
}

tree1.js

+15-7
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ let css = `
2222
2323
[part=row] {
2424
display:flex;
25-
padding:.15em 0;
26-
padding-left:calc( var(--indent) * (var(--level) - 1) );
25+
align-items:baseline;
26+
padding-block: .15em;
27+
padding-inline-start:calc( var(--indent) * (var(--level) - 1) );
2728
gap:.3em;
2829
}
2930
@@ -40,8 +41,9 @@ let css = `
4041
display:flex;
4142
align-items: center;
4243
justify-content:center;
43-
min-width:1.7em;
44+
min-inline-size:1.7em;
4445
font-weight:400;
46+
align-self:stretch;
4547
}
4648
`;
4749

@@ -113,15 +115,21 @@ export class tree extends HTMLElement {
113115
}
114116
_markup(){
115117
// own level
116-
const myLevel = this.root() === this ? 1 : parseInt(this.parentNode.getAttribute('aria-level')) + 1;
118+
const root = this.root();
119+
const myLevel = root === this ? 1 : parseInt(this.parentNode.getAttribute('aria-level')) + 1;
117120
this.setAttribute('aria-level', myLevel);
118121
this.style.setProperty('--level', myLevel);
119122

120123
// slot subnodes
121124
for (const child of this.children) {
122125
child.tagName === this.tagName && child.setAttribute('slot', 'children');
123126
}
124-
this.setAttribute('role', this.root() === this ? 'tree' : 'treeitem');
127+
this.setAttribute('role', root === this ? 'tree' : 'treeitem');
128+
129+
// make it selectable if its the root and no other is selected
130+
if (root === this && !root._activeElement) {
131+
this.row.setAttribute('tabindex', '0');
132+
}
125133

126134
// if has children, its expandable
127135
if (!this.hasAttribute('aria-expanded')) {
@@ -142,7 +150,7 @@ export class tree extends HTMLElement {
142150
if (item.isExpanded()) {
143151
next = item.items().at(0);
144152
}
145-
if (!next) next = item.nextElementSibling;
153+
if (!next) next = item.nextElementSibling; // todo: only next treeitem
146154

147155
if (!next) {
148156
while (item.parentNode) {
@@ -162,7 +170,7 @@ export class tree extends HTMLElement {
162170
prevFocusable(){
163171
let item = this;
164172
while (item) {
165-
let next = item.previousElementSibling;
173+
let next = item.previousElementSibling; // todo: only next treeitem
166174
if (next) {
167175
if (next.isExpanded()) {
168176
next = next.items().at(-1);

0 commit comments

Comments
 (0)