@dile/ui 2.0.1

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 (172) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +3 -0
  3. package/components/app-drawer/app-drawer.js +3 -0
  4. package/components/app-drawer/index.js +1 -0
  5. package/components/app-drawer/src/DileAppDrawer.js +153 -0
  6. package/components/avatar/avatar.js +3 -0
  7. package/components/avatar/index.js +1 -0
  8. package/components/avatar/src/DileAvatar.js +78 -0
  9. package/components/breadcrumbs/breadcrumbs-item.js +3 -0
  10. package/components/breadcrumbs/breadcrumbs.js +4 -0
  11. package/components/breadcrumbs/index.js +2 -0
  12. package/components/breadcrumbs/src/DileBreadcrumbs.js +76 -0
  13. package/components/breadcrumbs/src/DileBreadcrumbsItem.js +51 -0
  14. package/components/button/button-icon.js +3 -0
  15. package/components/button/button.js +3 -0
  16. package/components/button/index.js +2 -0
  17. package/components/button/src/DileButton.js +86 -0
  18. package/components/button/src/DileButtonIcon.js +38 -0
  19. package/components/card/card.js +3 -0
  20. package/components/card/index.js +1 -0
  21. package/components/card/src/DileCard.js +111 -0
  22. package/components/checkbox/checkbox.js +3 -0
  23. package/components/checkbox/index.js +1 -0
  24. package/components/checkbox/src/DileCheckbox.js +154 -0
  25. package/components/confirm/confirm.js +3 -0
  26. package/components/confirm/index.js +1 -0
  27. package/components/confirm/src/DileConfirm.js +121 -0
  28. package/components/datepicker/calendar.js +3 -0
  29. package/components/datepicker/datepicker.js +4 -0
  30. package/components/datepicker/index.js +2 -0
  31. package/components/datepicker/src/DileCalendar.js +72 -0
  32. package/components/datepicker/src/DileDatepicker.js +114 -0
  33. package/components/hamburger/hamburger.js +3 -0
  34. package/components/hamburger/index.js +1 -0
  35. package/components/hamburger/src/DileHamburger.js +129 -0
  36. package/components/icon/icon.js +3 -0
  37. package/components/icon/index.js +1 -0
  38. package/components/icon/src/DileIcon.js +40 -0
  39. package/components/icon-switch/icon-switch-group.js +3 -0
  40. package/components/icon-switch/icon-switch.js +3 -0
  41. package/components/icon-switch/index.js +1 -0
  42. package/components/icon-switch/src/DileIconSwitch.js +54 -0
  43. package/components/icon-switch/src/DileIconSwitchGroup.js +38 -0
  44. package/components/info-box/index.js +1 -0
  45. package/components/info-box/info-box.js +3 -0
  46. package/components/info-box/src/DileInfoBox.js +118 -0
  47. package/components/inline-feedback/index.js +1 -0
  48. package/components/inline-feedback/inline-feedback.js +3 -0
  49. package/components/inline-feedback/src/DileInlineFeedback.js +96 -0
  50. package/components/input/index.js +9 -0
  51. package/components/input/input-integer.js +3 -0
  52. package/components/input/input-message.js +3 -0
  53. package/components/input/input-money.js +3 -0
  54. package/components/input/input-number-mask.js +3 -0
  55. package/components/input/input-percentage.js +3 -0
  56. package/components/input/input-search.js +3 -0
  57. package/components/input/input.js +3 -0
  58. package/components/input/src/DileInput.js +245 -0
  59. package/components/input/src/DileInputInteger.js +45 -0
  60. package/components/input/src/DileInputMessage.js +12 -0
  61. package/components/input/src/DileInputMoney.js +72 -0
  62. package/components/input/src/DileInputNumberMask.js +83 -0
  63. package/components/input/src/DileInputPercentage.js +57 -0
  64. package/components/input/src/DileInputSearch.js +145 -0
  65. package/components/input/src/Mask.js +37 -0
  66. package/components/input/src/message-styles.js +14 -0
  67. package/components/menu-hamburger/index.js +1 -0
  68. package/components/menu-hamburger/menu-hamburger.js +3 -0
  69. package/components/menu-hamburger/src/DileMenuHamburger.js +89 -0
  70. package/components/menu-overlay/index.js +1 -0
  71. package/components/menu-overlay/menu-overlay.js +3 -0
  72. package/components/menu-overlay/src/DileMenuOverlay.js +71 -0
  73. package/components/message/index.js +1 -0
  74. package/components/message/message.js +3 -0
  75. package/components/message/src/DileMessage.js +166 -0
  76. package/components/modal/index.js +1 -0
  77. package/components/modal/modal.js +3 -0
  78. package/components/modal/src/DileModal.js +194 -0
  79. package/components/nav/index.js +1 -0
  80. package/components/nav/nav.js +3 -0
  81. package/components/nav/src/DileNav.js +68 -0
  82. package/components/order-switch/index.js +1 -0
  83. package/components/order-switch/order-switch.js +3 -0
  84. package/components/order-switch/src/DileOrderSwitch.js +74 -0
  85. package/components/pages/index.js +1 -0
  86. package/components/pages/pages.js +3 -0
  87. package/components/pages/src/DilePages.js +178 -0
  88. package/components/password/index.js +1 -0
  89. package/components/password/password.js +3 -0
  90. package/components/password/src/DilePassword.js +34 -0
  91. package/components/progress-bar/index.js +1 -0
  92. package/components/progress-bar/progress-bar.js +3 -0
  93. package/components/progress-bar/src/DileProgressBar.js +89 -0
  94. package/components/radio-group/index.js +2 -0
  95. package/components/radio-group/radio-group.js +3 -0
  96. package/components/radio-group/radio.js +3 -0
  97. package/components/radio-group/src/DileRadio.js +79 -0
  98. package/components/radio-group/src/DileRadioGroup.js +102 -0
  99. package/components/range/index.js +1 -0
  100. package/components/range/range.js +3 -0
  101. package/components/range/src/DileRange.js +119 -0
  102. package/components/rating/index.js +1 -0
  103. package/components/rating/rating.js +4 -0
  104. package/components/rating/src/DileRating.js +119 -0
  105. package/components/rating/src/DileStar.js +63 -0
  106. package/components/rating/star.js +3 -0
  107. package/components/rating-scale-question/index.js +2 -0
  108. package/components/rating-scale-question/rating-scale-option.js +3 -0
  109. package/components/rating-scale-question/rating-scale-question.js +3 -0
  110. package/components/rating-scale-question/src/DileRatingScaleOption.js +184 -0
  111. package/components/rating-scale-question/src/DileRatingScaleQuestion.js +252 -0
  112. package/components/select/index.js +1 -0
  113. package/components/select/select-ajax.js +4 -0
  114. package/components/select/select.js +3 -0
  115. package/components/select/src/DileSelect.js +172 -0
  116. package/components/select/src/DileSelectAjax.js +338 -0
  117. package/components/selector/index.js +2 -0
  118. package/components/selector/selector-item.js +3 -0
  119. package/components/selector/selector.js +3 -0
  120. package/components/selector/src/DileSelector.js +12 -0
  121. package/components/selector/src/DileSelectorItem.js +94 -0
  122. package/components/slide-show/index.js +1 -0
  123. package/components/slide-show/slide-show.js +3 -0
  124. package/components/slide-show/src/DileSlideShow.js +111 -0
  125. package/components/social-icon/index.js +1 -0
  126. package/components/social-icon/social-icon.js +3 -0
  127. package/components/social-icon/src/DileSocialIcon.js +63 -0
  128. package/components/social-icon/src/icons.js +103 -0
  129. package/components/spinner/index.js +1 -0
  130. package/components/spinner/spinner-horizontal.js +3 -0
  131. package/components/spinner/spinner-modal.js +4 -0
  132. package/components/spinner/spinner.js +3 -0
  133. package/components/spinner/src/DileSpinner.js +116 -0
  134. package/components/spinner/src/DileSpinnerHorizontal.js +64 -0
  135. package/components/spinner/src/DileSpinnerMixin.js +13 -0
  136. package/components/spinner/src/DileSpinnerModal.js +51 -0
  137. package/components/tabs/index.js +2 -0
  138. package/components/tabs/src/DileTab.js +60 -0
  139. package/components/tabs/src/DileTabs.js +12 -0
  140. package/components/tabs/tab.js +3 -0
  141. package/components/tabs/tabs.js +4 -0
  142. package/components/textarea/index.js +1 -0
  143. package/components/textarea/src/DileTextarea.js +166 -0
  144. package/components/textarea/textarea.js +3 -0
  145. package/components/toast/index.js +3 -0
  146. package/components/toast/src/DileToast.js +95 -0
  147. package/components/toast/src/DileToastItem.js +92 -0
  148. package/components/toast/src/DileToastPersistent.js +100 -0
  149. package/components/toast/toast-item.js +3 -0
  150. package/components/toast/toast-persistent.js +3 -0
  151. package/components/toast/toast.js +4 -0
  152. package/components/tooltip/chip-tooltip.js +3 -0
  153. package/components/tooltip/index.js +1 -0
  154. package/components/tooltip/src/DileChipTooltip.js +86 -0
  155. package/components/tooltip/src/DileTooltip.js +195 -0
  156. package/components/tooltip/tooltip.js +3 -0
  157. package/mixins/close-document-click/index.js +1 -0
  158. package/mixins/close-document-click/src/DileCloseDocumentClick.js +67 -0
  159. package/mixins/close-on-esc-pressed/index.js +1 -0
  160. package/mixins/close-on-esc-pressed/src/DileCloseOnEscPressed.js +31 -0
  161. package/mixins/form/index.js +3 -0
  162. package/mixins/form/src/DileEmmitChange.js +22 -0
  163. package/mixins/form/src/DileForm.js +116 -0
  164. package/mixins/form/src/DileFormChangeDetect.js +34 -0
  165. package/mixins/overlay/index.js +1 -0
  166. package/mixins/overlay/src/DileOverlay.js +171 -0
  167. package/mixins/selectable/index.js +2 -0
  168. package/mixins/selectable/src/DileSelectable.js +154 -0
  169. package/mixins/selectable/src/DileSelectableItem.js +30 -0
  170. package/mixins/slide-down/index.js +1 -0
  171. package/mixins/slide-down/src/DileSlideDown.js +40 -0
  172. package/package.json +29 -0
@@ -0,0 +1,195 @@
1
+ import { html, css, LitElement } from 'lit';
2
+
3
+ export class DileTooltip extends LitElement {
4
+
5
+ static get styles() {
6
+ return css`/* Tooltip container */
7
+ :host {
8
+ display: inline-block;
9
+ }
10
+ .tooltip {
11
+ position: relative;
12
+ display: flex;
13
+ align-items: center;
14
+ }
15
+
16
+ .tooltiptext {
17
+ visibility: hidden;
18
+ width: var(--dile-tooltip-width, 120px);
19
+ background-color: var(--dile-tooltip-background-color, #e74c3c);
20
+ color: var(--dile-tooltip-color, #fff);
21
+ font-size: var(--dile-tooltip-font-size, 16px);
22
+ text-align: var(--dile-tooltip-text-align, center);
23
+ border-radius: var(--dile-tooltip-border-radius, 6px);;
24
+ padding: var(--dile-tooltip-padding, 5px);
25
+ }
26
+
27
+ .tooltip-top {
28
+ position: absolute;
29
+ z-index: 1;
30
+ bottom: 150%;
31
+ left: 50%;
32
+ margin-left: -60px;
33
+ }
34
+
35
+ .arrow-top::after {
36
+ content: "";
37
+ position: absolute;
38
+ top: 100%;
39
+ left: 50%;
40
+ margin-left: -5px;
41
+ border-width: 5px;
42
+ border-style: solid;
43
+ border-color: var(--dile-tooltip-background-color, #e74c3c) transparent transparent transparent;
44
+ }
45
+
46
+ .tooltip-left {
47
+ position: absolute;
48
+ z-index: 1;
49
+ top: -5px;
50
+ right: 105%;
51
+ }
52
+
53
+ .arrow-left::after {
54
+ content: " ";
55
+ position: absolute;
56
+ top: 50%;
57
+ left: 100%; /* To the right of the tooltip */
58
+ margin-top: -5px;
59
+ border-width: 5px;
60
+ border-style: solid;
61
+ border-color: transparent transparent transparent var(--dile-tooltip-background-color, #e74c3c);
62
+ }
63
+
64
+ .tooltip-right {
65
+ position: absolute;
66
+ z-index: 1;
67
+ top: -5px;
68
+ left: 105%;
69
+ }
70
+
71
+ .arrow-right::after {
72
+ content: " ";
73
+ position: absolute;
74
+ top: 50%;
75
+ right: 100%; /* To the left of the tooltip */
76
+ margin-top: -5px;
77
+ border-width: 5px;
78
+ border-style: solid;
79
+ border-color: transparent var(--dile-tooltip-background-color, #e74c3c) transparent transparent;
80
+ }
81
+
82
+ .arrow-right::after {
83
+ content: "";
84
+ position: absolute;
85
+ top: 50%;
86
+ right: 100%;
87
+ margin-top: -5px;
88
+ border-width: 5px;
89
+ border-style: solid;
90
+ border-color: transparent var(--dile-tooltip-background-color, #e74c3c) transparent transparent;
91
+ }
92
+
93
+ .tooltip-bottom {
94
+ position: absolute;
95
+ z-index: 1;
96
+ top: 150%;
97
+ left: 50%;
98
+ margin-left: -60px;
99
+ }
100
+
101
+ .arrow-bottom::after {
102
+ content: "";
103
+ position: absolute;
104
+ bottom: 100%;
105
+ left: 50%;
106
+ margin-left: -5px;
107
+ border-width: 5px;
108
+ border-style: solid;
109
+ border-color: transparent transparent var(--dile-tooltip-background-color, #e74c3c) transparent;
110
+ }
111
+
112
+ .animation{
113
+ opacity: 0;
114
+ transition: opacity var(--dile-tooltip-time-transition, 0.5s) ease-in;
115
+ }
116
+
117
+ .show {
118
+ visibility: visible !important;
119
+ opacity: 1;
120
+ }
121
+
122
+ `;
123
+ }
124
+
125
+ static get properties() {
126
+ return {
127
+ /** text will be displayed when the mouse hover text */
128
+ tooltip: { type: String },
129
+
130
+ /** Position where the tooltip where be displayed */
131
+ position: { type: String },
132
+
133
+ /** Adds an arrow design to the tooltip */
134
+ arrow: { type: Boolean },
135
+
136
+ /** Adds a fade in animation */
137
+ fadeIn: { type: Boolean },
138
+
139
+ /** Private property to control mouseovers and mouseouts */
140
+ _isMouseover: { type: Boolean }
141
+ };
142
+ }
143
+
144
+ constructor() {
145
+ super();
146
+ this.tooltip = 'Tooltip text';
147
+ this.position = 'top'
148
+ this.arrow = false;
149
+ this.fadeIn = false;
150
+ this._isMouseover = false;
151
+ }
152
+
153
+ classPosition(position) {
154
+ let className = 'tooltip-top';
155
+ if (position == 'left') { return 'tooltip-left' };
156
+ if (position == 'right') { return 'tooltip-right' };
157
+ if (position == 'bottom') { return 'tooltip-bottom' };
158
+ return className;
159
+ }
160
+
161
+ arrowPosition(arrow, position) {
162
+ return arrow ? `arrow-${position}` : '';
163
+ }
164
+
165
+ animation(fadeIn) {
166
+ return fadeIn ? 'animation' : '';
167
+ }
168
+
169
+ showOrNot(isMouseover) {
170
+ return isMouseover ? 'show' : '';
171
+ }
172
+
173
+ render() {
174
+ return html`
175
+ <div
176
+ class="tooltip"
177
+ @mouseover="${this.doMouseover}"
178
+ @mouseout="${this.doMouseout}"
179
+ >
180
+ <slot></slot>
181
+ <span
182
+ class="tooltiptext ${this.classPosition(this.position)} ${this.arrowPosition(this.arrow, this.position)} ${this.animation(this.fadeIn)} ${this.showOrNot(this._isMouseover)}"
183
+ >${this.tooltip}</span>
184
+ </div>
185
+ `;
186
+ }
187
+
188
+ doMouseover() {
189
+ this._isMouseover = true;
190
+ }
191
+
192
+ doMouseout() {
193
+ this._isMouseover = false;
194
+ }
195
+ }
@@ -0,0 +1,3 @@
1
+ import { DileTooltip } from './src/DileTooltip.js';
2
+
3
+ window.customElements.define('dile-tooltip', DileTooltip);
@@ -0,0 +1 @@
1
+ export { DileCloseDocumentClick } from "./src/DileCloseDocumentClick.js";
@@ -0,0 +1,67 @@
1
+ /**
2
+ *
3
+ * # DileCloseDocumentClick
4
+ *
5
+ * Custom Element Mixin offers a way to close elements when the user clicks in any area of the document.
6
+ *
7
+ * To use it you olny need to extend your custom element class with it.
8
+ *
9
+ * Only depends on a close() method in the extended custom element.
10
+ *
11
+ */
12
+ export const DileCloseDocumentClick = (SuperClass) =>
13
+ class extends SuperClass {
14
+ constructor() {
15
+ super();
16
+ this.closeDocumentHandler = this.closeAll.bind(this);
17
+ }
18
+
19
+ connectedCallback() {
20
+ super.connectedCallback();
21
+ if (!DileCloseDocumentClick.elements) {
22
+ DileCloseDocumentClick.elements = [];
23
+ document.addEventListener("click", this.closeDocumentHandler);
24
+ }
25
+ DileCloseDocumentClick.elements.push(this);
26
+ }
27
+
28
+ disconnectedCallback() {
29
+ super.disconnectedCallback();
30
+ DileCloseDocumentClick.elements = DileCloseDocumentClick.elements.filter(
31
+ (item) => item != this
32
+ );
33
+ if (DileCloseDocumentClick.elements.length == 0) {
34
+ DileCloseDocumentClick.elements = null;
35
+ document.removeEventListener("click", this.closeDocumentHandler);
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Close all the elements of this type
41
+ */
42
+ closeAll() {
43
+ for (let ele of DileCloseDocumentClick.elements) {
44
+ ele.close();
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Close the other items of this type (distinct to this)
50
+ */
51
+ closeOthers() {
52
+ DileCloseDocumentClick.elements.forEach((item) => {
53
+ if (item != this) {
54
+ item.close();
55
+ }
56
+ });
57
+ }
58
+
59
+ /**
60
+ * This method only alerts the developer to create the close() method in his component
61
+ */
62
+ close() {
63
+ console.log(
64
+ "DileCloseDocumentClick needs a close() method in the component"
65
+ );
66
+ }
67
+ };
@@ -0,0 +1 @@
1
+ export { DileCloseOnEscPressed } from "./src/DileCloseOnEscPressed.js";
@@ -0,0 +1,31 @@
1
+ /*
2
+ Mixin for close something when the user press the esc key.
3
+
4
+ Needs a close() method implemented on the component you are extend from this mixin.
5
+ */
6
+ export const DileCloseOnEscPressed = (SuperClass) =>
7
+ class extends SuperClass {
8
+ constructor() {
9
+ super();
10
+ this.closeOnEscHandler = this.escClose.bind(this);
11
+ }
12
+
13
+ connectedCallback() {
14
+ super.connectedCallback();
15
+ window.addEventListener("keydown", this.closeOnEscHandler);
16
+ }
17
+ disconnectedCallback() {
18
+ super.disconnectedCallback();
19
+ window.removeEventListener("keydown", this.closeOnEscHandler);
20
+ }
21
+
22
+ escClose(e) {
23
+ if (e.key === "Escape" && this.opened) {
24
+ this.close();
25
+ }
26
+ }
27
+
28
+ close() {
29
+ console.log('You need to implement a close method!');
30
+ }
31
+ };
@@ -0,0 +1,3 @@
1
+ export { DileForm } from "./src/DileForm.js";
2
+ export { DileFormChangeDetect } from "./src/DileFormChangeDetect.js";
3
+ export { DileEmmitChange } from "./src/DileEmmitChange.js";
@@ -0,0 +1,22 @@
1
+ /**
2
+ *
3
+ * # DileEmmitChange
4
+ *
5
+ * Mixin to detect changes in form components
6
+ *
7
+ */
8
+
9
+ export const DileEmmitChange = (superclass) => class extends superclass {
10
+
11
+ emmitChange() {
12
+ this.dispatchEvent(new CustomEvent('element-changed', {
13
+ bubbles: true,
14
+ composed: true,
15
+ detail: {
16
+ name: this.name,
17
+ value: this.value
18
+ }
19
+ }));
20
+ }
21
+
22
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ *
3
+ * # DileForm
4
+ *
5
+ * Mixin to apply functionality to form components
6
+ *
7
+ */
8
+
9
+ export const DileForm = (superclass) => class extends superclass {
10
+
11
+
12
+ constructor() {
13
+ super();
14
+ this.firstValue = null;
15
+ }
16
+
17
+ static get properties() {
18
+ return {
19
+ setOnInit: { type: Object }
20
+ };
21
+ }
22
+
23
+ firstUpdated() {
24
+ super.firstUpdated();
25
+ this.firstValue = this.getData();
26
+ if(this.setOnInit) {
27
+ this.setData(this.setOnInit);
28
+ }
29
+ }
30
+
31
+ getData() {
32
+ let data = {};
33
+ this.allNodeElements.forEach(node => {
34
+ data[node.getAttribute('name')] = node.value;
35
+ });
36
+ return data;
37
+ }
38
+
39
+ setData(data) {
40
+ this.allNodeElements.forEach(node => {
41
+ if(data[node.getAttribute('name')] !== undefined && data[node.getAttribute('name')] !== null) {
42
+ if (typeof node.set === "function") {
43
+ node.set(data[node.getAttribute('name')]);
44
+ } else {
45
+ node.value = data[node.getAttribute('name')];
46
+ }
47
+
48
+ }
49
+ });
50
+ }
51
+
52
+ clearData() {
53
+ this.allNodeElements.forEach(node => {
54
+ if (typeof node.clear === "function") {
55
+ node.clear();
56
+ } else {
57
+ node.value = '';
58
+ }
59
+ });
60
+ }
61
+
62
+ get allNodeElements() {
63
+ return this.shadowRoot.querySelectorAll('[name]');
64
+ }
65
+
66
+ getNodeElement(name) {
67
+ return this.shadowRoot.querySelector('[name="' + name + '"]');
68
+ }
69
+
70
+ resetData() {
71
+ this.setData(this.firstValue);
72
+ }
73
+
74
+ resetField(name) {
75
+ if(this.firstValue.hasOwnProperty(name)) {
76
+ let value = this.firstValue[name];
77
+ let node = this.getNodeElement(name);
78
+ node.value = value;
79
+ }
80
+ }
81
+
82
+ showError(name, error) {
83
+ let node = this.getNodeElement(name);
84
+ node.errored = true;
85
+ node.message = error;
86
+ }
87
+
88
+ showErrors(errors) {
89
+ for(let name in errors) {
90
+ this.showError(name, errors[name]);
91
+ }
92
+ }
93
+
94
+ clearErrors() {
95
+ this.allNodeElements.forEach(node => {
96
+ node.errored = false;
97
+ node.message = '';
98
+ });
99
+ }
100
+
101
+ isDirty() {
102
+ const currentData = this.getData();
103
+ const originProperties = Object.keys(this.firstValue);
104
+ const currentProperties = Object.keys(currentData);
105
+ if (originProperties.length !== currentProperties.length) {
106
+ return true;
107
+ }
108
+ for (let prop of originProperties) {
109
+ if (this.firstValue[prop] != currentData[prop]) {
110
+ return true; // Si alguna propiedad no coincide, retorna false
111
+ }
112
+ }
113
+ return false;
114
+ }
115
+
116
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ *
3
+ * # DileFormChangeDetect
4
+ *
5
+ * Mixin to detect changes in form components
6
+ *
7
+ */
8
+
9
+ export const DileFormChangeDetect = (superclass) => class extends superclass {
10
+
11
+ constructor() {
12
+ super();
13
+ this.changeHandler = this.detectChange.bind(this);
14
+ }
15
+
16
+ connectedCallback() {
17
+ super.connectedCallback();
18
+ this.addEventListener('element-changed', this.changeHandler);
19
+ }
20
+ disconnectedCallback() {
21
+ super.disconnectedCallback();
22
+ this.removeEventListener('element-changed', this.changeHandler);
23
+ }
24
+
25
+ detectChange(e) {
26
+ this.dispatchEvent(new CustomEvent('dile-form-changed', {
27
+ bubbles: true,
28
+ composed: true,
29
+ detail: {
30
+ data: this.getData()
31
+ }
32
+ }));
33
+ }
34
+ }
@@ -0,0 +1 @@
1
+ export { DileOverlay } from "./src/DileOverlay.js";
@@ -0,0 +1,171 @@
1
+ export const DileOverlay = function(superClass) {
2
+ return class extends superClass {
3
+
4
+ static get properties() {
5
+ return {
6
+ _opening: {
7
+ type: Boolean,
8
+ },
9
+ moveTop: {
10
+ type: Number,
11
+ },
12
+ moveLeft: {
13
+ type: Number,
14
+ },
15
+ /**
16
+ * The css class to show or hide the overlay
17
+ * @type {String}
18
+ */
19
+ _overlayClass: {
20
+ state: true,
21
+ type: String,
22
+ },
23
+ /**
24
+ * The position of the overlay: left, right or center.
25
+ * @type {String}
26
+ */
27
+ horizontalAlign: {
28
+ type: String,
29
+ },
30
+ /**
31
+ * The position of the overlay: bottom, top or center.
32
+ * @type {String}
33
+ */
34
+ verticalAlign: {
35
+ type: String,
36
+ },
37
+ };
38
+ }
39
+
40
+ constructor() {
41
+ super();
42
+ this._opening = false;
43
+ this.moveTop = 0;
44
+ this.moveLeft = 0;
45
+ this._overlayClass = '';
46
+ this.horizontalAlign = 'under_left';
47
+ this.verticalAlign = 'bottom';
48
+ this.delayId = null;
49
+ }
50
+
51
+ firstUpdated() {
52
+ this.overlay = this.shadowRoot.getElementById('overlay');
53
+ this.trigger = this.shadowRoot.getElementById('trigger');
54
+ }
55
+
56
+ /**
57
+ * toggles the overlay
58
+ */
59
+ toggle(e) {
60
+ //e.stopPropagation();
61
+ if(this._overlayClass) {
62
+ this.close()
63
+ } else {
64
+ this.open();
65
+ }
66
+ }
67
+ cancelDelay() {
68
+ if(this.reardo) {
69
+ clearTimeout(this.delayId);
70
+ }
71
+ this.delayId = null;
72
+ }
73
+ /**
74
+ * closes the overlay
75
+ */
76
+ close() {
77
+ this.dispatchEvent(new CustomEvent('overlay-closed', {
78
+ bubbles: true,
79
+ composed: true,
80
+ }));
81
+ if(!this._opening && this._overlayClass=='opened') {
82
+ this._overlayClass = '';
83
+ this.cancelDelay();
84
+ this.delayId = setTimeout(() => {
85
+ this.overlay.style.display = 'none'
86
+ }, 500);
87
+ }
88
+ }
89
+ /**
90
+ * opens the overlay
91
+ */
92
+ open() {
93
+ this.dispatchEvent(new CustomEvent('overlay-opened', {
94
+ bubbles: true,
95
+ composed: true,
96
+ }));
97
+ if(!this._opening) {
98
+ this._opening = true;
99
+ this.updatePosition();
100
+ if(this.closeAll) {
101
+ this.closeAll();
102
+ };
103
+ this.overlay.style.display = 'block';
104
+ this.cancelDelay();
105
+ this.delayId = setTimeout(() => {
106
+ this._overlayClass = 'opened'
107
+ this._opening = false;
108
+ this.overlay.style.display = 'block';
109
+ }, 50);
110
+ }
111
+ }
112
+
113
+ updatePosition() {
114
+ let triggerWidth = parseInt(this.trigger.offsetWidth);
115
+ let triggerHeight = parseInt(this.trigger.offsetHeight);
116
+ let moveTop = parseInt(this.moveTop);
117
+ let moveLeft = parseInt(this.moveLeft);
118
+
119
+ let lastDisplay = this.overlay.style.display;
120
+ this.overlay.style.top = "-1000px";
121
+ this.overlay.style.display = 'block';
122
+
123
+ let overlayWidth = parseInt(this.overlay.offsetWidth);
124
+ let overlayHeight = parseInt(this.overlay.offsetHeight);
125
+
126
+ switch(this.verticalAlign) {
127
+ case 'top':
128
+ this.overlay.style.top = (0 - overlayHeight + moveTop) + 'px';
129
+ break;
130
+ case 'center':
131
+ this.overlay.style.top = '-' + (((overlayHeight - (triggerHeight / 2)) / 2) + moveTop) + 'px';
132
+ break;
133
+ default:
134
+ this.overlay.style.top = (triggerHeight + 10 + moveTop) + 'px';
135
+ }
136
+ switch(this.horizontalAlign) {
137
+ case 'under_left':
138
+ this.setOverlayStyleLeft('0px');
139
+ break;
140
+ case 'under_right':
141
+ this.setOverlayStyleLeft(`-${overlayWidth - triggerWidth}px`);
142
+ break;
143
+ case 'left':
144
+ this.setOverlayStyleLeft('-' + (overlayWidth + moveLeft) + 'px');
145
+ break;
146
+ case 'right':
147
+ this.setOverlayStyleLeft((triggerWidth + moveLeft) + 'px');
148
+ break;
149
+ default:
150
+ this.setOverlayStyleLeft('-' + (((overlayWidth - triggerWidth) / 2) + moveLeft) + 'px');
151
+ }
152
+ this.overlay.style.display = lastDisplay;
153
+ }
154
+
155
+ setOverlayStyleLeft(pos) {
156
+ this.overlay.style.left = pos;
157
+ var rect = this.overlay.getBoundingClientRect();
158
+ let posLeft = parseInt(this.overlay.style.left);
159
+ if (rect.left < 0) {
160
+ this.overlay.style.left = (posLeft - rect.left + 10) + 'px';
161
+ }
162
+ let pageWidth = document.querySelector('html').clientWidth;
163
+ if (rect.left + rect.width > pageWidth) {
164
+ let displacement = posLeft - (rect.right - pageWidth) - 15;
165
+ this.overlay.style.left = (displacement ) + 'px';
166
+ }
167
+ }
168
+ }
169
+
170
+ }
171
+
@@ -0,0 +1,2 @@
1
+ export { DileSelectable } from "./src/DileSelectable.js";
2
+ export { DileSelectableItem } from "./src/DileSelectableItem.js";