@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.
Files changed (102) hide show
  1. package/dist_bundle/bundle.js +2704 -0
  2. package/dist_bundle/bundle.js.map +7 -0
  3. package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
  4. package/dist_ts_web/00_commitinfo_data.js +9 -0
  5. package/dist_ts_web/elements/dees-button-exit.d.ts +7 -0
  6. package/dist_ts_web/elements/dees-button-exit.js +52 -0
  7. package/dist_ts_web/elements/dees-button.d.ts +20 -0
  8. package/dist_ts_web/elements/dees-button.js +215 -0
  9. package/dist_ts_web/elements/dees-chips.d.ts +18 -0
  10. package/dist_ts_web/elements/dees-chips.js +124 -0
  11. package/dist_ts_web/elements/dees-contextmenu.d.ts +18 -0
  12. package/dist_ts_web/elements/dees-contextmenu.js +173 -0
  13. package/dist_ts_web/elements/dees-dataview-codebox.d.ts +15 -0
  14. package/dist_ts_web/elements/dees-dataview-codebox.js +177 -0
  15. package/dist_ts_web/elements/dees-dataview-statusobject.d.ts +14 -0
  16. package/dist_ts_web/elements/dees-dataview-statusobject.js +163 -0
  17. package/dist_ts_web/elements/dees-form-submit.d.ts +17 -0
  18. package/dist_ts_web/elements/dees-form-submit.js +68 -0
  19. package/dist_ts_web/elements/dees-form.d.ts +29 -0
  20. package/dist_ts_web/elements/dees-form.js +173 -0
  21. package/dist_ts_web/elements/dees-icon.d.ts +76 -0
  22. package/dist_ts_web/elements/dees-icon.js +153 -0
  23. package/dist_ts_web/elements/dees-input-checkbox.d.ts +18 -0
  24. package/dist_ts_web/elements/dees-input-checkbox.js +178 -0
  25. package/dist_ts_web/elements/dees-input-dropdown.d.ts +30 -0
  26. package/dist_ts_web/elements/dees-input-dropdown.js +185 -0
  27. package/dist_ts_web/elements/dees-input-fileupload.d.ts +24 -0
  28. package/dist_ts_web/elements/dees-input-fileupload.js +196 -0
  29. package/dist_ts_web/elements/dees-input-quantityselector.d.ts +19 -0
  30. package/dist_ts_web/elements/dees-input-quantityselector.js +122 -0
  31. package/dist_ts_web/elements/dees-input-radio.d.ts +19 -0
  32. package/dist_ts_web/elements/dees-input-radio.js +136 -0
  33. package/dist_ts_web/elements/dees-input-text.d.ts +26 -0
  34. package/dist_ts_web/elements/dees-input-text.js +183 -0
  35. package/dist_ts_web/elements/dees-mobilenavigation.d.ts +27 -0
  36. package/dist_ts_web/elements/dees-mobilenavigation.js +185 -0
  37. package/dist_ts_web/elements/dees-pdf.d.ts +17 -0
  38. package/dist_ts_web/elements/dees-pdf.js +108 -0
  39. package/dist_ts_web/elements/dees-preview.d.ts +1 -0
  40. package/dist_ts_web/elements/dees-preview.js +2 -0
  41. package/dist_ts_web/elements/dees-search.d.ts +1 -0
  42. package/dist_ts_web/elements/dees-search.js +2 -0
  43. package/dist_ts_web/elements/dees-searchbox.d.ts +1 -0
  44. package/dist_ts_web/elements/dees-searchbox.js +2 -0
  45. package/dist_ts_web/elements/dees-speechbubble.d.ts +18 -0
  46. package/dist_ts_web/elements/dees-speechbubble.js +153 -0
  47. package/dist_ts_web/elements/dees-spinner.d.ts +15 -0
  48. package/dist_ts_web/elements/dees-spinner.js +130 -0
  49. package/dist_ts_web/elements/dees-stepper.d.ts +29 -0
  50. package/dist_ts_web/elements/dees-stepper.js +231 -0
  51. package/dist_ts_web/elements/dees-table.d.ts +28 -0
  52. package/dist_ts_web/elements/dees-table.js +348 -0
  53. package/dist_ts_web/elements/dees-toast.d.ts +10 -0
  54. package/dist_ts_web/elements/dees-toast.js +29 -0
  55. package/dist_ts_web/elements/dees-tooltip.d.ts +1 -0
  56. package/dist_ts_web/elements/dees-tooltip.js +2 -0
  57. package/dist_ts_web/elements/dees-updater.d.ts +16 -0
  58. package/dist_ts_web/elements/dees-updater.js +91 -0
  59. package/dist_ts_web/elements/dees-windowlayer.d.ts +17 -0
  60. package/dist_ts_web/elements/dees-windowlayer.js +85 -0
  61. package/dist_ts_web/elements/index.d.ts +24 -0
  62. package/dist_ts_web/elements/index.js +25 -0
  63. package/dist_ts_web/elements/plugins.d.ts +4 -0
  64. package/dist_ts_web/elements/plugins.js +7 -0
  65. package/dist_ts_web/index.d.ts +2 -0
  66. package/dist_ts_web/index.js +3 -0
  67. package/license +22 -0
  68. package/npmextra.json +18 -0
  69. package/package.json +55 -0
  70. package/readme.md +39 -0
  71. package/ts_web/00_commitinfo_data.ts +8 -0
  72. package/ts_web/elements/dees-button-exit.ts +48 -0
  73. package/ts_web/elements/dees-button.ts +218 -0
  74. package/ts_web/elements/dees-chips.ts +124 -0
  75. package/ts_web/elements/dees-contextmenu.ts +181 -0
  76. package/ts_web/elements/dees-dataview-codebox.ts +178 -0
  77. package/ts_web/elements/dees-dataview-statusobject.ts +170 -0
  78. package/ts_web/elements/dees-form-submit.ts +70 -0
  79. package/ts_web/elements/dees-form.ts +191 -0
  80. package/ts_web/elements/dees-icon.ts +204 -0
  81. package/ts_web/elements/dees-input-checkbox.ts +175 -0
  82. package/ts_web/elements/dees-input-dropdown.ts +173 -0
  83. package/ts_web/elements/dees-input-fileupload.ts +195 -0
  84. package/ts_web/elements/dees-input-quantityselector.ts +113 -0
  85. package/ts_web/elements/dees-input-radio.ts +125 -0
  86. package/ts_web/elements/dees-input-text.ts +171 -0
  87. package/ts_web/elements/dees-mobilenavigation.ts +189 -0
  88. package/ts_web/elements/dees-pdf.ts +119 -0
  89. package/ts_web/elements/dees-preview.ts +0 -0
  90. package/ts_web/elements/dees-search.ts +0 -0
  91. package/ts_web/elements/dees-searchbox.ts +0 -0
  92. package/ts_web/elements/dees-speechbubble.ts +157 -0
  93. package/ts_web/elements/dees-spinner.ts +131 -0
  94. package/ts_web/elements/dees-stepper.ts +262 -0
  95. package/ts_web/elements/dees-table.ts +360 -0
  96. package/ts_web/elements/dees-toast.ts +26 -0
  97. package/ts_web/elements/dees-tooltip.ts +1 -0
  98. package/ts_web/elements/dees-updater.ts +90 -0
  99. package/ts_web/elements/dees-windowlayer.ts +85 -0
  100. package/ts_web/elements/index.ts +24 -0
  101. package/ts_web/elements/plugins.ts +13 -0
  102. package/ts_web/index.ts +2 -0
@@ -0,0 +1,175 @@
1
+ import {
2
+ customElement,
3
+ DeesElement,
4
+ type TemplateResult,
5
+ property,
6
+ html,
7
+ css,
8
+ cssManager,
9
+ type CSSResult,
10
+ } from '@design.estate/dees-element';
11
+ import * as domtools from '@design.estate/dees-domtools';
12
+
13
+ declare global {
14
+ interface HTMLElementTagNameMap {
15
+ 'dees-input-checkbox': DeesInputCheckbox;
16
+ }
17
+ }
18
+
19
+ @customElement('dees-input-checkbox')
20
+ export class DeesInputCheckbox extends DeesElement {
21
+ // STATIC
22
+ public static demo = () => html`<dees-input-checkbox></dees-input-checkbox>`;
23
+
24
+ // INSTANCE
25
+ public changeSubject = new domtools.rxjs.Subject();
26
+
27
+ @property({
28
+ type: String,
29
+ })
30
+ public key: string;
31
+
32
+ @property({
33
+ type: String,
34
+ })
35
+ public label: string = 'Label';
36
+
37
+ @property({
38
+ type: Boolean,
39
+ })
40
+ public value: boolean = false;
41
+
42
+ @property({
43
+ type: Boolean,
44
+ })
45
+ public required: boolean = false;
46
+
47
+ @property({
48
+ type: Boolean
49
+ })
50
+ public disabled: boolean = false;
51
+
52
+ public render(): TemplateResult {
53
+ return html`
54
+ ${domtools.elementBasic.styles}
55
+ <style>
56
+ * {
57
+ box-sizing: border-box;
58
+ }
59
+
60
+ :host {
61
+ display: block;
62
+ position: relative;
63
+ margin: 20px 0px;
64
+ cursor: pointer;
65
+ }
66
+
67
+ .maincontainer {
68
+ display: grid;
69
+ grid-template-columns: 25px auto;
70
+ padding: 5px 0px;
71
+ color: ${this.goBright ? '#333' : '#ccc'};
72
+ }
73
+
74
+ .maincontainer:hover {
75
+ ${this.goBright ? '#000' : '#ccc'};
76
+ }
77
+
78
+ .label {
79
+ margin-left: 15px;
80
+ line-height: 25px;
81
+ font-size: 14px;
82
+ font-weight: normal;
83
+ }
84
+
85
+ input:focus {
86
+ outline: none;
87
+ border-bottom: 1px solid #e4002b;
88
+ }
89
+
90
+ .checkbox {
91
+ transition: all 0.1s;
92
+ box-sizing: border-box;
93
+ border: 1px solid ${this.goBright ? '#CCC' : '#999'};
94
+ border-radius: 2px;
95
+ height: 24px;
96
+ width: 24px;
97
+ display: inline-block;
98
+ background: ${this.goBright ? '#fafafa' : '#222'};
99
+ }
100
+
101
+ .checkbox.selected {
102
+ background: #039BE5;
103
+ border: 1px solid #039BE5;
104
+ }
105
+
106
+ .checkbox.disabled {
107
+ background: none;
108
+ border: 1px dashed ${cssManager.bdTheme('#666666', '#666666')};
109
+ }
110
+
111
+ .checkbox .checkmark {
112
+ display: inline-block;
113
+ width: 22px;
114
+ height: 22px;
115
+ -ms-transform: rotate(45deg); /* IE 9 */
116
+ -webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */
117
+ transform: rotate(45deg);
118
+ }
119
+
120
+ .checkbox .checkmark_stem {
121
+ position: absolute;
122
+ width: 3px;
123
+ height: 9px;
124
+ background-color: #fff;
125
+ left: 11px;
126
+ top: 6px;
127
+ }
128
+
129
+ .checkbox .checkmark_kick {
130
+ position: absolute;
131
+ width: 3px;
132
+ height: 3px;
133
+ background-color: #fff;
134
+ left: 8px;
135
+ top: 12px;
136
+ }
137
+
138
+ .checkbox.disabled .checkmark_stem, .checkbox.disabled .checkmark_kick {
139
+ background-color: ${cssManager.bdTheme('#333', '#fff')};
140
+ }
141
+
142
+ img {
143
+ padding: 4px;
144
+ }
145
+ </style>
146
+ <div class="maincontainer" @click="${this.toggleSelected}">
147
+ <div class="checkbox ${this.value ? 'selected' : ''} ${this.disabled ? 'disabled' : ''}">
148
+ ${this.value
149
+ ? html`
150
+ <span class="checkmark">
151
+ <div class="checkmark_stem"></div>
152
+ <div class="checkmark_kick"></div>
153
+ </span>
154
+ `
155
+ : html``}
156
+ </div>
157
+ <div class="label">${this.label}</div>
158
+ </div>
159
+ `;
160
+ }
161
+
162
+ public async toggleSelected() {
163
+ if (this.disabled) {
164
+ return;
165
+ }
166
+ this.value = !this.value;
167
+ this.dispatchEvent(
168
+ new CustomEvent('newValue', {
169
+ detail: this.value,
170
+ bubbles: true,
171
+ })
172
+ );
173
+ this.changeSubject.next(this);
174
+ }
175
+ }
@@ -0,0 +1,173 @@
1
+ import { customElement, DeesElement, type TemplateResult, property, html, css, 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-dropdown': DeesInputDropdown;
7
+ }
8
+ }
9
+
10
+ @customElement('dees-input-dropdown')
11
+ export class DeesInputDropdown extends DeesElement {
12
+ public static demo = () => html`
13
+ <dees-input-dropdown
14
+ .options=${[
15
+ {option: 'option 1', key: 'option1'},
16
+ {option: 'option 2', key: 'option2'},
17
+ {option: 'option 3', key: 'option3'}
18
+ ]}
19
+ ></dees-input-dropdown>
20
+ `
21
+
22
+ // INSTANCE
23
+ public changeSubject = new domtools.rxjs.Subject();
24
+
25
+ @property()
26
+ public label: string = 'Label';
27
+
28
+ @property()
29
+ public key: string;
30
+
31
+ @property()
32
+ public options: {option: string, key: string, payload?: any}[] = [];
33
+
34
+ @property()
35
+ public selectedOption: {option: string, key: string, payload?: any} = {
36
+ key: null,
37
+ option: null,
38
+ payload: null
39
+ };
40
+
41
+ @property({
42
+ type: Boolean
43
+ })
44
+ public required: boolean = false;
45
+
46
+ @property({
47
+ type: Boolean
48
+ })
49
+ public disabled: boolean = false;
50
+
51
+ public static styles = [
52
+ cssManager.defaultStyles,
53
+ css`
54
+ * {
55
+ box-sizing: border-box;
56
+ }
57
+
58
+ :host {
59
+ position: relative;
60
+ display: block;
61
+ height: 40px;
62
+ color: ${cssManager.bdTheme('#222', '#fff')};
63
+ }
64
+
65
+ .maincontainer {
66
+ display: block;
67
+ }
68
+
69
+ .label {
70
+ font-size: 14px;
71
+ margin-bottom: 15px;
72
+ }
73
+
74
+ .selectedBox {
75
+ cursor: pointer;
76
+ position: relative;
77
+ max-width: 420px;
78
+ height: 40px;
79
+ line-height: 40px;
80
+ padding: 0px 8px;
81
+ z-index: 0px;
82
+ background: ${cssManager.bdTheme('#ffffff', '#333333')};
83
+ box-shadow: ${cssManager.bdTheme('0px 1px 4px rgba(0,0,0,0.3)', 'none')};
84
+ border-radius: 3px;
85
+ border-top: 1px solid #CCCCCC00;
86
+ border-bottom: 1px solid #66666600;
87
+ }
88
+
89
+ .selectedBox.show {
90
+ border-top: 1px solid ${cssManager.bdTheme('#ffffff', '#666666')};
91
+ border-bottom: 1px solid ${cssManager.bdTheme('#fafafa', '#222222')};
92
+ }
93
+
94
+ .selectionBox {
95
+ will-change:transform;
96
+ pointer-events: none;
97
+ cursor: pointer;
98
+ transition: all 0.2s ease;
99
+ opacity: 0;
100
+ position: relative;
101
+ background: ${cssManager.bdTheme('#ffffff', '#222222')};
102
+ max-width: 420px;
103
+ box-shadow: 0px 0px 5px rgba(0,0,0,0.2);
104
+ min-height: 40px;
105
+ margin-top: -40px;
106
+ z-index: 100;
107
+ border-radius: 3px;
108
+ padding: 4px;
109
+ transform: scale(0.99,0.99);
110
+ }
111
+
112
+ .selectionBox.show {
113
+ pointer-events: all;
114
+ opacity: 1;
115
+ transform: scale(1,1);
116
+ }
117
+
118
+ .option {
119
+ transition: all 0.1s;
120
+ line-height: 40px;
121
+ padding: 0px 4px;
122
+ border-radius: 3px;
123
+ }
124
+
125
+ .option:hover {
126
+ color: #fff;
127
+ padding-left: 8px;
128
+ background: #0277bd;
129
+ }
130
+ `
131
+ ]
132
+
133
+ public render(): TemplateResult {
134
+ return html`
135
+ ${domtools.elementBasic.styles}
136
+ <style>
137
+
138
+ </style>
139
+ <div class="maincontainer">
140
+ <div class="selectedBox show" @click="${event => {this.toggleSelectionBox();}}">
141
+ ${this.selectedOption?.option}
142
+ </div>
143
+ <div class="selectionBox">
144
+ ${this.options.map(option => {
145
+ return html`
146
+ <div class="option" @click=${() => {this.updateSelection(option);}}>${option.option}</div>
147
+ `
148
+ })}
149
+ </div>
150
+ </div>
151
+ `;
152
+ }
153
+
154
+ firstUpdated() {
155
+ this.selectedOption = this.options[0] || null;
156
+ }
157
+
158
+ public async updateSelection(selectedOption) {
159
+ this.selectedOption = selectedOption;
160
+
161
+ this.dispatchEvent(new CustomEvent('selectedOption', {
162
+ detail: selectedOption,
163
+ bubbles: true
164
+ }));
165
+ this.toggleSelectionBox();
166
+ this.changeSubject.next(this);
167
+ }
168
+
169
+ public toggleSelectionBox() {
170
+ this.shadowRoot.querySelector('.selectedBox').classList.toggle('show');
171
+ this.shadowRoot.querySelector('.selectionBox').classList.toggle('show');
172
+ }
173
+ }
@@ -0,0 +1,195 @@
1
+ import {
2
+ customElement,
3
+ DeesElement,
4
+ type TemplateResult,
5
+ property,
6
+ html,
7
+ css,
8
+ unsafeCSS,
9
+ cssManager,
10
+ type CSSResult,
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-input-fileupload': DeesInputFileupload;
18
+ }
19
+ }
20
+
21
+ @customElement('dees-input-fileupload')
22
+ export class DeesInputFileupload extends DeesElement {
23
+ public static demo = () => html`<dees-input-fileupload .label=${'Attachments'}></dees-input-fileupload>`;
24
+
25
+ // INSTANCE
26
+ public changeSubject = new domtools.rxjs.Subject();
27
+
28
+ @property({
29
+ type: String,
30
+ })
31
+ public label: string = null;
32
+
33
+ @property({
34
+ type: String,
35
+ })
36
+ public key: string;
37
+
38
+ @property({
39
+ attribute: false,
40
+ })
41
+ public value: File[] = [];
42
+
43
+ @property()
44
+ public state: 'idle' | 'dragOver' | 'dropped' | 'uploading' | 'completed' = 'idle';
45
+
46
+ @property({
47
+ type: Boolean,
48
+ })
49
+ public required: boolean = false;
50
+
51
+ @property({
52
+ type: Boolean,
53
+ })
54
+ public disabled: boolean = false;
55
+
56
+ @property({
57
+ type: String,
58
+ })
59
+ public buttonText: string = 'Upload File...';
60
+
61
+ constructor() {
62
+ super();
63
+ }
64
+
65
+ public static styles = [
66
+ cssManager.defaultStyles,
67
+ css`
68
+ :host {
69
+ position: relative;
70
+ display: grid;
71
+ margin: 10px 0px;
72
+ margin-bottom: 24px;
73
+ }
74
+
75
+ .hidden {
76
+ display: none;
77
+ }
78
+
79
+ .maincontainer {
80
+ color: ${cssManager.bdTheme('#333', '#ccc')};
81
+
82
+ }
83
+
84
+ .label {
85
+ font-size: 14px;
86
+ margin-bottom: 5px;
87
+ }
88
+
89
+ .uploadButton {
90
+ position: relative;
91
+ cursor: pointer;
92
+ padding: 8px;
93
+ max-width: 600px;
94
+ background: ${cssManager.bdTheme('#fafafa', '#333333')};
95
+ border-radius: 3px;
96
+ text-align: center;
97
+ }
98
+
99
+ .uploadButton:hover {
100
+ color: #fff;
101
+ background: rgb(3, 155, 229);
102
+ }
103
+
104
+ .uploadButton::after {
105
+ top: 2px;
106
+ right: 2px;
107
+ left: 2px;
108
+ bottom: 2px;
109
+ transform: scale3d(0.98, 0.9, 1);
110
+ position: absolute;
111
+ content: '';
112
+ display: block;
113
+ border: 2px dashed rgba(255, 255, 255, 0);
114
+ transition: all 0.2s;
115
+ }
116
+ .uploadButton.dragOver::after {
117
+ transform: scale3d(1, 1, 1);
118
+ border: 2px dashed rgba(255, 255, 255, 0.3);
119
+ }
120
+
121
+ .uploadCandidate {
122
+ text-align: left;
123
+ border-bottom: 1px dashed #444;
124
+ color: ${cssManager.bdTheme('#666', '#ccc')};
125
+ padding: 8px;
126
+ font-family: 'Mona Sans', 'Inter', sans-serif;
127
+ }
128
+
129
+ .uploadButton:hover .uploadCandidate {
130
+ color: ${cssManager.bdTheme('#fff', '#fff')};
131
+ border-bottom: 1px dashed #fff;
132
+ }
133
+
134
+ .uploadCandidate:last-child {
135
+ margin-bottom: 8px;
136
+ }
137
+ `,
138
+ ];
139
+
140
+ public render(): TemplateResult {
141
+ return html`
142
+ <div class="hidden">
143
+ <input type="file"></div>
144
+ </div>
145
+ <div class="maincontainer">
146
+ ${this.label ? html`<div class="label">${this.label}</div>` : null}
147
+ ${this.value.map((fileArg) => html` <div class="uploadCandidate">${fileArg.name} | ${fileArg.size}</div> `)}
148
+ <div class="uploadButton ${this.state === 'dragOver' ? 'dragOver' : ''}" @click=${this.openFileSelector}>
149
+ ${this.buttonText}
150
+ </div>
151
+ </div>
152
+ `;
153
+ }
154
+
155
+ public async openFileSelector() {
156
+ const inputFile: HTMLInputElement = this.shadowRoot.querySelector('input[type="file"]');
157
+ inputFile.click();
158
+ }
159
+
160
+ public async updateValue(eventArg: Event) {
161
+ const target: any = eventArg.target;
162
+ this.value = target.value;
163
+ this.changeSubject.next(this);
164
+ }
165
+
166
+ public firstUpdated() {
167
+ const dropArea = this.shadowRoot.querySelector('.uploadButton');
168
+ const handlerFunction = (eventArg: DragEvent) => {
169
+ eventArg.preventDefault();
170
+ switch (eventArg.type) {
171
+ case 'dragover':
172
+ this.state = 'dragOver';
173
+ this.buttonText = 'release to upload file...';
174
+ break;
175
+ case 'dragleave':
176
+ this.state = 'idle';
177
+ this.buttonText = 'Upload File...';
178
+ break;
179
+ case 'drop':
180
+ this.state = 'idle';
181
+ this.buttonText = 'Upload more files...';
182
+ }
183
+ console.log(eventArg);
184
+ for (const file of Array.from(eventArg.dataTransfer.files)) {
185
+ this.value.push(file);
186
+ this.requestUpdate();
187
+ }
188
+ console.log(`Got ${this.value.length} files!`);
189
+ };
190
+ dropArea.addEventListener('dragenter', handlerFunction, false);
191
+ dropArea.addEventListener('dragleave', handlerFunction, false);
192
+ dropArea.addEventListener('dragover', handlerFunction, false);
193
+ dropArea.addEventListener('drop', handlerFunction, false);
194
+ }
195
+ }
@@ -0,0 +1,113 @@
1
+ import { customElement, property, html, type TemplateResult, DeesElement, 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-quantityselector': DeesInputQuantitySelector;
7
+ }
8
+ }
9
+
10
+ @customElement('dees-input-quantityselector')
11
+ export class DeesInputQuantitySelector extends DeesElement {
12
+ public static demo = () => html`<dees-input-quantityselector></dees-input-quantityselector>`;
13
+
14
+ // INSTANCE
15
+ public changeSubject = new domtools.rxjs.Subject();
16
+
17
+ @property()
18
+ public key: string;
19
+
20
+ @property({
21
+ type: Number
22
+ })
23
+ public value: number = 1;
24
+
25
+ @property({
26
+ type: Boolean,
27
+ })
28
+ public required: boolean = false;
29
+
30
+ @property({
31
+ type: Boolean
32
+ })
33
+ public disabled: boolean = false;
34
+
35
+ constructor() {
36
+ super();
37
+ }
38
+
39
+ public render(): TemplateResult {
40
+ return html`
41
+ ${domtools.elementBasic.styles}
42
+ <style>
43
+ :host {
44
+ display: block;
45
+ width: 110px;
46
+ user-select: none;
47
+ }
48
+ .maincontainer {
49
+ transition: all 0.1s;
50
+ font-size: 14px;
51
+ display: grid;
52
+ grid-template-columns: 33% 34% 33%;
53
+ text-align: center;
54
+ background:none;
55
+ line-height: 40px;
56
+ padding: 0px;
57
+ min-width: 100px;
58
+ color: ${this.goBright ? '#666' : '#CCC'};
59
+ border: ${this.goBright ? '1px solid #333' : '1px solid #CCC'};
60
+ border-radius: 4px;
61
+ }
62
+
63
+ .mainContainer:hover {
64
+ color: ${this.goBright ? '#333' : '#fff'};
65
+ border: ${this.goBright ? '1px solid #333' : '1px solid #fff'};
66
+ }
67
+
68
+ .minus {
69
+ padding-left: 5px;
70
+ }
71
+
72
+ .plus {
73
+ padding-right: 5px;
74
+ }
75
+
76
+ .selector {
77
+ text-align: center;
78
+ font-size: 20px;
79
+ }
80
+
81
+ .selector:hover {
82
+ cursor: pointer;
83
+ }
84
+
85
+ .quantity {
86
+ text-align: center;
87
+ }
88
+
89
+
90
+ </style>
91
+
92
+ <div class="maincontainer">
93
+ <div class="selector minus" @click="${() => {this.decrease();}}">-</div>
94
+ <div class="quantity">${this.value}</div>
95
+ <div class="selector plus" @click="${() => {this.increase();}}">+</div>
96
+ </div>
97
+ `;
98
+ }
99
+
100
+ public increase () {
101
+ this.value++;
102
+ this.changeSubject.next(this);
103
+ }
104
+
105
+ public decrease () {
106
+ if (this.value > 0) {
107
+ this.value--;
108
+ } else {
109
+ // nothing to do here
110
+ }
111
+ this.changeSubject.next(this);
112
+ }
113
+ }