@design.estate/dees-catalog 1.0.173
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 +2704 -0
- package/dist_bundle/bundle.js.map +7 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/elements/dees-button-exit.d.ts +7 -0
- package/dist_ts_web/elements/dees-button-exit.js +52 -0
- package/dist_ts_web/elements/dees-button.d.ts +20 -0
- package/dist_ts_web/elements/dees-button.js +215 -0
- package/dist_ts_web/elements/dees-chips.d.ts +18 -0
- package/dist_ts_web/elements/dees-chips.js +124 -0
- package/dist_ts_web/elements/dees-contextmenu.d.ts +18 -0
- package/dist_ts_web/elements/dees-contextmenu.js +173 -0
- package/dist_ts_web/elements/dees-dataview-codebox.d.ts +15 -0
- package/dist_ts_web/elements/dees-dataview-codebox.js +177 -0
- package/dist_ts_web/elements/dees-dataview-statusobject.d.ts +14 -0
- package/dist_ts_web/elements/dees-dataview-statusobject.js +163 -0
- package/dist_ts_web/elements/dees-form-submit.d.ts +17 -0
- package/dist_ts_web/elements/dees-form-submit.js +68 -0
- package/dist_ts_web/elements/dees-form.d.ts +29 -0
- package/dist_ts_web/elements/dees-form.js +173 -0
- package/dist_ts_web/elements/dees-icon.d.ts +76 -0
- package/dist_ts_web/elements/dees-icon.js +153 -0
- package/dist_ts_web/elements/dees-input-checkbox.d.ts +18 -0
- package/dist_ts_web/elements/dees-input-checkbox.js +178 -0
- package/dist_ts_web/elements/dees-input-dropdown.d.ts +30 -0
- package/dist_ts_web/elements/dees-input-dropdown.js +185 -0
- package/dist_ts_web/elements/dees-input-fileupload.d.ts +24 -0
- package/dist_ts_web/elements/dees-input-fileupload.js +196 -0
- package/dist_ts_web/elements/dees-input-quantityselector.d.ts +19 -0
- package/dist_ts_web/elements/dees-input-quantityselector.js +122 -0
- package/dist_ts_web/elements/dees-input-radio.d.ts +19 -0
- package/dist_ts_web/elements/dees-input-radio.js +136 -0
- package/dist_ts_web/elements/dees-input-text.d.ts +26 -0
- package/dist_ts_web/elements/dees-input-text.js +183 -0
- package/dist_ts_web/elements/dees-mobilenavigation.d.ts +27 -0
- package/dist_ts_web/elements/dees-mobilenavigation.js +185 -0
- package/dist_ts_web/elements/dees-pdf.d.ts +17 -0
- package/dist_ts_web/elements/dees-pdf.js +108 -0
- package/dist_ts_web/elements/dees-preview.d.ts +1 -0
- package/dist_ts_web/elements/dees-preview.js +2 -0
- package/dist_ts_web/elements/dees-search.d.ts +1 -0
- package/dist_ts_web/elements/dees-search.js +2 -0
- package/dist_ts_web/elements/dees-searchbox.d.ts +1 -0
- package/dist_ts_web/elements/dees-searchbox.js +2 -0
- package/dist_ts_web/elements/dees-speechbubble.d.ts +18 -0
- package/dist_ts_web/elements/dees-speechbubble.js +153 -0
- package/dist_ts_web/elements/dees-spinner.d.ts +15 -0
- package/dist_ts_web/elements/dees-spinner.js +130 -0
- package/dist_ts_web/elements/dees-stepper.d.ts +29 -0
- package/dist_ts_web/elements/dees-stepper.js +231 -0
- package/dist_ts_web/elements/dees-table.d.ts +28 -0
- package/dist_ts_web/elements/dees-table.js +348 -0
- package/dist_ts_web/elements/dees-toast.d.ts +10 -0
- package/dist_ts_web/elements/dees-toast.js +29 -0
- package/dist_ts_web/elements/dees-tooltip.d.ts +1 -0
- package/dist_ts_web/elements/dees-tooltip.js +2 -0
- package/dist_ts_web/elements/dees-updater.d.ts +16 -0
- package/dist_ts_web/elements/dees-updater.js +91 -0
- package/dist_ts_web/elements/dees-windowlayer.d.ts +17 -0
- package/dist_ts_web/elements/dees-windowlayer.js +85 -0
- package/dist_ts_web/elements/index.d.ts +24 -0
- package/dist_ts_web/elements/index.js +25 -0
- package/dist_ts_web/elements/plugins.d.ts +4 -0
- package/dist_ts_web/elements/plugins.js +7 -0
- package/dist_ts_web/index.d.ts +2 -0
- package/dist_ts_web/index.js +3 -0
- package/license +22 -0
- package/npmextra.json +18 -0
- package/package.json +55 -0
- package/readme.md +39 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/elements/dees-button-exit.ts +48 -0
- package/ts_web/elements/dees-button.ts +218 -0
- package/ts_web/elements/dees-chips.ts +124 -0
- package/ts_web/elements/dees-contextmenu.ts +181 -0
- package/ts_web/elements/dees-dataview-codebox.ts +178 -0
- package/ts_web/elements/dees-dataview-statusobject.ts +170 -0
- package/ts_web/elements/dees-form-submit.ts +70 -0
- package/ts_web/elements/dees-form.ts +191 -0
- package/ts_web/elements/dees-icon.ts +204 -0
- package/ts_web/elements/dees-input-checkbox.ts +175 -0
- package/ts_web/elements/dees-input-dropdown.ts +173 -0
- package/ts_web/elements/dees-input-fileupload.ts +195 -0
- package/ts_web/elements/dees-input-quantityselector.ts +113 -0
- package/ts_web/elements/dees-input-radio.ts +125 -0
- package/ts_web/elements/dees-input-text.ts +171 -0
- package/ts_web/elements/dees-mobilenavigation.ts +189 -0
- package/ts_web/elements/dees-pdf.ts +119 -0
- package/ts_web/elements/dees-preview.ts +0 -0
- package/ts_web/elements/dees-search.ts +0 -0
- package/ts_web/elements/dees-searchbox.ts +0 -0
- package/ts_web/elements/dees-speechbubble.ts +157 -0
- package/ts_web/elements/dees-spinner.ts +131 -0
- package/ts_web/elements/dees-stepper.ts +262 -0
- package/ts_web/elements/dees-table.ts +360 -0
- package/ts_web/elements/dees-toast.ts +26 -0
- package/ts_web/elements/dees-tooltip.ts +1 -0
- package/ts_web/elements/dees-updater.ts +90 -0
- package/ts_web/elements/dees-windowlayer.ts +85 -0
- package/ts_web/elements/index.ts +24 -0
- package/ts_web/elements/plugins.ts +13 -0
- package/ts_web/index.ts +2 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import {
|
|
2
|
+
customElement,
|
|
3
|
+
html,
|
|
4
|
+
DeesElement,
|
|
5
|
+
property,
|
|
6
|
+
type TemplateResult,
|
|
7
|
+
cssManager,
|
|
8
|
+
css,
|
|
9
|
+
type CSSResult,
|
|
10
|
+
unsafeCSS,
|
|
11
|
+
} from '@design.estate/dees-element';
|
|
12
|
+
|
|
13
|
+
import * as domtools from '@design.estate/dees-domtools';
|
|
14
|
+
|
|
15
|
+
declare global {
|
|
16
|
+
interface HTMLElementTagNameMap {
|
|
17
|
+
'dees-button': DeesButton;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@customElement('dees-button')
|
|
22
|
+
export class DeesButton extends DeesElement {
|
|
23
|
+
public static demo = () => html`
|
|
24
|
+
<dees-button>This is a slotted Text</dees-button>
|
|
25
|
+
<p><dees-button text="Highlighted: This text shows" type="highlighted">Highlighted</dees-button></p>
|
|
26
|
+
<p><dees-button type="discreet">This is discreete button</dees-button></p>
|
|
27
|
+
<p><dees-button disabled>This is a disabled button</dees-button></p>
|
|
28
|
+
<p><dees-button type="big">This is a slotted Text</dees-button></p>
|
|
29
|
+
<p><dees-button status="normal">Normal Status</dees-button></p>
|
|
30
|
+
<p><dees-button disabled status="pending">Pending Status</dees-button></p>
|
|
31
|
+
<p><dees-button disabled status="success">Success Status</dees-button></p>
|
|
32
|
+
<p><dees-button disabled status="error">Error Status</dees-button></p>
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
@property({
|
|
36
|
+
reflect: true,
|
|
37
|
+
hasChanged() {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
public text: string;
|
|
42
|
+
|
|
43
|
+
@property()
|
|
44
|
+
public eventDetailData: string;
|
|
45
|
+
|
|
46
|
+
@property({
|
|
47
|
+
type: Boolean
|
|
48
|
+
})
|
|
49
|
+
public disabled = false;
|
|
50
|
+
|
|
51
|
+
@property({
|
|
52
|
+
type: Boolean
|
|
53
|
+
})
|
|
54
|
+
public isHidden = false;
|
|
55
|
+
|
|
56
|
+
@property({
|
|
57
|
+
type: String
|
|
58
|
+
})
|
|
59
|
+
public type: 'normal' | 'highlighted' | 'discreet' | 'big' = 'normal';
|
|
60
|
+
|
|
61
|
+
@property({
|
|
62
|
+
type: String
|
|
63
|
+
})
|
|
64
|
+
public status: 'normal' | 'pending' | 'success' | 'error' = 'normal';
|
|
65
|
+
|
|
66
|
+
constructor() {
|
|
67
|
+
super();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public static styles = [
|
|
71
|
+
cssManager.defaultStyles,
|
|
72
|
+
css`
|
|
73
|
+
|
|
74
|
+
:host {
|
|
75
|
+
display: block;
|
|
76
|
+
box-sizing: border-box;
|
|
77
|
+
}
|
|
78
|
+
:host([hidden]) {
|
|
79
|
+
display: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.button {
|
|
83
|
+
transition: all 0.1s , color 0s;
|
|
84
|
+
position: relative;
|
|
85
|
+
font-size: 14px;
|
|
86
|
+
font-weight: 400;
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: center;
|
|
89
|
+
align-items: center;
|
|
90
|
+
background: ${cssManager.bdTheme('#fff', '#333')};
|
|
91
|
+
box-shadow: ${cssManager.bdTheme('0px 1px 3px rgba(0,0,0,0.3)', 'none')};
|
|
92
|
+
border: 1px solid ${cssManager.bdTheme('#eee', '#333')};
|
|
93
|
+
border-top: ${cssManager.bdTheme('1px solid #eee', '1px solid #444')};
|
|
94
|
+
border-radius: 4px;
|
|
95
|
+
line-height: 40px;
|
|
96
|
+
padding: 0px 8px;
|
|
97
|
+
min-width: 100px;
|
|
98
|
+
user-select: none;
|
|
99
|
+
color: ${cssManager.bdTheme('#333', ' #ccc')};
|
|
100
|
+
max-width: 500px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.button:hover {
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
background: #039be5;
|
|
106
|
+
color: #ffffff;
|
|
107
|
+
border: 1px solid #039be5;
|
|
108
|
+
border-top: 1px solid #039be5;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.button:active {
|
|
112
|
+
background: #0277bd;
|
|
113
|
+
border-top: 1px solid #0277bd;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.button.disabled {
|
|
117
|
+
background: ${cssManager.bdTheme('#ffffff00', '#11111100')};
|
|
118
|
+
border: 1px dashed ${cssManager.bdTheme('#666666', '#666666')};
|
|
119
|
+
color: #9b9b9e;
|
|
120
|
+
cursor: default;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.button.highlighted {
|
|
124
|
+
background: #e4002b;
|
|
125
|
+
border: none;
|
|
126
|
+
color: #fff;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.button.highlighted:hover {
|
|
130
|
+
background: #b50021;
|
|
131
|
+
border: none;
|
|
132
|
+
color: #fff;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.button.discreet {
|
|
136
|
+
background: none;
|
|
137
|
+
border: 1px solid #9b9b9e;
|
|
138
|
+
color: ${cssManager.bdTheme('#000', '#fff')};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.button.discreet:hover {
|
|
142
|
+
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.1)', 'rgba(255, 255, 255, 0.1)')};
|
|
143
|
+
}
|
|
144
|
+
.button.hidden {
|
|
145
|
+
display: none;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.button.big {
|
|
149
|
+
width: 300px;
|
|
150
|
+
line-height: 48px;
|
|
151
|
+
font-size: 16px;
|
|
152
|
+
padding: 0px 48px;
|
|
153
|
+
margin-top: 32px;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.button.pending {
|
|
157
|
+
border: 1px dashed ${cssManager.bdTheme('#0277bd', '#0277bd70')};
|
|
158
|
+
background: ${cssManager.bdTheme('#0277bd', '#0277bd70')};
|
|
159
|
+
color: #fff;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.button.success {
|
|
163
|
+
border: 1px dashed ${cssManager.bdTheme('#689F38', '#8BC34A70')};
|
|
164
|
+
background: ${cssManager.bdTheme('#689F38', '#8BC34A70')};
|
|
165
|
+
color: #fff;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.button.error {
|
|
169
|
+
border: 1px dashed ${cssManager.bdTheme('#B71C1C', '#E64A1970')};
|
|
170
|
+
background: ${cssManager.bdTheme('#B71C1C', '#E64A1970')};
|
|
171
|
+
color: #fff;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
dees-spinner {
|
|
175
|
+
position: absolute;
|
|
176
|
+
left: 10px;
|
|
177
|
+
}
|
|
178
|
+
`,
|
|
179
|
+
];
|
|
180
|
+
|
|
181
|
+
public render(): TemplateResult {
|
|
182
|
+
return html`
|
|
183
|
+
<div
|
|
184
|
+
class="button ${this.isHidden ? 'hidden' : 'block'} ${this.type} ${this.status} ${this.disabled
|
|
185
|
+
? 'disabled'
|
|
186
|
+
: null}"
|
|
187
|
+
@click="${this.dispatchClick}"
|
|
188
|
+
>
|
|
189
|
+
${this.status === 'normal' ? html``: html`
|
|
190
|
+
<dees-spinner .bnw=${true} status="${this.status}"></dees-spinner>
|
|
191
|
+
`}
|
|
192
|
+
<div class="textbox">${this.text ? this.text : this.textContent}</div>
|
|
193
|
+
</div>
|
|
194
|
+
`;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
public async dispatchClick() {
|
|
198
|
+
if (this.disabled) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
this.dispatchEvent(
|
|
203
|
+
new CustomEvent('clicked', {
|
|
204
|
+
detail: {
|
|
205
|
+
data: this.eventDetailData,
|
|
206
|
+
},
|
|
207
|
+
bubbles: true,
|
|
208
|
+
})
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
public async firstUpdated() {
|
|
213
|
+
if (!this.textContent) {
|
|
214
|
+
this.textContent = 'Button';
|
|
215
|
+
this.performUpdate();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import {
|
|
2
|
+
customElement,
|
|
3
|
+
html,
|
|
4
|
+
DeesElement,
|
|
5
|
+
property,
|
|
6
|
+
type TemplateResult,
|
|
7
|
+
cssManager,
|
|
8
|
+
css,
|
|
9
|
+
type CSSResult,
|
|
10
|
+
unsafeCSS,
|
|
11
|
+
} from '@design.estate/dees-element';
|
|
12
|
+
|
|
13
|
+
import * as domtools from '@design.estate/dees-domtools';
|
|
14
|
+
|
|
15
|
+
declare global {
|
|
16
|
+
interface HTMLElementTagNameMap {
|
|
17
|
+
'dees-chips': DeesChips;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@customElement('dees-chips')
|
|
22
|
+
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
|
+
`;
|
|
28
|
+
|
|
29
|
+
@property()
|
|
30
|
+
public selectionMode: 'single' | 'multiple' = 'single';
|
|
31
|
+
|
|
32
|
+
@property({
|
|
33
|
+
type: Array
|
|
34
|
+
})
|
|
35
|
+
public selectableChips: string[] = [];
|
|
36
|
+
|
|
37
|
+
@property()
|
|
38
|
+
public selectedChip: string = null;
|
|
39
|
+
|
|
40
|
+
@property({
|
|
41
|
+
type: Array
|
|
42
|
+
})
|
|
43
|
+
public selectedChips: string[] = [];
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
constructor() {
|
|
47
|
+
super();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public static styles = [
|
|
51
|
+
cssManager.defaultStyles,
|
|
52
|
+
css`
|
|
53
|
+
|
|
54
|
+
:host {
|
|
55
|
+
display: block;
|
|
56
|
+
box-sizing: border-box;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.mainbox {
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.chip {
|
|
64
|
+
background: #494949;
|
|
65
|
+
display: inline-block;
|
|
66
|
+
padding: 8px 12px;
|
|
67
|
+
font-size: 14px;
|
|
68
|
+
color: #fff;
|
|
69
|
+
border-radius: 40px;
|
|
70
|
+
margin-right: 4px;
|
|
71
|
+
margin-bottom: 8px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.chip:hover {
|
|
75
|
+
background: #666666;
|
|
76
|
+
cursor: pointer;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.chip.selected {
|
|
80
|
+
background: #00A3FF;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
`,
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
public render(): TemplateResult {
|
|
87
|
+
return html`
|
|
88
|
+
<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}
|
|
92
|
+
</div>
|
|
93
|
+
`)}
|
|
94
|
+
</div>
|
|
95
|
+
`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public async firstUpdated() {
|
|
99
|
+
if (!this.textContent) {
|
|
100
|
+
this.textContent = 'Button';
|
|
101
|
+
this.performUpdate();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public async selectChip(chipArg: string) {
|
|
106
|
+
if (this.selectionMode === 'single') {
|
|
107
|
+
if (this.selectedChip === chipArg) {
|
|
108
|
+
this.selectedChip = null;
|
|
109
|
+
this.selectedChips = [];
|
|
110
|
+
} else {
|
|
111
|
+
this.selectedChip = chipArg;
|
|
112
|
+
this.selectedChips = [chipArg];
|
|
113
|
+
}
|
|
114
|
+
} else if(this.selectionMode === 'multiple') {
|
|
115
|
+
if (this.selectedChips.includes(chipArg)) {
|
|
116
|
+
this.selectedChips = this.selectedChips.filter(chipArg2 => chipArg !== chipArg2)
|
|
117
|
+
} else {
|
|
118
|
+
this.selectedChips.push(chipArg);
|
|
119
|
+
}
|
|
120
|
+
this.requestUpdate();
|
|
121
|
+
}
|
|
122
|
+
console.log(this.selectedChips);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import {
|
|
3
|
+
customElement,
|
|
4
|
+
html,
|
|
5
|
+
DeesElement,
|
|
6
|
+
property,
|
|
7
|
+
type TemplateResult,
|
|
8
|
+
cssManager,
|
|
9
|
+
css,
|
|
10
|
+
type CSSResult,
|
|
11
|
+
unsafeCSS,
|
|
12
|
+
} from '@design.estate/dees-element';
|
|
13
|
+
|
|
14
|
+
import * as domtools from '@design.estate/dees-domtools';
|
|
15
|
+
import { DeesWindowLayer } from './dees-windowlayer.js';
|
|
16
|
+
|
|
17
|
+
declare global {
|
|
18
|
+
interface HTMLElementTagNameMap {
|
|
19
|
+
'dees-contextmenu': DeesContextmenu;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@customElement('dees-contextmenu')
|
|
24
|
+
export class DeesContextmenu extends DeesElement {
|
|
25
|
+
// DEMO
|
|
26
|
+
public static demo = () => html`
|
|
27
|
+
<style>
|
|
28
|
+
.withMargin {
|
|
29
|
+
display: block;
|
|
30
|
+
margin: 20px;
|
|
31
|
+
}
|
|
32
|
+
</style>
|
|
33
|
+
<dees-button @contextmenu=${(eventArg) => {
|
|
34
|
+
DeesContextmenu.openContextMenuWithOptions(eventArg, [
|
|
35
|
+
{
|
|
36
|
+
name: 'copy',
|
|
37
|
+
iconName: 'copySolid',
|
|
38
|
+
action: async () => {
|
|
39
|
+
return null;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'edit',
|
|
44
|
+
iconName: 'penToSquare',
|
|
45
|
+
action: async () => {
|
|
46
|
+
return null;
|
|
47
|
+
},
|
|
48
|
+
},{
|
|
49
|
+
name: 'paste',
|
|
50
|
+
iconName: 'pasteSolid',
|
|
51
|
+
action: async () => {
|
|
52
|
+
return null;
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
]);
|
|
56
|
+
}}>Hello</dees-button>
|
|
57
|
+
<dees-contextmenu class="withMargin"></dees-contextmenu>
|
|
58
|
+
<dees-contextmenu
|
|
59
|
+
class="withMargin"
|
|
60
|
+
.menuItems=${[
|
|
61
|
+
{
|
|
62
|
+
name: 'copy',
|
|
63
|
+
iconName: 'copySolid',
|
|
64
|
+
action: async () => {},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'edit',
|
|
68
|
+
iconName: 'penToSquare',
|
|
69
|
+
action: async () => {},
|
|
70
|
+
},{
|
|
71
|
+
name: 'paste',
|
|
72
|
+
iconName: 'pasteSolid',
|
|
73
|
+
action: async () => {},
|
|
74
|
+
},
|
|
75
|
+
] as plugins.tsclass.website.IMenuItem[]}
|
|
76
|
+
></dees-contextmenu>
|
|
77
|
+
`;
|
|
78
|
+
|
|
79
|
+
// STATIC
|
|
80
|
+
public static async openContextMenuWithOptions(eventArg: MouseEvent, menuItemsArg: plugins.tsclass.website.IMenuItem[]) {
|
|
81
|
+
eventArg.preventDefault();
|
|
82
|
+
const contextMenu = new DeesContextmenu();
|
|
83
|
+
contextMenu.style.position = 'absolute';
|
|
84
|
+
contextMenu.style.top = `${eventArg.clientY.toString()}px`;
|
|
85
|
+
contextMenu.style.left = `${eventArg.clientX.toString()}px`;
|
|
86
|
+
contextMenu.style.opacity = '0';
|
|
87
|
+
contextMenu.style.transform = 'scale(0.95,0.95)';
|
|
88
|
+
contextMenu.style.transformOrigin = 'top left';
|
|
89
|
+
contextMenu.menuItems = menuItemsArg;
|
|
90
|
+
document.body.append(contextMenu);
|
|
91
|
+
await domtools.plugins.smartdelay.delayFor(0);
|
|
92
|
+
contextMenu.style.opacity = '1';
|
|
93
|
+
contextMenu.style.transform = 'scale(1,1)';
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@property({
|
|
97
|
+
type: Array,
|
|
98
|
+
})
|
|
99
|
+
public menuItems: plugins.tsclass.website.IMenuItem[] = [];
|
|
100
|
+
|
|
101
|
+
constructor() {
|
|
102
|
+
super();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public static styles = [
|
|
106
|
+
cssManager.defaultStyles,
|
|
107
|
+
css`
|
|
108
|
+
:host {
|
|
109
|
+
display: block;
|
|
110
|
+
transition: all 0.1s;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.mainbox {
|
|
114
|
+
color: ${cssManager.bdTheme('#222', '#ccc')};
|
|
115
|
+
font-size: 14px;
|
|
116
|
+
width: 200px;
|
|
117
|
+
border: 1px solid #444;
|
|
118
|
+
min-height: 40px;
|
|
119
|
+
border-radius: 3px;
|
|
120
|
+
background: #222;
|
|
121
|
+
box-shadow: 0px 1px 4px #000;
|
|
122
|
+
user-select: none;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.mainbox .menuitem {
|
|
126
|
+
padding: 8px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.mainbox .menuitem dees-icon {
|
|
130
|
+
display: inline-block;
|
|
131
|
+
margin-right: 8px;
|
|
132
|
+
width: 14px;
|
|
133
|
+
transform: translateY(2px);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.mainbox .menuitem:hover {
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
background: #ffffff10;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.mainbox .menuitem:active {
|
|
142
|
+
cursor: pointer;
|
|
143
|
+
background: #ffffff05;
|
|
144
|
+
}
|
|
145
|
+
`,
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
public render(): TemplateResult {
|
|
149
|
+
return html`
|
|
150
|
+
<div class="mainbox">
|
|
151
|
+
${this.menuItems.map((menuItemArg) => {
|
|
152
|
+
return html`
|
|
153
|
+
<div class="menuitem" @click=${() => this.handleClick(menuItemArg)}>
|
|
154
|
+
<dees-icon .iconFA=${(menuItemArg.iconName as any) || 'minus'}></dees-icon
|
|
155
|
+
>${menuItemArg.name}
|
|
156
|
+
</div>
|
|
157
|
+
`;
|
|
158
|
+
})}
|
|
159
|
+
</div>
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public async firstUpdated() {
|
|
164
|
+
if (!this.menuItems || this.menuItems.length === 0) {
|
|
165
|
+
const mainbox = this.shadowRoot.querySelector('.mainbox');
|
|
166
|
+
mainbox.textContent = 'no menu items present';
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
public async handleClick(menuItem: plugins.tsclass.website.IMenuItem) {
|
|
171
|
+
menuItem.action();
|
|
172
|
+
await this.destroy();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public async destroy() {
|
|
176
|
+
this.style.opacity = '0';
|
|
177
|
+
this.style.transform = 'scale(0.95,0,95)';
|
|
178
|
+
await domtools.plugins.smartdelay.delayFor(100);
|
|
179
|
+
this.parentElement.removeChild(this);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DeesElement,
|
|
3
|
+
html,
|
|
4
|
+
customElement,
|
|
5
|
+
type TemplateResult,
|
|
6
|
+
property,
|
|
7
|
+
state,
|
|
8
|
+
} from '@design.estate/dees-element';
|
|
9
|
+
|
|
10
|
+
import hlight from 'highlight.js';
|
|
11
|
+
|
|
12
|
+
import * as smartstring from '@push.rocks/smartstring';
|
|
13
|
+
|
|
14
|
+
import * as domtools from '@design.estate/dees-domtools';
|
|
15
|
+
|
|
16
|
+
declare global {
|
|
17
|
+
interface HTMLElementTagNameMap {
|
|
18
|
+
'dees-dataview-codebox': DeesDataviewCodebox;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@customElement('dees-dataview-codebox')
|
|
23
|
+
export class DeesDataviewCodebox extends DeesElement {
|
|
24
|
+
public static demo = () => html`<dees-dataview-codebox proglang="typescript">
|
|
25
|
+
import * as text from './hello'; const hiThere = 'nice'; const myFunction = async () => {
|
|
26
|
+
console.log('nice one'); }
|
|
27
|
+
</dees-dataview-codebox>`;
|
|
28
|
+
|
|
29
|
+
@property()
|
|
30
|
+
public progLang: string = 'typescript';
|
|
31
|
+
|
|
32
|
+
@property({
|
|
33
|
+
type: String,
|
|
34
|
+
reflect: true,
|
|
35
|
+
})
|
|
36
|
+
public codeToDisplay: string = '';
|
|
37
|
+
|
|
38
|
+
constructor() {
|
|
39
|
+
super();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
render(): TemplateResult {
|
|
43
|
+
return html`
|
|
44
|
+
${domtools.elementBasic.styles}
|
|
45
|
+
<style>
|
|
46
|
+
:host {
|
|
47
|
+
position: relative;
|
|
48
|
+
display: block;
|
|
49
|
+
text-align: left;
|
|
50
|
+
font-size: 16px;
|
|
51
|
+
}
|
|
52
|
+
.mainbox {
|
|
53
|
+
position: relative;
|
|
54
|
+
color: ${this.goBright ? '#333333' : '#ffffff'};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.languageLabel {
|
|
58
|
+
color: #fff;
|
|
59
|
+
font-size: 12px;
|
|
60
|
+
z-index: 10;
|
|
61
|
+
background: #6596ff;
|
|
62
|
+
display: inline-block;
|
|
63
|
+
position: absolute;
|
|
64
|
+
right: 32px;
|
|
65
|
+
padding: 4px;
|
|
66
|
+
border-bottom-left-radius: 3px;
|
|
67
|
+
border-bottom-right-radius: 3px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.hljs-keyword {
|
|
71
|
+
color: #ff65ec;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.codegrid {
|
|
75
|
+
display: grid;
|
|
76
|
+
grid-template-columns: 50px auto;
|
|
77
|
+
background: ${this.goBright ? '#ffffff' : '#191919'};
|
|
78
|
+
border-top: 1px solid ${this.goBright ? '#ffffff' : '#333333'};
|
|
79
|
+
box-shadow: 0px 0px 5px ${this.goBright ? 'rgba(0,0,0,0.1)' : 'rgba(0,0,0,0.5)'};
|
|
80
|
+
border-radius: 3px;
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.lineNumbers {
|
|
85
|
+
background: ${this.goBright ? '#fafafa' : '#151515'};
|
|
86
|
+
color: ${this.goBright ? '#acacac' : '#666666'};
|
|
87
|
+
padding: 30px 16px 0px 0px;
|
|
88
|
+
text-align: right;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.lineCounter:last-child {
|
|
92
|
+
opacity: 50%;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
pre {
|
|
96
|
+
overflow-x: auto;
|
|
97
|
+
margin: 0px;
|
|
98
|
+
padding: 30px 40px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
code {
|
|
102
|
+
font-weight: ${this.goBright ? '400' : '300'};
|
|
103
|
+
padding: 0px;
|
|
104
|
+
margin: 0px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
code,
|
|
108
|
+
code *,
|
|
109
|
+
.lineNumbers {
|
|
110
|
+
line-height: 1.4em;
|
|
111
|
+
font-weight: 200;
|
|
112
|
+
font-family: 'Intel One Mono', 'monospace';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.hljs-string {
|
|
116
|
+
color: #ffa465;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.hljs-built_in {
|
|
120
|
+
color: #65ff6a;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.hljs-function {
|
|
124
|
+
color: ${this.goBright ? '#2765DF': '#6596ff' };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.hljs-params {
|
|
128
|
+
color: ${this.goBright ? '#3DB420' : '#65d5ff' };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.hljs-comment {
|
|
132
|
+
color: ${this.goBright ? '#EF9300' : '#ffd765' };
|
|
133
|
+
}
|
|
134
|
+
</style>
|
|
135
|
+
<div class="mainbox">
|
|
136
|
+
<div class="languageLabel">${this.progLang}</div>
|
|
137
|
+
<div class="codegrid">
|
|
138
|
+
<div class="lineNumbers">
|
|
139
|
+
${(() => {
|
|
140
|
+
let lineCounter = 0;
|
|
141
|
+
return this.codeToDisplay.split('\n').map(lineArg => {
|
|
142
|
+
lineCounter++;
|
|
143
|
+
return html`<div class="lineCounter">${lineCounter}</div>`;
|
|
144
|
+
})
|
|
145
|
+
})()}
|
|
146
|
+
</div>
|
|
147
|
+
<pre><code></code></pre>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@state()
|
|
154
|
+
private codeToDisplayStore = '';
|
|
155
|
+
|
|
156
|
+
public async updated(_changedProperties) {
|
|
157
|
+
super.updated(_changedProperties);
|
|
158
|
+
console.log('highlighting now');
|
|
159
|
+
console.log(this.childNodes);
|
|
160
|
+
const slottedCodeNodes: Text[] = [];
|
|
161
|
+
this.childNodes.forEach((childNode) => {
|
|
162
|
+
if (childNode.nodeName === '#text') {
|
|
163
|
+
slottedCodeNodes.push(childNode as Text);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
if (this.codeToDisplay && this.codeToDisplay !== this.codeToDisplayStore) {
|
|
167
|
+
this.codeToDisplayStore = smartstring.indent.normalize(this.codeToDisplay).trimStart();
|
|
168
|
+
}
|
|
169
|
+
if (slottedCodeNodes[0] && slottedCodeNodes[0].wholeText && !this.codeToDisplay) {
|
|
170
|
+
this.codeToDisplayStore = smartstring.indent.normalize(slottedCodeNodes[0].wholeText).trimStart();
|
|
171
|
+
this.codeToDisplay = this.codeToDisplayStore;
|
|
172
|
+
}
|
|
173
|
+
await domtools.plugins.smartdelay.delayFor(0);
|
|
174
|
+
const localCodeNode = this.shadowRoot.querySelector('code');
|
|
175
|
+
const html = hlight.highlight(this.codeToDisplayStore, {language: this.progLang, ignoreIllegals: true});
|
|
176
|
+
localCodeNode.innerHTML = html.value;
|
|
177
|
+
}
|
|
178
|
+
}
|