@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,119 @@
1
+ import { html, css, LitElement } from "lit";
2
+
3
+ export class DileRating extends LitElement {
4
+ static get properties() {
5
+ return {
6
+ value: { type: Number },
7
+ disableChanges: { type: Boolean },
8
+ _mouseInside: { type: Boolean },
9
+ _starValues: { type: Array },
10
+ _temporalValue: { type: Number },
11
+ };
12
+ }
13
+
14
+ static get styles() {
15
+ return [
16
+ css`
17
+ :host {
18
+ display: flex;
19
+ align-items: center;
20
+ }
21
+ section {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: var(--dile-rating-gap, 0);
25
+ flex-wrap: nowrap;
26
+ }
27
+ section.undefined {
28
+ --dile-star-color: var(--dile-rating-undefined-color, #ddd);
29
+ }
30
+ section.interactive dile-star {
31
+ cursor: pointer;
32
+ }
33
+ `
34
+ ];
35
+ }
36
+
37
+ constructor() {
38
+ super();
39
+ this._mouseInside = false;
40
+ this.disableChanges = false;
41
+ this.value = 0;
42
+ this._starValues = [1, 1, 1, 1, 1];
43
+ }
44
+
45
+ updated(changedProperties) {
46
+ if (changedProperties.has('value') || changedProperties.has('_temporalValue')) {
47
+ setTimeout(() => this.updateStarValues(), 100);
48
+ }
49
+ }
50
+
51
+ render() {
52
+ return html`
53
+ <section
54
+ @mouseenter=${this.doMouseEnter}
55
+ @mouseleave=${this.doMouseLeave}
56
+ class="${this.value === 0 && this._temporalValue === undefined ? 'undefined' : ''} ${this.disableChanges ? '' : 'interactive'}"
57
+ >
58
+ ${this._starValues.map((value, index) => html`
59
+ <dile-star
60
+ value="${value}"
61
+ index="${index}"
62
+ @dile-star-selected=${this.starSelected}
63
+ @dile-star-enter=${this.starEnter}
64
+ ></dile-star>
65
+ `)}
66
+ </section>
67
+ `;
68
+ }
69
+
70
+ updateStarValues() {
71
+ if (this._mouseInside) {
72
+ this._starValues = this.generateValuesArray(this._temporalValue);
73
+ } else {
74
+ this._starValues = this.generateValuesArray(this.value);
75
+ }
76
+ }
77
+
78
+ generateValuesArray(value) {
79
+ let values = [];
80
+ for (let i = 0; i < 5; i++) {
81
+ let current = 0;
82
+ if (value - i >= 1) {
83
+ current = 1;
84
+ } else if (value - i > 0) {
85
+ current = value - i;
86
+ }
87
+ values.push(current);
88
+ }
89
+ return values;
90
+ }
91
+
92
+ starSelected(e) {
93
+ if (! this.disableChanges) {
94
+ this.value = e.detail.index + 1;
95
+ this.dispatchEvent(new CustomEvent('dile-rating-selected', {
96
+ bubbles: true,
97
+ composed: true,
98
+ detail: {
99
+ value: this.value
100
+ }
101
+ }));
102
+ }
103
+ }
104
+
105
+ starEnter(e) {
106
+ this._temporalValue = e.detail.index + 1;
107
+ }
108
+
109
+ doMouseEnter() {
110
+ if (! this.disableChanges) {
111
+ this._mouseInside = true;
112
+ }
113
+ }
114
+
115
+ doMouseLeave() {
116
+ this._mouseInside = false;
117
+ this._temporalValue = undefined;
118
+ }
119
+ }
@@ -0,0 +1,63 @@
1
+ import { LitElement, html, css } from 'lit';
2
+ import '../../icon/icon.js';
3
+ import { starIcon, starBorderIcon, starHalfIcon } from '@dile/icons/index.js';
4
+
5
+ export class DileStar extends LitElement {
6
+ static styles = [
7
+ css`
8
+ :host {
9
+ display: flex;
10
+ align-items: center;
11
+ --dile-icon-color: var(--dile-star-color, #FFA41C);
12
+ --dile-icon-size: var(--dile-star-size, 32px);
13
+ }
14
+ `
15
+ ];
16
+
17
+ static get properties() {
18
+ return {
19
+ value: { type: Number },
20
+ halfBreak: { type: Number },
21
+ completeBreak: { type: Number },
22
+ index: { type: Number },
23
+ };
24
+ }
25
+
26
+ constructor() {
27
+ super();
28
+ this.value = 0.4;
29
+ this.halfBreak = 0.25;
30
+ this.completeBreak = 0.6;
31
+ }
32
+
33
+ render() {
34
+ return html`
35
+ <dile-icon
36
+ .icon="${this.computeIcon(this.value, this.halfBreak, this.completeBreak)}"
37
+ @click=${this.doClick}
38
+ @mouseenter=${this.doMouseEnter}
39
+ ></dile-icon>
40
+ `;
41
+ }
42
+
43
+ doClick() {
44
+ this.dispatchEvent(new CustomEvent('dile-star-selected', {
45
+ detail: { index: this.index }
46
+ }));
47
+ }
48
+
49
+ doMouseEnter() {
50
+ this.dispatchEvent(new CustomEvent('dile-star-enter', {
51
+ detail: { index: this.index }
52
+ }));
53
+ }
54
+
55
+ computeIcon(value, halfBreak, completeBreak) {
56
+ if(value < halfBreak) {
57
+ return starBorderIcon;
58
+ } else if(value < completeBreak) {
59
+ return starHalfIcon;
60
+ }
61
+ return starIcon;
62
+ }
63
+ }
@@ -0,0 +1,3 @@
1
+ import { DileStar } from "./src/DileStar.js";
2
+
3
+ window.customElements.define("dile-star", DileStar);
@@ -0,0 +1,2 @@
1
+ export { DileRatingScaleOption } from "./src/DileRatingScaleOption.js";
2
+ export { DileRatingScaleQuestion } from "./src/DileRatingScaleQuestion.js";
@@ -0,0 +1,3 @@
1
+ import { DileRatingScaleOption } from "./src/DileRatingScaleOption.js";
2
+
3
+ window.customElements.define("dile-rating-scale-option", DileRatingScaleOption);
@@ -0,0 +1,3 @@
1
+ import { DileRatingScaleQuestion } from "./src/DileRatingScaleQuestion.js";
2
+
3
+ window.customElements.define("dile-rating-scale-question", DileRatingScaleQuestion);
@@ -0,0 +1,184 @@
1
+ import { LitElement, html, css } from 'lit';
2
+ import { doneIcon } from '@dile/icons/index.js';
3
+ import '../../icon/icon.js';
4
+
5
+ export class DileRatingScaleOption extends LitElement {
6
+ static styles = [
7
+ css`
8
+ :host {
9
+ display: block;
10
+ }
11
+ span {
12
+ display: block;
13
+ margin-left: 0;
14
+ }
15
+ label {
16
+ position: relative;
17
+ overflow: hidden;
18
+ cursor: pointer;
19
+ display: flex;
20
+ flex-wrap: wrap;
21
+ align-items: self-start;
22
+ }
23
+ input {
24
+ overflow: visible;
25
+ font-size: 100%;
26
+ font-family: inherit;
27
+ margin: 0;
28
+ }
29
+ input[type="radio"] {
30
+ cursor: pointer;
31
+ display: block;
32
+ position: absolute;
33
+ width: 30px;
34
+ height: 30px;
35
+ opacity: 0;
36
+ box-sizing: border-box;
37
+ padding: 0;
38
+ }
39
+ :host([selected]) .leftColor {
40
+ background-color: var(--dile-rating-scale-color-left,#4db6ac);
41
+ }
42
+ :host([selected]) .neutralColor {
43
+ background-color: var(--dile-rating-scale-color-neutral,#9b9faa);
44
+ }
45
+ :host([selected]) .rightColor {
46
+ background-color: var(--dile-rating-scale-color-right,#ff8a65);
47
+ }
48
+ span:hover .leftColor {
49
+ background-color: var(--dile-rating-scale-color-left,#4db6ac);
50
+ }
51
+ span:hover .neutralColor {
52
+ background-color: var(--dile-rating-scale-color-neutral,#9b9faa);
53
+ }
54
+ span:hover .rightColor {
55
+ background-color: var(--dile-rating-scale-color-right,#ff8a65);
56
+ }
57
+ .leftColor {
58
+ border-color: var(--dile-rating-scale-color-left, #4db6ac);
59
+ }
60
+ .neutralColor {
61
+ border-color: var(--dile-rating-scale-color-neutral,#9b9faa);
62
+ }
63
+ .rightColor {
64
+ border-color: var(--dile-rating-scale-color-right,#ff8a65);
65
+ }
66
+ .sizeBigger{
67
+ height: var(--dile-rating-scale-option-size-bigger, 45px);
68
+ width: var(--dile-rating-scale-option-size-bigger, 45px);
69
+ }
70
+ .sizeBig{
71
+ height: var(--dile-rating-scale-option-size-big, 35px);
72
+ width: var(--dile-rating-scale-option-size-big, 35px);
73
+ }
74
+ .sizeSmall{
75
+ height: var(--dile-rating-scale-option-size-small, 28px);
76
+ width: var(--dile-rating-scale-option-size-small, 28px);
77
+ }
78
+ .sizeSmaller{
79
+ height: var(--dile-rating-scale-option-size-smaller, 25px);
80
+ width: var(--dile-rating-scale-option-size-smaller, 25px);
81
+ }
82
+ .radio_tick {
83
+ display: flex;
84
+ justify-content: center;
85
+ align-items: center;
86
+ margin: 0px 10px;
87
+ text-align: center;
88
+ box-shadow: inset 0 1px rgba(81,89,106,.05);
89
+ border-width: 2px;
90
+ border-style: solid;
91
+ border-radius: 50%;
92
+ background-color: #fff;
93
+ transition: all .2s ease-in-out;
94
+ }
95
+ .radio_label {
96
+ position: absolute;
97
+ width: 30px;
98
+ height: 30px;
99
+ opacity: 0;
100
+ display: inline-flex;
101
+ align-items: center;
102
+ transition: all .2s ease-in-out;
103
+ font-size: 1rem;
104
+ line-height: 1.5rem;
105
+ }
106
+ .radio_spinner {
107
+ display: flex;
108
+ }
109
+ .noChecked{
110
+ display: none;
111
+ }
112
+ .checked{
113
+ --dile-icon-color: var(--dile-rating-scale-option-checked-color, #fff);
114
+ }
115
+ .sizeBiggerChecked{
116
+ --dile-icon-size: var(--dile-rating-scale-option-size-bigger, 45px);
117
+ }
118
+ .sizeBigChecked{
119
+ --dile-icon-size: var(--dile-rating-scale-option-size-big, 35px);
120
+ }
121
+ .sizeSmallChecked{
122
+ --dile-icon-size: var(--dile-rating-scale-option-size-small, 28px);
123
+ }
124
+ .sizeSmallerChecked{
125
+ --dile-icon-size: var(--dile-rating-scale-option-size-smaller, 25px);
126
+ }
127
+ @media (min-width: 992px){
128
+ .radio_tick {
129
+ border-width: 3px;
130
+ }
131
+ }
132
+ `
133
+ ];
134
+
135
+ static get properties() {
136
+ return {
137
+ label: { type: String },
138
+ value: { type: String },
139
+ size: { type: String },
140
+ color: { type: String },
141
+ selected: {
142
+ type: Boolean,
143
+ reflect: true
144
+ },
145
+ };
146
+ }
147
+
148
+ constructor() {
149
+ super();
150
+ this.label = '';
151
+ this.value = '';
152
+ this.size = 'sizeSmaller';
153
+ this.color = 'neutralColor';
154
+ this.selected = false;
155
+ }
156
+
157
+ render() {
158
+ return html`
159
+ <span @click=${this.select}>
160
+ <label>
161
+ <input type="radio" >
162
+ <span class="radio_tick ${this.size} ${this.color}">
163
+ <span class="radio_spinner"><dile-icon class="${this.checked()}" .icon="${doneIcon}"></dile-icon></span>
164
+ </span>
165
+ <span class="radio_label">${this.label}</span>
166
+ </label>
167
+ </span>
168
+ `;
169
+ }
170
+
171
+ select() {
172
+ this.dispatchEvent(new CustomEvent('dile-rating-scale-option-selected', {
173
+ bubbles: true,
174
+ composed: true,
175
+ detail: {
176
+ value: this.value
177
+ }
178
+ }));
179
+ }
180
+
181
+ checked(){
182
+ return this.selected ? `${this.size}Checked checked`: 'noChecked';
183
+ }
184
+ }
@@ -0,0 +1,252 @@
1
+ import { LitElement, html, css } from 'lit';
2
+ import { DileEmmitChange } from '../../../mixins/form/index.js';
3
+
4
+ export class DileRatingScaleQuestion extends DileEmmitChange(LitElement) {
5
+ static styles = [
6
+ css`
7
+ :host {
8
+ display: block;
9
+ width: 100%;
10
+ }
11
+ :host([disabled]) {
12
+ opacity: .3;
13
+ }
14
+ * {
15
+ box-sizing: border-box;
16
+ scrollbar-width: thin;
17
+ }
18
+ fieldset {
19
+ display: flex;
20
+ flex-direction: column;
21
+ align-items: center;
22
+ border: none;
23
+ //border-bottom: 1px solid #dddfe2;
24
+ max-width: 400px;
25
+ min-width: 0;
26
+ margin: 35px 0 0;
27
+ padding: 0 0 20px;
28
+ transition: opacity .5s ease-in-out;
29
+ width: 100%;
30
+ }
31
+ legend {
32
+ display: table;
33
+ scrollbar-width: thin;
34
+ text-align: center;
35
+ box-sizing: border-box;
36
+ color: inherit;
37
+ max-width: 100%;
38
+ padding: 0;
39
+ white-space: normal;
40
+ font-weight: 600;
41
+ font-size: 1.125rem;
42
+ line-height: 1.5;
43
+ margin-bottom: 0;
44
+ }
45
+ legend span {
46
+ color: #576071;
47
+ font-weight: 600;
48
+ line-height: 1.5;
49
+ text-align: center;
50
+ }
51
+ .group_options {
52
+ display: flex;
53
+ flex-direction: row;
54
+ flex-wrap: wrap;
55
+ align-items: center;
56
+ justify-content: center;
57
+ margin: 30px 0 0;
58
+ }
59
+ .radios {
60
+ flex: 0 0 100%;
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: space-between;
64
+ }
65
+ .captions {
66
+ display: flex;
67
+ justify-content: space-between;
68
+ align-items: flex-start;
69
+ flex-grow: 1;
70
+ margin: 15px 0;
71
+ text-transform: uppercase;
72
+ }
73
+ .caption-mobile {
74
+ font-size: .8em;
75
+ letter-spacing: 0;
76
+ line-height: normal;
77
+ max-width: 47%;
78
+ font-weight: 600;
79
+ }
80
+ .caption-desktop {
81
+ display: none;
82
+ }
83
+ .text-leftColor {
84
+ color: var(--dile-rating-scale-color-left,#4db6ac);
85
+ }
86
+ .text-rightColor {
87
+ color: var(--dile-rating-scale-color-right,#ff8a65);
88
+ }
89
+
90
+ @media (min-width: 768px){
91
+ fieldset {
92
+ max-width: none;
93
+ }
94
+ .group_options {
95
+ flex-wrap: nowrap;
96
+ margin-bottom: 20px;
97
+ }
98
+ .caption-mobile {
99
+ display: none;
100
+ }
101
+ .caption-desktop{
102
+ display: block;
103
+ font-size: 1em;
104
+ letter-spacing: 0;
105
+ line-height: normal;
106
+ font-weight: 600;
107
+ flex-shrink:0;
108
+ }
109
+ .radios {
110
+ flex: 0 0 10rem;
111
+ margin: 0 30px;
112
+ }
113
+ legend span {
114
+ font-size: 1.2em;
115
+ }
116
+ }
117
+ `
118
+ ];
119
+
120
+ static get properties() {
121
+ return {
122
+ label: { type: String },
123
+ value: { type: String },
124
+ name: { type: String },
125
+ scale_left_label: { type: String },
126
+ scale_neutral_label: { type: String },
127
+ scale_right_label: { type: String },
128
+ scale_point: { type: Number },
129
+ disabled: {
130
+ type: Boolean,
131
+ reflect: true
132
+ },
133
+ };
134
+ }
135
+
136
+ constructor() {
137
+ super();
138
+ this.init = false;
139
+ this.disabled = false;
140
+ this.scale_left_label="Agree";
141
+ this.scale_neutral_label = "Neutral";
142
+ this.scale_right_label="Disagree";
143
+ this.scale_point=7; //7, 5, 3
144
+ }
145
+
146
+ updated(changedProperties) {
147
+ if(changedProperties.has('value') && this.init) {
148
+ this.doSelection(this.value);
149
+ this.emmitChange();
150
+ this.dispatchChangeEvent();
151
+ }
152
+ }
153
+
154
+ firstUpdated() {
155
+ this.init = true;
156
+ if(this.value !== undefined) {
157
+ setTimeout(() => {
158
+ this.doSelection(this.value);
159
+ }, 200);
160
+ }
161
+ }
162
+
163
+ render() {
164
+ this.getOptions();
165
+ return html`<fieldset @dile-rating-scale-option-selected=${this.changeValue}>
166
+ <legend><span>${this.label}</span></legend>
167
+ <div class="group_options">
168
+ <div class="caption-desktop text-leftColor">${this.scale_left_label}</div>
169
+ <div class="radios">
170
+ ${this.options.map( (option) => html`
171
+ <dile-rating-scale-option label="${option.label}" value="${option.value}" size="${option.size}" color="${option.color}"></dile-rating-scale-option>`
172
+ )}
173
+ </div>
174
+ <div class="caption-desktop text-rightColor">${this.scale_right_label}</div>
175
+ <div class="captions">
176
+ <div class="caption-mobile text-leftColor">${this.scale_left_label}</div>
177
+ <div class="caption-mobile text-rightColor">${this.scale_right_label}</div>
178
+ </div>
179
+ </div>
180
+ </fieldset>
181
+ `;
182
+ }
183
+
184
+ getOptions(){
185
+ let values = [3];
186
+ if (this.scale_point>3){
187
+ values.unshift(5);
188
+ }
189
+ if (this.scale_point>5){
190
+ values.unshift(7);
191
+ }
192
+ let sizes = ["sizeBigger", "sizeBig", "sizeSmall", "sizeSmaller"];
193
+ let sizeIndex = 0;
194
+ this.options = []
195
+ for(let i = 0; i < values.length; i++ ){
196
+ this.options.push({
197
+ label: '',
198
+ value: values[i],
199
+ size: sizes[sizeIndex],
200
+ color: "leftColor"
201
+ });
202
+ sizeIndex++;
203
+ }
204
+ this.options[0].label = this.scale_left_label;
205
+
206
+ this.options.push({
207
+ label: this.scale_neutral_label,
208
+ value: 0,
209
+ size: sizes[sizeIndex],
210
+ color: "neutralColor"
211
+ });
212
+ sizeIndex--;
213
+
214
+ for(let i = values.length-1; i >= 0; i--){
215
+ this.options.push({
216
+ label: '',
217
+ value: values[i]*-1,
218
+ size: sizes[sizeIndex],
219
+ color: "rightColor"
220
+ });
221
+ sizeIndex--;
222
+ }
223
+ this.options[this.options.length-1].label = this.scale_right_label;
224
+ }
225
+
226
+ changeValue(e) {
227
+ if(!this.disabled) {
228
+ this.value = e.detail.value;
229
+ }
230
+ }
231
+
232
+ doSelection(newValue) {
233
+ this.shadowRoot.querySelectorAll('dile-rating-scale-option').forEach(option => {
234
+ if (option.value === newValue) {
235
+ option.selected = true;
236
+ } else {
237
+ option.selected = false;
238
+ }
239
+ });
240
+ }
241
+
242
+ dispatchChangeEvent() {
243
+ this.dispatchEvent(new CustomEvent('dile-rating-scale-question-changed', {
244
+ bubbles: true,
245
+ composed: true,
246
+ detail: {
247
+ name: this.name,
248
+ value: this.value
249
+ }
250
+ }));
251
+ }
252
+ }
@@ -0,0 +1 @@
1
+ export { DileSelect } from './src/DileSelect.js';
@@ -0,0 +1,4 @@
1
+ import './select.js'
2
+ import { DileSelectAjax } from "./src/DileSelectAjax.js";
3
+
4
+ window.customElements.define("dile-select-ajax", DileSelectAjax);
@@ -0,0 +1,3 @@
1
+ import { DileSelect } from "./src/DileSelect.js";
2
+
3
+ window.customElements.define("dile-select", DileSelect);