@tremolo-ui/functions 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +7 -248
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -201
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +32 -201
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -235
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +0 -25
- package/src/math.ts +1 -12
- package/src/midi.ts +10 -1
- package/src/scales.ts +1 -62
- package/src/modifiers.ts +0 -141
- package/src/piano.ts +0 -177
- package/src/util.ts +0 -7
package/dist/index.d.cts
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* clamp value between min and max
|
|
4
4
|
*/
|
|
5
|
-
declare function clamp(value: number, min: number, max: number): number;
|
|
5
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
6
6
|
/**
|
|
7
7
|
* Normalize the value from 0 to 1, spreading the range evenly.
|
|
8
8
|
*
|
|
9
9
|
* This is the linear mapping and takes no curve of its own; a `Scale` builds
|
|
10
10
|
* whatever curve it needs on top of it.
|
|
11
11
|
*/
|
|
12
|
-
declare function normalizeValue(value: number, min: number, max: number): number;
|
|
12
|
+
export declare function normalizeValue(value: number, min: number, max: number): number;
|
|
13
13
|
/**
|
|
14
14
|
* Convert normalized values back to raw values, spreading the range evenly.
|
|
15
15
|
*
|
|
16
16
|
* The inverse of {@link normalizeValue}.
|
|
17
17
|
*/
|
|
18
|
-
declare function rawValue(normalizedValue: number, min: number, max: number): number;
|
|
18
|
+
export declare function rawValue(normalizedValue: number, min: number, max: number): number;
|
|
19
19
|
/**
|
|
20
20
|
* Put a value on the grid the caller asked for, rounding a half step upwards.
|
|
21
21
|
*
|
|
@@ -26,14 +26,8 @@ declare function rawValue(normalizedValue: number, min: number, max: number): nu
|
|
|
26
26
|
* side the last bit happened to land on — 0.25 rounded up while 0.15 and 0.35
|
|
27
27
|
* rounded down.
|
|
28
28
|
*/
|
|
29
|
-
declare function stepValue(value: number, step: number): number;
|
|
30
|
-
declare function toFixed(x: number, fractionDigits?: number): number;
|
|
31
|
-
/**
|
|
32
|
-
* The significant decimal digits a double actually carries. A double holds a
|
|
33
|
-
* little under 16, so anything past this is the binary representation showing
|
|
34
|
-
* through rather than information.
|
|
35
|
-
*/
|
|
36
|
-
declare const SIGNIFICANT_DIGITS = 15;
|
|
29
|
+
export declare function stepValue(value: number, step: number): number;
|
|
30
|
+
export declare function toFixed(x: number, fractionDigits?: number): number;
|
|
37
31
|
/**
|
|
38
32
|
* Drop the binary artefact from a computed value.
|
|
39
33
|
*
|
|
@@ -54,85 +48,12 @@ declare const SIGNIFICANT_DIGITS = 15;
|
|
|
54
48
|
* @example
|
|
55
49
|
* toPrecision(5.1 + 0.1) // 5.2, rather than 5.199999999999999
|
|
56
50
|
*/
|
|
57
|
-
declare function toPrecision(x: number, significantDigits?: number): number;
|
|
58
|
-
declare function
|
|
59
|
-
declare function
|
|
60
|
-
declare function
|
|
61
|
-
declare function
|
|
62
|
-
declare function
|
|
63
|
-
declare function dbToGain(db: number): number;
|
|
64
|
-
declare function gainToDb(gain: number): number;
|
|
65
|
-
//#endregion
|
|
66
|
-
//#region src/modifiers.d.ts
|
|
67
|
-
/**
|
|
68
|
-
* Options for setting the amount of keyboard and mouse wheel changes.
|
|
69
|
-
*/
|
|
70
|
-
type InputEventOption = readonly ['normalized' | 'raw', number];
|
|
71
|
-
/**
|
|
72
|
-
* A modifier key that can carry an amount of its own.
|
|
73
|
-
*
|
|
74
|
-
* `ctrl` and `meta` are kept apart rather than folded into one "command" key:
|
|
75
|
-
* a plugin UI that mirrors a desktop host usually wants the same physical key
|
|
76
|
-
* on every platform, not the platform's own convention.
|
|
77
|
-
*/
|
|
78
|
-
type Modifier = 'shift' | 'alt' | 'ctrl' | 'meta';
|
|
79
|
-
/** The modifier flags of a `WheelEvent` or a `KeyboardEvent`. */
|
|
80
|
-
interface ModifierState {
|
|
81
|
-
shiftKey: boolean;
|
|
82
|
-
altKey: boolean;
|
|
83
|
-
ctrlKey: boolean;
|
|
84
|
-
metaKey: boolean;
|
|
85
|
-
}
|
|
86
|
-
/** One setting per modifier key, with `default` for none of them. */
|
|
87
|
-
type ModifierSetting = number | InputEventOption;
|
|
88
|
-
type ModifierMap<T extends ModifierSetting> = {
|
|
89
|
-
default: T;
|
|
90
|
-
} & Partial<Record<Modifier, T>>;
|
|
91
|
-
/**
|
|
92
|
-
* A single setting, or one per modifier key.
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ['raw', 1]
|
|
96
|
-
* { default: ['raw', 1], shift: ['raw', 0.1] }
|
|
97
|
-
*/
|
|
98
|
-
type ModifierValue<T extends ModifierSetting> = T | ModifierMap<T>;
|
|
99
|
-
interface SelectedInputEvent {
|
|
100
|
-
option: InputEventOption;
|
|
101
|
-
/** Which modifier entry was chosen, or `null` for `default`. */
|
|
102
|
-
modifier: Modifier | null;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Pick the setting that applies, given the modifier keys being held.
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* selectModifier({ default: 1, shift: 0.1 }, event)
|
|
109
|
-
*/
|
|
110
|
-
declare function selectModifier<T extends ModifierSetting>(options: ModifierValue<T>, modifiers?: ModifierState): {
|
|
111
|
-
value: T;
|
|
112
|
-
modifier: Modifier | null;
|
|
113
|
-
};
|
|
114
|
-
/**
|
|
115
|
-
* Turn every entry of a setting into another kind of setting, keeping which
|
|
116
|
-
* modifier each belongs to.
|
|
117
|
-
*
|
|
118
|
-
* A drag sensitivity is a number and a keyboard amount is a tuple, but the two
|
|
119
|
-
* describe the same thing from the caller's side. This carries one over to the
|
|
120
|
-
* other so that a component can hand a sensitivity to {@link applyDelta}
|
|
121
|
-
* without unpicking the modifier map itself — which matters, since naming a
|
|
122
|
-
* modifier is also what takes `step` out of the pipeline.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* mapModifier({ default: 1, shift: 0.1 }, (f) => ['raw', step * f])
|
|
126
|
-
* // { default: ['raw', 1], shift: ['raw', 0.1] }
|
|
127
|
-
*/
|
|
128
|
-
declare function mapModifier<T extends ModifierSetting, U extends ModifierSetting>(options: ModifierValue<T>, fn: (value: T) => U): ModifierValue<U>;
|
|
129
|
-
/**
|
|
130
|
-
* Pick the amount that applies, given the modifier keys being held.
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* selectInputEvent({ default: ['raw', 1], shift: ['raw', 0.1] }, event)
|
|
134
|
-
*/
|
|
135
|
-
declare function selectInputEvent(options: ModifierValue<InputEventOption>, modifiers?: ModifierState): SelectedInputEvent;
|
|
51
|
+
export declare function toPrecision(x: number, significantDigits?: number): number;
|
|
52
|
+
export declare function radian(degree: number): number;
|
|
53
|
+
export declare function degree(radian: number): number;
|
|
54
|
+
export declare function mapValue(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
55
|
+
export declare function dbToGain(db: number): number;
|
|
56
|
+
export declare function gainToDb(gain: number): number;
|
|
136
57
|
//#endregion
|
|
137
58
|
//#region src/scales.d.ts
|
|
138
59
|
/**
|
|
@@ -162,7 +83,7 @@ interface Scale {
|
|
|
162
83
|
* The right default for anything already linear in perception: dB values,
|
|
163
84
|
* pan, percentages, MIDI note numbers, semitones.
|
|
164
85
|
*/
|
|
165
|
-
declare const linearScale: Scale;
|
|
86
|
+
export declare const linearScale: Scale;
|
|
166
87
|
/**
|
|
167
88
|
* The power law of JUCE's `NormalisableRange::skew`, applied to `value - min`.
|
|
168
89
|
*
|
|
@@ -179,12 +100,12 @@ declare const linearScale: Scale;
|
|
|
179
100
|
*
|
|
180
101
|
* @param skew the JUCE skew factor
|
|
181
102
|
*/
|
|
182
|
-
declare function skewScale(skew: number): Scale;
|
|
103
|
+
export declare function skewScale(skew: number): Scale;
|
|
183
104
|
/**
|
|
184
105
|
* The skew factor for {@link skewScale} that puts `centerValue` at the middle
|
|
185
106
|
* of the travel — JUCE's `NormalisableRange::setSkewForCentre`.
|
|
186
107
|
*/
|
|
187
|
-
declare function skewWithCenterValue(centerValue: number, min: number, max: number): number;
|
|
108
|
+
export declare function skewWithCenterValue(centerValue: number, min: number, max: number): number;
|
|
188
109
|
/**
|
|
189
110
|
* Equal travel gives an equal *ratio*, so an octave — or a percentage — takes
|
|
190
111
|
* the same distance wherever it falls.
|
|
@@ -196,7 +117,7 @@ declare function skewWithCenterValue(centerValue: number, min: number, max: numb
|
|
|
196
117
|
* ratio reaches zero or crosses it. Use {@link curveScale} for a range that
|
|
197
118
|
* starts at 0.
|
|
198
119
|
*/
|
|
199
|
-
declare const exponentialScale: Scale;
|
|
120
|
+
export declare const exponentialScale: Scale;
|
|
200
121
|
/**
|
|
201
122
|
* An exponential bend that still passes exactly through `min` and `max`, so
|
|
202
123
|
* unlike {@link exponentialScale} it works on a range that starts at 0 or
|
|
@@ -218,7 +139,7 @@ declare const exponentialScale: Scale;
|
|
|
218
139
|
*
|
|
219
140
|
* @param curve how hard the curve bends, and in which direction
|
|
220
141
|
*/
|
|
221
|
-
declare function curveScale(curve: number): Scale;
|
|
142
|
+
export declare function curveScale(curve: number): Scale;
|
|
222
143
|
/**
|
|
223
144
|
* {@link skewScale} mirrored about the middle of the range, so both halves
|
|
224
145
|
* bend the same way — JUCE's `symmetricSkew`.
|
|
@@ -231,12 +152,12 @@ declare function curveScale(curve: number): Scale;
|
|
|
231
152
|
*
|
|
232
153
|
* @param skew the JUCE skew factor
|
|
233
154
|
*/
|
|
234
|
-
declare function symmetricSkewScale(skew: number): Scale;
|
|
155
|
+
export declare function symmetricSkewScale(skew: number): Scale;
|
|
235
156
|
/**
|
|
236
157
|
* The curve for {@link curveScale} that puts `centerValue` at the middle of
|
|
237
158
|
* the travel — the counterpart of {@link skewWithCenterValue}.
|
|
238
159
|
*/
|
|
239
|
-
declare function curveWithCenterValue(centerValue: number, min: number, max: number): number;
|
|
160
|
+
export declare function curveWithCenterValue(centerValue: number, min: number, max: number): number;
|
|
240
161
|
/**
|
|
241
162
|
* How a value is scaled: the range it lives in, how it is rounded, and how it
|
|
242
163
|
* is distributed across the travel.
|
|
@@ -258,35 +179,13 @@ interface ValueRange {
|
|
|
258
179
|
*/
|
|
259
180
|
scale?: Scale;
|
|
260
181
|
}
|
|
261
|
-
/**
|
|
262
|
-
* Move a value by an amount of input, as reported by a wheel or an arrow key.
|
|
263
|
-
*
|
|
264
|
-
* The pipeline matches `createDragValue` of `@tremolo-ui/dom`: scale, then
|
|
265
|
-
* step, then clamp. Which key or which sign of `deltaY` counts as which
|
|
266
|
-
* direction is left to the caller, since it differs per component.
|
|
267
|
-
*
|
|
268
|
-
* @param direction which way, and how many times, to apply the option. The
|
|
269
|
-
* size of one step is `option[1]`, so this is normally `1` or `-1`.
|
|
270
|
-
*
|
|
271
|
-
* @param modifiers the event, for `options` that name a modifier key. See
|
|
272
|
-
* {@link selectInputEvent}.
|
|
273
|
-
*
|
|
274
|
-
* @example
|
|
275
|
-
* // ArrowDown on a slider whose keyboard option is ['raw', 1]
|
|
276
|
-
* applyDelta(value, -1, keyboard, { min, max, step, scale })
|
|
277
|
-
*
|
|
278
|
-
* @example
|
|
279
|
-
* // Shift+ArrowDown, where `keyboard` is { default: …, shift: ['raw', 0.1] }
|
|
280
|
-
* applyDelta(value, -1, keyboard, range, event)
|
|
281
|
-
*/
|
|
282
|
-
declare function applyDelta(value: number, direction: number, options: ModifierValue<InputEventOption>, { min, max, step, scale }: ValueRange, modifiers?: ModifierState): number;
|
|
283
182
|
//#endregion
|
|
284
183
|
//#region src/midi.d.ts
|
|
285
|
-
declare const whiteKeys: readonly ["A", "B", "C", "D", "E", "F", "G"];
|
|
184
|
+
export declare const whiteKeys: readonly ["A", "B", "C", "D", "E", "F", "G"];
|
|
286
185
|
type WhiteKey = (typeof whiteKeys)[number];
|
|
287
|
-
declare const noteKeys: readonly ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
186
|
+
export declare const noteKeys: readonly ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
288
187
|
type NoteKey = (typeof noteKeys)[number];
|
|
289
|
-
declare function parseNoteName(noteName: string): {
|
|
188
|
+
export declare function parseNoteName(noteName: string): {
|
|
290
189
|
letter: WhiteKey;
|
|
291
190
|
accidental: "#" | "##" | "b" | "bb" | "";
|
|
292
191
|
octave: number;
|
|
@@ -294,33 +193,33 @@ declare function parseNoteName(noteName: string): {
|
|
|
294
193
|
/**
|
|
295
194
|
* Convert noteName to noteNumber
|
|
296
195
|
*/
|
|
297
|
-
declare function noteNumber(noteName: string): number;
|
|
196
|
+
export declare function noteNumber(noteName: string): number;
|
|
298
197
|
/**
|
|
299
198
|
* Convert noteNumber to noteName
|
|
300
199
|
* C-1 = 0
|
|
301
200
|
* G9 = 127
|
|
302
201
|
* @param noteNumber noteNumber
|
|
303
202
|
*/
|
|
304
|
-
declare function noteName(noteNumber: number): `${NoteKey}${number}`;
|
|
203
|
+
export declare function noteName(noteNumber: number): `${NoteKey}${number}`;
|
|
305
204
|
/**
|
|
306
205
|
* Convert noteNumber to noteKey
|
|
307
206
|
*/
|
|
308
|
-
declare function noteKey(noteNumber: number): NoteKey;
|
|
207
|
+
export declare function noteKey(noteNumber: number): NoteKey;
|
|
309
208
|
/**
|
|
310
209
|
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
311
210
|
*/
|
|
312
|
-
declare function isWhiteKey(note: number | string): boolean;
|
|
211
|
+
export declare function isWhiteKey(note: number | string): boolean;
|
|
313
212
|
/**
|
|
314
213
|
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
315
214
|
*/
|
|
316
|
-
declare function isBlackKey(note: number | string): boolean;
|
|
215
|
+
export declare function isBlackKey(note: number | string): boolean;
|
|
317
216
|
/**
|
|
318
217
|
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
319
218
|
* @param detune [cent]
|
|
320
219
|
* @param a4 A4 frequency [Hz]
|
|
321
220
|
* @returns frequency [Hz]
|
|
322
221
|
*/
|
|
323
|
-
declare function noteToFrequency(note: number | string, detune?: number, a4?: number): number;
|
|
222
|
+
export declare function noteToFrequency(note: number | string, detune?: number, a4?: number): number;
|
|
324
223
|
/**
|
|
325
224
|
* Semitones above the root, for each supported scale.
|
|
326
225
|
*
|
|
@@ -332,7 +231,7 @@ declare function noteToFrequency(note: number | string, detune?: number, a4?: nu
|
|
|
332
231
|
* spellings are here because both are what someone reaches for depending on
|
|
333
232
|
* whether they are thinking in keys or in modes.
|
|
334
233
|
*/
|
|
335
|
-
declare const scaleIntervals: {
|
|
234
|
+
export declare const scaleIntervals: {
|
|
336
235
|
readonly major: readonly [0, 2, 4, 5, 7, 9, 11];
|
|
337
236
|
readonly naturalMinor: readonly [0, 2, 3, 5, 7, 8, 10];
|
|
338
237
|
readonly harmonicMinor: readonly [0, 2, 3, 5, 7, 8, 11];
|
|
@@ -362,7 +261,7 @@ type ScaleName = keyof typeof scaleIntervals;
|
|
|
362
261
|
* inScale('F#4', 'D3', 'major') // true
|
|
363
262
|
* ```
|
|
364
263
|
*/
|
|
365
|
-
declare function inScale(note: number | string, root: number | string, name: ScaleName): boolean;
|
|
264
|
+
export declare function inScale(note: number | string, root: number | string, name: ScaleName): boolean;
|
|
366
265
|
/**
|
|
367
266
|
* The notes of a scale, ascending from `root`.
|
|
368
267
|
*
|
|
@@ -377,71 +276,7 @@ declare function inScale(note: number | string, root: number | string, name: Sca
|
|
|
377
276
|
* scaleNotes('C3', 'majorPentatonic') // [48, 50, 52, 55, 57]
|
|
378
277
|
* ```
|
|
379
278
|
*/
|
|
380
|
-
declare function scaleNotes(root: number | string, name: ScaleName, octaves?: number): number[];
|
|
381
|
-
//#endregion
|
|
382
|
-
//#region src/piano.d.ts
|
|
383
|
-
type NoteRange = {
|
|
384
|
-
first: number;
|
|
385
|
-
last: number;
|
|
386
|
-
};
|
|
387
|
-
/**
|
|
388
|
-
* `[noteRange.first, noteRange.first + 1, ..., noteRange.last]`
|
|
389
|
-
*/
|
|
390
|
-
declare function getNoteRangeArray(noteRange: NoteRange): number[];
|
|
391
|
-
/**
|
|
392
|
-
* The geometry of a drawn keyboard.
|
|
393
|
-
*
|
|
394
|
-
* One description is shared by the drawing and the hit testing, so a key cannot
|
|
395
|
-
* be drawn somewhere other than where it responds.
|
|
396
|
-
*/
|
|
397
|
-
interface PianoLayout {
|
|
398
|
-
noteRange: NoteRange;
|
|
399
|
-
/** Width of a white key, excluding {@link PianoLayout.keyGap}. */
|
|
400
|
-
whiteKeyWidth: number;
|
|
401
|
-
/**
|
|
402
|
-
* Space between two white keys. Part of the slot a white key occupies, so it
|
|
403
|
-
* still belongs to one of the keys for the purpose of hit testing.
|
|
404
|
-
*
|
|
405
|
-
* @default 1
|
|
406
|
-
*/
|
|
407
|
-
keyGap?: number;
|
|
408
|
-
/**
|
|
409
|
-
* Width of a black key, as a fraction of {@link PianoLayout.whiteKeyWidth}.
|
|
410
|
-
*
|
|
411
|
-
* @default 0.65
|
|
412
|
-
*/
|
|
413
|
-
blackKeyWidthRatio?: number;
|
|
414
|
-
/**
|
|
415
|
-
* Height of a black key, as a fraction of the height of the keyboard.
|
|
416
|
-
*
|
|
417
|
-
* @default 0.6
|
|
418
|
-
*/
|
|
419
|
-
blackKeyHeightRatio?: number;
|
|
420
|
-
}
|
|
421
|
-
/** Width of a black key in pixels. */
|
|
422
|
-
declare function blackKeyWidth(layout: PianoLayout): number;
|
|
423
|
-
/** Width of the whole keyboard in pixels. */
|
|
424
|
-
declare function pianoWidth(layout: PianoLayout): number;
|
|
425
|
-
/**
|
|
426
|
-
* Offset of the left edge of a key from the left edge of the keyboard, in
|
|
427
|
-
* pixels.
|
|
428
|
-
*
|
|
429
|
-
* Notes outside `noteRange` are placed too, so the value is negative below
|
|
430
|
-
* `noteRange.first`.
|
|
431
|
-
*/
|
|
432
|
-
declare function notePosition(note: number, layout: PianoLayout): number;
|
|
433
|
-
/**
|
|
434
|
-
* The note drawn at a point, or null where there is none.
|
|
435
|
-
*
|
|
436
|
-
* Black keys are tested first, so they win where they overlap a white one. A
|
|
437
|
-
* white key covers its gap as well as its width, so the whole width of the
|
|
438
|
-
* keyboard belongs to some key and a click cannot fall between two.
|
|
439
|
-
*
|
|
440
|
-
* @param x offset from the left edge of the keyboard, in pixels
|
|
441
|
-
* @param y offset from its top edge, in pixels
|
|
442
|
-
* @param height height of the keyboard, in pixels
|
|
443
|
-
*/
|
|
444
|
-
declare function noteAt(x: number, y: number, height: number, layout: PianoLayout): number | null;
|
|
279
|
+
export declare function scaleNotes(root: number | string, name: ScaleName, octaves?: number): number[];
|
|
445
280
|
//#endregion
|
|
446
281
|
//#region src/unit.d.ts
|
|
447
282
|
/**
|
|
@@ -503,11 +338,7 @@ interface UnitFormatter {
|
|
|
503
338
|
* @example
|
|
504
339
|
* <NumberInput.Root {...unitFormat('Hz', { digits: 2 })} value={v} onChange={setV}>
|
|
505
340
|
*/
|
|
506
|
-
declare function unitFormat(unit: string, options?: UnitFormatOptions): UnitFormatter;
|
|
507
|
-
//#endregion
|
|
508
|
-
//#region src/util.d.ts
|
|
509
|
-
declare function mod(n: number, m: number): number;
|
|
510
|
-
declare function xor(a?: boolean, b?: boolean): boolean;
|
|
341
|
+
export declare function unitFormat(unit: string, options?: UnitFormatOptions): UnitFormatter;
|
|
511
342
|
//#endregion
|
|
512
|
-
export
|
|
343
|
+
export type { NoteKey, SIPrefix, Scale, ScaleName, UnitFormatOptions, UnitFormatter, ValueRange, WhiteKey };
|
|
513
344
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/math.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/math.ts","../src/scales.ts","../src/midi.ts","../src/unit.ts"],"mappings":";;;;wBAGgB,MAAM,eAAe,aAAa;;;;;;;wBAUlC,eAAe,eAAe,aAAa;;;;;;wBAU3C,SAAS,yBAAyB,aAAa;;;;;;;;;;;wBAe/C,UAAU,eAAe;wBAUzB,QAAQ,WAAW;;;;;;;;;;;;;;;;;;;;;wBA+BnB,YAAY,WAAW;wBAUvB,OAAO;wBAIP,OAAO;wBAIP,SACd,eACA,eACA,eACA,gBACA;wBAKc,SAAS;wBAIT,SAAS;;;;;;;;;;;;;;;;;;UC9FR;;EAEf,YAAY,eAAe,aAAa;;EAExC,cAAc,kBAAkB,aAAa;;;;;;;;qBAmBlC,aAAa;;;;;;;;;;;;;;;;;wBAqBV,UAAU,eAAe;;;;;wBAsBzB,oBACd,qBACA,aACA;;;;;;;;;;;;qBAmBW,kBAAkB;;;;;;;;;;;;;;;;;;;;;;wBAqDf,WAAW,gBAAgB;;;;;;;;;;;;;wBAmD3B,mBAAmB,eAAe;;;;;wBAiClC,qBACd,qBACA,aACA;;;;;;;;UAkBe;EACf;EACA;;;;EAIA;;;;;;EAMA,QAAQ;;;;qBCxQG;KAED,mBAAmB;qBAElB;KAeD,kBAAkB;wBAQd,cAAc;EAOY,QAAA;EACZ;;;;;;wBAQd,WAAW;;;;;;;wBAeX,SAAS,wBAAwB;;;;wBAUjC,QAAQ,qBAAqB;;;;wBAQ7B,WAAW;;;;wBAiBX,WAAW;;;;;;;wBAUX,gBAAgB,uBAAuB,iBAAY;;;;;;;;;;;;qBAiBtD;;;;;;;;;;;;;;;;;;KAsBD,yBAAyB;;;;;;;;;;;;wBAarB,QACd,uBACA,uBACA,MAAM;;;;;;;;;;;;;;;wBAuBQ,WACd,uBACA,MAAM,WACN;;;;;;;;;;KC1LU;UAwBK;;;;;;;;;EASf,OAAO;;;;;;;;;;EAUP;;;;EAIA;;;;;EAKA;;;UAIe;EACf,SAAS;EACT,QAAQ;;;;;;;;;;;;;;;;;;wBAiCM,WACd,cACA,UAAS,oBACR"}
|