@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,125 @@
|
|
|
1
|
+
import {customElement, DeesElement, type TemplateResult, property, html, type CSSResult,} from '@design.estate/dees-element';
|
|
2
|
+
import * as domtools from '@design.estate/dees-domtools';
|
|
3
|
+
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'dees-input-radio': DeesInputRadio;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@customElement('dees-input-radio')
|
|
11
|
+
export class DeesInputRadio extends DeesElement {
|
|
12
|
+
public static demo = () => html`<dees-input-radio></dees-input-radio>`;
|
|
13
|
+
|
|
14
|
+
// INSTANCE
|
|
15
|
+
public changeSubject = new domtools.rxjs.Subject();
|
|
16
|
+
|
|
17
|
+
@property()
|
|
18
|
+
public key: string;
|
|
19
|
+
|
|
20
|
+
@property()
|
|
21
|
+
public label: string = 'Label';
|
|
22
|
+
|
|
23
|
+
@property()
|
|
24
|
+
public value: boolean = false;
|
|
25
|
+
|
|
26
|
+
@property({
|
|
27
|
+
type: Boolean,
|
|
28
|
+
})
|
|
29
|
+
public required: boolean = false;
|
|
30
|
+
|
|
31
|
+
@property({
|
|
32
|
+
type: Boolean
|
|
33
|
+
})
|
|
34
|
+
public disabled: boolean = false;
|
|
35
|
+
|
|
36
|
+
constructor() {
|
|
37
|
+
super();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public render(): TemplateResult {
|
|
41
|
+
return html `
|
|
42
|
+
<style>
|
|
43
|
+
* {
|
|
44
|
+
box-sizing: border-box;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:host {
|
|
48
|
+
display: block;
|
|
49
|
+
position: relative;
|
|
50
|
+
margin: 20px 0px;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.maincontainer {
|
|
55
|
+
transition: all 0.3s;
|
|
56
|
+
display: grid;
|
|
57
|
+
grid-template-columns: 25px auto;
|
|
58
|
+
padding: 5px 0px;
|
|
59
|
+
color: #ccc;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.maincontainer:hover {
|
|
63
|
+
color: #fff;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.label {
|
|
67
|
+
margin-left: 15px;
|
|
68
|
+
line-height: 25px;
|
|
69
|
+
font-size: 14px;
|
|
70
|
+
font-weight: normal;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
input:focus {
|
|
75
|
+
outline: none;
|
|
76
|
+
border-bottom: 1px solid #e4002b;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.checkbox {
|
|
80
|
+
transition: all 0.3s;
|
|
81
|
+
box-sizing: border-box;
|
|
82
|
+
border-radius: 20px;
|
|
83
|
+
border: 1px solid #999;
|
|
84
|
+
height: 24px;
|
|
85
|
+
width: 24px;
|
|
86
|
+
display: inline-block;
|
|
87
|
+
background: #222;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.checkbox.selected {
|
|
91
|
+
background: #039BE5;
|
|
92
|
+
border: 1px solid #039BE5;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.maincontainer:hover .checkbox.selected {
|
|
96
|
+
background: #03A9F4;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.innercircle {
|
|
100
|
+
transition: all 0.3s;
|
|
101
|
+
margin: 6px 0px 0px 6px;
|
|
102
|
+
background: #222;
|
|
103
|
+
width: 10px;
|
|
104
|
+
height: 10px;
|
|
105
|
+
border-radius: 10px;
|
|
106
|
+
}
|
|
107
|
+
</style>
|
|
108
|
+
<div class="maincontainer" @click="${this.toggleSelected}">
|
|
109
|
+
<div class="checkbox ${this.value ? 'selected' : ''}">
|
|
110
|
+
${this.value ? html`<div class="innercircle"></div>`: html``}
|
|
111
|
+
</div>
|
|
112
|
+
<div class="label">${this.label}</div>
|
|
113
|
+
</div>
|
|
114
|
+
`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
public async toggleSelected () {
|
|
118
|
+
this.value = !this.value;
|
|
119
|
+
this.dispatchEvent(new CustomEvent('newValue', {
|
|
120
|
+
detail: this.value,
|
|
121
|
+
bubbles: true
|
|
122
|
+
}));
|
|
123
|
+
this.changeSubject.next(this);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import {customElement, DeesElement, type TemplateResult, property, html, cssManager, type CSSResult,} from '@design.estate/dees-element';
|
|
2
|
+
import * as domtools from '@design.estate/dees-domtools';
|
|
3
|
+
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'dees-input-text': DeesInputText;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@customElement('dees-input-text')
|
|
11
|
+
export class DeesInputText extends DeesElement {
|
|
12
|
+
public static demo = () => html`
|
|
13
|
+
<dees-input-text .label=${'this is a label'} .value=${'test'}></dees-input-text>
|
|
14
|
+
<dees-input-text .isPasswordBool=${true}></dees-input-text>
|
|
15
|
+
`;
|
|
16
|
+
|
|
17
|
+
// INSTANCE
|
|
18
|
+
public changeSubject = new domtools.rxjs.Subject<DeesInputText>();
|
|
19
|
+
public valueChangeSubject = new domtools.rxjs.Subject<string>();
|
|
20
|
+
|
|
21
|
+
@property({
|
|
22
|
+
type: String
|
|
23
|
+
})
|
|
24
|
+
public label: string;
|
|
25
|
+
|
|
26
|
+
@property({
|
|
27
|
+
type: String
|
|
28
|
+
})
|
|
29
|
+
public key: string;
|
|
30
|
+
|
|
31
|
+
@property({
|
|
32
|
+
type: String,
|
|
33
|
+
reflect: true,
|
|
34
|
+
})
|
|
35
|
+
public value: string = '';
|
|
36
|
+
|
|
37
|
+
@property({
|
|
38
|
+
type: Boolean
|
|
39
|
+
})
|
|
40
|
+
public required: boolean = false;
|
|
41
|
+
|
|
42
|
+
@property({
|
|
43
|
+
type: Boolean
|
|
44
|
+
})
|
|
45
|
+
public disabled: boolean = false;
|
|
46
|
+
|
|
47
|
+
@property({
|
|
48
|
+
type: Boolean,
|
|
49
|
+
reflect: true,
|
|
50
|
+
})
|
|
51
|
+
public isPasswordBool = false;
|
|
52
|
+
|
|
53
|
+
@property({
|
|
54
|
+
type: Boolean,
|
|
55
|
+
reflect: true,
|
|
56
|
+
})
|
|
57
|
+
public showPasswordBool = false;
|
|
58
|
+
|
|
59
|
+
public render(): TemplateResult {
|
|
60
|
+
return html `
|
|
61
|
+
<style>
|
|
62
|
+
* {
|
|
63
|
+
box-sizing: border-box;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
:host {
|
|
67
|
+
position: relative;
|
|
68
|
+
display: grid;
|
|
69
|
+
margin: 10px 0px;
|
|
70
|
+
margin-bottom: 24px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.maincontainer {
|
|
74
|
+
color: ${this.goBright ? '#333' : '#ccc'};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.label {
|
|
78
|
+
font-size: 14px;
|
|
79
|
+
margin-bottom: 5px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
input {
|
|
83
|
+
margin-top: 5px;
|
|
84
|
+
background: ${this.goBright ? '#fafafa' : '#222'};
|
|
85
|
+
border-top: ${this.goBright ? '1px solid #CCC' : '1px solid #444'};
|
|
86
|
+
border-bottom: ${this.goBright ? '1px solid #CCC' : '1px solid #333'};
|
|
87
|
+
border-right: ${this.goBright ? '1px solid #CCC' : 'none'};
|
|
88
|
+
border-left: ${this.goBright ? '1px solid #CCC' : 'none'};
|
|
89
|
+
padding-left:10px;
|
|
90
|
+
padding-right: 10px;
|
|
91
|
+
border-radius: 2px;
|
|
92
|
+
width: 100%;
|
|
93
|
+
line-height: 48px;
|
|
94
|
+
transition: all 0.2s;
|
|
95
|
+
outline: none;
|
|
96
|
+
font-size: 16px;
|
|
97
|
+
font-family: ${this.isPasswordBool ? 'monospace': 'Inter'};
|
|
98
|
+
letter-spacing: ${this.isPasswordBool ? '1px': 'normal'};
|
|
99
|
+
color: ${this.goBright ? '#333' : '#ccc'};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
input:disabled {
|
|
103
|
+
background: ${cssManager.bdTheme('#ffffff00', '#11111100')};
|
|
104
|
+
border: 1px dashed ${cssManager.bdTheme('#666666', '#666666')};
|
|
105
|
+
color: #9b9b9e;
|
|
106
|
+
cursor: default;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
input:focus {
|
|
110
|
+
outline: none;
|
|
111
|
+
border-bottom: 1px solid #e4002b;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.showPassword {
|
|
115
|
+
position: absolute;
|
|
116
|
+
bottom: 8px;
|
|
117
|
+
right: 10px;
|
|
118
|
+
border: 1px dashed #444;
|
|
119
|
+
border-radius: 7px;
|
|
120
|
+
padding: 8px 0px;
|
|
121
|
+
width: 40px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.showPassword:hover {
|
|
125
|
+
cursor: pointer;
|
|
126
|
+
background: #333;
|
|
127
|
+
}
|
|
128
|
+
</style>
|
|
129
|
+
<div class="maincontainer">
|
|
130
|
+
${this.label ? html`<div class="label">${this.label}</div>` : html``}
|
|
131
|
+
<input type="${this.isPasswordBool && !this.showPasswordBool ? 'password' : 'text'}" value=${this.value} @input="${this.updateValue}" .disabled=${this.disabled} />
|
|
132
|
+
${this.isPasswordBool ? html`
|
|
133
|
+
<div class="showPassword" @click=${this.togglePasswordView}>
|
|
134
|
+
<dees-icon .iconFA=${this.showPasswordBool ? 'eye' : 'eyeSlash'}></dees-icon>
|
|
135
|
+
</div>
|
|
136
|
+
` : html``}
|
|
137
|
+
</div>
|
|
138
|
+
`;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
public async updateValue(eventArg: Event) {
|
|
142
|
+
const target: any = eventArg.target;
|
|
143
|
+
this.value = target.value;
|
|
144
|
+
this.changeSubject.next(this);
|
|
145
|
+
this.valueChangeSubject.next(this.value);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public async freeze() {
|
|
149
|
+
this.disabled = true;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
public async unfreeze() {
|
|
153
|
+
this.disabled = false;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
public async togglePasswordView () {
|
|
157
|
+
const domtools = await this.domtoolsPromise;
|
|
158
|
+
this.showPasswordBool = !this.showPasswordBool;
|
|
159
|
+
console.log(`this.showPasswordBool is: ${this.showPasswordBool}`)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
public async focus() {
|
|
163
|
+
const textInput = this.shadowRoot.querySelector('input');
|
|
164
|
+
textInput.focus();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
public async blur() {
|
|
168
|
+
const textInput = this.shadowRoot.querySelector('input');
|
|
169
|
+
textInput.blur();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import {
|
|
3
|
+
cssManager,
|
|
4
|
+
css,
|
|
5
|
+
type CSSResult,
|
|
6
|
+
customElement,
|
|
7
|
+
DeesElement,
|
|
8
|
+
domtools,
|
|
9
|
+
html,
|
|
10
|
+
property,
|
|
11
|
+
} from '@design.estate/dees-element';
|
|
12
|
+
import { DeesWindowLayer } from './dees-windowlayer.js';
|
|
13
|
+
|
|
14
|
+
@customElement('dees-mobilenavigation')
|
|
15
|
+
export class DeesMobilenavigation extends DeesElement {
|
|
16
|
+
// STATIC
|
|
17
|
+
public static demo = () => html`
|
|
18
|
+
<dees-mobilenavigation
|
|
19
|
+
.menuItems="${[
|
|
20
|
+
{
|
|
21
|
+
name: 'hello1',
|
|
22
|
+
action: async () => {},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'hello2',
|
|
26
|
+
action: async () => {},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'hello3',
|
|
30
|
+
action: async () => {},
|
|
31
|
+
},
|
|
32
|
+
]}"
|
|
33
|
+
></dees-mobilenavigation>
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
private static singletonRef: DeesMobilenavigation;
|
|
37
|
+
public static async createAndInit(menuItemsArg: plugins.tsclass.website.IMenuItem[]) {
|
|
38
|
+
if (!this.singletonRef) {
|
|
39
|
+
this.singletonRef = new DeesMobilenavigation();
|
|
40
|
+
document.body.append(this.singletonRef);
|
|
41
|
+
await this.singletonRef.init();
|
|
42
|
+
}
|
|
43
|
+
this.singletonRef.menuItems = menuItemsArg;
|
|
44
|
+
await this.singletonRef.readyDeferred.promise;
|
|
45
|
+
this.singletonRef.show();
|
|
46
|
+
return this.singletonRef;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// INSTANCE
|
|
50
|
+
@property({
|
|
51
|
+
type: Array,
|
|
52
|
+
})
|
|
53
|
+
public heading: string = `MENU`;
|
|
54
|
+
|
|
55
|
+
@property({
|
|
56
|
+
type: Array,
|
|
57
|
+
})
|
|
58
|
+
public menuItems: plugins.tsclass.website.IMenuItem[] = [];
|
|
59
|
+
|
|
60
|
+
readyDeferred: plugins.smartpromise.Deferred<any> = domtools.plugins.smartpromise.defer();
|
|
61
|
+
|
|
62
|
+
constructor() {
|
|
63
|
+
super();
|
|
64
|
+
/* this.init().then(() => {
|
|
65
|
+
this.show();
|
|
66
|
+
}); */
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* inits the mobile navigation
|
|
71
|
+
*/
|
|
72
|
+
public async init() {
|
|
73
|
+
await this.updateComplete;
|
|
74
|
+
this.readyDeferred.resolve();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public static styles = [
|
|
78
|
+
cssManager.defaultStyles,
|
|
79
|
+
css`
|
|
80
|
+
:host {
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.main {
|
|
84
|
+
transition: all 0.3s cubic-bezier(0.22, 1, 0.36, 1);
|
|
85
|
+
will-change: transform;
|
|
86
|
+
position: fixed;
|
|
87
|
+
height: 100vh;
|
|
88
|
+
min-width: 280px;
|
|
89
|
+
transform: translateX(200px);
|
|
90
|
+
color: ${cssManager.bdTheme('#333', '#fff')};
|
|
91
|
+
z-index: 250;
|
|
92
|
+
opacity: 0;
|
|
93
|
+
padding: 16px 32px;
|
|
94
|
+
right: 0px;
|
|
95
|
+
top: 0px;
|
|
96
|
+
bottom: 0px;
|
|
97
|
+
background: ${cssManager.bdTheme('#eeeeeb', '#000')};;
|
|
98
|
+
border-left: 1px dashed #444;
|
|
99
|
+
pointer-events: none;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.main.show {
|
|
103
|
+
pointer-events: all;
|
|
104
|
+
transform: translateX(0px);
|
|
105
|
+
opacity: 1;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.menuItem {
|
|
109
|
+
text-align: left;
|
|
110
|
+
padding: 8px;
|
|
111
|
+
margin-left: -8px;
|
|
112
|
+
margin-right: -8px;
|
|
113
|
+
cursor: pointer;
|
|
114
|
+
border-radius: 3px;
|
|
115
|
+
}
|
|
116
|
+
.menuItem:hover {
|
|
117
|
+
background: ${cssManager.bdTheme('#CCC', '#333')};;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.heading {
|
|
121
|
+
text-align: left;
|
|
122
|
+
font-size: 24px;
|
|
123
|
+
padding: 8px 0px;
|
|
124
|
+
font-family: 'Mona Sans', 'Inter', sans-serif;
|
|
125
|
+
font-weight: 300;
|
|
126
|
+
border-bottom: 1px dashed #444;
|
|
127
|
+
margin-top: 16px;
|
|
128
|
+
margin-bottom: 16px;
|
|
129
|
+
}
|
|
130
|
+
`,
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
public render() {
|
|
134
|
+
return html`
|
|
135
|
+
<div class="main">
|
|
136
|
+
<div class="heading">${this.heading}</div>
|
|
137
|
+
${this.menuItems.map((menuItem) => {
|
|
138
|
+
return html`
|
|
139
|
+
<div
|
|
140
|
+
class="menuItem"
|
|
141
|
+
@click="${() => {
|
|
142
|
+
this.hide();
|
|
143
|
+
menuItem.action();
|
|
144
|
+
}}"
|
|
145
|
+
>
|
|
146
|
+
${menuItem.name}
|
|
147
|
+
</div>
|
|
148
|
+
`;
|
|
149
|
+
})}
|
|
150
|
+
</div>
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private windowLayer: DeesWindowLayer;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* inits the show
|
|
158
|
+
*/
|
|
159
|
+
public async show() {
|
|
160
|
+
const domtools = await this.domtoolsPromise;
|
|
161
|
+
const main = this.shadowRoot.querySelector('.main');
|
|
162
|
+
if (!this.windowLayer) {
|
|
163
|
+
this.windowLayer = new DeesWindowLayer();
|
|
164
|
+
this.windowLayer.addEventListener('click', () => {
|
|
165
|
+
this.hide();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
document.body.append(this.windowLayer);
|
|
169
|
+
await domtools.convenience.smartdelay.delayFor(0);
|
|
170
|
+
this.windowLayer.show();
|
|
171
|
+
|
|
172
|
+
await domtools.convenience.smartdelay.delayFor(0);
|
|
173
|
+
main.classList.add('show');
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* inits the hide function
|
|
178
|
+
*/
|
|
179
|
+
public async hide() {
|
|
180
|
+
const domtools = await this.domtoolsPromise;
|
|
181
|
+
const main = this.shadowRoot.querySelector('.main');
|
|
182
|
+
main.classList.remove('show');
|
|
183
|
+
this.windowLayer.hide();
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async disconnectedCallback() {
|
|
187
|
+
document.body.removeChild(this.windowLayer);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { DeesElement, property, html, customElement, domtools, type TemplateResult, type CSSResult, } from '@design.estate/dees-element';
|
|
2
|
+
|
|
3
|
+
import { Deferred } from '@push.rocks/smartpromise';
|
|
4
|
+
|
|
5
|
+
import type pdfjsTypes from 'pdfjs-dist';
|
|
6
|
+
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
'dees-pdf': DeesPdf;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@customElement('dees-pdf')
|
|
14
|
+
export class DeesPdf extends DeesElement {
|
|
15
|
+
// DEMO
|
|
16
|
+
public static demo = () => html` <dees-pdf></dees-pdf> `;
|
|
17
|
+
|
|
18
|
+
// INSTANCE
|
|
19
|
+
|
|
20
|
+
@property()
|
|
21
|
+
public pdfUrl: string =
|
|
22
|
+
'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf';
|
|
23
|
+
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
|
|
27
|
+
// you have access to all kinds of things through this.
|
|
28
|
+
// this.setAttribute('gotIt','true');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public render(): TemplateResult {
|
|
32
|
+
return html`
|
|
33
|
+
<style>
|
|
34
|
+
:host {
|
|
35
|
+
font-family: 'Mona Sans', 'Inter', sans-serif;
|
|
36
|
+
display: block;
|
|
37
|
+
box-sizing: border-box;
|
|
38
|
+
max-width: 800px;
|
|
39
|
+
}
|
|
40
|
+
:host([hidden]) {
|
|
41
|
+
display: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#pdfcanvas {
|
|
45
|
+
box-shadow: 0px 0px 5px #ccc;
|
|
46
|
+
width: 100%;
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
49
|
+
<canvas id="pdfcanvas" .height=${0} .width=${0}></canvas>
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public static pdfJsReady: Promise<any>;
|
|
54
|
+
public static pdfjsLib: typeof pdfjsTypes;
|
|
55
|
+
public async connectedCallback() {
|
|
56
|
+
super.connectedCallback();
|
|
57
|
+
if (!DeesPdf.pdfJsReady) {
|
|
58
|
+
const pdfJsReadyDeferred = domtools.plugins.smartpromise.defer();
|
|
59
|
+
DeesPdf.pdfJsReady = pdfJsReadyDeferred.promise;
|
|
60
|
+
const loadDeferred = domtools.plugins.smartpromise.defer();
|
|
61
|
+
const script = document.createElement('script');
|
|
62
|
+
script.addEventListener('load', () => {
|
|
63
|
+
console.log('pdf.js loaded!');
|
|
64
|
+
loadDeferred.resolve();
|
|
65
|
+
});
|
|
66
|
+
script.src = 'https:////mozilla.github.io/pdf.js/build/pdf.js';
|
|
67
|
+
document.getElementsByTagName('head')[0].appendChild(script);
|
|
68
|
+
// The workerSrc property shall be specified.
|
|
69
|
+
await loadDeferred.promise;
|
|
70
|
+
DeesPdf.pdfjsLib = window['pdfjs-dist/build/pdf'];
|
|
71
|
+
DeesPdf.pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
|
|
72
|
+
pdfJsReadyDeferred.resolve();
|
|
73
|
+
}
|
|
74
|
+
await DeesPdf.pdfJsReady;
|
|
75
|
+
this.displayContent();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public async displayContent() {
|
|
79
|
+
await DeesPdf.pdfJsReady;
|
|
80
|
+
|
|
81
|
+
// Asynchronous download of PDF
|
|
82
|
+
const loadingTask = DeesPdf.pdfjsLib.getDocument(this.pdfUrl);
|
|
83
|
+
loadingTask.promise.then(
|
|
84
|
+
(pdf) => {
|
|
85
|
+
console.log('PDF loaded');
|
|
86
|
+
|
|
87
|
+
// Fetch the first page
|
|
88
|
+
const pageNumber = 1;
|
|
89
|
+
pdf.getPage(pageNumber).then((page) => {
|
|
90
|
+
console.log('Page loaded');
|
|
91
|
+
|
|
92
|
+
const scale = 10;
|
|
93
|
+
const viewport = page.getViewport({ scale: scale });
|
|
94
|
+
|
|
95
|
+
// Prepare canvas using PDF page dimensions
|
|
96
|
+
const canvas: any = this.shadowRoot.querySelector('#pdfcanvas');
|
|
97
|
+
const context = canvas.getContext('2d');
|
|
98
|
+
canvas.height = viewport.height;
|
|
99
|
+
canvas.width = viewport.width;
|
|
100
|
+
|
|
101
|
+
// Render PDF page into canvas context
|
|
102
|
+
const renderContext = {
|
|
103
|
+
canvasContext: context,
|
|
104
|
+
viewport: viewport,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const renderTask = page.render(renderContext);
|
|
108
|
+
renderTask.promise.then(function () {
|
|
109
|
+
console.log('Page rendered');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
},
|
|
113
|
+
(reason) => {
|
|
114
|
+
// PDF loading error
|
|
115
|
+
console.error(reason);
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|