@design.estate/dees-catalog 1.0.227 → 1.0.229

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.227",
3
+ "version": "1.0.229",
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.227',
6
+ version: '1.0.229',
7
7
  description: 'website for lossless.com'
8
8
  }
@@ -0,0 +1,40 @@
1
+ import { html } from '@design.estate/dees-element';
2
+
3
+ export const demoFunc = () => html`
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
+ .selectableChips=${[
26
+ { key: 'account1', value: 'Payment Account 1' },
27
+ { key: 'account2', value: 'PaymentAccount2' },
28
+ { key: 'account3', value: 'Payment Account 3' },
29
+ ]}
30
+ ></dees-chips>
31
+ <dees-chips
32
+ selectionMode="multiple"
33
+ .selectableChips=${[
34
+ { key: 'account1', value: 'Payment Account 1' },
35
+ { key: 'account2', value: 'PaymentAccount2' },
36
+ { key: 'account3', value: 'Payment Account 3' },
37
+ ]}
38
+ ></dees-chips>
39
+ </div>
40
+ `;
@@ -11,6 +11,7 @@ import {
11
11
  } from '@design.estate/dees-element';
12
12
 
13
13
  import * as domtools from '@design.estate/dees-domtools';
14
+ import { demoFunc } from './dees-chips.demo.js';
14
15
 
15
16
  declare global {
16
17
  interface HTMLElementTagNameMap {
@@ -18,29 +19,27 @@ declare global {
18
19
  }
19
20
  }
20
21
 
22
+ type Tag = { key: string, value: string };
23
+
21
24
  @customElement('dees-chips')
22
25
  export class DeesChips extends DeesElement {
23
- public static demo = () => html`
24
- <dees-chips .selectableChips=${['Payment Account 1', 'PaymentAccount2', 'Payment Account 3']}></dees-chips>
25
- <dees-chips selectionMode="multiple" .selectableChips=${['Payment Account 1', 'PaymentAccount2', 'Payment Account 3']}></dees-chips>
26
-
27
- `;
26
+ public static demo = demoFunc;
28
27
 
29
28
  @property()
30
- public selectionMode: 'single' | 'multiple' = 'single';
29
+ public selectionMode: 'none' | 'single' | 'multiple' = 'single';
31
30
 
32
31
  @property({
33
32
  type: Array
34
33
  })
35
- public selectableChips: string[] = [];
34
+ public selectableChips: Tag[] = [];
36
35
 
37
36
  @property()
38
- public selectedChip: string = null;
37
+ public selectedChip: Tag = null;
39
38
 
40
39
  @property({
41
40
  type: Array
42
41
  })
43
- public selectedChips: string[] = [];
42
+ public selectedChips: Tag[] = [];
44
43
 
45
44
 
46
45
  constructor() {
@@ -57,18 +56,24 @@ export class DeesChips extends DeesElement {
57
56
  }
58
57
 
59
58
  .mainbox {
60
-
59
+ user-select: none;
61
60
  }
62
61
 
63
62
  .chip {
64
- background: #494949;
65
- display: inline-block;
66
- padding: 8px 12px;
67
- font-size: 14px;
63
+ border-top: ${cssManager.bdTheme('1px solid #CCC', '1px solid #444')};
64
+ background: #333333;
65
+ display: inline-flex;
66
+ height: 20px;
67
+ line-height: 20px;
68
+ padding: 0px 8px;
69
+ font-size: 12px;
68
70
  color: #fff;
69
71
  border-radius: 40px;
70
72
  margin-right: 4px;
71
- margin-bottom: 8px;
73
+ margin-bottom: 4px;
74
+ position: relative;
75
+ overflow: hidden;
76
+ box-shadow: 0px 1px 2px rgba(0,0,0,0.3);
72
77
  }
73
78
 
74
79
  .chip:hover {
@@ -79,6 +84,16 @@ export class DeesChips extends DeesElement {
79
84
  .chip.selected {
80
85
  background: #00A3FF;
81
86
  }
87
+
88
+ .chipKey {
89
+ background: rgba(0,0,0,0.3);
90
+ height: 100%;
91
+ display: inline-block;
92
+ margin-left: -8px;
93
+ padding-left: 8px;
94
+ padding-right: 8px;
95
+ margin-right: 8px;
96
+ }
82
97
 
83
98
  `,
84
99
  ];
@@ -86,9 +101,9 @@ export class DeesChips extends DeesElement {
86
101
  public render(): TemplateResult {
87
102
  return html`
88
103
  <div class="mainbox">
89
- ${this.selectableChips.map(chipArg => html`
90
- <div @click=${() => this.selectChip(chipArg)} class="chip ${this.selectedChip === chipArg || this.selectedChips.includes(chipArg) ? 'selected' : ''}">
91
- ${chipArg}
104
+ ${this.selectableChips.map(chip => html`
105
+ <div @click=${() => this.selectChip(chip)} class="chip ${this.isSelected(chip) ? 'selected' : ''}">
106
+ ${chip.key ? html`<div class="chipKey">${chip.key}</div>` : html``}${chip.value}
92
107
  </div>
93
108
  `)}
94
109
  </div>
@@ -102,20 +117,32 @@ export class DeesChips extends DeesElement {
102
117
  }
103
118
  }
104
119
 
105
- public async selectChip(chipArg: string) {
120
+ private isSelected(chip: Tag): boolean {
121
+ if (this.selectionMode === 'single') {
122
+ return this.selectedChip?.key === chip.key;
123
+ } else {
124
+ return this.selectedChips.some(selected => selected.key === chip.key);
125
+ }
126
+ }
127
+
128
+ public async selectChip(chip: Tag) {
129
+ if (this.selectionMode === 'none') {
130
+ return;
131
+ }
132
+
106
133
  if (this.selectionMode === 'single') {
107
- if (this.selectedChip === chipArg) {
134
+ if (this.isSelected(chip)) {
108
135
  this.selectedChip = null;
109
136
  this.selectedChips = [];
110
137
  } else {
111
- this.selectedChip = chipArg;
112
- this.selectedChips = [chipArg];
138
+ this.selectedChip = chip;
139
+ this.selectedChips = [chip];
113
140
  }
114
141
  } else if(this.selectionMode === 'multiple') {
115
- if (this.selectedChips.includes(chipArg)) {
116
- this.selectedChips = this.selectedChips.filter(chipArg2 => chipArg !== chipArg2)
142
+ if (this.isSelected(chip)) {
143
+ this.selectedChips = this.selectedChips.filter(selected => selected.key !== chip.key);
117
144
  } else {
118
- this.selectedChips.push(chipArg);
145
+ this.selectedChips = [...this.selectedChips, chip];
119
146
  }
120
147
  this.requestUpdate();
121
148
  }
@@ -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);