@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "1.0.228",
3
+ "version": "1.0.230",
4
4
  "private": false,
5
5
  "description": "website for lossless.com",
6
6
  "main": "dist_ts_web/index.js",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '1.0.228',
6
+ version: '1.0.230',
7
7
  description: 'website for lossless.com'
8
8
  }
@@ -1,28 +1,41 @@
1
1
  import { html } from '@design.estate/dees-element';
2
2
 
3
3
  export const demoFunc = () => html`
4
- <dees-chips
5
- selectionMode="none"
6
- .selectableChips=${[
7
- { key: 'account1', value: 'Payment Account 1' },
8
- { key: 'account2', value: 'PaymentAccount2' },
9
- { key: 'account3', value: 'Payment Account 3' }
10
- ]}
11
- ></dees-chips>
12
- <dees-chips
13
- selectionMode="single"
14
- .selectableChips=${[
15
- { key: 'account1', value: 'Payment Account 1' },
16
- { key: 'account2', value: 'PaymentAccount2' },
17
- { key: 'account3', value: 'Payment Account 3' }
18
- ]}
19
- ></dees-chips>
20
- <dees-chips
21
- selectionMode="multiple"
22
- .selectableChips=${[
23
- { key: 'account1', value: 'Payment Account 1' },
24
- { key: 'account2', value: 'PaymentAccount2' },
25
- { key: 'account3', value: 'Payment Account 3' }
26
- ]}
27
- ></dees-chips>
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, value: 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: Array
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: 8px;
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: #00A3FF;
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(chip => html`
104
- <div @click=${() => this.selectChip(chip)} class="chip ${this.isSelected(chip) ? 'selected' : ''}">
105
- ${chip.key ? html`<div class="chipKey">${chip.key}</div>` : html``}${chip.value}
106
- </div>
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
- alert('No menu items...')
157
+ DeesContextmenu.contextMenuDeactivated = true;
158
+ this.destroy();
119
159
  }}>
120
160
  <dees-icon .iconFA=${'xmark'}></dees-icon
121
- >No menu item present...
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=${() => actionArg.actionFunc({
528
- item: itemArg,
529
- table: this,
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 = this.dataActions.filter(actionArg => actionArg.type.includes('inRow')).length * 35;
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);