@decidables/decidables-elements 0.4.8 → 0.5.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decidables/decidables-elements",
3
- "version": "0.4.8",
3
+ "version": "0.5.0",
4
4
  "description": "decidables-elements: Basic UI Web Components for the decidables project",
5
5
  "keywords": [
6
6
  "web component",
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "d3": "^7.9.0",
49
- "lit": "^3.1.3"
49
+ "lit": "^3.2.1"
50
50
  },
51
- "gitHead": "5cf2dfb67f1654e4bae73186064131b1f99f1738"
51
+ "gitHead": "0320347d03a20fb478784fe296c82f11018c276b"
52
52
  }
package/src/button.js CHANGED
@@ -26,6 +26,9 @@ export default class DecidablesButton extends DecidablesElement {
26
26
  super.styles,
27
27
  css`
28
28
  :host {
29
+ ---decidables-button-background-color-disabled: var(--decidables-button-background-color, var(---color-element-disabled));
30
+ ---decidables-button-background-color-enabled: var(--decidables-button-background-color, var(---color-element-enabled));
31
+
29
32
  margin: 0.25rem;
30
33
  }
31
34
 
@@ -45,7 +48,7 @@ export default class DecidablesButton extends DecidablesElement {
45
48
  }
46
49
 
47
50
  button:disabled {
48
- background-color: var(--decidables-button-background-color, var(---color-element-disabled));
51
+ background-color: var(---decidables-button-background-color-disabled);
49
52
  outline: none;
50
53
  box-shadow: none;
51
54
  }
@@ -53,7 +56,7 @@ export default class DecidablesButton extends DecidablesElement {
53
56
  button:enabled {
54
57
  cursor: pointer;
55
58
 
56
- background-color: var(--decidables-button-background-color, var(---color-element-enabled));
59
+ background-color: var(---decidables-button-background-color-enabled);
57
60
  outline: none;
58
61
  box-shadow: var(---shadow-2);
59
62
  }
package/src/slider.js CHANGED
@@ -12,6 +12,13 @@ export default class DecidablesSlider extends DecidablesElement {
12
12
  type: Boolean,
13
13
  reflect: true,
14
14
  },
15
+
16
+ scale: {
17
+ attribute: 'scale',
18
+ type: Boolean,
19
+ reflect: true,
20
+ },
21
+
15
22
  max: {
16
23
  attribute: 'max',
17
24
  type: Number,
@@ -32,6 +39,12 @@ export default class DecidablesSlider extends DecidablesElement {
32
39
  type: Number,
33
40
  reflect: true,
34
41
  },
42
+
43
+ nonlinear: {
44
+ attribute: false,
45
+ type: Boolean,
46
+ reflect: false,
47
+ },
35
48
  };
36
49
  }
37
50
 
@@ -40,14 +53,36 @@ export default class DecidablesSlider extends DecidablesElement {
40
53
 
41
54
  // Attributes
42
55
  this.disabled = false;
56
+
57
+ this.scale = false;
58
+
43
59
  this.max = undefined;
44
60
  this.min = undefined;
45
61
  this.step = undefined;
46
62
  this.value = undefined;
63
+
64
+ this.nonlinear = false;
65
+
66
+ // Properties
67
+ this.rangeMax = undefined;
68
+ this.rangeMin = undefined;
69
+ this.rangeStep = undefined;
70
+ this.rangeValue = undefined;
71
+
72
+ // Transform
73
+ this.toRange = undefined;
74
+ this.fromRange = undefined;
47
75
  }
48
76
 
49
- changed(event) {
50
- this.value = event.target.value;
77
+ nonlinearRange(nonlinear, toRange, fromRange) {
78
+ this.nonlinear = nonlinear;
79
+
80
+ this.toRange = nonlinear ? toRange : undefined;
81
+ this.fromRange = nonlinear ? fromRange : undefined;
82
+ }
83
+
84
+ rangeChanged(event) {
85
+ this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;
51
86
  this.dispatchEvent(new CustomEvent('change', {
52
87
  detail: {
53
88
  value: this.value,
@@ -56,15 +91,46 @@ export default class DecidablesSlider extends DecidablesElement {
56
91
  }));
57
92
  }
58
93
 
59
- inputted(event) {
94
+ rangeInputted(event) {
95
+ this.value = this.nonlinear ? this.fromRange(event.target.value) : event.target.value;
96
+ }
97
+
98
+ spinnerInputted(event) {
60
99
  this.value = event.target.value;
61
100
  }
62
101
 
102
+ willUpdate() {
103
+ this.rangeMax = (this.max === undefined)
104
+ ? undefined
105
+ : this.nonlinear
106
+ ? this.toRange(this.max)
107
+ : this.max;
108
+ this.rangeMin = (this.min === undefined)
109
+ ? undefined
110
+ : this.nonlinear
111
+ ? this.toRange(this.min)
112
+ : this.min;
113
+ this.rangeStep = (this.step === undefined)
114
+ ? undefined
115
+ : this.nonlinear
116
+ ? 'any'
117
+ : this.step;
118
+ this.rangeValue = (this.value === undefined)
119
+ ? undefined
120
+ : this.nonlinear
121
+ ? this.toRange(this.value)
122
+ : this.value;
123
+ }
124
+
63
125
  static get styles() {
64
126
  return [
65
127
  super.styles,
66
128
  css`
67
129
  :host {
130
+ ---decidables-slider-background-color: var(--decidables-slider-background-color, var(---color-element-disabled));
131
+ ---decidables-slider-color: var(--decidables-slider-color, var(---color-element-enabled));
132
+ ---decidables-spinner-background-color: var(--decidables-slider-background-color, none);
133
+
68
134
  ---shadow-2-rotate: var(--shadow-2-rotate, ${unsafeCSS(this.cssBoxShadow(2, true, false))});
69
135
  ---shadow-4-rotate: var(--shadow-4-rotate, ${unsafeCSS(this.cssBoxShadow(4, true, false))});
70
136
  ---shadow-8-rotate: var(--shadow-8-rotate, ${unsafeCSS(this.cssBoxShadow(8, true, false))});
@@ -82,7 +148,10 @@ export default class DecidablesSlider extends DecidablesElement {
82
148
  }
83
149
 
84
150
  .range {
85
- display: inline-block;
151
+ position: relative;
152
+ display: flex;
153
+
154
+ flex-direction: row;
86
155
 
87
156
  width: 3.5rem;
88
157
  height: 4.75rem;
@@ -93,6 +162,8 @@ export default class DecidablesSlider extends DecidablesElement {
93
162
  --decidables-spinner-input-width: 3.5rem;
94
163
 
95
164
  margin: 0 0.25rem 0.25rem;
165
+
166
+ background: var(---decidables-spinner-background-color);
96
167
  }
97
168
 
98
169
  /* Adapted from http://danielstern.ca/range.css/#/ */
@@ -131,14 +202,14 @@ export default class DecidablesSlider extends DecidablesElement {
131
202
  width: 100%;
132
203
  height: 4px;
133
204
 
134
- background: var(---color-element-disabled);
205
+ background: var(---decidables-slider-background-color);
135
206
  border: 0;
136
207
  border-radius: 2px;
137
208
  box-shadow: none;
138
209
  }
139
210
 
140
211
  input[type=range]:focus::-webkit-slider-runnable-track {
141
- background: var(---color-element-disabled);
212
+ background: var(---decidables-slider-background-color);
142
213
  }
143
214
 
144
215
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
@@ -146,7 +217,7 @@ export default class DecidablesSlider extends DecidablesElement {
146
217
  width: 100%;
147
218
  height: 4px;
148
219
 
149
- background: var(---color-element-disabled);
220
+ background: var(---decidables-slider-background-color);
150
221
  border: 0;
151
222
  border-radius: 2px;
152
223
  box-shadow: none;
@@ -166,7 +237,7 @@ export default class DecidablesSlider extends DecidablesElement {
166
237
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
167
238
  input[type=range]::-ms-fill-lower {
168
239
  background: #cccccc;
169
- /* background: var(---color-element-disabled); */
240
+ /* background: var(---decidables-slider-background-color); */
170
241
  border: 0;
171
242
  border-radius: 2px;
172
243
  box-shadow: none;
@@ -175,7 +246,7 @@ export default class DecidablesSlider extends DecidablesElement {
175
246
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
176
247
  input[type=range]::-ms-fill-upper {
177
248
  background: #cccccc;
178
- /* background: var(---color-element-disabled); */
249
+ /* background: var(---decidables-slider-background-color); */
179
250
  border: 0;
180
251
  border-radius: 2px;
181
252
  box-shadow: none;
@@ -183,12 +254,12 @@ export default class DecidablesSlider extends DecidablesElement {
183
254
 
184
255
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
185
256
  input[type=range]:focus::-ms-fill-lower {
186
- background: var(---color-element-disabled);
257
+ background: var(---decidables-slider-background-color);
187
258
  }
188
259
 
189
260
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
190
261
  input[type=range]:focus::-ms-fill-upper {
191
- background: var(---color-element-disabled);
262
+ background: var(---decidables-slider-background-color);
192
263
  }
193
264
 
194
265
  /* Thumb */
@@ -206,12 +277,12 @@ export default class DecidablesSlider extends DecidablesElement {
206
277
  }
207
278
 
208
279
  input[type=range]:disabled::-webkit-slider-thumb {
209
- background: var(---color-element-disabled);
280
+ background: var(---decidables-slider-background-color);
210
281
  box-shadow: none;
211
282
  }
212
283
 
213
284
  input[type=range]:enabled::-webkit-slider-thumb {
214
- background: var(---color-element-enabled);
285
+ background: var(---decidables-slider-color);
215
286
  box-shadow: var(---shadow-2-rotate);
216
287
  }
217
288
 
@@ -242,13 +313,13 @@ export default class DecidablesSlider extends DecidablesElement {
242
313
 
243
314
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
244
315
  input[type=range]:disabled::-moz-range-thumb {
245
- background: var(---color-element-disabled);
316
+ background: var(---decidables-slider-background-color);
246
317
  box-shadow: none;
247
318
  }
248
319
 
249
320
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
250
321
  input[type=range]:enabled::-moz-range-thumb {
251
- background: var(---color-element-enabled);
322
+ background: var(---decidables-slider-color);
252
323
  box-shadow: var(---shadow-2-rotate);
253
324
  }
254
325
 
@@ -285,13 +356,13 @@ export default class DecidablesSlider extends DecidablesElement {
285
356
 
286
357
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
287
358
  input[type=range]:disabled::-ms-thumb {
288
- background: var(---color-element-disabled);
359
+ background: var(---decidables-slider-background-color);
289
360
  box-shadow: none;
290
361
  }
291
362
 
292
363
  /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
293
364
  input[type=range]:enabled::-ms-thumb {
294
- background: var(---color-element-enabled);
365
+ background: var(---decidables-slider-color);
295
366
  box-shadow: var(---shadow-2-rotate);
296
367
  }
297
368
 
@@ -313,6 +384,33 @@ export default class DecidablesSlider extends DecidablesElement {
313
384
  :host(.keyboard) input[type=range]:enabled:focus:active::-ms-thumb {
314
385
  box-shadow: var(---shadow-8-rotate);
315
386
  }
387
+
388
+ datalist {
389
+ position: absolute;
390
+ left: 2rem;
391
+ z-index: -1;
392
+ display: flex;
393
+
394
+ flex-direction: column;
395
+
396
+ align-items: flex-start;
397
+ justify-content: space-between;
398
+
399
+ height: 4.75rem;
400
+
401
+ font-size: 0.75rem;
402
+ }
403
+
404
+ option {
405
+ padding: 0;
406
+
407
+ line-height: 0.8;
408
+ min-block-size: 0;
409
+ }
410
+
411
+ option::before {
412
+ content: "– ";
413
+ }
316
414
  `,
317
415
  ];
318
416
  }
@@ -323,9 +421,18 @@ export default class DecidablesSlider extends DecidablesElement {
323
421
  <slot></slot>
324
422
  </label>
325
423
  <div class="range">
326
- <input ?disabled=${this.disabled} type="range" id="slider" min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @change=${this.changed.bind(this)} @input=${this.inputted.bind(this)}>
424
+ <input ?disabled=${this.disabled} type="range" id="slider" min=${ifDefined(this.rangeMin)} max=${ifDefined(this.rangeMax)} step=${ifDefined(this.rangeStep)} .value=${this.rangeValue} @change=${this.rangeChanged.bind(this)} @input=${this.rangeInputted.bind(this)}>
425
+ ${this.scale
426
+ ? html`
427
+ <datalist id="ticks">
428
+ <option value=${ifDefined(this.rangeMax)} label=${ifDefined(this.max)}></option>
429
+ <option value=${ifDefined(this.rangeMin)} label=${ifDefined(this.min)}></option>
430
+ </datalist>
431
+ `
432
+ : html``
433
+ }
327
434
  </div>
328
- <decidables-spinner ?disabled=${this.disabled} min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @input=${this.inputted.bind(this)}></decidables-spinner>
435
+ <decidables-spinner ?disabled=${this.disabled} min=${ifDefined(this.min)} max=${ifDefined(this.max)} step=${ifDefined(this.step)} .value=${this.value} @input=${this.spinnerInputted.bind(this)}></decidables-spinner>
329
436
  `;
330
437
  }
331
438
  }