@design.estate/dees-catalog 1.0.228 → 1.0.230
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_bundle/bundle.js +131 -97
- package/dist_bundle/bundle.js.map +3 -3
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/dees-chips.d.ts +2 -0
- package/dist_ts_web/elements/dees-chips.demo.js +29 -16
- package/dist_ts_web/elements/dees-chips.js +59 -16
- package/dist_ts_web/elements/dees-contextmenu.d.ts +6 -0
- package/dist_ts_web/elements/dees-contextmenu.js +38 -3
- package/dist_ts_web/elements/dees-table.js +5 -4
- package/dist_watch/bundle.js +109 -26
- package/dist_watch/bundle.js.map +2 -2
- package/package.json +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/dees-chips.demo.ts +37 -24
- package/ts_web/elements/dees-chips.ts +64 -18
- package/ts_web/elements/dees-contextmenu.ts +44 -2
- package/ts_web/elements/dees-table.ts +13 -10
package/package.json
CHANGED
|
@@ -1,28 +1,41 @@
|
|
|
1
1
|
import { html } from '@design.estate/dees-element';
|
|
2
2
|
|
|
3
3
|
export const demoFunc = () => html`
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
4
|
+
<style>
|
|
5
|
+
.demoContainer {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
height: 100%;
|
|
11
|
+
background: #222;
|
|
12
|
+
}
|
|
13
|
+
</style>
|
|
14
|
+
<div class="demoContainer">
|
|
15
|
+
<dees-chips
|
|
16
|
+
selectionMode="none"
|
|
17
|
+
.selectableChips=${[
|
|
18
|
+
{ key: 'account1', value: 'Payment Account 1' },
|
|
19
|
+
{ key: 'account2', value: 'PaymentAccount2' },
|
|
20
|
+
{ key: 'account3', value: 'Payment Account 3' },
|
|
21
|
+
]}
|
|
22
|
+
></dees-chips>
|
|
23
|
+
<dees-chips
|
|
24
|
+
selectionMode="single"
|
|
25
|
+
chipsAreRemovable
|
|
26
|
+
.selectableChips=${[
|
|
27
|
+
{ key: 'account1', value: 'Payment Account 1' },
|
|
28
|
+
{ key: 'account2', value: 'PaymentAccount2' },
|
|
29
|
+
{ key: 'account3', value: 'Payment Account 3' },
|
|
30
|
+
]}
|
|
31
|
+
></dees-chips>
|
|
32
|
+
<dees-chips
|
|
33
|
+
selectionMode="multiple"
|
|
34
|
+
.selectableChips=${[
|
|
35
|
+
{ key: 'account1', value: 'Payment Account 1' },
|
|
36
|
+
{ key: 'account2', value: 'PaymentAccount2' },
|
|
37
|
+
{ key: 'account3', value: 'Payment Account 3' },
|
|
38
|
+
]}
|
|
39
|
+
></dees-chips>
|
|
40
|
+
</div>
|
|
28
41
|
`;
|
|
@@ -19,7 +19,7 @@ declare global {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
type Tag = { key: string
|
|
22
|
+
type Tag = { key: string; value: string };
|
|
23
23
|
|
|
24
24
|
@customElement('dees-chips')
|
|
25
25
|
export class DeesChips extends DeesElement {
|
|
@@ -29,7 +29,12 @@ export class DeesChips extends DeesElement {
|
|
|
29
29
|
public selectionMode: 'none' | 'single' | 'multiple' = 'single';
|
|
30
30
|
|
|
31
31
|
@property({
|
|
32
|
-
type:
|
|
32
|
+
type: Boolean,
|
|
33
|
+
})
|
|
34
|
+
public chipsAreRemovable: boolean = false;
|
|
35
|
+
|
|
36
|
+
@property({
|
|
37
|
+
type: Array,
|
|
33
38
|
})
|
|
34
39
|
public selectableChips: Tag[] = [];
|
|
35
40
|
|
|
@@ -37,10 +42,9 @@ export class DeesChips extends DeesElement {
|
|
|
37
42
|
public selectedChip: Tag = null;
|
|
38
43
|
|
|
39
44
|
@property({
|
|
40
|
-
type: Array
|
|
45
|
+
type: Array,
|
|
41
46
|
})
|
|
42
47
|
public selectedChips: Tag[] = [];
|
|
43
|
-
|
|
44
48
|
|
|
45
49
|
constructor() {
|
|
46
50
|
super();
|
|
@@ -49,7 +53,6 @@ export class DeesChips extends DeesElement {
|
|
|
49
53
|
public static styles = [
|
|
50
54
|
cssManager.defaultStyles,
|
|
51
55
|
css`
|
|
52
|
-
|
|
53
56
|
:host {
|
|
54
57
|
display: block;
|
|
55
58
|
box-sizing: border-box;
|
|
@@ -70,22 +73,23 @@ export class DeesChips extends DeesElement {
|
|
|
70
73
|
color: #fff;
|
|
71
74
|
border-radius: 40px;
|
|
72
75
|
margin-right: 4px;
|
|
73
|
-
margin-bottom:
|
|
76
|
+
margin-bottom: 4px;
|
|
74
77
|
position: relative;
|
|
75
78
|
overflow: hidden;
|
|
79
|
+
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
.chip:hover {
|
|
79
83
|
background: #666666;
|
|
80
|
-
cursor: pointer;
|
|
84
|
+
cursor: pointer;
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
.chip.selected {
|
|
84
|
-
background: #
|
|
88
|
+
background: #00a3ff;
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
.chipKey {
|
|
88
|
-
background: rgba(0,0,0,0.3);
|
|
92
|
+
background: rgba(0, 0, 0, 0.3);
|
|
89
93
|
height: 100%;
|
|
90
94
|
display: inline-block;
|
|
91
95
|
margin-left: -8px;
|
|
@@ -93,18 +97,44 @@ export class DeesChips extends DeesElement {
|
|
|
93
97
|
padding-right: 8px;
|
|
94
98
|
margin-right: 8px;
|
|
95
99
|
}
|
|
96
|
-
|
|
100
|
+
|
|
101
|
+
dees-icon {
|
|
102
|
+
padding: 0px 6px 0px 4px;
|
|
103
|
+
margin-left: 4px;
|
|
104
|
+
margin-right: -8px;
|
|
105
|
+
background: rgba(0, 0, 0, 0.3);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
dees-icon:hover {
|
|
109
|
+
background: #e4002b;
|
|
110
|
+
}
|
|
97
111
|
`,
|
|
98
112
|
];
|
|
99
113
|
|
|
100
114
|
public render(): TemplateResult {
|
|
101
115
|
return html`
|
|
102
116
|
<div class="mainbox">
|
|
103
|
-
${this.selectableChips.map(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
${this.selectableChips.map(
|
|
118
|
+
(chip) => html`
|
|
119
|
+
<div
|
|
120
|
+
@click=${() => this.selectChip(chip)}
|
|
121
|
+
class="chip ${this.isSelected(chip) ? 'selected' : ''}"
|
|
122
|
+
>
|
|
123
|
+
${chip.key ? html`<div class="chipKey">${chip.key}</div>` : html``} ${chip.value}
|
|
124
|
+
${this.chipsAreRemovable
|
|
125
|
+
? html`
|
|
126
|
+
<dees-icon
|
|
127
|
+
@click=${(event: Event) => {
|
|
128
|
+
event.stopPropagation(); // prevent the selectChip event from being triggered
|
|
129
|
+
this.removeChip(chip);
|
|
130
|
+
}}
|
|
131
|
+
.iconFA=${'xmark'}
|
|
132
|
+
></dees-icon>
|
|
133
|
+
`
|
|
134
|
+
: html``}
|
|
135
|
+
</div>
|
|
136
|
+
`
|
|
137
|
+
)}
|
|
108
138
|
</div>
|
|
109
139
|
`;
|
|
110
140
|
}
|
|
@@ -120,7 +150,7 @@ export class DeesChips extends DeesElement {
|
|
|
120
150
|
if (this.selectionMode === 'single') {
|
|
121
151
|
return this.selectedChip?.key === chip.key;
|
|
122
152
|
} else {
|
|
123
|
-
return this.selectedChips.some(selected => selected.key === chip.key);
|
|
153
|
+
return this.selectedChips.some((selected) => selected.key === chip.key);
|
|
124
154
|
}
|
|
125
155
|
}
|
|
126
156
|
|
|
@@ -137,9 +167,9 @@ export class DeesChips extends DeesElement {
|
|
|
137
167
|
this.selectedChip = chip;
|
|
138
168
|
this.selectedChips = [chip];
|
|
139
169
|
}
|
|
140
|
-
} else if(this.selectionMode === 'multiple') {
|
|
170
|
+
} else if (this.selectionMode === 'multiple') {
|
|
141
171
|
if (this.isSelected(chip)) {
|
|
142
|
-
this.selectedChips = this.selectedChips.filter(selected => selected.key !== chip.key);
|
|
172
|
+
this.selectedChips = this.selectedChips.filter((selected) => selected.key !== chip.key);
|
|
143
173
|
} else {
|
|
144
174
|
this.selectedChips = [...this.selectedChips, chip];
|
|
145
175
|
}
|
|
@@ -147,4 +177,20 @@ export class DeesChips extends DeesElement {
|
|
|
147
177
|
}
|
|
148
178
|
console.log(this.selectedChips);
|
|
149
179
|
}
|
|
180
|
+
|
|
181
|
+
public removeChip(chipToRemove: Tag): void {
|
|
182
|
+
// Remove the chip from selectableChips
|
|
183
|
+
this.selectableChips = this.selectableChips.filter((chip) => chip.key !== chipToRemove.key);
|
|
184
|
+
|
|
185
|
+
// Remove the chip from selectedChips if present
|
|
186
|
+
this.selectedChips = this.selectedChips.filter((chip) => chip.key !== chipToRemove.key);
|
|
187
|
+
|
|
188
|
+
// If the removed chip was the selectedChip, set selectedChip to null
|
|
189
|
+
if (this.selectedChip && this.selectedChip.key === chipToRemove.key) {
|
|
190
|
+
this.selectedChip = null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Trigger an update to re-render the component
|
|
194
|
+
this.requestUpdate();
|
|
195
|
+
}
|
|
150
196
|
}
|
|
@@ -27,7 +27,42 @@ export class DeesContextmenu extends DeesElement {
|
|
|
27
27
|
public static demo = demoFunc
|
|
28
28
|
|
|
29
29
|
// STATIC
|
|
30
|
+
// This will store all the accumulated menu items
|
|
31
|
+
public static contextMenuDeactivated = false;
|
|
32
|
+
public static accumulatedMenuItems: plugins.tsclass.website.IMenuItem[] = [];
|
|
33
|
+
|
|
34
|
+
// Add a global event listener for the right-click context menu
|
|
35
|
+
public static initializeGlobalListener() {
|
|
36
|
+
document.addEventListener('contextmenu', (event: MouseEvent) => {
|
|
37
|
+
if (this.contextMenuDeactivated) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
|
|
42
|
+
// Get the target element of the right-click
|
|
43
|
+
let target: EventTarget | null = event.target;
|
|
44
|
+
|
|
45
|
+
// Clear previously accumulated items
|
|
46
|
+
DeesContextmenu.accumulatedMenuItems = [];
|
|
47
|
+
|
|
48
|
+
// Traverse up the DOM tree to accumulate menu items
|
|
49
|
+
while (target) {
|
|
50
|
+
if ((target as any).getContextMenuItems) {
|
|
51
|
+
DeesContextmenu.accumulatedMenuItems.push(...(target as any).getContextMenuItems());
|
|
52
|
+
}
|
|
53
|
+
target = (target as Node).parentNode;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Open the context menu with the accumulated items
|
|
57
|
+
DeesContextmenu.openContextMenuWithOptions(event, DeesContextmenu.accumulatedMenuItems);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// allows opening of a contextmenu with options
|
|
30
62
|
public static async openContextMenuWithOptions(eventArg: MouseEvent, menuItemsArg: plugins.tsclass.website.IMenuItem[]) {
|
|
63
|
+
if (this.contextMenuDeactivated) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
31
66
|
eventArg.preventDefault();
|
|
32
67
|
eventArg.stopPropagation();
|
|
33
68
|
const contextMenu = new DeesContextmenu();
|
|
@@ -49,6 +84,7 @@ export class DeesContextmenu extends DeesElement {
|
|
|
49
84
|
contextMenu.style.transform = 'scale(1,1)';
|
|
50
85
|
}
|
|
51
86
|
|
|
87
|
+
// INSTANCE
|
|
52
88
|
@property({
|
|
53
89
|
type: Array,
|
|
54
90
|
})
|
|
@@ -59,6 +95,9 @@ export class DeesContextmenu extends DeesElement {
|
|
|
59
95
|
super();
|
|
60
96
|
}
|
|
61
97
|
|
|
98
|
+
/**
|
|
99
|
+
* STATIC STYLES
|
|
100
|
+
*/
|
|
62
101
|
public static styles = [
|
|
63
102
|
cssManager.defaultStyles,
|
|
64
103
|
css`
|
|
@@ -115,10 +154,11 @@ export class DeesContextmenu extends DeesElement {
|
|
|
115
154
|
})}
|
|
116
155
|
${this.menuItems.length === 0 ? html`
|
|
117
156
|
<div class="menuitem" @click=${() => {
|
|
118
|
-
|
|
157
|
+
DeesContextmenu.contextMenuDeactivated = true;
|
|
158
|
+
this.destroy();
|
|
119
159
|
}}>
|
|
120
160
|
<dees-icon .iconFA=${'xmark'}></dees-icon
|
|
121
|
-
>
|
|
161
|
+
>Deactivate Contextmenu globally.
|
|
122
162
|
</div>
|
|
123
163
|
` : html``}
|
|
124
164
|
</div>
|
|
@@ -144,3 +184,5 @@ export class DeesContextmenu extends DeesElement {
|
|
|
144
184
|
this.parentElement.removeChild(this);
|
|
145
185
|
}
|
|
146
186
|
}
|
|
187
|
+
|
|
188
|
+
DeesContextmenu.initializeGlobalListener();
|
|
@@ -61,8 +61,8 @@ export interface ITableAction<T = any> {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export interface ITableActionDataArg<T> {
|
|
64
|
-
item: T
|
|
65
|
-
table: DeesTable<T
|
|
64
|
+
item: T;
|
|
65
|
+
table: DeesTable<T>;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
export type TDisplayFunction<T = any> = (itemArg: T) => object;
|
|
@@ -396,6 +396,8 @@ export class DeesTable<T> extends DeesElement {
|
|
|
396
396
|
</div>
|
|
397
397
|
<div class="headingSeparation"></div>
|
|
398
398
|
|
|
399
|
+
<dees-input-text></dees-input-text>
|
|
400
|
+
|
|
399
401
|
<!-- the actual table -->
|
|
400
402
|
<style></style>
|
|
401
403
|
${this.data.length > 0
|
|
@@ -524,10 +526,11 @@ export class DeesTable<T> extends DeesElement {
|
|
|
524
526
|
${this.getActionsForType('inRow').map(
|
|
525
527
|
(actionArg) => html`<div
|
|
526
528
|
class="action"
|
|
527
|
-
@click=${() =>
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
529
|
+
@click=${() =>
|
|
530
|
+
actionArg.actionFunc({
|
|
531
|
+
item: itemArg,
|
|
532
|
+
table: this,
|
|
533
|
+
})}
|
|
531
534
|
>
|
|
532
535
|
${actionArg.iconName
|
|
533
536
|
? html`
|
|
@@ -584,8 +587,7 @@ export class DeesTable<T> extends DeesElement {
|
|
|
584
587
|
`;
|
|
585
588
|
}
|
|
586
589
|
|
|
587
|
-
public async firstUpdated() {
|
|
588
|
-
}
|
|
590
|
+
public async firstUpdated() {}
|
|
589
591
|
|
|
590
592
|
public async updated(changedProperties: Map<string | number | symbol, unknown>): Promise<void> {
|
|
591
593
|
super.updated(changedProperties);
|
|
@@ -609,7 +611,8 @@ export class DeesTable<T> extends DeesElement {
|
|
|
609
611
|
// Get computed width
|
|
610
612
|
const width = window.getComputedStyle(cell).width;
|
|
611
613
|
if (cell.textContent.includes('Actions')) {
|
|
612
|
-
const neededWidth =
|
|
614
|
+
const neededWidth =
|
|
615
|
+
this.dataActions.filter((actionArg) => actionArg.type.includes('inRow')).length * 35;
|
|
613
616
|
cell.style.width = `${Math.max(neededWidth, 68)}px`;
|
|
614
617
|
} else {
|
|
615
618
|
cell.style.width = width;
|
|
@@ -620,7 +623,7 @@ export class DeesTable<T> extends DeesElement {
|
|
|
620
623
|
});
|
|
621
624
|
await done.promise;
|
|
622
625
|
}
|
|
623
|
-
}
|
|
626
|
+
};
|
|
624
627
|
|
|
625
628
|
if (cells[cells.length - 1].textContent.includes('Actions')) {
|
|
626
629
|
await handleColumnByIndex(cells.length - 1, true);
|