@ixfx/components 0.2.3 → 0.2.5
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/LICENSE +1 -1
- package/bundle/chunk-pbuEa-1d.js +13 -0
- package/bundle/index.d.ts +4702 -569
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +34929 -2800
- package/bundle/index.js.map +1 -1
- package/bundle/style.css +133 -0
- package/dist/ac-text.d.ts +97 -0
- package/dist/ac-text.d.ts.map +1 -0
- package/dist/ac-text.js +484 -0
- package/dist/ac-text.js.map +1 -0
- package/dist/button-DgKUzE5o.js +121 -0
- package/dist/button-DgKUzE5o.js.map +1 -0
- package/dist/button.d.ts +21 -0
- package/dist/button.d.ts.map +1 -0
- package/dist/button.js +3 -0
- package/dist/checkbox.d.ts +34 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +251 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunk-pbuEa-1d.js +13 -0
- package/dist/colour-C3MQIjFJ-BJV-QC-3.js +4138 -0
- package/dist/colour-C3MQIjFJ-BJV-QC-3.js.map +1 -0
- package/dist/colour-picker-Bw-AZoWx.js +922 -0
- package/dist/colour-picker-Bw-AZoWx.js.map +1 -0
- package/dist/colour-picker.d.ts +2 -0
- package/dist/colour-picker.js +2 -0
- package/dist/crumbs.d.ts +92 -0
- package/dist/crumbs.d.ts.map +1 -0
- package/dist/crumbs.js +789 -0
- package/dist/crumbs.js.map +1 -0
- package/dist/data-display.d.ts +24 -12
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +96 -105
- package/dist/data-display.js.map +1 -1
- package/dist/decorate-BZbkqIhA.js +9 -0
- package/dist/defaults-FEZaGiYZ.js +38 -0
- package/dist/defaults-FEZaGiYZ.js.map +1 -0
- package/dist/dist-By5URG0Y.js +1290 -0
- package/dist/dist-By5URG0Y.js.map +1 -0
- package/dist/dist-D7kJgnSE.js +1039 -0
- package/dist/dist-D7kJgnSE.js.map +1 -0
- package/dist/editable-label.d.ts +71 -0
- package/dist/editable-label.d.ts.map +1 -0
- package/dist/editable-label.js +279 -0
- package/dist/editable-label.js.map +1 -0
- package/dist/hex-editor-Gib1Grg2.d.ts +131 -0
- package/dist/hex-editor-Gib1Grg2.d.ts.map +1 -0
- package/dist/hex-editor-Wd6ZtZA2.js +1147 -0
- package/dist/hex-editor-Wd6ZtZA2.js.map +1 -0
- package/dist/hex.d.ts +2 -0
- package/dist/hex.js +2 -0
- package/dist/highlight-CAjwQ4GE.js +50 -0
- package/dist/highlight-CAjwQ4GE.js.map +1 -0
- package/dist/icon-BR5aTIiP.js +100 -0
- package/dist/icon-BR5aTIiP.js.map +1 -0
- package/dist/icon-DQKdfR7U.d.ts +36 -0
- package/dist/icon-DQKdfR7U.d.ts.map +1 -0
- package/dist/icons.d.ts +3 -0
- package/dist/icons.js +9 -0
- package/dist/icons.js.map +1 -0
- package/dist/incr-search-BjCNClnC.js +311 -0
- package/dist/incr-search-BjCNClnC.js.map +1 -0
- package/dist/incr-search.d.ts +2 -0
- package/dist/incr-search.js +3 -0
- package/dist/index-B1hNR7Z9.d.ts +36 -0
- package/dist/index-B1hNR7Z9.d.ts.map +1 -0
- package/dist/index-C5dK8RZa.d.ts +23 -0
- package/dist/index-C5dK8RZa.d.ts.map +1 -0
- package/dist/index-C9iBN908.d.ts +160 -0
- package/dist/index-C9iBN908.d.ts.map +1 -0
- package/dist/index-CPVcTTXo.d.ts +396 -0
- package/dist/index-CPVcTTXo.d.ts.map +1 -0
- package/dist/index-CQxanqXF.d.ts +183 -0
- package/dist/index-CQxanqXF.d.ts.map +1 -0
- package/dist/index-CpbBI3n7.d.ts +1239 -0
- package/dist/index-CpbBI3n7.d.ts.map +1 -0
- package/dist/index.d.ts +422 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5729 -14
- package/dist/index.js.map +1 -1
- package/dist/interaction-CQDQJf2Q.js +1 -0
- package/dist/keyboard-De_vOHLg.js +20 -0
- package/dist/keyboard-De_vOHLg.js.map +1 -0
- package/dist/labelled-input-base-DS6-6C0r.js +155 -0
- package/dist/labelled-input-base-DS6-6C0r.js.map +1 -0
- package/dist/labelled-input-base-DnRh4reU.d.ts +43 -0
- package/dist/labelled-input-base-DnRh4reU.d.ts.map +1 -0
- package/dist/labelled-radial-input.d.ts +34 -0
- package/dist/labelled-radial-input.d.ts.map +1 -0
- package/dist/labelled-radial-input.js +188 -0
- package/dist/labelled-radial-input.js.map +1 -0
- package/dist/labelled-range-input.d.ts +2 -0
- package/dist/labelled-range-input.js +132 -0
- package/dist/labelled-range-input.js.map +1 -0
- package/dist/led.d.ts +25 -0
- package/dist/led.d.ts.map +1 -0
- package/dist/led.js +92 -0
- package/dist/led.js.map +1 -0
- package/dist/menu-BV6UFx_z.js +813 -0
- package/dist/menu-BV6UFx_z.js.map +1 -0
- package/dist/menu-item-Cikacp4F.d.ts +128 -0
- package/dist/menu-item-Cikacp4F.d.ts.map +1 -0
- package/dist/menu-item-DEzL_Yjk.js +766 -0
- package/dist/menu-item-DEzL_Yjk.js.map +1 -0
- package/dist/menu.d.ts +3 -0
- package/dist/menu.js +3 -0
- package/dist/miller.d.ts +324 -0
- package/dist/miller.d.ts.map +1 -0
- package/dist/miller.js +1343 -0
- package/dist/miller.js.map +1 -0
- package/dist/narrowed-text.d.ts +72 -0
- package/dist/narrowed-text.d.ts.map +1 -0
- package/dist/narrowed-text.js +571 -0
- package/dist/narrowed-text.js.map +1 -0
- package/dist/panel.d.ts +43 -0
- package/dist/panel.d.ts.map +1 -0
- package/dist/panel.js +408 -0
- package/dist/panel.js.map +1 -0
- package/dist/plots.d.ts +2 -0
- package/dist/plots.js +2 -0
- package/dist/polar-pad.d.ts +67 -0
- package/dist/polar-pad.d.ts.map +1 -0
- package/dist/polar-pad.js +537 -0
- package/dist/polar-pad.js.map +1 -0
- package/dist/popup-Ddx9LCzY.js +24 -0
- package/dist/popup-Ddx9LCzY.js.map +1 -0
- package/dist/prominence-CreDBdCs.js +98 -0
- package/dist/prominence-CreDBdCs.js.map +1 -0
- package/dist/radial-input-CNJ8asY2.js +849 -0
- package/dist/radial-input-CNJ8asY2.js.map +1 -0
- package/dist/radial-input-xSTd4kEz.d.ts +70 -0
- package/dist/radial-input-xSTd4kEz.d.ts.map +1 -0
- package/dist/radial-input.d.ts +2 -0
- package/dist/radial-input.js +2 -0
- package/dist/range-input.d.ts +43 -0
- package/dist/range-input.d.ts.map +1 -0
- package/dist/range-input.js +459 -0
- package/dist/range-input.js.map +1 -0
- package/dist/range.d.ts +28 -0
- package/dist/range.d.ts.map +1 -0
- package/dist/range.js +136 -0
- package/dist/range.js.map +1 -0
- package/dist/registry-CZEB1YI9.js +21 -0
- package/dist/registry-CZEB1YI9.js.map +1 -0
- package/dist/selecthorizontal.d.ts +13 -8
- package/dist/selecthorizontal.d.ts.map +1 -1
- package/dist/selecthorizontal.js +21 -25
- package/dist/selecthorizontal.js.map +1 -1
- package/dist/snap-container.d.ts +50 -0
- package/dist/snap-container.d.ts.map +1 -0
- package/dist/snap-container.js +297 -0
- package/dist/snap-container.js.map +1 -0
- package/dist/split-layout.d.ts +56 -0
- package/dist/split-layout.d.ts.map +1 -0
- package/dist/split-layout.js +545 -0
- package/dist/split-layout.js.map +1 -0
- package/dist/style.css +133 -0
- package/dist/swipe.d.ts +48 -0
- package/dist/swipe.d.ts.map +1 -0
- package/dist/swipe.js +204 -0
- package/dist/swipe.js.map +1 -0
- package/dist/tab-list-CFF7uSYH.d.ts +66 -0
- package/dist/tab-list-CFF7uSYH.d.ts.map +1 -0
- package/dist/tabs.d.ts +2 -0
- package/dist/tabs.js +203 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tickled-controller-Cq1Va0rR.d.ts +218 -0
- package/dist/tickled-controller-Cq1Va0rR.d.ts.map +1 -0
- package/dist/tickled-styles-Bg3QbcrD.js +327 -0
- package/dist/tickled-styles-Bg3QbcrD.js.map +1 -0
- package/dist/timeline-DBWJsSjd.js +1748 -0
- package/dist/timeline-DBWJsSjd.js.map +1 -0
- package/dist/timeline.d.ts +2 -0
- package/dist/timeline.js +2 -0
- package/dist/tooltip-DMxmBNky.js +104 -0
- package/dist/tooltip-DMxmBNky.js.map +1 -0
- package/dist/tooltip-kfUBWYVB.d.ts +26 -0
- package/dist/tooltip-kfUBWYVB.d.ts.map +1 -0
- package/dist/tree-component-CQpoPo4s.d.ts +326 -0
- package/dist/tree-component-CQpoPo4s.d.ts.map +1 -0
- package/dist/tree-data-model-DGvRVOFY.js +190 -0
- package/dist/tree-data-model-DGvRVOFY.js.map +1 -0
- package/dist/tree.d.ts +100 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +1144 -0
- package/dist/tree.js.map +1 -0
- package/dist/types-BKaqnpwx.d.ts +8 -0
- package/dist/types-BKaqnpwx.d.ts.map +1 -0
- package/dist/xy-axis-BANbgrI5.js +6243 -0
- package/dist/xy-axis-BANbgrI5.js.map +1 -0
- package/dist/xy-axis-CIFok7MF.d.ts +141 -0
- package/dist/xy-axis-CIFok7MF.d.ts.map +1 -0
- package/dist/xy-pad.d.ts +81 -0
- package/dist/xy-pad.d.ts.map +1 -0
- package/dist/xy-pad.js +435 -0
- package/dist/xy-pad.js.map +1 -0
- package/package.json +48 -39
- package/README.md +0 -14
- package/dist/charts/frequency-histogram-plot.d.ts +0 -33
- package/dist/charts/frequency-histogram-plot.d.ts.map +0 -1
- package/dist/charts/frequency-histogram-plot.js +0 -54
- package/dist/charts/frequency-histogram-plot.js.map +0 -1
- package/dist/charts/histogram-vis.d.ts +0 -57
- package/dist/charts/histogram-vis.d.ts.map +0 -1
- package/dist/charts/histogram-vis.js +0 -222
- package/dist/charts/histogram-vis.js.map +0 -1
- package/dist/charts/plot.d.ts +0 -199
- package/dist/charts/plot.d.ts.map +0 -1
- package/dist/charts/plot.js +0 -914
- package/dist/charts/plot.js.map +0 -1
- package/dist/crumb-nav.d.ts +0 -41
- package/dist/crumb-nav.d.ts.map +0 -1
- package/dist/crumb-nav.js +0 -198
- package/dist/crumb-nav.js.map +0 -1
- package/dist/crumb-navigation.d.ts +0 -30
- package/dist/crumb-navigation.d.ts.map +0 -1
- package/dist/crumb-navigation.js +0 -307
- package/dist/crumb-navigation.js.map +0 -1
- package/dist/dial.d.ts +0 -89
- package/dist/dial.d.ts.map +0 -1
- package/dist/dial.js +0 -506
- package/dist/dial.js.map +0 -1
- package/dist/my-element.d.ts +0 -14
- package/dist/my-element.d.ts.map +0 -1
- package/dist/my-element.js +0 -44
- package/dist/my-element.js.map +0 -1
- package/dist/split-layout/split-layout.d.ts +0 -35
- package/dist/split-layout/split-layout.d.ts.map +0 -1
- package/dist/split-layout/split-layout.js +0 -220
- package/dist/split-layout/split-layout.js.map +0 -1
- package/dist/svg-edit-label.d.ts +0 -2
- package/dist/svg-edit-label.d.ts.map +0 -1
- package/dist/svg-edit-label.js +0 -110
- package/dist/svg-edit-label.js.map +0 -1
- package/dist/tabs/tab-layout-item.d.ts +0 -10
- package/dist/tabs/tab-layout-item.d.ts.map +0 -1
- package/dist/tabs/tab-layout-item.js +0 -20
- package/dist/tabs/tab-layout-item.js.map +0 -1
- package/dist/tabs/tab-layout.d.ts +0 -10
- package/dist/tabs/tab-layout.d.ts.map +0 -1
- package/dist/tabs/tab-layout.js +0 -25
- package/dist/tabs/tab-layout.js.map +0 -1
- package/dist/tabs/tab-list-item.d.ts +0 -18
- package/dist/tabs/tab-list-item.d.ts.map +0 -1
- package/dist/tabs/tab-list-item.js +0 -63
- package/dist/tabs/tab-list-item.js.map +0 -1
- package/dist/tabs/tab-list.d.ts +0 -21
- package/dist/tabs/tab-list.d.ts.map +0 -1
- package/dist/tabs/tab-list.js +0 -148
- package/dist/tabs/tab-list.js.map +0 -1
- package/dist/tabs/tab-panel.d.ts +0 -11
- package/dist/tabs/tab-panel.d.ts.map +0 -1
- package/dist/tabs/tab-panel.js +0 -30
- package/dist/tabs/tab-panel.js.map +0 -1
- package/dist/tabs/tab-panels.d.ts +0 -30
- package/dist/tabs/tab-panels.d.ts.map +0 -1
- package/dist/tabs/tab-panels.js +0 -80
- package/dist/tabs/tab-panels.js.map +0 -1
- package/dist/util/circle-arc.d.ts +0 -34
- package/dist/util/circle-arc.d.ts.map +0 -1
- package/dist/util/circle-arc.js +0 -77
- package/dist/util/circle-arc.js.map +0 -1
- package/dist/util/compare.d.ts +0 -53
- package/dist/util/compare.d.ts.map +0 -1
- package/dist/util/compare.js +0 -91
- package/dist/util/compare.js.map +0 -1
- package/dist/util/content-editable.d.ts +0 -2
- package/dist/util/content-editable.d.ts.map +0 -1
- package/dist/util/content-editable.js +0 -13
- package/dist/util/content-editable.js.map +0 -1
- package/dist/util/drag-controller.d.ts +0 -13
- package/dist/util/drag-controller.d.ts.map +0 -1
- package/dist/util/drag-controller.js +0 -21
- package/dist/util/drag-controller.js.map +0 -1
- package/dist/util/key-value.d.ts +0 -5
- package/dist/util/key-value.d.ts.map +0 -1
- package/dist/util/key-value.js +0 -30
- package/dist/util/key-value.js.map +0 -1
- package/dist/util/primitive-types.d.ts +0 -6
- package/dist/util/primitive-types.d.ts.map +0 -1
- package/dist/util/primitive-types.js +0 -2
- package/dist/util/primitive-types.js.map +0 -1
- package/dist/util/svg-editable-text.d.ts +0 -22
- package/dist/util/svg-editable-text.d.ts.map +0 -1
- package/dist/util/svg-editable-text.js +0 -121
- package/dist/util/svg-editable-text.js.map +0 -1
- package/dist/util/time.d.ts +0 -2
- package/dist/util/time.d.ts.map +0 -1
- package/dist/util/time.js +0 -2
- package/dist/util/time.js.map +0 -1
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
import { t as __decorate } from "./decorate-BZbkqIhA.js";
|
|
2
|
+
import { t as tooltipValueStyles } from "./tooltip-DMxmBNky.js";
|
|
3
|
+
import { LitElement, css, html, nothing } from "lit";
|
|
4
|
+
import { customElement, property, query } from "lit/decorators.js";
|
|
5
|
+
//#region src/range-input/range-input.ts
|
|
6
|
+
function normalize(value, min, max) {
|
|
7
|
+
return max === min ? 0 : (value - min) / (max - min);
|
|
8
|
+
}
|
|
9
|
+
let RangeInput = class RangeInput extends LitElement {
|
|
10
|
+
constructor(..._args) {
|
|
11
|
+
super(..._args);
|
|
12
|
+
this.min = 0;
|
|
13
|
+
this.max = 1;
|
|
14
|
+
this.value = 0;
|
|
15
|
+
this.step = .01;
|
|
16
|
+
this.orientation = `horizontal`;
|
|
17
|
+
this.swipeable = false;
|
|
18
|
+
this.tooltip = false;
|
|
19
|
+
this.tooltipOrientation = `top`;
|
|
20
|
+
this._swipeModified = false;
|
|
21
|
+
this._onPointerDown = (e) => {
|
|
22
|
+
if (!this.swipeable) return;
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
this._swipeModified = false;
|
|
25
|
+
this._applySwipeValue(this._valueFromPointer(e));
|
|
26
|
+
window.addEventListener(`pointerup`, this._onWindowPointerUp, { once: true });
|
|
27
|
+
};
|
|
28
|
+
this._onPointerMove = (e) => {
|
|
29
|
+
if (!this.swipeable || e.buttons === 0) return;
|
|
30
|
+
this._applySwipeValue(this._valueFromPointer(e));
|
|
31
|
+
};
|
|
32
|
+
this._onPointerEnter = (e) => {
|
|
33
|
+
if (!this.swipeable || e.buttons === 0) return;
|
|
34
|
+
this._swipeModified = false;
|
|
35
|
+
this._applySwipeValue(this._valueFromPointer(e));
|
|
36
|
+
window.addEventListener(`pointerup`, this._onWindowPointerUp, { once: true });
|
|
37
|
+
};
|
|
38
|
+
this._onPointerLeave = (_e) => {
|
|
39
|
+
if (!this.swipeable || !this._swipeModified) return;
|
|
40
|
+
this._swipeModified = false;
|
|
41
|
+
this.dispatchEvent(new CustomEvent(`change`, {
|
|
42
|
+
detail: { value: this.value },
|
|
43
|
+
bubbles: true,
|
|
44
|
+
composed: true
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
this._onWindowPointerUp = () => {
|
|
48
|
+
if (!this._swipeModified) return;
|
|
49
|
+
this._swipeModified = false;
|
|
50
|
+
this.dispatchEvent(new CustomEvent(`change`, {
|
|
51
|
+
detail: { value: this.value },
|
|
52
|
+
bubbles: true,
|
|
53
|
+
composed: true
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
this._handleInput = (e) => {
|
|
57
|
+
e.preventDefault();
|
|
58
|
+
e.stopImmediatePropagation();
|
|
59
|
+
const target = e.target;
|
|
60
|
+
const value = Number.parseFloat(target.value);
|
|
61
|
+
this.value = value;
|
|
62
|
+
this.style.setProperty(`--value`, String(normalize(value, this.min, this.max)));
|
|
63
|
+
this.dispatchEvent(new CustomEvent(`input`, {
|
|
64
|
+
detail: { value },
|
|
65
|
+
bubbles: true,
|
|
66
|
+
composed: true
|
|
67
|
+
}));
|
|
68
|
+
};
|
|
69
|
+
this._handleChange = () => {
|
|
70
|
+
const value = Number.parseFloat(this._inputEl.value);
|
|
71
|
+
this.dispatchEvent(new CustomEvent(`change`, {
|
|
72
|
+
detail: { value },
|
|
73
|
+
bubbles: true,
|
|
74
|
+
composed: true
|
|
75
|
+
}));
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
connectedCallback() {
|
|
79
|
+
super.connectedCallback();
|
|
80
|
+
this.addEventListener(`pointerdown`, this._onPointerDown);
|
|
81
|
+
this.addEventListener(`pointermove`, this._onPointerMove);
|
|
82
|
+
this.addEventListener(`pointerenter`, this._onPointerEnter);
|
|
83
|
+
this.addEventListener(`pointerleave`, this._onPointerLeave);
|
|
84
|
+
}
|
|
85
|
+
disconnectedCallback() {
|
|
86
|
+
super.disconnectedCallback();
|
|
87
|
+
this.removeEventListener(`pointerdown`, this._onPointerDown);
|
|
88
|
+
this.removeEventListener(`pointermove`, this._onPointerMove);
|
|
89
|
+
this.removeEventListener(`pointerenter`, this._onPointerEnter);
|
|
90
|
+
this.removeEventListener(`pointerleave`, this._onPointerLeave);
|
|
91
|
+
window.removeEventListener(`pointerup`, this._onWindowPointerUp);
|
|
92
|
+
}
|
|
93
|
+
_valueFromPointer(e) {
|
|
94
|
+
const rect = this.getBoundingClientRect();
|
|
95
|
+
const normalized = this.orientation === `vertical` ? Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height)) : Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
|
|
96
|
+
const raw = this.min + normalized * (this.max - this.min);
|
|
97
|
+
const snapped = Math.round((raw - this.min) / this.step) * this.step + this.min;
|
|
98
|
+
return Math.max(this.min, Math.min(this.max, snapped));
|
|
99
|
+
}
|
|
100
|
+
_applySwipeValue(value) {
|
|
101
|
+
this.value = value;
|
|
102
|
+
if (this._inputEl) this._inputEl.value = String(value);
|
|
103
|
+
this.style.setProperty(`--value`, String(normalize(value, this.min, this.max)));
|
|
104
|
+
this.dispatchEvent(new CustomEvent(`input`, {
|
|
105
|
+
detail: { value },
|
|
106
|
+
bubbles: true,
|
|
107
|
+
composed: true
|
|
108
|
+
}));
|
|
109
|
+
this._swipeModified = true;
|
|
110
|
+
}
|
|
111
|
+
updated(changedProperties) {
|
|
112
|
+
super.updated(changedProperties);
|
|
113
|
+
if (changedProperties.has(`value`) || changedProperties.has(`min`) || changedProperties.has(`max`)) this.style.setProperty(`--value`, String(normalize(this.value, this.min, this.max)));
|
|
114
|
+
if (this._tooltipEl) this._tooltipEl.valueFormatTooltip = (v) => {
|
|
115
|
+
const num = typeof v === `number` ? v : Number(v);
|
|
116
|
+
if (this.labelFormatter) return this.labelFormatter(num, normalize(num, this.min, this.max));
|
|
117
|
+
const decimals = this.step >= 1 ? 0 : this.step >= .1 ? 1 : 2;
|
|
118
|
+
return num.toFixed(decimals);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
_formatTooltipLabel() {
|
|
122
|
+
const normalized = normalize(this.value, this.min, this.max);
|
|
123
|
+
if (this.labelFormatter) return this.labelFormatter(this.value, normalized);
|
|
124
|
+
const decimals = this.step >= 1 ? 0 : this.step >= .1 ? 1 : 2;
|
|
125
|
+
return this.value.toFixed(decimals);
|
|
126
|
+
}
|
|
127
|
+
render() {
|
|
128
|
+
const tooltipEl = this.tooltip ? html`
|
|
129
|
+
<ixfx-tooltip
|
|
130
|
+
style="--tooltip-background: var(--surface-5); --tooltip-color: var(--surface-5-text)"
|
|
131
|
+
.orientation=${this.tooltipOrientation}
|
|
132
|
+
anchor="--ixfx-ri-thumb"
|
|
133
|
+
.value=${this.value}
|
|
134
|
+
></ixfx-tooltip>
|
|
135
|
+
` : nothing;
|
|
136
|
+
return html`
|
|
137
|
+
<div class="wrap">
|
|
138
|
+
<div class="range-bg"></div>
|
|
139
|
+
<input
|
|
140
|
+
type="range"
|
|
141
|
+
.min=${String(this.min)}
|
|
142
|
+
.max=${String(this.max)}
|
|
143
|
+
.step=${String(this.step)}
|
|
144
|
+
.value=${String(this.value)}
|
|
145
|
+
@input=${this._handleInput}
|
|
146
|
+
@change=${this._handleChange}
|
|
147
|
+
>${tooltipEl}
|
|
148
|
+
</div>
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
static {
|
|
152
|
+
this.styles = [tooltipValueStyles, css`
|
|
153
|
+
:host {
|
|
154
|
+
display: block;
|
|
155
|
+
container-type: size;
|
|
156
|
+
user-select: none;
|
|
157
|
+
touch-action: none;
|
|
158
|
+
-webkit-touch-action: none;
|
|
159
|
+
width: var(--width, 200px);
|
|
160
|
+
height: var(--height, 2em);
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
* Internal resolved vars — read public vars and apply defaults here.
|
|
164
|
+
* Public vars are NOT defined in :host {}, only read via fallback.
|
|
165
|
+
* This lets inherited values from ancestor elements flow through.
|
|
166
|
+
*/
|
|
167
|
+
--_track-thickness: var(--track-thickness, 100%);
|
|
168
|
+
--_thumb-thickness: var(--thumb-thickness, 2em);
|
|
169
|
+
--_thumb-color: var(--thumb-color, var(--surface-2-text));
|
|
170
|
+
--_thumb-color-active: var(--thumb-color-active, var(--surface-2-text));
|
|
171
|
+
--_thumb-opacity: var(--thumb-opacity, 0.7);
|
|
172
|
+
--_thumb-opacity-hover: var(--thumb-opacity-hover, 0.8);
|
|
173
|
+
--_thumb-opacity-active: var(--thumb-opacity-active, 1);
|
|
174
|
+
--_thumb-size: var(--thumb-size, var(--_track-thickness));
|
|
175
|
+
--_thumb-radius: var(--thumb-radius, 0);
|
|
176
|
+
--_thumb-border: var(--thumb-border, none);
|
|
177
|
+
--_thumb-shadow: var(--thumb-shadow, none);
|
|
178
|
+
--_track-radius: var(--track-radius, none);
|
|
179
|
+
--_track-corner-shape: var(--track-corner-shape, none);
|
|
180
|
+
--_bg-track: var(--background-track, var(--surface-4));
|
|
181
|
+
--_bg-track-hover: var(--background-track-hover, var(--_bg-track));
|
|
182
|
+
--_bg-track-value: var(--background-track-value, var(--surface-6));
|
|
183
|
+
--_bg-track-value-hover: var(--background-track-value-hover, var(--accent));
|
|
184
|
+
--_bg-track-value-active: var(--background-track-value-active, var(--accent));
|
|
185
|
+
|
|
186
|
+
--value: 0;
|
|
187
|
+
--sx1: calc(var(--_thumb-thickness) + var(--value) * (100% - var(--_thumb-thickness)));
|
|
188
|
+
--track-avail: calc(100% - var(--_thumb-thickness));
|
|
189
|
+
--sx: calc(var(--_thumb-thickness) + (var(--value) * var(--track-avail)));
|
|
190
|
+
--track-mask: linear-gradient(to right, rgba(0,0,0,1) var(--sx), rgba(0,0,0,0) var(--sx) 100%);
|
|
191
|
+
--track-mask-vertical: linear-gradient(to top, rgba(0,0,0,1) var(--sx), rgba(0,0,0,0) var(--sx) 100%);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
:host([orientation="vertical"]) {
|
|
195
|
+
width: var(--width, 2em);
|
|
196
|
+
height: var(--height, 200px);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.wrap {
|
|
200
|
+
display: grid;
|
|
201
|
+
width: 100%;
|
|
202
|
+
height: 100%;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.wrap > * {
|
|
206
|
+
grid-area: 1 / 1;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.range-bg {
|
|
210
|
+
background: var(--_bg-track);
|
|
211
|
+
width: 100%;
|
|
212
|
+
height: 100%;
|
|
213
|
+
margin: 0;
|
|
214
|
+
padding: 0;
|
|
215
|
+
border-radius: var(--_track-radius);
|
|
216
|
+
corner-shape: var(--_track-corner-shape);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.wrap:hover .range-bg {
|
|
220
|
+
background: var(--_bg-track-hover);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
input[type=range] {
|
|
224
|
+
margin: 0;
|
|
225
|
+
padding: 0;
|
|
226
|
+
-webkit-appearance: none;
|
|
227
|
+
background: unset;
|
|
228
|
+
box-shadow: none;
|
|
229
|
+
width: 100%;
|
|
230
|
+
height: var(--_track-thickness);
|
|
231
|
+
align-self: center;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
input[type=range]:focus {
|
|
235
|
+
outline: none;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* Vertical layout */
|
|
239
|
+
:host([orientation="vertical"]) .range-bg {
|
|
240
|
+
background: var(--background-track-vertical, var(--_bg-track));
|
|
241
|
+
width: var(--_track-thickness);
|
|
242
|
+
height: 100%;
|
|
243
|
+
justify-self: center;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
:host([orientation="vertical"]) .wrap:hover .range-bg {
|
|
247
|
+
background: var(--background-track-hover-vertical, var(--_bg-track-hover));
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
:host([orientation="vertical"]) input[type=range] {
|
|
251
|
+
writing-mode: vertical-rl;
|
|
252
|
+
direction: rtl;
|
|
253
|
+
width: var(--_track-thickness);
|
|
254
|
+
height: 100%;
|
|
255
|
+
justify-self: center;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/* ── Webkit thumb ── */
|
|
259
|
+
input[type=range]::-webkit-slider-thumb {
|
|
260
|
+
-webkit-appearance: none;
|
|
261
|
+
opacity: var(--_thumb-opacity);
|
|
262
|
+
box-sizing: border-box;
|
|
263
|
+
anchor-name: --ixfx-ri-thumb;
|
|
264
|
+
width: var(--_thumb-thickness);
|
|
265
|
+
height: var(--_thumb-size);
|
|
266
|
+
border-radius: var(--_thumb-radius);
|
|
267
|
+
background: var(--_thumb-color);
|
|
268
|
+
border: var(--_thumb-border);
|
|
269
|
+
box-shadow: var(--_thumb-shadow);
|
|
270
|
+
margin-top: calc(max((var(--_thumb-thickness) - 1px - 1px) * 0.5, 0px) - var(--_thumb-thickness) * 0.5);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
:host([orientation="vertical"]) input[type=range]::-webkit-slider-thumb {
|
|
274
|
+
width: var(--_thumb-size);
|
|
275
|
+
height: var(--_thumb-thickness);
|
|
276
|
+
margin-top: 0;
|
|
277
|
+
margin-left: calc(max((1em - 1px - 1px) * 0.5, 0px) - 1.2em * 0.5);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
input[type=range]::-webkit-slider-thumb:hover {
|
|
281
|
+
opacity: var(--_thumb-opacity-hover);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
input[type=range]::-webkit-slider-thumb:active {
|
|
285
|
+
opacity: var(--_thumb-opacity-active);
|
|
286
|
+
}
|
|
287
|
+
input[type=range]::-webkit-slider-thumb:hover,
|
|
288
|
+
input[type=range]::-webkit-slider-thumb:active {
|
|
289
|
+
background: var(--_thumb-color-active);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* ── Webkit track ── */
|
|
293
|
+
input[type=range]::-webkit-slider-runnable-track {
|
|
294
|
+
height: var(--_track-thickness);
|
|
295
|
+
background: var(--_bg-track-value);
|
|
296
|
+
mask-image: var(--track-mask);
|
|
297
|
+
box-shadow: none;
|
|
298
|
+
margin: 0;
|
|
299
|
+
padding: 0;
|
|
300
|
+
border-radius: var(--_track-radius);
|
|
301
|
+
corner-shape: var(--_track-corner-shape);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
input[type=range]:hover::-webkit-slider-runnable-track {
|
|
305
|
+
background: var(--_bg-track-value-hover);
|
|
306
|
+
mask-image: var(--track-mask);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
input[type=range]:active::-webkit-slider-runnable-track {
|
|
310
|
+
background: var(--_bg-track-value-active);
|
|
311
|
+
mask-image: var(--track-mask);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
:host([orientation="vertical"]) input[type=range]::-webkit-slider-runnable-track {
|
|
315
|
+
background: var(--background-track-value-vertical, var(--_bg-track-value));
|
|
316
|
+
mask-image: var(--track-mask-vertical);
|
|
317
|
+
width: var(--_track-thickness);
|
|
318
|
+
height: unset;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
:host([orientation="vertical"]) input[type=range]:hover::-webkit-slider-runnable-track {
|
|
322
|
+
background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));
|
|
323
|
+
mask-image: var(--track-mask-vertical);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
:host([orientation="vertical"]) input[type=range]:active::-webkit-slider-runnable-track {
|
|
327
|
+
background: var(--background-track-value-active-vertical, var(--_bg-track-value-active));
|
|
328
|
+
mask-image: var(--track-mask-vertical);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/* ── Mozilla thumb ── */
|
|
332
|
+
input[type=range]::-moz-range-thumb {
|
|
333
|
+
box-sizing: border-box;
|
|
334
|
+
width: var(--_thumb-thickness);
|
|
335
|
+
height: var(--_thumb-size);
|
|
336
|
+
border-radius: var(--_thumb-radius);
|
|
337
|
+
background: var(--_thumb-color);
|
|
338
|
+
border: var(--_thumb-border);
|
|
339
|
+
box-shadow: var(--_thumb-shadow);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
:host([orientation="vertical"]) input[type=range]::-moz-range-thumb {
|
|
343
|
+
width: var(--_thumb-size);
|
|
344
|
+
height: var(--_thumb-thickness);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
input[type=range]::-moz-range-thumb:hover,
|
|
348
|
+
input[type=range]::-moz-range-thumb:active {
|
|
349
|
+
background: var(--_thumb-color-active);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/* ── Mozilla track ── */
|
|
353
|
+
input[type=range]::-moz-range-track {
|
|
354
|
+
height: var(--_track-thickness);
|
|
355
|
+
background: var(--_bg-track-value);
|
|
356
|
+
mask-image: var(--track-mask);
|
|
357
|
+
box-shadow: none;
|
|
358
|
+
margin: 0;
|
|
359
|
+
padding: 0;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
input[type=range]:hover::-moz-range-track {
|
|
363
|
+
background: var(--_bg-track-value-hover);
|
|
364
|
+
mask-image: var(--track-mask);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
input[type=range]:active::-moz-range-track {
|
|
368
|
+
background: var(--_bg-track-value-active);
|
|
369
|
+
mask-image: var(--track-mask);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
:host([orientation="vertical"]) input[type=range]::-moz-range-track {
|
|
373
|
+
background: var(--background-track-value-vertical, var(--_bg-track-value));
|
|
374
|
+
mask-image: var(--track-mask-vertical);
|
|
375
|
+
height: unset;
|
|
376
|
+
width: var(--_track-thickness);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
:host([orientation="vertical"]) input[type=range]:hover::-moz-range-track {
|
|
380
|
+
background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));
|
|
381
|
+
mask-image: var(--track-mask-vertical);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
:host([orientation="vertical"]) input[type=range]:active::-moz-range-track {
|
|
385
|
+
background: var(--background-track-value-active-vertical, var(--_bg-track-value-active));
|
|
386
|
+
mask-image: var(--track-mask-vertical);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/* ── Swipeable mode ── */
|
|
390
|
+
/* Disable native pointer capture so the cursor can move freely between sliders */
|
|
391
|
+
:host([swipeable]) input {
|
|
392
|
+
pointer-events: none;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/* In swipeable mode, disable pointer events on wrap so host receives hover */
|
|
396
|
+
:host([swipeable]) .wrap {
|
|
397
|
+
pointer-events: none;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/* In swipeable mode, use host hover to trigger track/thumb hover styles */
|
|
401
|
+
:host([swipeable]):hover input[type=range]::-webkit-slider-runnable-track {
|
|
402
|
+
background: var(--_bg-track-value-hover);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
:host([swipeable]):hover input[type=range]::-webkit-slider-thumb {
|
|
406
|
+
background: var(--_thumb-color-active);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
:host([swipeable][orientation="vertical"]):hover input[type=range]::-webkit-slider-runnable-track {
|
|
410
|
+
background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
:host([swipeable]):hover input[type=range]::-moz-range-track {
|
|
414
|
+
background: var(--_bg-track-value-hover);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
:host([swipeable]):hover input[type=range]::-moz-range-thumb {
|
|
418
|
+
background: var(--_thumb-color-active);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
:host([swipeable][orientation="vertical"]):hover input[type=range]::-moz-range-track {
|
|
422
|
+
background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
:host([swipeable]):hover .range-bg {
|
|
426
|
+
background: var(--_bg-track-hover);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
:host([swipeable][orientation="vertical"]):hover .range-bg {
|
|
430
|
+
background: var(--background-track-hover-vertical, var(--_bg-track-hover));
|
|
431
|
+
}
|
|
432
|
+
`];
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
__decorate([property({ type: Number })], RangeInput.prototype, "min", void 0);
|
|
436
|
+
__decorate([property({ type: Number })], RangeInput.prototype, "max", void 0);
|
|
437
|
+
__decorate([property({ type: Number })], RangeInput.prototype, "value", void 0);
|
|
438
|
+
__decorate([property({ type: Number })], RangeInput.prototype, "step", void 0);
|
|
439
|
+
__decorate([property({
|
|
440
|
+
type: String,
|
|
441
|
+
reflect: true
|
|
442
|
+
})], RangeInput.prototype, "orientation", void 0);
|
|
443
|
+
__decorate([property({
|
|
444
|
+
type: Boolean,
|
|
445
|
+
reflect: true
|
|
446
|
+
})], RangeInput.prototype, "swipeable", void 0);
|
|
447
|
+
__decorate([property({ type: Boolean })], RangeInput.prototype, "tooltip", void 0);
|
|
448
|
+
__decorate([property({
|
|
449
|
+
type: String,
|
|
450
|
+
attribute: `tooltip-orientation`
|
|
451
|
+
})], RangeInput.prototype, "tooltipOrientation", void 0);
|
|
452
|
+
__decorate([property({ attribute: false })], RangeInput.prototype, "labelFormatter", void 0);
|
|
453
|
+
__decorate([query(`input`)], RangeInput.prototype, "_inputEl", void 0);
|
|
454
|
+
__decorate([query(`ixfx-tooltip`)], RangeInput.prototype, "_tooltipEl", void 0);
|
|
455
|
+
RangeInput = __decorate([customElement(`ixfx-range-input`)], RangeInput);
|
|
456
|
+
//#endregion
|
|
457
|
+
export { RangeInput };
|
|
458
|
+
|
|
459
|
+
//# sourceMappingURL=range-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-input.js","names":[],"sources":["../src/range-input/range-input.ts"],"sourcesContent":["/**\n * <ixfx-range-input> — styled range input with no label.\n *\n * A thin wrapper around <input type=\"range\"> that adds the same\n * fancy track/thumb/fill styling as the linear-value components,\n * without the label display.\n *\n * Supports horizontal (default) and vertical orientation in a single element.\n * Set orientation=\"vertical\" attribute to switch.\n *\n * CSS Variables:\n * --track-thickness Track cross-axis size (default 1.5em)\n * --thumb-color Thumb fill (default var(--surface-2-text))\n * --thumb-color-active Thumb fill on hover/active (default var(--accent))\n * --thumb-size Thumb cross-axis size (default var(--track-thickness))\n * --thumb-thickness Thumb inline size (default 2em)\n * --thumb-radius Thumb border-radius (default 0)\n * --thumb-border Thumb border (default none)\n * --thumb-shadow Thumb box-shadow (default none)\n * --background-track Unfilled track background (default var(--surface-4))\n * --background-track-hover Unfilled track on hover (default --background-track)\n * --background-track-value Filled track color (default var(--surface-6))\n * --background-track-value-hover Filled track on hover (default var(--accent))\n * --background-track-value-active Filled track on active (default var(--accent))\n *\n * Optional vertical-specific overrides (fall back to horizontal vars when unset):\n * --background-track-vertical\n * --background-track-value-vertical\n * --background-track-value-hover-vertical\n * --background-track-value-active-vertical\n *\n * Tooltip:\n * tooltip Boolean attribute — enables value tooltip on hover/focus\n * tooltip-orientation 'top' (default) | 'right'\n * labelFormatter Function property (not attribute): (rawValue: number, scaledValue: number) => string\n * rawValue = native input value within min..max\n * scaledValue = normalised 0..1 position\n *\n * Swipeable mode:\n * swipeable Boolean attribute — enables swipe-to-draw gesture.\n * When active, pressing down on the slider or entering it while the\n * pointer is pressed sets the value from the cursor coordinate.\n * Pointer capture is NOT held, so the cursor can move to adjacent\n * swipeable sliders and update them too (step-sequencer style).\n * Kill-axis exit (above/below for horizontal, left/right for vertical)\n * freezes the value; re-entering re-engages.\n *\n * Events:\n * input — CustomEvent<{ value: number }>\n * change — CustomEvent<{ value: number }>\n * In swipeable mode fires on pointerleave (or pointerup if released\n * while still inside). In normal mode delegates to native change.\n */\nimport type { CSSResultGroup } from 'lit';\nimport type { TooltipElement, TooltipOrientations } from '../util/tooltip.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { tooltipValueStyles } from '../styles/tooltip.js';\n\nfunction normalize(value: number, min: number, max: number): number {\n return max === min ? 0 : (value - min) / (max - min);\n}\n\n@customElement(`ixfx-range-input`)\nexport class RangeInput extends LitElement {\n @property({ type: Number }) min = 0;\n @property({ type: Number }) max = 1;\n @property({ type: Number }) value = 0;\n @property({ type: Number }) step = 0.01;\n @property({ type: String, reflect: true }) orientation: `horizontal` | `vertical` = `horizontal`;\n @property({ type: Boolean, reflect: true }) swipeable = false;\n @property({ type: Boolean }) tooltip = false;\n @property({ type: String, attribute: `tooltip-orientation` }) tooltipOrientation: TooltipOrientations = `top`;\n @property({ attribute: false }) labelFormatter?: (rawValue: number, scaledValue: number) => string;\n\n @query(`input`)\n _inputEl!: HTMLInputElement;\n\n @query(`ixfx-tooltip`)\n _tooltipEl?: TooltipElement | null;\n\n /** True if this slider changed its value during the current pointer visit. */\n private _swipeModified = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(`pointerdown`, this._onPointerDown);\n this.addEventListener(`pointermove`, this._onPointerMove);\n this.addEventListener(`pointerenter`, this._onPointerEnter);\n this.addEventListener(`pointerleave`, this._onPointerLeave);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(`pointerdown`, this._onPointerDown);\n this.removeEventListener(`pointermove`, this._onPointerMove);\n this.removeEventListener(`pointerenter`, this._onPointerEnter);\n this.removeEventListener(`pointerleave`, this._onPointerLeave);\n window.removeEventListener(`pointerup`, this._onWindowPointerUp);\n }\n\n private _valueFromPointer(e: PointerEvent): number {\n const rect = this.getBoundingClientRect();\n // vertical: top = max, bottom = min (writing-mode: vertical-rl; direction: rtl)\n const normalized = this.orientation === `vertical`\n ? Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height))\n : Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));\n const raw = this.min + normalized * (this.max - this.min);\n const snapped = Math.round((raw - this.min) / this.step) * this.step + this.min;\n return Math.max(this.min, Math.min(this.max, snapped));\n }\n\n private _applySwipeValue(value: number): void {\n this.value = value;\n if (this._inputEl)\n this._inputEl.value = String(value);\n this.style.setProperty(`--value`, String(normalize(value, this.min, this.max)));\n this.dispatchEvent(new CustomEvent(`input`, { detail: { value }, bubbles: true, composed: true }));\n this._swipeModified = true;\n }\n\n private _onPointerDown = (e: PointerEvent): void => {\n if (!this.swipeable)\n return;\n e.preventDefault();\n this._swipeModified = false;\n this._applySwipeValue(this._valueFromPointer(e));\n window.addEventListener(`pointerup`, this._onWindowPointerUp, { once: true });\n };\n\n private _onPointerMove = (e: PointerEvent): void => {\n if (!this.swipeable || e.buttons === 0)\n return;\n this._applySwipeValue(this._valueFromPointer(e));\n };\n\n private _onPointerEnter = (e: PointerEvent): void => {\n if (!this.swipeable || e.buttons === 0)\n return;\n this._swipeModified = false;\n this._applySwipeValue(this._valueFromPointer(e));\n window.addEventListener(`pointerup`, this._onWindowPointerUp, { once: true });\n };\n\n private _onPointerLeave = (_e: PointerEvent): void => {\n if (!this.swipeable || !this._swipeModified)\n return;\n this._swipeModified = false;\n this.dispatchEvent(new CustomEvent(`change`, { detail: { value: this.value }, bubbles: true, composed: true }));\n };\n\n private _onWindowPointerUp = (): void => {\n if (!this._swipeModified)\n return;\n this._swipeModified = false;\n this.dispatchEvent(new CustomEvent(`change`, { detail: { value: this.value }, bubbles: true, composed: true }));\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n super.updated(changedProperties);\n if (changedProperties.has(`value`) || changedProperties.has(`min`) || changedProperties.has(`max`)) {\n this.style.setProperty(`--value`, String(normalize(this.value, this.min, this.max)));\n }\n if (this._tooltipEl) {\n this._tooltipEl.valueFormatTooltip = (v: unknown) => {\n const num = typeof v === `number` ? v : Number(v);\n if (this.labelFormatter)\n return this.labelFormatter(num, normalize(num, this.min, this.max));\n const decimals = this.step >= 1 ? 0 : this.step >= 0.1 ? 1 : 2;\n return num.toFixed(decimals);\n };\n }\n }\n\n _handleInput = (e: Event): void => {\n e.preventDefault();\n e.stopImmediatePropagation();\n const target = e.target as HTMLInputElement;\n const value = Number.parseFloat(target.value);\n this.value = value;\n this.style.setProperty(`--value`, String(normalize(value, this.min, this.max)));\n this.dispatchEvent(new CustomEvent(`input`, { detail: { value }, bubbles: true, composed: true }));\n };\n\n _formatTooltipLabel(): string {\n const normalized = normalize(this.value, this.min, this.max);\n if (this.labelFormatter)\n return this.labelFormatter(this.value, normalized);\n const decimals = this.step >= 1 ? 0 : this.step >= 0.1 ? 1 : 2;\n return this.value.toFixed(decimals);\n }\n\n _handleChange = (): void => {\n const value = Number.parseFloat(this._inputEl.value);\n this.dispatchEvent(new CustomEvent(`change`, { detail: { value }, bubbles: true, composed: true }));\n };\n\n override render() {\n const tooltipEl = this.tooltip\n ? html`\n <ixfx-tooltip\n style=\"--tooltip-background: var(--surface-5); --tooltip-color: var(--surface-5-text)\"\n .orientation=${this.tooltipOrientation}\n anchor=\"--ixfx-ri-thumb\"\n .value=${this.value}\n ></ixfx-tooltip>\n `\n : nothing;\n\n return html`\n <div class=\"wrap\">\n <div class=\"range-bg\"></div>\n <input\n type=\"range\"\n .min=${String(this.min)}\n .max=${String(this.max)}\n .step=${String(this.step)}\n .value=${String(this.value)}\n @input=${this._handleInput}\n @change=${this._handleChange}\n >${tooltipEl}\n </div>\n `;\n }\n\n static styles: CSSResultGroup = [tooltipValueStyles, css`\n :host {\n display: block;\n container-type: size;\n user-select: none;\n touch-action: none;\n -webkit-touch-action: none;\n width: var(--width, 200px);\n height: var(--height, 2em);\n\n /*\n * Internal resolved vars — read public vars and apply defaults here.\n * Public vars are NOT defined in :host {}, only read via fallback.\n * This lets inherited values from ancestor elements flow through.\n */\n --_track-thickness: var(--track-thickness, 100%);\n --_thumb-thickness: var(--thumb-thickness, 2em);\n --_thumb-color: var(--thumb-color, var(--surface-2-text));\n --_thumb-color-active: var(--thumb-color-active, var(--surface-2-text));\n --_thumb-opacity: var(--thumb-opacity, 0.7);\n --_thumb-opacity-hover: var(--thumb-opacity-hover, 0.8);\n --_thumb-opacity-active: var(--thumb-opacity-active, 1); \n --_thumb-size: var(--thumb-size, var(--_track-thickness));\n --_thumb-radius: var(--thumb-radius, 0);\n --_thumb-border: var(--thumb-border, none);\n --_thumb-shadow: var(--thumb-shadow, none);\n --_track-radius: var(--track-radius, none);\n --_track-corner-shape: var(--track-corner-shape, none);\n --_bg-track: var(--background-track, var(--surface-4));\n --_bg-track-hover: var(--background-track-hover, var(--_bg-track));\n --_bg-track-value: var(--background-track-value, var(--surface-6));\n --_bg-track-value-hover: var(--background-track-value-hover, var(--accent));\n --_bg-track-value-active: var(--background-track-value-active, var(--accent));\n\n --value: 0;\n --sx1: calc(var(--_thumb-thickness) + var(--value) * (100% - var(--_thumb-thickness)));\n --track-avail: calc(100% - var(--_thumb-thickness));\n --sx: calc(var(--_thumb-thickness) + (var(--value) * var(--track-avail)));\n --track-mask: linear-gradient(to right, rgba(0,0,0,1) var(--sx), rgba(0,0,0,0) var(--sx) 100%);\n --track-mask-vertical: linear-gradient(to top, rgba(0,0,0,1) var(--sx), rgba(0,0,0,0) var(--sx) 100%);\n }\n\n :host([orientation=\"vertical\"]) {\n width: var(--width, 2em);\n height: var(--height, 200px);\n }\n\n .wrap {\n display: grid;\n width: 100%;\n height: 100%;\n }\n\n .wrap > * {\n grid-area: 1 / 1;\n }\n\n .range-bg {\n background: var(--_bg-track);\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border-radius: var(--_track-radius);\n corner-shape: var(--_track-corner-shape);\n }\n\n .wrap:hover .range-bg {\n background: var(--_bg-track-hover);\n }\n\n input[type=range] {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n background: unset;\n box-shadow: none;\n width: 100%;\n height: var(--_track-thickness);\n align-self: center;\n }\n\n input[type=range]:focus {\n outline: none;\n }\n\n /* Vertical layout */\n :host([orientation=\"vertical\"]) .range-bg {\n background: var(--background-track-vertical, var(--_bg-track));\n width: var(--_track-thickness);\n height: 100%;\n justify-self: center;\n }\n\n :host([orientation=\"vertical\"]) .wrap:hover .range-bg {\n background: var(--background-track-hover-vertical, var(--_bg-track-hover));\n }\n\n :host([orientation=\"vertical\"]) input[type=range] {\n writing-mode: vertical-rl;\n direction: rtl;\n width: var(--_track-thickness);\n height: 100%;\n justify-self: center;\n }\n\n /* ── Webkit thumb ── */\n input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n opacity: var(--_thumb-opacity);\n box-sizing: border-box;\n anchor-name: --ixfx-ri-thumb;\n width: var(--_thumb-thickness);\n height: var(--_thumb-size);\n border-radius: var(--_thumb-radius);\n background: var(--_thumb-color);\n border: var(--_thumb-border);\n box-shadow: var(--_thumb-shadow);\n margin-top: calc(max((var(--_thumb-thickness) - 1px - 1px) * 0.5, 0px) - var(--_thumb-thickness) * 0.5);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]::-webkit-slider-thumb {\n width: var(--_thumb-size);\n height: var(--_thumb-thickness);\n margin-top: 0;\n margin-left: calc(max((1em - 1px - 1px) * 0.5, 0px) - 1.2em * 0.5);\n }\n\n input[type=range]::-webkit-slider-thumb:hover {\n opacity: var(--_thumb-opacity-hover);\n }\n\n input[type=range]::-webkit-slider-thumb:active {\n opacity: var(--_thumb-opacity-active);\n }\n input[type=range]::-webkit-slider-thumb:hover,\n input[type=range]::-webkit-slider-thumb:active {\n background: var(--_thumb-color-active);\n }\n\n /* ── Webkit track ── */\n input[type=range]::-webkit-slider-runnable-track {\n height: var(--_track-thickness);\n background: var(--_bg-track-value);\n mask-image: var(--track-mask);\n box-shadow: none;\n margin: 0;\n padding: 0;\n border-radius: var(--_track-radius);\n corner-shape: var(--_track-corner-shape);\n }\n\n input[type=range]:hover::-webkit-slider-runnable-track {\n background: var(--_bg-track-value-hover);\n mask-image: var(--track-mask);\n }\n\n input[type=range]:active::-webkit-slider-runnable-track {\n background: var(--_bg-track-value-active);\n mask-image: var(--track-mask);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]::-webkit-slider-runnable-track {\n background: var(--background-track-value-vertical, var(--_bg-track-value));\n mask-image: var(--track-mask-vertical);\n width: var(--_track-thickness);\n height: unset;\n }\n\n :host([orientation=\"vertical\"]) input[type=range]:hover::-webkit-slider-runnable-track {\n background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));\n mask-image: var(--track-mask-vertical);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]:active::-webkit-slider-runnable-track {\n background: var(--background-track-value-active-vertical, var(--_bg-track-value-active));\n mask-image: var(--track-mask-vertical);\n }\n\n /* ── Mozilla thumb ── */\n input[type=range]::-moz-range-thumb {\n box-sizing: border-box;\n width: var(--_thumb-thickness);\n height: var(--_thumb-size);\n border-radius: var(--_thumb-radius);\n background: var(--_thumb-color);\n border: var(--_thumb-border);\n box-shadow: var(--_thumb-shadow);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]::-moz-range-thumb {\n width: var(--_thumb-size);\n height: var(--_thumb-thickness);\n }\n\n input[type=range]::-moz-range-thumb:hover,\n input[type=range]::-moz-range-thumb:active {\n background: var(--_thumb-color-active);\n }\n\n /* ── Mozilla track ── */\n input[type=range]::-moz-range-track {\n height: var(--_track-thickness);\n background: var(--_bg-track-value);\n mask-image: var(--track-mask);\n box-shadow: none;\n margin: 0;\n padding: 0;\n }\n\n input[type=range]:hover::-moz-range-track {\n background: var(--_bg-track-value-hover);\n mask-image: var(--track-mask);\n }\n\n input[type=range]:active::-moz-range-track {\n background: var(--_bg-track-value-active);\n mask-image: var(--track-mask);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]::-moz-range-track {\n background: var(--background-track-value-vertical, var(--_bg-track-value));\n mask-image: var(--track-mask-vertical);\n height: unset;\n width: var(--_track-thickness);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]:hover::-moz-range-track {\n background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));\n mask-image: var(--track-mask-vertical);\n }\n\n :host([orientation=\"vertical\"]) input[type=range]:active::-moz-range-track {\n background: var(--background-track-value-active-vertical, var(--_bg-track-value-active));\n mask-image: var(--track-mask-vertical);\n }\n\n /* ── Swipeable mode ── */\n /* Disable native pointer capture so the cursor can move freely between sliders */\n :host([swipeable]) input {\n pointer-events: none;\n }\n\n /* In swipeable mode, disable pointer events on wrap so host receives hover */\n :host([swipeable]) .wrap {\n pointer-events: none;\n }\n\n /* In swipeable mode, use host hover to trigger track/thumb hover styles */\n :host([swipeable]):hover input[type=range]::-webkit-slider-runnable-track {\n background: var(--_bg-track-value-hover);\n }\n\n :host([swipeable]):hover input[type=range]::-webkit-slider-thumb {\n background: var(--_thumb-color-active);\n }\n\n :host([swipeable][orientation=\"vertical\"]):hover input[type=range]::-webkit-slider-runnable-track {\n background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));\n }\n\n :host([swipeable]):hover input[type=range]::-moz-range-track {\n background: var(--_bg-track-value-hover);\n }\n\n :host([swipeable]):hover input[type=range]::-moz-range-thumb {\n background: var(--_thumb-color-active);\n }\n\n :host([swipeable][orientation=\"vertical\"]):hover input[type=range]::-moz-range-track {\n background: var(--background-track-value-hover-vertical, var(--_bg-track-value-hover));\n }\n\n :host([swipeable]):hover .range-bg {\n background: var(--_bg-track-hover);\n }\n\n :host([swipeable][orientation=\"vertical\"]):hover .range-bg {\n background: var(--background-track-hover-vertical, var(--_bg-track-hover));\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-range-input': RangeInput;\n }\n}\n"],"mappings":"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"}
|
package/dist/range.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { r as TooltipOrientations } from "./tooltip-kfUBWYVB.js";
|
|
2
|
+
import * as _$lit from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
|
|
5
|
+
//#region src/range/range.d.ts
|
|
6
|
+
declare class RangeElement extends LitElement {
|
|
7
|
+
#private;
|
|
8
|
+
tooltip: boolean;
|
|
9
|
+
tooltipOrientation: TooltipOrientations;
|
|
10
|
+
orientation: `horizontal` | `vertical`;
|
|
11
|
+
disabled: boolean;
|
|
12
|
+
min: number;
|
|
13
|
+
max: number;
|
|
14
|
+
set value(v: number);
|
|
15
|
+
get value(): number;
|
|
16
|
+
step: number;
|
|
17
|
+
onRangeInput(event: InputEvent): void;
|
|
18
|
+
protected render(): unknown;
|
|
19
|
+
static styles: _$lit.CSSResult[];
|
|
20
|
+
}
|
|
21
|
+
declare global {
|
|
22
|
+
interface HTMLElementMap {
|
|
23
|
+
"ixfx-range": RangeElement;
|
|
24
|
+
}
|
|
25
|
+
} //# sourceMappingURL=range.d.ts.map
|
|
26
|
+
//#endregion
|
|
27
|
+
export { RangeElement };
|
|
28
|
+
//# sourceMappingURL=range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.d.ts","names":[],"sources":["../src/range/range.ts"],"mappings":";;;;;cAOa,YAAA,SAAqB,UAAA;EAAA;EAEhC,OAAA;EAGA,kBAAA,EAAoB,mBAAA;EAGpB,WAAA;EAGA,QAAA;EAGA,GAAA;EAGA,GAAA;EAAA,IAGI,KAAA,CAAM,CAAA;EAAA,IAIN,KAAA,CAAA;EAOJ,IAAA;EAEA,YAAA,CAAa,KAAA,EAAO,UAAA;EAAA,UAeV,MAAA,CAAA;EAAA,OAiBH,MAAA,EAhCuB,KAAA,CAgCjB,SAAA;AAAA;AAAA,QAkEP,MAAA;EAAA,UACI,cAAA;IACR,YAAA,EAAc,YAAA;EAAA;AAAA"}
|
package/dist/range.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { t as __decorate } from "./decorate-BZbkqIhA.js";
|
|
2
|
+
import { t as prominenceStyles } from "./prominence-CreDBdCs.js";
|
|
3
|
+
import { t as tooltipValueStyles } from "./tooltip-DMxmBNky.js";
|
|
4
|
+
import { LitElement, css, html, nothing } from "lit";
|
|
5
|
+
import { customElement, property } from "lit/decorators.js";
|
|
6
|
+
//#region src/range/range.ts
|
|
7
|
+
let RangeElement = class RangeElement extends LitElement {
|
|
8
|
+
constructor(..._args) {
|
|
9
|
+
super(..._args);
|
|
10
|
+
this.tooltip = true;
|
|
11
|
+
this.tooltipOrientation = `top`;
|
|
12
|
+
this.orientation = `horizontal`;
|
|
13
|
+
this.disabled = false;
|
|
14
|
+
this.min = 0;
|
|
15
|
+
this.max = 100;
|
|
16
|
+
this.#value = 0;
|
|
17
|
+
this.step = 0;
|
|
18
|
+
}
|
|
19
|
+
set value(v) {
|
|
20
|
+
this.#value = v;
|
|
21
|
+
}
|
|
22
|
+
get value() {
|
|
23
|
+
return this.#value;
|
|
24
|
+
}
|
|
25
|
+
#value;
|
|
26
|
+
onRangeInput(event) {
|
|
27
|
+
const valueNum = event.target.valueAsNumber;
|
|
28
|
+
const valueStr = event.target.value;
|
|
29
|
+
this.#value = valueNum;
|
|
30
|
+
if (this.tooltip) {
|
|
31
|
+
const o = this.shadowRoot?.querySelector(`output`);
|
|
32
|
+
if (o) o.value = valueStr;
|
|
33
|
+
else console.warn(`Output element not found`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
render() {
|
|
37
|
+
const tt = this.tooltip ? html`<ixfx-tooltip
|
|
38
|
+
style="--tooltip-background: var(--surface-5); --tooltip-color: var(--surface-5-text)"
|
|
39
|
+
.orientation=${this.tooltipOrientation}
|
|
40
|
+
anchor="--thumb-tooltip"
|
|
41
|
+
.value=${this.value}></ixfx-tooltip>` : nothing;
|
|
42
|
+
const verticalStyle = this.orientation === `vertical` ? `writing-mode: vertical-lr; direction: rtl;` : nothing;
|
|
43
|
+
return html`
|
|
44
|
+
<input ?disabled=${this.disabled} step=${this.step} min=${this.min} max=${this.max} value=${this.value} @input=${this.onRangeInput} type="range" style=${verticalStyle}>
|
|
45
|
+
${tt}
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
static {
|
|
49
|
+
this.styles = [
|
|
50
|
+
prominenceStyles,
|
|
51
|
+
tooltipValueStyles,
|
|
52
|
+
css`
|
|
53
|
+
:host {
|
|
54
|
+
display: inline-block;
|
|
55
|
+
--value-label-color: unset;
|
|
56
|
+
--thumb-background: ButtonFace;
|
|
57
|
+
--thumb-radius: 50%;
|
|
58
|
+
--thumb-width: 1em;
|
|
59
|
+
--thumb-height: 1em;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
:host([orientation="vertical"]) {
|
|
63
|
+
display: block;
|
|
64
|
+
width: 1.5em;
|
|
65
|
+
height: 200px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[type="range"] {
|
|
69
|
+
width: 100%;
|
|
70
|
+
height: 1.5em;
|
|
71
|
+
accent-color: var(--accent, AccentColor);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:host([orientation="vertical"]) [type="range"] {
|
|
75
|
+
writing-mode: vertical-lr;
|
|
76
|
+
direction: rtl;
|
|
77
|
+
width: 1.5em;
|
|
78
|
+
height: 100%;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[type="range"]::-webkit-slider-thumb {
|
|
82
|
+
width: var(--thumb-width);
|
|
83
|
+
height: var(--thumb-height);
|
|
84
|
+
border-radius: var(--thumb-radius);
|
|
85
|
+
background: var(--thumb-background);
|
|
86
|
+
anchor-name: --thumb-tooltip;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:host([orientation="vertical"]) [type="range"]::-webkit-slider-thumb {
|
|
90
|
+
width: var(--thumb-height);
|
|
91
|
+
height: var(--thumb-width);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
[type="range"]::-moz-range-thumb {
|
|
95
|
+
width: var(--thumb-width);
|
|
96
|
+
height: var(--thumb-height);
|
|
97
|
+
border-radius: var(--thumb-radius);
|
|
98
|
+
background: var(--thumb-background);
|
|
99
|
+
box-shadow: var(--shadow-m);
|
|
100
|
+
anchor-name: --thumb-tooltip;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
:host([orientation="vertical"]) [type="range"]::-moz-range-thumb {
|
|
104
|
+
width: var(--thumb-height);
|
|
105
|
+
height: var(--thumb-width);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
[type="range"]:focus {
|
|
109
|
+
outline: none;
|
|
110
|
+
}
|
|
111
|
+
`
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
__decorate([property({ type: Boolean })], RangeElement.prototype, "tooltip", void 0);
|
|
116
|
+
__decorate([property({
|
|
117
|
+
type: String,
|
|
118
|
+
attribute: `tooltip-orientation`
|
|
119
|
+
})], RangeElement.prototype, "tooltipOrientation", void 0);
|
|
120
|
+
__decorate([property({
|
|
121
|
+
type: String,
|
|
122
|
+
reflect: true
|
|
123
|
+
})], RangeElement.prototype, "orientation", void 0);
|
|
124
|
+
__decorate([property({
|
|
125
|
+
type: Boolean,
|
|
126
|
+
attribute: true
|
|
127
|
+
})], RangeElement.prototype, "disabled", void 0);
|
|
128
|
+
__decorate([property({ type: Number })], RangeElement.prototype, "min", void 0);
|
|
129
|
+
__decorate([property({ type: Number })], RangeElement.prototype, "max", void 0);
|
|
130
|
+
__decorate([property({ type: Number })], RangeElement.prototype, "value", null);
|
|
131
|
+
__decorate([property({ type: Number })], RangeElement.prototype, "step", void 0);
|
|
132
|
+
RangeElement = __decorate([customElement(`ixfx-range`)], RangeElement);
|
|
133
|
+
//#endregion
|
|
134
|
+
export { RangeElement };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=range.js.map
|