Skip to content

Commit c428340

Browse files
committed
Bump element to fix bugs
1 parent 8a7c860 commit c428340

File tree

10 files changed

+85
-27
lines changed

10 files changed

+85
-27
lines changed

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"remarkable": "^2.0.1"
2727
},
2828
"devDependencies": {
29-
"@pictogrammers/element": "0.0.41",
29+
"@pictogrammers/element": "0.0.42",
3030
"@pictogrammers/element-jest": "^0.1.7",
3131
"@pictogrammers/element-webpack": "^0.1.40",
3232
"cross-env": "^7.0.3",

src/pg/icon/icon.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ export default class PgIcon extends HTMLElement {
2020
if (changes.path) {
2121
const viewBox = getComputedStyle(this).getPropertyValue('--pg-icon-viewbox');
2222
this.$svg.setAttribute('viewBox', viewBox || '0 0 24 24');
23+
if (!this.path) {
24+
throw new Error('invalid path set on pg-icon');
25+
}
2326
this.$path.setAttribute('d', this.path);
2427
}
2528
}

src/pg/tree/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# Tree
1+
# Tree
2+
3+
The `pg-tree` is used to render a tree list of items.

src/pg/tree/__examples__/basic/basic.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
<div>
22
<pg-tree part="tree"></pg-tree>
3-
<hr/>
4-
<pg-tree part="tree2"></pg-tree>
53
<h2>Tools</h2>
64
<button part="addItem">Add Item</button>
75
<button part="removeItem">Remove Item</button>

src/pg/tree/__examples__/basic/basic.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ function createItem(key) {
3535
})
3636
export default class XPgTreeBasic extends HTMLElement {
3737
@Part() $tree: PgTree;
38-
@Part() $tree2: PgTree;
3938
@Part() $addItem: HTMLButtonElement;
4039
@Part() $removeItem: HTMLButtonElement;
4140
@Part() $updateItem: HTMLButtonElement;
@@ -65,13 +64,21 @@ export default class XPgTreeBasic extends HTMLElement {
6564
const { index, label } = e.detail;
6665
this.$tree.items[index].label = label;
6766
});
67+
this.$tree.addEventListener('select', (e: any) => {
68+
const { indexes } = e.detail;
69+
const item = indexes.reduce((item, index) => {
70+
return item.items[index];
71+
}, this.$tree);
72+
item.selected = true;
73+
});
6874
this.$tree.addEventListener('menu', (e: any) => {
6975
// action clicked
7076
});
7177
this.$tree.items = [{
7278
icon: {
7379
path: IconEye
7480
},
81+
selected: true,
7582
label: 'Item 1',
7683
actions: [{
7784
type: PgTreeButtonIcon,
@@ -86,10 +93,13 @@ export default class XPgTreeBasic extends HTMLElement {
8693
}]
8794
},
8895
{
89-
label: 'Item 2'
96+
label: 'Item 2',
97+
items: [
98+
{
99+
label: 'Nested'
100+
}
101+
]
90102
}];
91-
// Assign to same array instance!
92-
this.$tree2.items = this.$tree.items;
93103
// Push to same array instance!
94104
this.$tree.items.push({ label: 'testing' });
95105

src/pg/treeItem/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# Tree Item
1+
# Tree Item
2+
3+
Tree items are used in the `pg-tree` component.

src/pg/treeItem/treeItem.css

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,19 @@
3030
}
3131

3232
[part="item"]:hover {
33-
background: var(--pg-tree-item-background-hover, #383838)
33+
background: var(--pg-tree-item-background-hover, #383838);
34+
}
35+
36+
[part="item"].selected {
37+
background: var(--pg-tree-item-background-selected, #4B5876)
3438
}
3539

3640
[part="actions"] {
3741
display: flex;
3842
}
43+
44+
[part="items"] {
45+
display: flex;
46+
flex-direction: column;
47+
padding-left: 1rem;
48+
}

src/pg/treeItem/treeItem.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
<div part="label"></div>
66
</button>
77
<div part="actions"></div>
8-
</div>
8+
</div>
9+
<div part="items"></div>

src/pg/treeItem/treeItem.ts

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,40 @@ export default class PgTreeItem extends HTMLElement {
2121

2222
@Prop() index: number;
2323
@Prop() label: string = '';
24+
@Prop() selected: boolean = false;
2425
@Prop() icon: { path: string };
2526
@Prop() actions: any[] = [];
27+
@Prop() items: any[] = [];
2628

2729
@Part() $item: HTMLDivElement;
2830
@Part() $input: HTMLInputElement;
2931
@Part() $button: HTMLButtonElement;
3032
@Part() $icon: PgIcon;
3133
@Part() $label: HTMLDivElement;
3234
@Part() $actions: HTMLDivElement;
35+
@Part() $items: HTMLDivElement;
3336

3437
connectedCallback() {
3538
this.$item.addEventListener('action', this.#handleAction.bind(this));
3639
this.$button.addEventListener('dblclick', this.#handleRename.bind(this));
40+
this.$button.addEventListener('click', this.#handleClick.bind(this));
3741
this.$item.addEventListener('contextmenu', this.#handleContextMenu.bind(this));
3842
this.$input.addEventListener('blur', this.#handleBlur.bind(this));
3943
this.$input.addEventListener('keydown', this.#handleKeyDown.bind(this));
44+
this.$items.addEventListener('select', this.#handleSelect.bind(this));
4045
forEach({
4146
container: this.$actions,
4247
items: this.actions,
4348
type: (item) => {
4449
return PgTreeButtonIcon;
45-
},
46-
create: ($item, item) => {
47-
// after creation of $item element
48-
},
49-
update: ($item, item) => {
50-
// after every $item update
51-
},
50+
}
51+
});
52+
forEach({
53+
container: this.$items,
54+
items: this.items,
55+
type: (item) => {
56+
return PgTreeItem;
57+
}
5258
});
5359
}
5460

@@ -59,6 +65,19 @@ export default class PgTreeItem extends HTMLElement {
5965
if (changes.icon && this.icon) {
6066
this.$icon.path = this.icon.path;
6167
}
68+
if (changes.selected) {
69+
this.$item.classList.toggle('selected', this.selected);
70+
}
71+
}
72+
73+
#handleClick() {
74+
this.dispatchEvent(new CustomEvent('select', {
75+
bubbles: true,
76+
composed: true,
77+
detail: {
78+
indexes: [this.index]
79+
}
80+
}));
6281
}
6382

6483
#handleAction(e) {
@@ -73,6 +92,10 @@ export default class PgTreeItem extends HTMLElement {
7392
}));
7493
}
7594

95+
#handleSelect(e: any) {
96+
e.detail.indexes.unshift(this.index);
97+
}
98+
7699
#handleContextMenu(e) {
77100
e.preventDefault();
78101
}
@@ -102,8 +125,17 @@ export default class PgTreeItem extends HTMLElement {
102125
}
103126

104127
#handleKeyDown(e: KeyboardEvent) {
105-
if (e.key === 'Enter') {
106-
this.#handleBlur();
128+
switch (e.key ) {
129+
case 'Enter':
130+
this.#handleBlur();
131+
break;
132+
case 'Escape':
133+
this.$button.classList.remove('hide');
134+
this.$actions.classList.remove('hide');
135+
this.$input.classList.add('hide');
136+
this.$input.value = this.label;
137+
this.$button.focus();
138+
break;
107139
}
108140
}
109141

0 commit comments

Comments
 (0)