@xsynaptic/sonic-ui 0.3.0 → 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.
Files changed (237) hide show
  1. package/README.md +2 -21
  2. package/dist/default/dat.js +50 -0
  3. package/dist/default/define/button.js +7 -0
  4. package/dist/default/define/envelope.js +7 -0
  5. package/dist/default/define/split.js +7 -0
  6. package/dist/default/define/switch.js +7 -0
  7. package/dist/default/define/waveform.js +7 -0
  8. package/dist/default/define/wavestrip.js +7 -0
  9. package/dist/default/define/xy.js +7 -0
  10. package/dist/default/define.js +7 -1
  11. package/dist/default/elements/button.js +165 -0
  12. package/dist/default/elements/dial.js +19 -23
  13. package/dist/default/elements/envelope.js +367 -0
  14. package/dist/default/elements/meter.js +168 -26
  15. package/dist/default/elements/number.js +21 -8
  16. package/dist/default/elements/radio-group.js +185 -0
  17. package/dist/default/elements/readout-claim.js +81 -0
  18. package/dist/default/elements/readout.js +35 -0
  19. package/dist/default/elements/segmented.js +9 -159
  20. package/dist/default/elements/slider.js +64 -27
  21. package/dist/default/elements/sonic-element.js +24 -13
  22. package/dist/default/elements/split.js +249 -0
  23. package/dist/default/elements/switch.js +279 -0
  24. package/dist/default/elements/value-element.js +691 -0
  25. package/dist/default/elements/{range-entry.js → value-entry.js} +3 -3
  26. package/dist/default/elements/wave-element.js +77 -0
  27. package/dist/default/elements/waveform.js +305 -0
  28. package/dist/default/elements/wavestrip.js +182 -0
  29. package/dist/default/elements/xy.js +473 -0
  30. package/dist/default/index.js +10 -2
  31. package/dist/default/lib/adsr-shape.js +108 -0
  32. package/dist/default/lib/ballistics.js +55 -0
  33. package/dist/default/lib/canvas-surface.js +192 -0
  34. package/dist/default/lib/copy-node.js +32 -2
  35. package/dist/default/lib/crossfade.js +22 -0
  36. package/dist/default/lib/distribute.js +215 -0
  37. package/dist/default/lib/drag-step.js +99 -0
  38. package/dist/default/lib/envelope-curve.js +9 -0
  39. package/dist/default/lib/field.js +94 -0
  40. package/dist/default/lib/focus-by-pointer.js +28 -0
  41. package/dist/default/lib/frame-timeline.js +62 -0
  42. package/dist/default/lib/hold.js +38 -0
  43. package/dist/default/lib/marker-band.js +36 -0
  44. package/dist/default/lib/marker-rider.js +114 -0
  45. package/dist/default/lib/math.js +25 -0
  46. package/dist/default/lib/modifier-press.js +11 -0
  47. package/dist/default/lib/number-list.js +14 -0
  48. package/dist/default/lib/pointer-drag.js +43 -0
  49. package/dist/default/lib/render.js +20 -5
  50. package/dist/default/lib/resample-peaks.js +36 -0
  51. package/dist/default/lib/strip-scene.js +48 -0
  52. package/dist/default/lib/taper.js +32 -16
  53. package/dist/default/lib/time-regions.js +8 -0
  54. package/dist/default/lib/tracking-clock.js +35 -0
  55. package/dist/default/lib/value-mapping.js +115 -0
  56. package/dist/default/lib/waveform-buckets.js +41 -0
  57. package/dist/dev/dat.d.ts +19 -0
  58. package/dist/dev/dat.js +51 -0
  59. package/dist/dev/dat.js.map +1 -0
  60. package/dist/dev/define/button.d.ts +2 -0
  61. package/dist/dev/define/button.js +8 -0
  62. package/dist/dev/define/button.js.map +1 -0
  63. package/dist/dev/define/dial.js.map +1 -1
  64. package/dist/dev/define/envelope.d.ts +2 -0
  65. package/dist/dev/define/envelope.js +8 -0
  66. package/dist/dev/define/envelope.js.map +1 -0
  67. package/dist/dev/define/meter.js.map +1 -1
  68. package/dist/dev/define/number.js.map +1 -1
  69. package/dist/dev/define/segmented.js.map +1 -1
  70. package/dist/dev/define/slider.js.map +1 -1
  71. package/dist/dev/define/split.d.ts +2 -0
  72. package/dist/dev/define/split.js +8 -0
  73. package/dist/dev/define/split.js.map +1 -0
  74. package/dist/dev/define/switch.d.ts +2 -0
  75. package/dist/dev/define/switch.js +8 -0
  76. package/dist/dev/define/switch.js.map +1 -0
  77. package/dist/dev/define/waveform.d.ts +2 -0
  78. package/dist/dev/define/waveform.js +8 -0
  79. package/dist/dev/define/waveform.js.map +1 -0
  80. package/dist/dev/define/wavestrip.d.ts +2 -0
  81. package/dist/dev/define/wavestrip.js +8 -0
  82. package/dist/dev/define/wavestrip.js.map +1 -0
  83. package/dist/dev/define/xy.d.ts +2 -0
  84. package/dist/dev/define/xy.js +8 -0
  85. package/dist/dev/define/xy.js.map +1 -0
  86. package/dist/dev/define.d.ts +15 -3
  87. package/dist/dev/define.js +7 -1
  88. package/dist/dev/elements/{key.d.ts → button.d.ts} +12 -6
  89. package/dist/dev/elements/button.js +166 -0
  90. package/dist/dev/elements/button.js.map +1 -0
  91. package/dist/dev/elements/dial.d.ts +6 -4
  92. package/dist/dev/elements/dial.js +19 -23
  93. package/dist/dev/elements/dial.js.map +1 -1
  94. package/dist/dev/elements/envelope.d.ts +36 -0
  95. package/dist/dev/elements/envelope.js +372 -0
  96. package/dist/dev/elements/envelope.js.map +1 -0
  97. package/dist/dev/elements/form-element.d.ts +1 -1
  98. package/dist/dev/elements/form-element.js.map +1 -1
  99. package/dist/dev/elements/meter.d.ts +12 -1
  100. package/dist/dev/elements/meter.js +168 -26
  101. package/dist/dev/elements/meter.js.map +1 -1
  102. package/dist/dev/elements/number.d.ts +7 -3
  103. package/dist/dev/elements/number.js +21 -8
  104. package/dist/dev/elements/number.js.map +1 -1
  105. package/dist/dev/elements/radio-group.d.ts +25 -0
  106. package/dist/dev/elements/radio-group.js +186 -0
  107. package/dist/dev/elements/radio-group.js.map +1 -0
  108. package/dist/dev/elements/readout-claim.js +82 -0
  109. package/dist/dev/elements/readout-claim.js.map +1 -0
  110. package/dist/dev/elements/readout.js +36 -0
  111. package/dist/dev/elements/readout.js.map +1 -0
  112. package/dist/dev/elements/segmented.d.ts +4 -10
  113. package/dist/dev/elements/segmented.js +9 -159
  114. package/dist/dev/elements/segmented.js.map +1 -1
  115. package/dist/dev/elements/slider.d.ts +9 -3
  116. package/dist/dev/elements/slider.js +64 -27
  117. package/dist/dev/elements/slider.js.map +1 -1
  118. package/dist/dev/elements/sonic-element.d.ts +4 -3
  119. package/dist/dev/elements/sonic-element.js +51 -22
  120. package/dist/dev/elements/sonic-element.js.map +1 -1
  121. package/dist/dev/elements/split.d.ts +21 -0
  122. package/dist/dev/elements/split.js +258 -0
  123. package/dist/dev/elements/split.js.map +1 -0
  124. package/dist/dev/elements/switch.d.ts +35 -0
  125. package/dist/dev/elements/switch.js +280 -0
  126. package/dist/dev/elements/switch.js.map +1 -0
  127. package/dist/dev/elements/value-element.d.ts +84 -0
  128. package/dist/dev/elements/value-element.js +692 -0
  129. package/dist/dev/elements/value-element.js.map +1 -0
  130. package/dist/dev/elements/{range-entry.js → value-entry.js} +4 -4
  131. package/dist/dev/elements/value-entry.js.map +1 -0
  132. package/dist/dev/elements/wave-element.d.ts +36 -0
  133. package/dist/dev/elements/wave-element.js +78 -0
  134. package/dist/dev/elements/wave-element.js.map +1 -0
  135. package/dist/dev/elements/waveform.d.ts +55 -0
  136. package/dist/dev/elements/waveform.js +306 -0
  137. package/dist/dev/elements/waveform.js.map +1 -0
  138. package/dist/dev/elements/wavestrip.d.ts +51 -0
  139. package/dist/dev/elements/wavestrip.js +183 -0
  140. package/dist/dev/elements/wavestrip.js.map +1 -0
  141. package/dist/dev/elements/xy.d.ts +62 -0
  142. package/dist/dev/elements/xy.js +474 -0
  143. package/dist/dev/elements/xy.js.map +1 -0
  144. package/dist/dev/index.d.ts +11 -2
  145. package/dist/dev/index.js +10 -2
  146. package/dist/dev/lib/adsr-shape.js +109 -0
  147. package/dist/dev/lib/adsr-shape.js.map +1 -0
  148. package/dist/dev/lib/ballistics.js +56 -0
  149. package/dist/dev/lib/ballistics.js.map +1 -0
  150. package/dist/dev/lib/canvas-surface.d.ts +25 -0
  151. package/dist/dev/lib/canvas-surface.js +193 -0
  152. package/dist/dev/lib/canvas-surface.js.map +1 -0
  153. package/dist/dev/lib/copy-node.js +32 -2
  154. package/dist/dev/lib/copy-node.js.map +1 -1
  155. package/dist/dev/lib/crossfade.d.ts +12 -0
  156. package/dist/dev/lib/crossfade.js +23 -0
  157. package/dist/dev/lib/crossfade.js.map +1 -0
  158. package/dist/dev/lib/distribute.d.ts +4 -0
  159. package/dist/dev/lib/distribute.js +216 -0
  160. package/dist/dev/lib/distribute.js.map +1 -0
  161. package/dist/dev/lib/drag-step.js +100 -0
  162. package/dist/dev/lib/drag-step.js.map +1 -0
  163. package/dist/dev/lib/envelope-curve.d.ts +4 -0
  164. package/dist/dev/lib/envelope-curve.js +10 -0
  165. package/dist/dev/lib/envelope-curve.js.map +1 -0
  166. package/dist/dev/lib/field.d.ts +4 -0
  167. package/dist/dev/lib/field.js +95 -0
  168. package/dist/dev/lib/field.js.map +1 -0
  169. package/dist/dev/lib/focus-by-pointer.js +29 -0
  170. package/dist/dev/lib/focus-by-pointer.js.map +1 -0
  171. package/dist/dev/lib/frame-timeline.js +63 -0
  172. package/dist/dev/lib/frame-timeline.js.map +1 -0
  173. package/dist/dev/lib/hold.js +39 -0
  174. package/dist/dev/lib/hold.js.map +1 -0
  175. package/dist/dev/lib/marker-band.js +37 -0
  176. package/dist/dev/lib/marker-band.js.map +1 -0
  177. package/dist/dev/lib/marker-rider.js +115 -0
  178. package/dist/dev/lib/marker-rider.js.map +1 -0
  179. package/dist/dev/lib/math.js +26 -0
  180. package/dist/dev/lib/math.js.map +1 -0
  181. package/dist/dev/lib/modifier-press.js +12 -0
  182. package/dist/dev/lib/modifier-press.js.map +1 -0
  183. package/dist/dev/lib/number-list.js +15 -0
  184. package/dist/dev/lib/number-list.js.map +1 -0
  185. package/dist/dev/lib/pointer-drag.js +44 -0
  186. package/dist/dev/lib/pointer-drag.js.map +1 -0
  187. package/dist/dev/lib/read-px-property.js.map +1 -1
  188. package/dist/dev/lib/render.js +20 -5
  189. package/dist/dev/lib/render.js.map +1 -1
  190. package/dist/dev/lib/resample-peaks.js +37 -0
  191. package/dist/dev/lib/resample-peaks.js.map +1 -0
  192. package/dist/dev/lib/strip-scene.js +49 -0
  193. package/dist/dev/lib/strip-scene.js.map +1 -0
  194. package/dist/dev/lib/taper.js +32 -16
  195. package/dist/dev/lib/taper.js.map +1 -1
  196. package/dist/dev/lib/time-regions.d.ts +4 -0
  197. package/dist/dev/lib/time-regions.js +9 -0
  198. package/dist/dev/lib/time-regions.js.map +1 -0
  199. package/dist/dev/lib/tracking-clock.js +36 -0
  200. package/dist/dev/lib/tracking-clock.js.map +1 -0
  201. package/dist/dev/lib/value-mapping.d.ts +23 -0
  202. package/dist/dev/lib/value-mapping.js +116 -0
  203. package/dist/dev/lib/value-mapping.js.map +1 -0
  204. package/dist/dev/lib/waveform-buckets.d.ts +9 -0
  205. package/dist/dev/lib/waveform-buckets.js +42 -0
  206. package/dist/dev/lib/waveform-buckets.js.map +1 -0
  207. package/dist/skins/ivory.css +1 -2
  208. package/dist/styles/button.css +212 -0
  209. package/dist/styles/controls.css +8 -1
  210. package/dist/styles/dial.css +130 -44
  211. package/dist/styles/envelope.css +159 -0
  212. package/dist/styles/led.css +44 -6
  213. package/dist/styles/material.css +321 -71
  214. package/dist/styles/meter.css +109 -28
  215. package/dist/styles/number.css +5 -1
  216. package/dist/styles/panel.css +59 -0
  217. package/dist/styles/ring.css +74 -0
  218. package/dist/styles/segmented.css +22 -54
  219. package/dist/styles/slider.css +256 -58
  220. package/dist/styles/switch.css +347 -0
  221. package/dist/styles/waveform.css +173 -0
  222. package/dist/styles/wavestrip.css +215 -0
  223. package/dist/styles/xy.css +204 -0
  224. package/package.json +14 -2
  225. package/dist/default/define/key.js +0 -7
  226. package/dist/default/elements/key.js +0 -144
  227. package/dist/default/elements/range-element.js +0 -433
  228. package/dist/dev/define/key.d.ts +0 -2
  229. package/dist/dev/define/key.js +0 -8
  230. package/dist/dev/define/key.js.map +0 -1
  231. package/dist/dev/elements/key.js +0 -145
  232. package/dist/dev/elements/key.js.map +0 -1
  233. package/dist/dev/elements/range-element.d.ts +0 -56
  234. package/dist/dev/elements/range-element.js +0 -434
  235. package/dist/dev/elements/range-element.js.map +0 -1
  236. package/dist/dev/elements/range-entry.js.map +0 -1
  237. package/dist/styles/key.css +0 -197
@@ -1,433 +0,0 @@
1
- import { requireChild } from "../lib/render.js";
2
- import { writeAttribute } from "../lib/write-attribute.js";
3
- import { SonicFormElement } from "./form-element.js";
4
- import { RangeEntry } from "./range-entry.js";
5
- import { clampUnit, linearTaper, logTaper, skewTaper, wrapUnit } from "../lib/taper.js";
6
-
7
- //#region src/elements/range-element.ts
8
- const fineScale = .1;
9
- const keyRevealMs = 1e3;
10
- const pageSteps = 10;
11
- const revealMs = 250;
12
- const revealPx = 4;
13
- const canPopover = "togglePopover" in HTMLElement.prototype;
14
- let instanceCount = 0;
15
- const resetKeys = /* @__PURE__ */ new Set(["Backspace", "Delete"]);
16
- const keySteps = /* @__PURE__ */ new Map([
17
- ["ArrowDown", -1],
18
- ["ArrowLeft", -1],
19
- ["ArrowRight", 1],
20
- ["ArrowUp", 1],
21
- ["PageDown", -10],
22
- ["PageUp", pageSteps]
23
- ]);
24
- const roleAttributes = [
25
- "aria-disabled",
26
- "aria-orientation",
27
- "aria-valuemax",
28
- "aria-valuemin",
29
- "aria-valuenow",
30
- "aria-valuetext",
31
- "role",
32
- "tabindex"
33
- ];
34
- var SonicRangeElement = class extends SonicFormElement {
35
- static observedAttributes = [
36
- ...SonicFormElement.observedAttributes,
37
- "max",
38
- "midpoint",
39
- "min",
40
- "notched",
41
- "origin",
42
- "readout",
43
- "step",
44
- "taper",
45
- "value"
46
- ];
47
- get default() {
48
- return this.optionalNumberAttribute("default");
49
- }
50
- set default(value) {
51
- this.reflect("default", value);
52
- }
53
- get dimmed() {
54
- return this.hasAttribute("dimmed");
55
- }
56
- set dimmed(isDimmed) {
57
- this.reflect("dimmed", isDimmed);
58
- }
59
- get doublePress() {
60
- return this.getAttribute("double-press") === "reset" ? "reset" : "type";
61
- }
62
- set doublePress(gesture) {
63
- this.reflect("double-press", gesture);
64
- }
65
- get formatValue() {
66
- return this.#formatValue;
67
- }
68
- set formatValue(format) {
69
- this.#formatValue = format;
70
- this.render();
71
- }
72
- get max() {
73
- return this.numberAttribute("max", 100);
74
- }
75
- set max(value) {
76
- this.reflect("max", value);
77
- }
78
- get midpoint() {
79
- return this.optionalNumberAttribute("midpoint");
80
- }
81
- set midpoint(value) {
82
- this.reflect("midpoint", value);
83
- }
84
- get min() {
85
- return this.numberAttribute("min", 0);
86
- }
87
- set min(value) {
88
- this.reflect("min", value);
89
- }
90
- get notched() {
91
- return this.hasAttribute("notched");
92
- }
93
- set notched(isNotched) {
94
- this.reflect("notched", isNotched);
95
- }
96
- get origin() {
97
- return this.optionalNumberAttribute("origin");
98
- }
99
- set origin(value) {
100
- this.reflect("origin", value);
101
- }
102
- get parseValue() {
103
- return this.#parseValue;
104
- }
105
- set parseValue(parse) {
106
- this.#parseValue = parse;
107
- }
108
- get readout() {
109
- return this.hasAttribute("readout");
110
- }
111
- set readout(isShown) {
112
- this.reflect("readout", isShown);
113
- }
114
- get step() {
115
- return this.numberAttribute("step", 1);
116
- }
117
- set step(value) {
118
- this.reflect("step", value);
119
- }
120
- get taper() {
121
- return this.getAttribute("taper") === "log" ? "log" : "linear";
122
- }
123
- set taper(curve) {
124
- this.reflect("taper", curve);
125
- }
126
- get value() {
127
- return this.#value;
128
- }
129
- set value(next) {
130
- if (this.#drag) return;
131
- this.#write(next);
132
- }
133
- #drag;
134
- #entry;
135
- #formatValue;
136
- #instance = String(instanceCount += 1);
137
- #isDirty = false;
138
- #keyRevealTimer;
139
- #parseValue;
140
- #readout;
141
- #value = 0;
142
- attributeChangedCallback(name) {
143
- if (name === "value") {
144
- if (this.#drag) return;
145
- this.#isDirty = false;
146
- }
147
- if (name === "disabled" && this.isDisabled()) {
148
- this.#entry?.close(false);
149
- this.#endDrag();
150
- }
151
- this.#value = this.#clamp(this.#isDirty ? this.#value : this.numberAttribute("value", this.min));
152
- this.render();
153
- }
154
- connectedCallback() {
155
- this.upgradeProperties("default", "dimmed", "doublePress", "max", "midpoint", "min", "notched", "origin", "readout", "step", "taper", "formatValue", "parseValue", "value");
156
- super.connectedCallback();
157
- }
158
- bindGestures(control, signal, grab) {
159
- const entry = this.#bindEntry(control, signal);
160
- control.addEventListener("pointerdown", (event) => {
161
- if (event.button !== 0 || this.isDisabled() || entry.isOpen) return;
162
- if (event.pointerType === "touch") event.preventDefault();
163
- control.focus();
164
- if (event.metaKey || event.ctrlKey) {
165
- this.#reset();
166
- return;
167
- }
168
- const fromValue = this.#value;
169
- const axis = grab(event);
170
- if (!axis) return;
171
- const startPosition = axis.position(event);
172
- const drag = {
173
- fromValue,
174
- isRevealed: false,
175
- lastPosition: startPosition,
176
- pointerId: event.pointerId,
177
- position: axis.position,
178
- rawFraction: this.fraction(this.#value),
179
- revealTimer: void 0,
180
- startPosition,
181
- travelPx: axis.travelPx
182
- };
183
- drag.revealTimer = setTimeout(() => {
184
- this.#reveal(drag);
185
- }, revealMs);
186
- this.#drag = drag;
187
- control.setPointerCapture(event.pointerId);
188
- this.toggleState("dragging", true);
189
- }, { signal });
190
- control.addEventListener("pointermove", (event) => {
191
- const drag = this.#drag;
192
- if (event.pointerId !== drag?.pointerId) return;
193
- const position = drag.position(event);
194
- const scale = event.shiftKey ? fineScale : 1;
195
- const fraction = drag.rawFraction + (position - drag.lastPosition) / drag.travelPx * scale;
196
- drag.rawFraction = this.wraps() ? wrapUnit(fraction) : clampUnit(fraction);
197
- drag.lastPosition = position;
198
- if (Math.abs(position - drag.startPosition) >= revealPx) this.#reveal(drag);
199
- this.input(this.valueAt(drag.rawFraction));
200
- }, { signal });
201
- const endDrag = (event) => {
202
- if (event.pointerId === this.#drag?.pointerId) this.#endDrag();
203
- };
204
- control.addEventListener("pointercancel", (event) => {
205
- endDrag(event);
206
- entry.forgetPress();
207
- }, { signal });
208
- control.addEventListener("lostpointercapture", endDrag, { signal });
209
- control.addEventListener("pointerup", (event) => {
210
- if (event.pointerId !== this.#drag?.pointerId) return;
211
- this.#endDrag();
212
- if (!entry.press(event)) return;
213
- if (this.doublePress === "reset") this.#reset();
214
- else entry.open();
215
- }, { signal });
216
- this.#bindKeys(control, entry, signal);
217
- signal.addEventListener("abort", () => {
218
- this.#endDrag();
219
- this.#hideForKeys();
220
- }, { once: true });
221
- }
222
- clampRange(next) {
223
- const min = this.min;
224
- if (!this.wraps()) return Math.min(this.#max(), Math.max(min, next));
225
- const range = this.range();
226
- if (range <= 0) return min;
227
- const offset = Number((((next - min) % range + range) % range).toPrecision(12));
228
- return offset >= range ? min : Number((min + offset).toPrecision(12));
229
- }
230
- controlRole() {
231
- return "slider";
232
- }
233
- fraction(value) {
234
- return (this.#taper() ?? linearTaper(this.min, this.#max())).position(value);
235
- }
236
- input(next) {
237
- const previous = this.#value;
238
- this.#write(next);
239
- if (this.#value === previous) return false;
240
- this.dispatchEvent(new Event("input", {
241
- bubbles: true,
242
- composed: true
243
- }));
244
- return true;
245
- }
246
- modulationFractions(amount) {
247
- const value = this.fraction(this.#value);
248
- const modulated = this.fraction(this.#value + amount);
249
- return [Math.min(value, modulated), Math.max(value, modulated)];
250
- }
251
- originFraction() {
252
- return this.fraction(this.origin ?? this.min);
253
- }
254
- positions() {
255
- const positions = Math.round(this.range() / this.step) + (this.wraps() ? 0 : 1);
256
- if (!this.notched || !Number.isFinite(positions) || positions < 2) return;
257
- return positions;
258
- }
259
- range() {
260
- return this.#max() - this.min;
261
- }
262
- renderAria(control, orientation) {
263
- this.writeFormValue(String(this.#value), String(this.#value));
264
- if (this.#entry?.isOpen) {
265
- for (const name of roleAttributes) control.removeAttribute(name);
266
- this.forwardNaming(control, false);
267
- this.#renderReadout();
268
- return;
269
- }
270
- control.setAttribute("role", this.controlRole());
271
- control.setAttribute("aria-valuemin", String(this.min));
272
- control.setAttribute("aria-valuemax", String(this.#max()));
273
- control.setAttribute("aria-valuenow", String(this.#value));
274
- if (orientation) control.setAttribute("aria-orientation", orientation);
275
- writeAttribute(control, "aria-valuetext", this.#formatValue?.(this.#value));
276
- this.forwardNaming(control, true);
277
- this.#renderDisabled(control);
278
- this.#renderReadout();
279
- }
280
- restoreState(state) {
281
- this.value = Number(state);
282
- }
283
- valueAt(fraction) {
284
- return (this.#taper() ?? linearTaper(this.min, this.#max())).value(fraction);
285
- }
286
- valueText() {
287
- return this.#formatValue?.(this.#value) ?? String(this.#value);
288
- }
289
- wraps() {
290
- return false;
291
- }
292
- #bindEntry(control, signal) {
293
- const input = requireChild(control, "input", HTMLInputElement);
294
- const bubble = control.querySelector("[popover]");
295
- input.id = `sonic-entry-${this.#instance}`;
296
- if (bubble) {
297
- const anchor = `--sonic-readout-${this.#instance}`;
298
- this.#readout = {
299
- bubble,
300
- text: requireChild(bubble, "span", HTMLElement)
301
- };
302
- control.style.setProperty("anchor-name", anchor);
303
- bubble.style.setProperty("position-anchor", anchor);
304
- }
305
- const entry = new RangeEntry(input, {
306
- commit: (text) => {
307
- this.#commit((this.#parseValue ?? Number.parseFloat)(text));
308
- },
309
- text: () => this.#parseValue ? this.valueText() : String(this.#value),
310
- toggle: (isOpen) => {
311
- if (isOpen) this.forwardNaming(input, true);
312
- this.toggleState("editing", isOpen);
313
- this.render();
314
- }
315
- });
316
- this.#entry = entry;
317
- entry.bind(control, signal);
318
- return entry;
319
- }
320
- #bindKeys(control, entry, signal) {
321
- control.addEventListener("keydown", (event) => {
322
- if (this.isDisabled() || event.defaultPrevented || event.target !== control) return;
323
- if (event.key === "Enter") {
324
- event.preventDefault();
325
- entry.open();
326
- return;
327
- }
328
- const next = this.#keyTarget(event.key);
329
- if (next === void 0) return;
330
- event.preventDefault();
331
- this.#commit(next);
332
- this.#revealForKeys();
333
- }, { signal });
334
- control.addEventListener("blur", () => {
335
- this.#hideForKeys();
336
- }, { signal });
337
- }
338
- #clamp(next) {
339
- const min = this.min;
340
- const step = this.step;
341
- const stepped = step > 0 ? min + Math.round((next - min) / step) * step : next;
342
- return this.clampRange(Number(stepped.toPrecision(12)));
343
- }
344
- #commit(next) {
345
- if (this.input(next)) this.dispatchEvent(new Event("change", { bubbles: true }));
346
- }
347
- #end(step) {
348
- if (!this.wraps()) return this.#max();
349
- return this.min + (Math.ceil(this.range() / step) - 1) * step;
350
- }
351
- #endDrag() {
352
- const drag = this.#drag;
353
- if (!drag) return;
354
- clearTimeout(drag.revealTimer);
355
- this.#drag = void 0;
356
- this.toggleState("dragging", false);
357
- this.#renderReadout();
358
- if (this.#value !== drag.fromValue) this.dispatchEvent(new Event("change", { bubbles: true }));
359
- }
360
- #hideForKeys() {
361
- clearTimeout(this.#keyRevealTimer);
362
- if (this.#keyRevealTimer === void 0) return;
363
- this.#keyRevealTimer = void 0;
364
- this.#renderReadout();
365
- }
366
- #isValueShown() {
367
- return (this.#drag?.isRevealed === true || this.#keyRevealTimer !== void 0) && this.readout;
368
- }
369
- #keyTarget(key) {
370
- if (key === "Home") return this.min;
371
- const step = this.step > 0 ? this.step : this.range() / 100;
372
- if (key === "End") return this.#end(step);
373
- if (resetKeys.has(key)) return this.default;
374
- const steps = keySteps.get(key);
375
- if (steps === void 0) return void 0;
376
- const taper = this.#taper();
377
- if (!taper) return this.#value + steps * step;
378
- const next = this.#clamp(taper.value(taper.position(this.#value) + steps / 100));
379
- return next === this.#value ? this.#value + Math.sign(steps) * step : next;
380
- }
381
- #max() {
382
- return Math.max(this.min, this.max);
383
- }
384
- #renderDisabled(control) {
385
- if (this.isDisabled()) {
386
- control.setAttribute("aria-disabled", "true");
387
- control.removeAttribute("tabindex");
388
- return;
389
- }
390
- control.removeAttribute("aria-disabled");
391
- control.setAttribute("tabindex", "0");
392
- }
393
- #renderReadout() {
394
- const readout = this.#readout;
395
- if (!readout || !canPopover || !this.isConnected) return;
396
- const isEditing = this.#entry?.isOpen === true;
397
- readout.text.hidden = isEditing;
398
- if (!isEditing) readout.text.textContent = this.valueText();
399
- readout.bubble.togglePopover(isEditing || this.#isValueShown());
400
- }
401
- #reset() {
402
- this.#commit(this.default ?? NaN);
403
- }
404
- #reveal(drag) {
405
- if (drag.isRevealed || this.#drag !== drag) return;
406
- drag.isRevealed = true;
407
- this.#renderReadout();
408
- }
409
- #revealForKeys() {
410
- clearTimeout(this.#keyRevealTimer);
411
- this.#keyRevealTimer = setTimeout(() => {
412
- this.#hideForKeys();
413
- }, keyRevealMs);
414
- this.#renderReadout();
415
- }
416
- #taper() {
417
- if (this.notched || this.wraps()) return void 0;
418
- const min = this.min;
419
- const max = this.#max();
420
- return (this.taper === "log" ? logTaper(min, max) : void 0) ?? skewTaper(min, max, this.midpoint ?? NaN);
421
- }
422
- #write(next) {
423
- if (!Number.isFinite(next)) return;
424
- this.#isDirty = true;
425
- const clamped = this.#clamp(next);
426
- if (clamped === this.#value) return;
427
- this.#value = clamped;
428
- this.render();
429
- }
430
- };
431
-
432
- //#endregion
433
- export { SonicRangeElement };
@@ -1,2 +0,0 @@
1
- import { SonicKey } from "../elements/key.js";
2
- export type { SonicKey };
@@ -1,8 +0,0 @@
1
- import { defineOnce } from "../elements/define-once.js";
2
- import { SonicKey } from "../elements/key.js";
3
-
4
- //#region src/define/key.ts
5
- defineOnce("sonic-key", SonicKey);
6
-
7
- //#endregion
8
- //# sourceMappingURL=key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"key.js","names":[],"sources":["../../../src/define/key.ts"],"sourcesContent":["import { defineOnce } from '#elements/define-once.ts';\nimport { SonicKey } from '#elements/key.ts';\n\ndefineOnce('sonic-key', SonicKey);\n\n// Type-only, so the tag map augmentation ships without a runtime export\n/** @public */\nexport type { SonicKey } from '#elements/key.ts';\n"],"mappings":";;;;AAGA,WAAW,aAAa,QAAQ"}
@@ -1,145 +0,0 @@
1
- import { requireChild, template } from "../lib/render.js";
2
- import { SonicFormElement } from "./form-element.js";
3
- import { copyNode } from "../lib/copy-node.js";
4
-
5
- //#region src/elements/key.ts
6
- const renderKey = template(`
7
- <button class="sonic-key" type="button"><span class="sonic-key-cap"></span></button>
8
- `, HTMLButtonElement);
9
- const holdKeys = /* @__PURE__ */ new Set([" ", "Enter"]);
10
- var SonicKey = class extends SonicFormElement {
11
- static observedAttributes = [
12
- ...SonicFormElement.observedAttributes,
13
- "momentary",
14
- "pressed",
15
- "toggle",
16
- "value"
17
- ];
18
- get defaultPressed() {
19
- return this.hasAttribute("pressed");
20
- }
21
- set defaultPressed(isPressed) {
22
- this.reflect("pressed", isPressed);
23
- }
24
- get momentary() {
25
- return this.hasAttribute("momentary");
26
- }
27
- set momentary(isMomentary) {
28
- this.reflect("momentary", isMomentary);
29
- }
30
- get pressed() {
31
- return this.#isDirty ? this.#pressed : this.defaultPressed;
32
- }
33
- set pressed(isPressed) {
34
- this.#isDirty = true;
35
- this.#pressed = isPressed === true;
36
- this.render();
37
- }
38
- get toggle() {
39
- return this.hasAttribute("toggle");
40
- }
41
- set toggle(isToggle) {
42
- this.reflect("toggle", isToggle);
43
- }
44
- get value() {
45
- return this.getAttribute("value") ?? "on";
46
- }
47
- set value(value) {
48
- this.reflect("value", value);
49
- }
50
- #holder;
51
- #isDirty = false;
52
- #key = renderKey();
53
- #pressed = false;
54
- attributeChangedCallback(name) {
55
- if (name === "pressed") this.#isDirty = false;
56
- if (name === "disabled" && this.isDisabled()) this.#release();
57
- this.render();
58
- }
59
- formResetCallback() {
60
- this.attributeChangedCallback("pressed");
61
- }
62
- activate() {
63
- this.#key.click();
64
- }
65
- connect(signal) {
66
- const key = this.#key;
67
- const cap = requireChild(key, ".sonic-key-cap", HTMLSpanElement);
68
- this.upgradeProperties("defaultPressed", "momentary", "toggle", "pressed", "value");
69
- this.mirrorChildren({
70
- control: key,
71
- copy: (originals) => {
72
- cap.replaceChildren(...originals.map((original) => copyNode(original)));
73
- }
74
- }, signal);
75
- this.render();
76
- this.checkStyles(key, "key.css");
77
- signal.addEventListener("abort", () => {
78
- this.#release();
79
- }, { once: true });
80
- key.addEventListener("click", () => {
81
- if (!this.toggle) return;
82
- this.pressed = !this.pressed;
83
- this.dispatchEvent(new Event("change", { bubbles: true }));
84
- }, { signal });
85
- this.#bindMomentary(key, signal);
86
- }
87
- focusTarget() {
88
- return this.#key;
89
- }
90
- render() {
91
- const key = this.#key;
92
- key.disabled = this.isDisabled();
93
- key.removeAttribute("aria-pressed");
94
- if (this.toggle) key.setAttribute("aria-pressed", String(this.pressed));
95
- this.toggleState("pressed", this.pressed);
96
- this.forwardNaming(key, true);
97
- const submitted = this.toggle && this.pressed ? this.value : null;
98
- this.writeFormValue(submitted, String(this.pressed));
99
- }
100
- restoreState(state) {
101
- if (this.toggle) this.pressed = state === "true";
102
- }
103
- #bindMomentary(key, signal) {
104
- const releasePointer = (event) => {
105
- if (event.pointerId === this.#holder) this.#release();
106
- };
107
- key.addEventListener("pointerdown", (event) => {
108
- if (event.button !== 0 || !this.#isMomentary()) return;
109
- key.setPointerCapture(event.pointerId);
110
- this.#hold(event.pointerId);
111
- }, { signal });
112
- key.addEventListener("lostpointercapture", releasePointer, { signal });
113
- key.addEventListener("pointercancel", releasePointer, { signal });
114
- key.addEventListener("pointerup", releasePointer, { signal });
115
- key.addEventListener("keydown", (event) => {
116
- if (event.repeat || !holdKeys.has(event.key) || !this.#isMomentary()) return;
117
- this.#hold(event.key);
118
- }, { signal });
119
- key.addEventListener("keyup", (event) => {
120
- if (event.key === this.#holder) this.#release();
121
- }, { signal });
122
- key.addEventListener("blur", () => {
123
- if (typeof this.#holder === "string") this.#release();
124
- }, { signal });
125
- }
126
- #hold(holder) {
127
- if (this.isDisabled() || this.#holder !== void 0) return;
128
- this.#holder = holder;
129
- this.pressed = true;
130
- this.dispatchEvent(new Event("change", { bubbles: true }));
131
- }
132
- #isMomentary() {
133
- return this.momentary && !this.toggle;
134
- }
135
- #release() {
136
- if (this.#holder === void 0) return;
137
- this.#holder = void 0;
138
- this.pressed = false;
139
- this.dispatchEvent(new Event("change", { bubbles: true }));
140
- }
141
- };
142
-
143
- //#endregion
144
- export { SonicKey };
145
- //# sourceMappingURL=key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"key.js","names":[],"sources":["../../../src/elements/key.ts"],"sourcesContent":["import { SonicFormElement } from '#elements/form-element.ts';\nimport { copyNode } from '#lib/copy-node.ts';\nimport { requireChild, template } from '#lib/render.ts';\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sonic-key': SonicKey;\n\t}\n}\n\nconst renderKey = template(\n\t/* HTML */ `\n\t\t<button class=\"sonic-key\" type=\"button\"><span class=\"sonic-key-cap\"></span></button>\n\t`,\n\tHTMLButtonElement,\n);\n\nconst holdKeys = new Set([' ', 'Enter']);\n\nexport class SonicKey extends SonicFormElement {\n\tstatic override readonly observedAttributes = [\n\t\t...SonicFormElement.observedAttributes,\n\t\t'momentary',\n\t\t'pressed',\n\t\t'toggle',\n\t\t'value',\n\t];\n\n\t// The `pressed` attribute, as `defaultChecked` holds a checkbox's `checked` attribute\n\tget defaultPressed(): boolean {\n\t\treturn this.hasAttribute('pressed');\n\t}\n\n\tset defaultPressed(isPressed: boolean) {\n\t\tthis.reflect('pressed', isPressed);\n\t}\n\n\tget momentary(): boolean {\n\t\treturn this.hasAttribute('momentary');\n\t}\n\n\tset momentary(isMomentary: boolean) {\n\t\tthis.reflect('momentary', isMomentary);\n\t}\n\n\t// The live state, which never writes the attribute, as `value` on the range\n\tget pressed(): boolean {\n\t\treturn this.#isDirty ? this.#pressed : this.defaultPressed;\n\t}\n\n\tset pressed(isPressed: boolean | undefined) {\n\t\tthis.#isDirty = true;\n\t\tthis.#pressed = isPressed === true;\n\t\tthis.render();\n\t}\n\n\tget toggle(): boolean {\n\t\treturn this.hasAttribute('toggle');\n\t}\n\n\tset toggle(isToggle: boolean) {\n\t\tthis.reflect('toggle', isToggle);\n\t}\n\n\t// What a pressed toggle submits, reading `on` while unset as a checkbox does\n\tget value(): string {\n\t\treturn this.getAttribute('value') ?? 'on';\n\t}\n\n\tset value(value: string | undefined) {\n\t\tthis.reflect('value', value);\n\t}\n\n\t#holder: number | string | undefined;\n\n\t// Re-read from the attribute until a press or a write\n\t// An attribute write clears it, so a framework driving `pressed` keeps control\n\t#isDirty = false;\n\n\treadonly #key = renderKey();\n\n\t#pressed = false;\n\n\tattributeChangedCallback(name: string): void {\n\t\tif (name === 'pressed') this.#isDirty = false;\n\t\tif (name === 'disabled' && this.isDisabled()) this.#release();\n\t\tthis.render();\n\t}\n\n\t// Back to the `pressed` attribute, as a checkbox resets to `checked`\n\toverride formResetCallback(): void {\n\t\tthis.attributeChangedCallback('pressed');\n\t}\n\n\t// As a checkbox's label toggles it\n\tprotected override activate(): void {\n\t\tthis.#key.click();\n\t}\n\n\tprotected connect(signal: AbortSignal): void {\n\t\tconst key = this.#key;\n\t\tconst cap = requireChild(key, '.sonic-key-cap', HTMLSpanElement);\n\n\t\tthis.upgradeProperties('defaultPressed', 'momentary', 'toggle', 'pressed', 'value');\n\t\tthis.mirrorChildren(\n\t\t\t{\n\t\t\t\tcontrol: key,\n\t\t\t\tcopy: (originals) => {\n\t\t\t\t\tcap.replaceChildren(...originals.map((original) => copyNode(original)));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\tthis.render();\n\t\tthis.checkStyles(key, 'key.css');\n\t\tsignal.addEventListener(\n\t\t\t'abort',\n\t\t\t() => {\n\t\t\t\tthis.#release();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\n\t\tkey.addEventListener(\n\t\t\t'click',\n\t\t\t() => {\n\t\t\t\tif (!this.toggle) return;\n\n\t\t\t\tthis.pressed = !this.pressed;\n\t\t\t\tthis.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\t\tthis.#bindMomentary(key, signal);\n\t}\n\n\tprotected override focusTarget(): HTMLElement {\n\t\treturn this.#key;\n\t}\n\n\tprotected render(): void {\n\t\tconst key = this.#key;\n\n\t\tkey.disabled = this.isDisabled();\n\t\tkey.removeAttribute('aria-pressed');\n\t\tif (this.toggle) key.setAttribute('aria-pressed', String(this.pressed));\n\t\tthis.toggleState('pressed', this.pressed);\n\t\tthis.forwardNaming(key, true);\n\n\t\t// eslint-disable-next-line unicorn/no-null -- `null` submits nothing\n\t\tconst submitted = this.toggle && this.pressed ? this.value : null;\n\n\t\t// The state restores an unpressed toggle too\n\t\tthis.writeFormValue(submitted, String(this.pressed));\n\t}\n\n\tprotected restoreState(state: string): void {\n\t\tif (this.toggle) this.pressed = state === 'true';\n\t}\n\n\t// Not `click`, which lands a tap late by the finger's dwell\n\t#bindMomentary(key: HTMLButtonElement, signal: AbortSignal): void {\n\t\tconst releasePointer = (event: PointerEvent): void => {\n\t\t\tif (event.pointerId === this.#holder) this.#release();\n\t\t};\n\n\t\tkey.addEventListener(\n\t\t\t'pointerdown',\n\t\t\t(event) => {\n\t\t\t\tif (event.button !== 0 || !this.#isMomentary()) return;\n\n\t\t\t\tkey.setPointerCapture(event.pointerId);\n\t\t\t\tthis.#hold(event.pointerId);\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\t\tkey.addEventListener('lostpointercapture', releasePointer, { signal });\n\t\tkey.addEventListener('pointercancel', releasePointer, { signal });\n\t\tkey.addEventListener('pointerup', releasePointer, { signal });\n\t\tkey.addEventListener(\n\t\t\t'keydown',\n\t\t\t(event) => {\n\t\t\t\tif (event.repeat || !holdKeys.has(event.key) || !this.#isMomentary()) return;\n\n\t\t\t\tthis.#hold(event.key);\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\t\tkey.addEventListener(\n\t\t\t'keyup',\n\t\t\t(event) => {\n\t\t\t\tif (event.key === this.#holder) this.#release();\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\t\t// Keyboard holds only; a finger on the next pad takes focus while this one is still held\n\t\tkey.addEventListener(\n\t\t\t'blur',\n\t\t\t() => {\n\t\t\t\tif (typeof this.#holder === 'string') this.#release();\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\t}\n\n\t#hold(holder: number | string): void {\n\t\tif (this.isDisabled() || this.#holder !== undefined) return;\n\n\t\tthis.#holder = holder;\n\t\tthis.pressed = true;\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }));\n\t}\n\n\t#isMomentary(): boolean {\n\t\treturn this.momentary && !this.toggle;\n\t}\n\n\t#release(): void {\n\t\tif (this.#holder === undefined) return;\n\n\t\tthis.#holder = undefined;\n\t\tthis.pressed = false;\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }));\n\t}\n}\n"],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { SonicFormElement } from "./form-element.js";
2
- //#region src/elements/range-element.d.ts
3
- export interface RangeAxis {
4
- position: (event: PointerEvent) => number;
5
- travelPx: number;
6
- }
7
- export declare abstract class SonicRangeElement extends SonicFormElement {
8
- #private;
9
- static readonly observedAttributes: string[];
10
- get default(): number | undefined;
11
- set default(value: number | undefined);
12
- get dimmed(): boolean;
13
- set dimmed(isDimmed: boolean);
14
- get doublePress(): 'reset' | 'type';
15
- set doublePress(gesture: 'reset' | 'type' | undefined);
16
- get formatValue(): ((value: number) => string) | undefined;
17
- set formatValue(format: ((value: number) => string) | undefined);
18
- get max(): number;
19
- set max(value: number | undefined);
20
- get midpoint(): number | undefined;
21
- set midpoint(value: number | undefined);
22
- get min(): number;
23
- set min(value: number | undefined);
24
- get notched(): boolean;
25
- set notched(isNotched: boolean);
26
- get origin(): number | undefined;
27
- set origin(value: number | undefined);
28
- get parseValue(): ((text: string) => number) | undefined;
29
- set parseValue(parse: ((text: string) => number) | undefined);
30
- get readout(): boolean;
31
- set readout(isShown: boolean);
32
- get step(): number;
33
- set step(value: number | undefined);
34
- get taper(): 'linear' | 'log';
35
- set taper(curve: 'linear' | 'log' | undefined);
36
- get value(): number;
37
- set value(next: number);
38
- attributeChangedCallback(name: string): void;
39
- connectedCallback(): void;
40
- protected bindGestures(control: HTMLElement, signal: AbortSignal, grab: (event: PointerEvent) => RangeAxis | undefined): void;
41
- protected clampRange(next: number): number;
42
- protected controlRole(): 'slider' | 'spinbutton';
43
- protected fraction(value: number): number;
44
- protected input(next: number): boolean;
45
- protected modulationFractions(amount: number): [number, number];
46
- protected originFraction(): number;
47
- protected positions(): number | undefined;
48
- protected range(): number;
49
- protected renderAria(control: HTMLElement, orientation?: 'horizontal' | 'vertical'): void;
50
- protected restoreState(state: string): void;
51
- protected valueAt(fraction: number): number;
52
- protected valueText(): string;
53
- protected wraps(): boolean;
54
- }
55
- //#endregion
56
- //# sourceMappingURL=range-element.d.ts.map