@frontpanel/vue 0.1.0 → 0.2.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/FpKnob.vue.d.ts +31 -0
- package/dist/FpLed.vue.d.ts +3 -0
- package/dist/FpMeter.vue.d.ts +32 -0
- package/dist/FpReadout.vue.d.ts +22 -0
- package/dist/FpSlider.vue.d.ts +34 -0
- package/dist/FpWindow.vue.d.ts +9 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +496 -142
- package/dist/lens.d.ts +3 -0
- package/dist/readout.d.ts +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface FpKnobProps {
|
|
2
|
+
/** The lowest value, at the knob's 7 o'clock stop. */
|
|
3
|
+
min?: number;
|
|
4
|
+
/** The highest value, at its 5 o'clock stop. */
|
|
5
|
+
max?: number;
|
|
6
|
+
/** The step values snap to. PageUp and PageDown move ten steps. */
|
|
7
|
+
step?: number;
|
|
8
|
+
/** A silkscreen label under the knob, which also names it. Without one, give it an `aria-label`. */
|
|
9
|
+
label?: string;
|
|
10
|
+
/** Turns the value into the words a screen reader says, such as `v => `${v} dB``. */
|
|
11
|
+
valueText?: (value: number) => string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
type __VLS_Props = FpKnobProps;
|
|
15
|
+
type __VLS_ModelProps = {
|
|
16
|
+
modelValue?: number;
|
|
17
|
+
};
|
|
18
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
19
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
20
|
+
valueCommit: (value: number) => any;
|
|
21
|
+
"update:modelValue": (value: number) => any;
|
|
22
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
23
|
+
onValueCommit?: ((value: number) => any) | undefined;
|
|
24
|
+
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
25
|
+
}>, {
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
step: number;
|
|
29
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
30
|
+
declare const _default: typeof __VLS_export;
|
|
31
|
+
export default _default;
|
package/dist/FpLed.vue.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FpLens } from './lens';
|
|
1
2
|
export type FpLedColor = 'green' | 'amber' | 'red';
|
|
2
3
|
export interface FpLedProps {
|
|
3
4
|
/** The colour it lights in. */
|
|
@@ -6,6 +7,8 @@ export interface FpLedProps {
|
|
|
6
7
|
lit?: boolean;
|
|
7
8
|
/** Blinks twice when it lights, then holds, to confirm an action. Re-key the LED to blink again. */
|
|
8
9
|
blink?: boolean;
|
|
10
|
+
/** How its light spreads. Unset, it takes the lens set around it (`fp-lens-*`), else diffused. */
|
|
11
|
+
lens?: FpLens;
|
|
9
12
|
/** Announces the LED as an image with this name. Without it the LED is decorative: say its state in text nearby. */
|
|
10
13
|
label?: string;
|
|
11
14
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { FpLens } from './lens';
|
|
2
|
+
export interface FpMeterProps {
|
|
3
|
+
/** The level to show. Values past the ends light all or none of it. */
|
|
4
|
+
value?: number;
|
|
5
|
+
/** The level at the bottom (or the start, lying on its side). */
|
|
6
|
+
min?: number;
|
|
7
|
+
/** The level at the top (or the end). */
|
|
8
|
+
max?: number;
|
|
9
|
+
/** How many LED segments it has. A segment lights once the value reaches it. */
|
|
10
|
+
segments?: number;
|
|
11
|
+
/** Where amber begins, in the value's units. Defaults to 70 percent of the range. */
|
|
12
|
+
amberAt?: number;
|
|
13
|
+
/** Where red begins, in the value's units. Defaults to 90 percent of the range. */
|
|
14
|
+
redAt?: number;
|
|
15
|
+
/** Stands up, like a channel's level, or lies on its side. */
|
|
16
|
+
orientation?: 'vertical' | 'horizontal';
|
|
17
|
+
/** How its segments light. Unset, it takes the lens set around it (`fp-lens-*`), else diffused. */
|
|
18
|
+
lens?: FpLens;
|
|
19
|
+
/** A silkscreen label under the meter, which also names it. Without one, give it an `aria-label`. */
|
|
20
|
+
label?: string;
|
|
21
|
+
/** Turns the value into the words a screen reader says, such as `v => `${v} dB``. */
|
|
22
|
+
valueText?: (value: number) => string;
|
|
23
|
+
}
|
|
24
|
+
declare const __VLS_export: import("vue").DefineComponent<FpMeterProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FpMeterProps> & Readonly<{}>, {
|
|
25
|
+
value: number;
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
segments: number;
|
|
29
|
+
orientation: "vertical" | "horizontal";
|
|
30
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
31
|
+
declare const _default: typeof __VLS_export;
|
|
32
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FpLedColor } from './FpLed.vue';
|
|
2
|
+
import type { FpLens } from './lens';
|
|
3
|
+
export interface FpReadoutProps {
|
|
4
|
+
/**
|
|
5
|
+
* What it shows. Digits, a minus, a space and the letters a seven-segment display can draw; a `.`
|
|
6
|
+
* lights the decimal point of the digit before it, and a `:` adds a colon.
|
|
7
|
+
*/
|
|
8
|
+
value: string | number;
|
|
9
|
+
/** How many digit cells it has, padded with dark cells on the left. Colons do not count. */
|
|
10
|
+
digits?: number;
|
|
11
|
+
/** The colour its segments light in. */
|
|
12
|
+
color?: FpLedColor;
|
|
13
|
+
/** How its segments light. Unset, it takes the lens set around it (`fp-lens-*`), else diffused. */
|
|
14
|
+
lens?: FpLens;
|
|
15
|
+
/** Turns the value into the words a screen reader says, such as `v => `${v} dB``. */
|
|
16
|
+
valueText?: (value: string) => string;
|
|
17
|
+
}
|
|
18
|
+
declare const __VLS_export: import("vue").DefineComponent<FpReadoutProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FpReadoutProps> & Readonly<{}>, {
|
|
19
|
+
color: FpLedColor;
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
declare const _default: typeof __VLS_export;
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface FpSliderProps {
|
|
2
|
+
/** The lowest value, at the bottom (or the start, lying on its side). */
|
|
3
|
+
min?: number;
|
|
4
|
+
/** The highest value, at the top (or the end). */
|
|
5
|
+
max?: number;
|
|
6
|
+
/** The step values snap to. PageUp, PageDown and Shift with an arrow move ten steps. */
|
|
7
|
+
step?: number;
|
|
8
|
+
/** Stands up, like a mixer channel, or lies on its side. */
|
|
9
|
+
orientation?: 'vertical' | 'horizontal';
|
|
10
|
+
/** A silkscreen label under the fader, which also names it. Without one, give it an `aria-label`. */
|
|
11
|
+
label?: string;
|
|
12
|
+
/** Turns the value into the words a screen reader says, such as `v => `${v} dB``. */
|
|
13
|
+
valueText?: (value: number) => string;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
type __VLS_Props = FpSliderProps;
|
|
17
|
+
type __VLS_ModelProps = {
|
|
18
|
+
modelValue?: number;
|
|
19
|
+
};
|
|
20
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
21
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
22
|
+
valueCommit: (value: number) => any;
|
|
23
|
+
"update:modelValue": (value: number) => any;
|
|
24
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
25
|
+
onValueCommit?: ((value: number) => any) | undefined;
|
|
26
|
+
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
27
|
+
}>, {
|
|
28
|
+
min: number;
|
|
29
|
+
max: number;
|
|
30
|
+
step: number;
|
|
31
|
+
orientation: "vertical" | "horizontal";
|
|
32
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
33
|
+
declare const _default: typeof __VLS_export;
|
|
34
|
+
export default _default;
|
package/dist/FpWindow.vue.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import type { PrimitiveProps } from 'reka-ui';
|
|
1
2
|
export interface FpWindowProps {
|
|
3
|
+
/**
|
|
4
|
+
* The window's element. A `section` or `aside` is a landmark named by the title; a `div` is not a
|
|
5
|
+
* landmark.
|
|
6
|
+
*/
|
|
7
|
+
as?: PrimitiveProps['as'];
|
|
2
8
|
/** The window's name, shown in the title bar; it also names the window for assistive tech. */
|
|
3
9
|
title: string;
|
|
4
10
|
/** The title's heading level. */
|
|
@@ -15,6 +21,8 @@ export interface FpWindowProps {
|
|
|
15
21
|
* Position the sheet and choose when to use it yourself; wrap it in `<Transition name="fp-sheet">`.
|
|
16
22
|
*/
|
|
17
23
|
sheet?: boolean;
|
|
24
|
+
/** Leaves the body unpadded, for contents that run edge to edge, like a list or a rack of rows. */
|
|
25
|
+
flush?: boolean;
|
|
18
26
|
}
|
|
19
27
|
type __VLS_Slots = {
|
|
20
28
|
default?: () => unknown;
|
|
@@ -26,6 +34,7 @@ declare const __VLS_base: import("vue").DefineComponent<FpWindowProps, {}, {}, {
|
|
|
26
34
|
}, string, import("vue").PublicProps, Readonly<FpWindowProps> & Readonly<{
|
|
27
35
|
onClose?: (() => any) | undefined;
|
|
28
36
|
}>, {
|
|
37
|
+
as: import("reka-ui").AsTag | import("vue").Component;
|
|
29
38
|
level: 2 | 3 | 4 | 5 | 6;
|
|
30
39
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
31
40
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
package/dist/index.d.ts
CHANGED
|
@@ -11,18 +11,28 @@ export { default as FpHousing } from './FpHousing.vue';
|
|
|
11
11
|
export type { FpHousingProps } from './FpHousing.vue';
|
|
12
12
|
export { default as FpIcon } from './FpIcon.vue';
|
|
13
13
|
export type { FpIconProps } from './FpIcon.vue';
|
|
14
|
+
export { default as FpKnob } from './FpKnob.vue';
|
|
15
|
+
export type { FpKnobProps } from './FpKnob.vue';
|
|
14
16
|
export { default as FpLcd } from './FpLcd.vue';
|
|
15
17
|
export type { FpLcdProps } from './FpLcd.vue';
|
|
16
18
|
export { default as FpLcdLine } from './FpLcdLine.vue';
|
|
17
19
|
export type { FpLcdLineProps } from './FpLcdLine.vue';
|
|
18
20
|
export { default as FpLed } from './FpLed.vue';
|
|
19
21
|
export type { FpLedColor, FpLedProps } from './FpLed.vue';
|
|
22
|
+
export { default as FpMeter } from './FpMeter.vue';
|
|
23
|
+
export type { FpMeterProps } from './FpMeter.vue';
|
|
24
|
+
export { default as FpReadout } from './FpReadout.vue';
|
|
25
|
+
export type { FpReadoutProps } from './FpReadout.vue';
|
|
20
26
|
export { default as FpScrew } from './FpScrew.vue';
|
|
21
27
|
export { default as FpSilk } from './FpSilk.vue';
|
|
22
28
|
export type { FpSilkProps } from './FpSilk.vue';
|
|
29
|
+
export { default as FpSlider } from './FpSlider.vue';
|
|
30
|
+
export type { FpSliderProps } from './FpSlider.vue';
|
|
23
31
|
export { default as FpWell } from './FpWell.vue';
|
|
24
32
|
export type { FpWellProps } from './FpWell.vue';
|
|
25
33
|
export { default as FpWindow } from './FpWindow.vue';
|
|
26
34
|
export type { FpWindowProps } from './FpWindow.vue';
|
|
27
35
|
export { fpIconNames } from './icons';
|
|
28
36
|
export type { FpIconName } from './icons';
|
|
37
|
+
export type { FpLens } from './lens';
|
|
38
|
+
export { fpReadoutGlyph } from './readout';
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Primitive as
|
|
1
|
+
import { Fragment as e, computed as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createTextVNode as o, createVNode as s, defineComponent as c, mergeModels as l, mergeProps as u, normalizeClass as d, normalizeStyle as f, openBlock as p, renderList as m, renderSlot as h, resolveDynamicComponent as g, shallowRef as _, toDisplayString as v, unref as y, useAttrs as b, useId as x, useModel as S, useTemplateRef as C, warn as w, watch as T, withCtx as E } from "vue";
|
|
2
|
+
import { Primitive as D, SliderRoot as O, SliderThumb as k, SliderTrack as A } from "reka-ui";
|
|
3
3
|
//#endregion
|
|
4
4
|
//#region src/FpButton.vue
|
|
5
|
-
var
|
|
5
|
+
var j = /* @__PURE__ */ c({
|
|
6
6
|
__name: "FpButton",
|
|
7
7
|
props: {
|
|
8
8
|
pressed: {
|
|
@@ -13,15 +13,15 @@ var S = /* @__PURE__ */ s({
|
|
|
13
13
|
as: { default: "button" }
|
|
14
14
|
},
|
|
15
15
|
setup(e) {
|
|
16
|
-
let
|
|
17
|
-
return (e, r) => (
|
|
18
|
-
as:
|
|
19
|
-
"as-child":
|
|
16
|
+
let t = e;
|
|
17
|
+
return (e, r) => (p(), n(y(D), {
|
|
18
|
+
as: t.as,
|
|
19
|
+
"as-child": t.asChild,
|
|
20
20
|
class: "fp-chrome-btn",
|
|
21
|
-
type:
|
|
22
|
-
"aria-pressed":
|
|
21
|
+
type: t.as === "button" && !t.asChild ? "button" : void 0,
|
|
22
|
+
"aria-pressed": t.pressed
|
|
23
23
|
}, {
|
|
24
|
-
default:
|
|
24
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
25
25
|
_: 3
|
|
26
26
|
}, 8, [
|
|
27
27
|
"as",
|
|
@@ -30,7 +30,7 @@ var S = /* @__PURE__ */ s({
|
|
|
30
30
|
"aria-pressed"
|
|
31
31
|
]));
|
|
32
32
|
}
|
|
33
|
-
}),
|
|
33
|
+
}), M = /* @__PURE__ */ c({
|
|
34
34
|
__name: "FpCap",
|
|
35
35
|
props: {
|
|
36
36
|
color: { default: "white" },
|
|
@@ -42,21 +42,21 @@ var S = /* @__PURE__ */ s({
|
|
|
42
42
|
as: { default: "button" }
|
|
43
43
|
},
|
|
44
44
|
setup(e) {
|
|
45
|
-
let
|
|
45
|
+
let t = e, r = {
|
|
46
46
|
white: void 0,
|
|
47
47
|
blue: "fp-cap-blue",
|
|
48
48
|
amber: "fp-cap-amber",
|
|
49
49
|
graphite: "fp-cap-graphite",
|
|
50
50
|
berry: "fp-cap-berry"
|
|
51
51
|
};
|
|
52
|
-
return (e, i) => (
|
|
53
|
-
as:
|
|
54
|
-
"as-child":
|
|
55
|
-
class:
|
|
56
|
-
type:
|
|
57
|
-
"aria-pressed":
|
|
52
|
+
return (e, i) => (p(), n(y(D), {
|
|
53
|
+
as: t.as,
|
|
54
|
+
"as-child": t.asChild,
|
|
55
|
+
class: d(["fp-cap", r[t.color]]),
|
|
56
|
+
type: t.as === "button" && !t.asChild ? "button" : void 0,
|
|
57
|
+
"aria-pressed": t.pressed
|
|
58
58
|
}, {
|
|
59
|
-
default:
|
|
59
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
60
60
|
_: 3
|
|
61
61
|
}, 8, [
|
|
62
62
|
"as",
|
|
@@ -69,7 +69,7 @@ var S = /* @__PURE__ */ s({
|
|
|
69
69
|
});
|
|
70
70
|
//#endregion
|
|
71
71
|
//#region src/fit.ts
|
|
72
|
-
function
|
|
72
|
+
function ee(e, t, n, r) {
|
|
73
73
|
if (t.width <= 0 || n.width <= 0) return null;
|
|
74
74
|
let i = t.width / n.width;
|
|
75
75
|
if (e === "contain") {
|
|
@@ -80,7 +80,7 @@ function w(e, t, n, r) {
|
|
|
80
80
|
}
|
|
81
81
|
//#endregion
|
|
82
82
|
//#region src/FpDevice.vue?vue&type=script&setup=true&lang.ts
|
|
83
|
-
var
|
|
83
|
+
var te = { class: "fp-device-body" }, ne = /* @__PURE__ */ c({
|
|
84
84
|
__name: "FpDevice",
|
|
85
85
|
props: {
|
|
86
86
|
backdrop: {
|
|
@@ -96,85 +96,85 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
96
96
|
height: {},
|
|
97
97
|
maxScale: { default: 1 }
|
|
98
98
|
},
|
|
99
|
-
setup(
|
|
100
|
-
let n =
|
|
99
|
+
setup(e) {
|
|
100
|
+
let n = e, r = C("stage"), o = C("device"), s = _({
|
|
101
101
|
width: 0,
|
|
102
102
|
height: 0
|
|
103
|
-
}),
|
|
103
|
+
}), c = _(0), l = t(() => n.fit === "none" ? !1 : n.width !== void 0 || (w(`FpDevice: fit="${n.fit}" needs a design width; the device is not scaled.`), !1)), u = t(() => n.height ?? c.value), m = t(() => !l.value || n.fit === "none" ? null : ee(n.fit, s.value, {
|
|
104
104
|
width: n.width,
|
|
105
|
-
height:
|
|
105
|
+
height: u.value
|
|
106
106
|
}, n.maxScale));
|
|
107
|
-
function
|
|
108
|
-
if (!
|
|
109
|
-
let e = getComputedStyle(
|
|
107
|
+
function g() {
|
|
108
|
+
if (!r.value || !o.value) return;
|
|
109
|
+
let e = getComputedStyle(r.value), t = (e) => Number.parseFloat(e) || 0;
|
|
110
110
|
s.value = {
|
|
111
|
-
width:
|
|
112
|
-
height:
|
|
113
|
-
},
|
|
111
|
+
width: r.value.clientWidth - t(e.paddingLeft) - t(e.paddingRight),
|
|
112
|
+
height: r.value.clientHeight - t(e.paddingTop) - t(e.paddingBottom)
|
|
113
|
+
}, c.value = o.value.offsetHeight;
|
|
114
114
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
T([
|
|
116
|
+
l,
|
|
117
|
+
r,
|
|
118
118
|
o
|
|
119
119
|
], ([e, t, n], r, i) => {
|
|
120
120
|
if (!e || !t || !n || typeof ResizeObserver > "u") return;
|
|
121
|
-
let a = new ResizeObserver(
|
|
121
|
+
let a = new ResizeObserver(g);
|
|
122
122
|
a.observe(t), a.observe(n), i(() => a.disconnect());
|
|
123
123
|
}, {
|
|
124
124
|
flush: "post",
|
|
125
125
|
immediate: !0
|
|
126
126
|
});
|
|
127
|
-
let
|
|
128
|
-
if (!
|
|
129
|
-
if (
|
|
130
|
-
width: `${n.width *
|
|
131
|
-
height: `${
|
|
127
|
+
let v = t(() => l.value ? { contain: "inline-size" } : void 0), y = t(() => {
|
|
128
|
+
if (!l.value) return { display: "contents" };
|
|
129
|
+
if (m.value !== null) return {
|
|
130
|
+
width: `${n.width * m.value}px`,
|
|
131
|
+
height: `${u.value * m.value}px`,
|
|
132
132
|
marginInline: "auto"
|
|
133
133
|
};
|
|
134
|
-
}),
|
|
135
|
-
if (
|
|
134
|
+
}), b = t(() => {
|
|
135
|
+
if (l.value) return {
|
|
136
136
|
boxSizing: "border-box",
|
|
137
137
|
width: `${n.width}px`,
|
|
138
138
|
height: n.height === void 0 ? void 0 : `${n.height}px`,
|
|
139
|
-
scale:
|
|
139
|
+
scale: m.value ?? void 0,
|
|
140
140
|
transformOrigin: "0 0",
|
|
141
|
-
visibility:
|
|
141
|
+
visibility: m.value === null ? "hidden" : void 0
|
|
142
142
|
};
|
|
143
143
|
});
|
|
144
|
-
return (e, t) => (
|
|
144
|
+
return (e, t) => (p(), i("div", {
|
|
145
145
|
ref_key: "stage",
|
|
146
|
-
ref:
|
|
147
|
-
class:
|
|
148
|
-
style:
|
|
149
|
-
}, [
|
|
146
|
+
ref: r,
|
|
147
|
+
class: d({ "fp-device-backdrop": n.backdrop }),
|
|
148
|
+
style: f(v.value)
|
|
149
|
+
}, [a("div", { style: f(y.value) }, [n.rim ? (p(), i("div", {
|
|
150
150
|
key: 0,
|
|
151
151
|
ref_key: "device",
|
|
152
152
|
ref: o,
|
|
153
153
|
class: "fp-device-rim",
|
|
154
|
-
style:
|
|
155
|
-
}, [
|
|
154
|
+
style: f(b.value)
|
|
155
|
+
}, [a("div", te, [h(e.$slots, "default")])], 4)) : (p(), i("div", {
|
|
156
156
|
key: 1,
|
|
157
157
|
ref_key: "device",
|
|
158
158
|
ref: o,
|
|
159
159
|
class: "fp-device-body",
|
|
160
|
-
style:
|
|
161
|
-
}, [
|
|
160
|
+
style: f(b.value)
|
|
161
|
+
}, [h(e.$slots, "default")], 4))], 4)], 6));
|
|
162
162
|
}
|
|
163
|
-
}),
|
|
163
|
+
}), re = /* @__PURE__ */ c({
|
|
164
164
|
__name: "FpGelButton",
|
|
165
165
|
props: {
|
|
166
166
|
asChild: { type: Boolean },
|
|
167
167
|
as: { default: "button" }
|
|
168
168
|
},
|
|
169
169
|
setup(e) {
|
|
170
|
-
let
|
|
171
|
-
return (e, r) => (
|
|
172
|
-
as:
|
|
173
|
-
"as-child":
|
|
170
|
+
let t = e;
|
|
171
|
+
return (e, r) => (p(), n(y(D), {
|
|
172
|
+
as: t.as,
|
|
173
|
+
"as-child": t.asChild,
|
|
174
174
|
class: "fp-gel",
|
|
175
|
-
type:
|
|
175
|
+
type: t.as === "button" && !t.asChild ? "button" : void 0
|
|
176
176
|
}, {
|
|
177
|
-
default:
|
|
177
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
178
178
|
_: 3
|
|
179
179
|
}, 8, [
|
|
180
180
|
"as",
|
|
@@ -182,24 +182,24 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
182
182
|
"type"
|
|
183
183
|
]));
|
|
184
184
|
}
|
|
185
|
-
}),
|
|
185
|
+
}), N = /* @__PURE__ */ c({
|
|
186
186
|
__name: "FpHousing",
|
|
187
187
|
props: {
|
|
188
188
|
asChild: { type: Boolean },
|
|
189
189
|
as: { default: "span" }
|
|
190
190
|
},
|
|
191
191
|
setup(e) {
|
|
192
|
-
let
|
|
193
|
-
return (e, r) => (
|
|
194
|
-
as:
|
|
195
|
-
"as-child":
|
|
192
|
+
let t = e;
|
|
193
|
+
return (e, r) => (p(), n(y(D), {
|
|
194
|
+
as: t.as,
|
|
195
|
+
"as-child": t.asChild,
|
|
196
196
|
class: "fp-housing"
|
|
197
197
|
}, {
|
|
198
|
-
default:
|
|
198
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
199
199
|
_: 3
|
|
200
200
|
}, 8, ["as", "as-child"]));
|
|
201
201
|
}
|
|
202
|
-
}),
|
|
202
|
+
}), P = [
|
|
203
203
|
"................",
|
|
204
204
|
"................",
|
|
205
205
|
".....#..........",
|
|
@@ -216,7 +216,7 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
216
216
|
"................",
|
|
217
217
|
"................",
|
|
218
218
|
"................"
|
|
219
|
-
],
|
|
219
|
+
], F = [
|
|
220
220
|
"................",
|
|
221
221
|
"................",
|
|
222
222
|
".........##.....",
|
|
@@ -233,7 +233,7 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
233
233
|
".........##.....",
|
|
234
234
|
"................",
|
|
235
235
|
"................"
|
|
236
|
-
],
|
|
236
|
+
], I = (e) => e.map((e) => [...e].reverse().join("")), L = {
|
|
237
237
|
add: [
|
|
238
238
|
"................",
|
|
239
239
|
"................",
|
|
@@ -270,8 +270,8 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
270
270
|
"................",
|
|
271
271
|
"................"
|
|
272
272
|
],
|
|
273
|
-
left:
|
|
274
|
-
right:
|
|
273
|
+
left: F,
|
|
274
|
+
right: I(F),
|
|
275
275
|
go: [
|
|
276
276
|
"................",
|
|
277
277
|
"................",
|
|
@@ -290,8 +290,8 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
290
290
|
"................",
|
|
291
291
|
"................"
|
|
292
292
|
],
|
|
293
|
-
undo:
|
|
294
|
-
redo:
|
|
293
|
+
undo: P,
|
|
294
|
+
redo: I(P),
|
|
295
295
|
home: [
|
|
296
296
|
"................",
|
|
297
297
|
".......##.......",
|
|
@@ -491,7 +491,7 @@ var T = { class: "fp-device-body" }, E = /* @__PURE__ */ s({
|
|
|
491
491
|
"................"
|
|
492
492
|
]
|
|
493
493
|
};
|
|
494
|
-
function
|
|
494
|
+
function ie(e) {
|
|
495
495
|
let t = "";
|
|
496
496
|
return e.forEach((e, n) => {
|
|
497
497
|
let r = 0;
|
|
@@ -507,48 +507,153 @@ function N(e) {
|
|
|
507
507
|
}
|
|
508
508
|
}), t;
|
|
509
509
|
}
|
|
510
|
-
var
|
|
510
|
+
var R = Object.keys(L), z = Object.fromEntries(R.map((e) => [e, ie(L[e])])), B = [
|
|
511
511
|
"role",
|
|
512
512
|
"aria-label",
|
|
513
513
|
"aria-hidden"
|
|
514
|
-
],
|
|
514
|
+
], V = ["d"], H = /* @__PURE__ */ c({
|
|
515
515
|
__name: "FpIcon",
|
|
516
516
|
props: {
|
|
517
517
|
name: {},
|
|
518
518
|
label: {}
|
|
519
519
|
},
|
|
520
|
-
setup(
|
|
521
|
-
let n =
|
|
522
|
-
return (e, t) => (
|
|
520
|
+
setup(e) {
|
|
521
|
+
let n = e, r = t(() => z[n.name]);
|
|
522
|
+
return (e, t) => (p(), i("svg", {
|
|
523
523
|
viewBox: "0 0 16 16",
|
|
524
524
|
class: "fp-icon",
|
|
525
525
|
role: n.label ? "img" : void 0,
|
|
526
526
|
"aria-label": n.label || void 0,
|
|
527
527
|
"aria-hidden": n.label ? void 0 : "true"
|
|
528
|
-
}, [
|
|
528
|
+
}, [a("path", { d: r.value }, null, 8, V)], 8, B));
|
|
529
|
+
}
|
|
530
|
+
}), U = [
|
|
531
|
+
"tabindex",
|
|
532
|
+
"aria-valuemin",
|
|
533
|
+
"aria-valuemax",
|
|
534
|
+
"aria-valuenow",
|
|
535
|
+
"aria-valuetext",
|
|
536
|
+
"aria-labelledby",
|
|
537
|
+
"aria-disabled"
|
|
538
|
+
], W = ["id"], G = 200, K = .1, q = 270, J = /* @__PURE__ */ c({
|
|
539
|
+
inheritAttrs: !1,
|
|
540
|
+
__name: "FpKnob",
|
|
541
|
+
props: /*@__PURE__*/ l({
|
|
542
|
+
min: { default: 0 },
|
|
543
|
+
max: { default: 100 },
|
|
544
|
+
step: { default: 1 },
|
|
545
|
+
label: {},
|
|
546
|
+
valueText: {},
|
|
547
|
+
disabled: { type: Boolean }
|
|
548
|
+
}, {
|
|
549
|
+
modelValue: { default: 0 },
|
|
550
|
+
modelModifiers: {}
|
|
551
|
+
}),
|
|
552
|
+
emits: /*@__PURE__*/ l(["valueCommit"], ["update:modelValue"]),
|
|
553
|
+
setup(e, { emit: n }) {
|
|
554
|
+
let o = e, s = n, c = S(e, "modelValue"), l = b(), d = t(() => ({
|
|
555
|
+
class: l.class,
|
|
556
|
+
style: l.style
|
|
557
|
+
})), m = t(() => {
|
|
558
|
+
let { class: e, style: t, ...n } = l;
|
|
559
|
+
return n;
|
|
560
|
+
}), h = x(), g = t(() => (String(o.step).split(".")[1] ?? "").length);
|
|
561
|
+
function _(e) {
|
|
562
|
+
let t = Math.round((e - o.min) / o.step) * o.step + o.min, n = Math.min(o.max, Math.max(o.min, t));
|
|
563
|
+
return Number(n.toFixed(g.value));
|
|
564
|
+
}
|
|
565
|
+
let C = t(() => _(c.value)), w = t(() => {
|
|
566
|
+
let e = o.max - o.min, t = e > 0 ? (C.value - o.min) / e : 0;
|
|
567
|
+
return Math.round(t * q - q / 2);
|
|
568
|
+
});
|
|
569
|
+
function T(e) {
|
|
570
|
+
let t = _(e);
|
|
571
|
+
return t !== C.value && (c.value = t, !0);
|
|
572
|
+
}
|
|
573
|
+
function E(e) {
|
|
574
|
+
if (o.disabled) return;
|
|
575
|
+
let t = o.step * 10, n = {
|
|
576
|
+
ArrowUp: C.value + o.step,
|
|
577
|
+
ArrowRight: C.value + o.step,
|
|
578
|
+
ArrowDown: C.value - o.step,
|
|
579
|
+
ArrowLeft: C.value - o.step,
|
|
580
|
+
PageUp: C.value + t,
|
|
581
|
+
PageDown: C.value - t,
|
|
582
|
+
Home: o.min,
|
|
583
|
+
End: o.max
|
|
584
|
+
}[e.key];
|
|
585
|
+
n !== void 0 && (e.preventDefault(), T(n) && s("valueCommit", _(n)));
|
|
586
|
+
}
|
|
587
|
+
let D;
|
|
588
|
+
function O(e) {
|
|
589
|
+
if (o.disabled || e.button !== 0) return;
|
|
590
|
+
let t = e.currentTarget;
|
|
591
|
+
t.setPointerCapture?.(e.pointerId), t.focus({
|
|
592
|
+
preventScroll: !0,
|
|
593
|
+
focusVisible: !1
|
|
594
|
+
}), D = {
|
|
595
|
+
pointerId: e.pointerId,
|
|
596
|
+
y: e.clientY,
|
|
597
|
+
raw: C.value,
|
|
598
|
+
start: C.value
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
function k(e) {
|
|
602
|
+
if (!D || e.pointerId !== D.pointerId) return;
|
|
603
|
+
let t = (o.max - o.min) / G * (e.shiftKey ? K : 1);
|
|
604
|
+
D.raw = Math.min(o.max, Math.max(o.min, D.raw + (D.y - e.clientY) * t)), D.y = e.clientY, T(D.raw);
|
|
605
|
+
}
|
|
606
|
+
function A(e) {
|
|
607
|
+
if (!D || e.pointerId !== D.pointerId) return;
|
|
608
|
+
let t = _(D.raw), n = t !== D.start;
|
|
609
|
+
D = void 0, n && s("valueCommit", t);
|
|
610
|
+
}
|
|
611
|
+
return (e, t) => (p(), i("div", u({ class: "fp-unit" }, d.value), [a("div", u(m.value, {
|
|
612
|
+
class: "fp-knob",
|
|
613
|
+
role: "slider",
|
|
614
|
+
tabindex: o.disabled ? void 0 : 0,
|
|
615
|
+
"aria-valuemin": o.min,
|
|
616
|
+
"aria-valuemax": o.max,
|
|
617
|
+
"aria-valuenow": C.value,
|
|
618
|
+
"aria-valuetext": o.valueText?.(C.value),
|
|
619
|
+
"aria-labelledby": o.label ? y(h) : void 0,
|
|
620
|
+
"aria-disabled": o.disabled || void 0,
|
|
621
|
+
onKeydown: E,
|
|
622
|
+
onPointerdown: O,
|
|
623
|
+
onPointermove: k,
|
|
624
|
+
onPointerup: A,
|
|
625
|
+
onPointercancel: A
|
|
626
|
+
}), [a("span", {
|
|
627
|
+
class: "fp-knob-mark",
|
|
628
|
+
style: f({ rotate: `${w.value}deg` })
|
|
629
|
+
}, null, 4)], 16, U), o.label ? (p(), i("span", {
|
|
630
|
+
key: 0,
|
|
631
|
+
id: y(h),
|
|
632
|
+
class: "fp-silk"
|
|
633
|
+
}, v(o.label), 9, W)) : r("", !0)], 16));
|
|
529
634
|
}
|
|
530
|
-
}),
|
|
635
|
+
}), Y = /* @__PURE__ */ c({
|
|
531
636
|
__name: "FpLcd",
|
|
532
637
|
props: {
|
|
533
638
|
asChild: { type: Boolean },
|
|
534
639
|
as: { default: "div" }
|
|
535
640
|
},
|
|
536
641
|
setup(e) {
|
|
537
|
-
let
|
|
538
|
-
return (e, r) => (
|
|
539
|
-
as:
|
|
540
|
-
"as-child":
|
|
642
|
+
let t = e;
|
|
643
|
+
return (e, r) => (p(), n(y(D), {
|
|
644
|
+
as: t.as,
|
|
645
|
+
"as-child": t.asChild,
|
|
541
646
|
class: "fp-lcd"
|
|
542
647
|
}, {
|
|
543
|
-
default:
|
|
648
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
544
649
|
_: 3
|
|
545
650
|
}, 8, ["as", "as-child"]));
|
|
546
651
|
}
|
|
547
|
-
}),
|
|
652
|
+
}), ae = {
|
|
548
653
|
key: 0,
|
|
549
654
|
class: "fp-lcd-ghost",
|
|
550
655
|
"aria-hidden": "true"
|
|
551
|
-
},
|
|
656
|
+
}, oe = { key: 2 }, se = /* @__PURE__ */ c({
|
|
552
657
|
__name: "FpLcdLine",
|
|
553
658
|
props: {
|
|
554
659
|
text: {},
|
|
@@ -558,30 +663,35 @@ var P = Object.keys(M), F = Object.fromEntries(P.map((e) => [e, N(M[e])])), I =
|
|
|
558
663
|
asChild: { type: Boolean },
|
|
559
664
|
as: { default: "p" }
|
|
560
665
|
},
|
|
561
|
-
setup(
|
|
562
|
-
let a =
|
|
563
|
-
return (e,
|
|
666
|
+
setup(e) {
|
|
667
|
+
let a = e, o = t(() => "8".repeat(a.cells ?? a.text.length));
|
|
668
|
+
return (e, t) => (p(), n(y(D), {
|
|
564
669
|
as: a.as,
|
|
565
670
|
"as-child": a.asChild,
|
|
566
671
|
class: "fp-lcd-line"
|
|
567
672
|
}, {
|
|
568
|
-
default:
|
|
673
|
+
default: E(() => [a.ghost ? (p(), i("span", ae, v(o.value), 1)) : r("", !0), a.redraw ? (p(), i("span", {
|
|
569
674
|
key: a.text,
|
|
570
675
|
class: "fp-lcd-redraw"
|
|
571
|
-
},
|
|
676
|
+
}, v(a.text), 1)) : (p(), i("span", oe, v(a.text), 1))]),
|
|
572
677
|
_: 1
|
|
573
678
|
}, 8, ["as", "as-child"]));
|
|
574
679
|
}
|
|
575
|
-
}),
|
|
680
|
+
}), X = {
|
|
681
|
+
flat: "fp-lens-flat",
|
|
682
|
+
diffused: "fp-lens-diffused",
|
|
683
|
+
clear: "fp-lens-clear"
|
|
684
|
+
}, ce = [
|
|
576
685
|
"role",
|
|
577
686
|
"aria-label",
|
|
578
687
|
"aria-hidden"
|
|
579
|
-
],
|
|
688
|
+
], le = /* @__PURE__ */ c({
|
|
580
689
|
__name: "FpLed",
|
|
581
690
|
props: {
|
|
582
691
|
color: { default: "green" },
|
|
583
692
|
lit: { type: Boolean },
|
|
584
693
|
blink: { type: Boolean },
|
|
694
|
+
lens: {},
|
|
585
695
|
label: {}
|
|
586
696
|
},
|
|
587
697
|
setup(e) {
|
|
@@ -590,92 +700,336 @@ var P = Object.keys(M), F = Object.fromEntries(P.map((e) => [e, N(M[e])])), I =
|
|
|
590
700
|
amber: "fp-led-amber",
|
|
591
701
|
red: "fp-led-red"
|
|
592
702
|
};
|
|
593
|
-
return (e,
|
|
594
|
-
class:
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
703
|
+
return (e, r) => (p(), i("span", {
|
|
704
|
+
class: d(["fp-led", [
|
|
705
|
+
n[t.color],
|
|
706
|
+
t.lens && y(X)[t.lens],
|
|
707
|
+
{
|
|
708
|
+
"fp-led-lit": t.lit,
|
|
709
|
+
"fp-blink-twice": t.lit && t.blink
|
|
710
|
+
}
|
|
711
|
+
]]),
|
|
598
712
|
role: t.label ? "img" : void 0,
|
|
599
713
|
"aria-label": t.label || void 0,
|
|
600
714
|
"aria-hidden": t.label ? void 0 : "true"
|
|
601
|
-
}, null, 10,
|
|
715
|
+
}, null, 10, ce));
|
|
716
|
+
}
|
|
717
|
+
}), ue = [
|
|
718
|
+
"data-orientation",
|
|
719
|
+
"aria-valuemin",
|
|
720
|
+
"aria-valuemax",
|
|
721
|
+
"aria-valuenow",
|
|
722
|
+
"aria-valuetext",
|
|
723
|
+
"aria-labelledby"
|
|
724
|
+
], de = ["id"], fe = /* @__PURE__ */ c({
|
|
725
|
+
inheritAttrs: !1,
|
|
726
|
+
__name: "FpMeter",
|
|
727
|
+
props: {
|
|
728
|
+
value: { default: 0 },
|
|
729
|
+
min: { default: 0 },
|
|
730
|
+
max: { default: 100 },
|
|
731
|
+
segments: { default: 12 },
|
|
732
|
+
amberAt: {},
|
|
733
|
+
redAt: {},
|
|
734
|
+
orientation: { default: "vertical" },
|
|
735
|
+
lens: {},
|
|
736
|
+
label: {},
|
|
737
|
+
valueText: {}
|
|
738
|
+
},
|
|
739
|
+
setup(e) {
|
|
740
|
+
let n = e, o = b(), s = t(() => ({
|
|
741
|
+
class: o.class,
|
|
742
|
+
style: o.style
|
|
743
|
+
})), c = t(() => {
|
|
744
|
+
let { class: e, style: t, ...n } = o;
|
|
745
|
+
return n;
|
|
746
|
+
}), l = x(), d = t(() => Math.min(n.max, Math.max(n.min, n.value)));
|
|
747
|
+
function f(e) {
|
|
748
|
+
let t = n.max - n.min;
|
|
749
|
+
return t > 0 ? Math.min(1, Math.max(0, (e - n.min) / t)) : 0;
|
|
750
|
+
}
|
|
751
|
+
function m(e, t) {
|
|
752
|
+
return t(f(e) * n.segments + 1e-9) / n.segments;
|
|
753
|
+
}
|
|
754
|
+
let h = t(() => {
|
|
755
|
+
let e = n.max - n.min;
|
|
756
|
+
return {
|
|
757
|
+
"--fp-meter-level": String(m(d.value, Math.floor)),
|
|
758
|
+
"--fp-meter-segments": String(n.segments),
|
|
759
|
+
"--fp-meter-amber": String(m(n.amberAt ?? n.min + e * .7, Math.round)),
|
|
760
|
+
"--fp-meter-red": String(m(n.redAt ?? n.min + e * .9, Math.round))
|
|
761
|
+
};
|
|
762
|
+
});
|
|
763
|
+
return (e, t) => (p(), i("div", u({ class: "fp-unit" }, s.value), [a("div", u(c.value, {
|
|
764
|
+
class: ["fp-meter", n.lens && y(X)[n.lens]],
|
|
765
|
+
role: "meter",
|
|
766
|
+
"data-orientation": n.orientation,
|
|
767
|
+
"aria-valuemin": n.min,
|
|
768
|
+
"aria-valuemax": n.max,
|
|
769
|
+
"aria-valuenow": d.value,
|
|
770
|
+
"aria-valuetext": n.valueText?.(d.value),
|
|
771
|
+
"aria-labelledby": n.label ? y(l) : void 0,
|
|
772
|
+
style: h.value
|
|
773
|
+
}), null, 16, ue), n.label ? (p(), i("span", {
|
|
774
|
+
key: 0,
|
|
775
|
+
id: y(l),
|
|
776
|
+
class: "fp-silk"
|
|
777
|
+
}, v(n.label), 9, de)) : r("", !0)], 16));
|
|
778
|
+
}
|
|
779
|
+
}), Z = {
|
|
780
|
+
0: "abcdef",
|
|
781
|
+
1: "bc",
|
|
782
|
+
2: "abdeg",
|
|
783
|
+
3: "abcdg",
|
|
784
|
+
4: "bcfg",
|
|
785
|
+
5: "acdfg",
|
|
786
|
+
6: "acdefg",
|
|
787
|
+
7: "abc",
|
|
788
|
+
8: "abcdefg",
|
|
789
|
+
9: "abcdfg",
|
|
790
|
+
"-": "g",
|
|
791
|
+
_: "d",
|
|
792
|
+
"°": "abfg",
|
|
793
|
+
" ": "",
|
|
794
|
+
A: "abcefg",
|
|
795
|
+
B: "cdefg",
|
|
796
|
+
C: "adef",
|
|
797
|
+
c: "deg",
|
|
798
|
+
D: "bcdeg",
|
|
799
|
+
E: "adefg",
|
|
800
|
+
F: "aefg",
|
|
801
|
+
G: "acdef",
|
|
802
|
+
H: "bcefg",
|
|
803
|
+
h: "cefg",
|
|
804
|
+
I: "ef",
|
|
805
|
+
J: "bcde",
|
|
806
|
+
L: "def",
|
|
807
|
+
N: "ceg",
|
|
808
|
+
O: "abcdef",
|
|
809
|
+
o: "cdeg",
|
|
810
|
+
P: "abefg",
|
|
811
|
+
R: "eg",
|
|
812
|
+
S: "acdfg",
|
|
813
|
+
T: "defg",
|
|
814
|
+
U: "bcdef",
|
|
815
|
+
u: "cde",
|
|
816
|
+
Y: "bcdfg"
|
|
817
|
+
};
|
|
818
|
+
function Q(e) {
|
|
819
|
+
return Z[e] ?? Z[e.toUpperCase()] ?? "";
|
|
820
|
+
}
|
|
821
|
+
//#endregion
|
|
822
|
+
//#region src/FpReadout.vue?vue&type=script&setup=true&lang.ts
|
|
823
|
+
var pe = { class: "fp-readout-text" }, me = ["data-colon"], he = { class: "fp-readout-lit" }, ge = ["data-segment"], _e = {
|
|
824
|
+
key: 0,
|
|
825
|
+
"data-segment": "dp"
|
|
826
|
+
}, ve = /* @__PURE__ */ c({
|
|
827
|
+
__name: "FpReadout",
|
|
828
|
+
props: {
|
|
829
|
+
value: {},
|
|
830
|
+
digits: {},
|
|
831
|
+
color: { default: "green" },
|
|
832
|
+
lens: {},
|
|
833
|
+
valueText: {}
|
|
834
|
+
},
|
|
835
|
+
setup(n) {
|
|
836
|
+
let o = n, s = {
|
|
837
|
+
green: "fp-led-green",
|
|
838
|
+
amber: "fp-led-amber",
|
|
839
|
+
red: "fp-led-red"
|
|
840
|
+
}, c = t(() => String(o.value)), l = t(() => {
|
|
841
|
+
let e = [];
|
|
842
|
+
for (let t of c.value) {
|
|
843
|
+
let n = e.at(-1);
|
|
844
|
+
t === ":" ? e.push({ colon: !0 }) : t === "." && n && !n.colon && !n.dot ? n.dot = !0 : t === "." ? e.push({
|
|
845
|
+
colon: !1,
|
|
846
|
+
lit: "",
|
|
847
|
+
dot: !0
|
|
848
|
+
}) : e.push({
|
|
849
|
+
colon: !1,
|
|
850
|
+
lit: Q(t),
|
|
851
|
+
dot: !1
|
|
852
|
+
});
|
|
853
|
+
}
|
|
854
|
+
let t = e.filter((e) => !e.colon).length;
|
|
855
|
+
return [...Array.from({ length: Math.max(0, (o.digits ?? 0) - t) }, () => ({
|
|
856
|
+
colon: !1,
|
|
857
|
+
lit: "",
|
|
858
|
+
dot: !1
|
|
859
|
+
})), ...e];
|
|
860
|
+
});
|
|
861
|
+
return (t, n) => (p(), i("span", { class: d(["fp-readout", [s[o.color], o.lens && y(X)[o.lens]]]) }, [a("span", pe, v(o.valueText ? o.valueText(c.value) : c.value), 1), (p(!0), i(e, null, m(l.value, (t, o) => (p(), i("span", {
|
|
862
|
+
key: o,
|
|
863
|
+
class: "fp-readout-cell",
|
|
864
|
+
"data-colon": t.colon ? "" : void 0,
|
|
865
|
+
"aria-hidden": "true"
|
|
866
|
+
}, [a("span", he, [t.colon ? (p(), i(e, { key: 0 }, [n[0] ||= a("span", { "data-segment": "colon-upper" }, null, -1), n[1] ||= a("span", { "data-segment": "colon-lower" }, null, -1)], 64)) : (p(), i(e, { key: 1 }, [(p(!0), i(e, null, m(t.lit, (e) => (p(), i("span", {
|
|
867
|
+
key: e,
|
|
868
|
+
"data-segment": e
|
|
869
|
+
}, null, 8, ge))), 128)), t.dot ? (p(), i("span", _e)) : r("", !0)], 64))])], 8, me))), 128))], 2));
|
|
602
870
|
}
|
|
603
|
-
}),
|
|
871
|
+
}), $ = {
|
|
604
872
|
class: "fp-screw",
|
|
605
873
|
"aria-hidden": "true"
|
|
606
|
-
},
|
|
874
|
+
}, ye = /* @__PURE__ */ c({
|
|
607
875
|
__name: "FpScrew",
|
|
608
876
|
setup(e) {
|
|
609
|
-
return (e, t) => (
|
|
877
|
+
return (e, t) => (p(), i("span", $));
|
|
610
878
|
}
|
|
611
|
-
}),
|
|
879
|
+
}), be = /* @__PURE__ */ c({
|
|
612
880
|
__name: "FpSilk",
|
|
613
881
|
props: {
|
|
614
882
|
asChild: { type: Boolean },
|
|
615
883
|
as: { default: "span" }
|
|
616
884
|
},
|
|
617
885
|
setup(e) {
|
|
618
|
-
let
|
|
619
|
-
return (e, r) => (
|
|
620
|
-
as:
|
|
621
|
-
"as-child":
|
|
886
|
+
let t = e;
|
|
887
|
+
return (e, r) => (p(), n(y(D), {
|
|
888
|
+
as: t.as,
|
|
889
|
+
"as-child": t.asChild,
|
|
622
890
|
class: "fp-silk"
|
|
623
891
|
}, {
|
|
624
|
-
default:
|
|
892
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
625
893
|
_: 3
|
|
626
894
|
}, 8, ["as", "as-child"]));
|
|
627
895
|
}
|
|
628
|
-
}),
|
|
896
|
+
}), xe = ["id"], Se = /* @__PURE__ */ c({
|
|
897
|
+
inheritAttrs: !1,
|
|
898
|
+
__name: "FpSlider",
|
|
899
|
+
props: /*@__PURE__*/ l({
|
|
900
|
+
min: { default: 0 },
|
|
901
|
+
max: { default: 100 },
|
|
902
|
+
step: { default: 1 },
|
|
903
|
+
orientation: { default: "vertical" },
|
|
904
|
+
label: {},
|
|
905
|
+
valueText: {},
|
|
906
|
+
disabled: { type: Boolean }
|
|
907
|
+
}, {
|
|
908
|
+
modelValue: { default: 0 },
|
|
909
|
+
modelModifiers: {}
|
|
910
|
+
}),
|
|
911
|
+
emits: /*@__PURE__*/ l(["valueCommit"], ["update:modelValue"]),
|
|
912
|
+
setup(e, { emit: n }) {
|
|
913
|
+
let a = e, o = n, c = S(e, "modelValue"), l = b(), d = t(() => ({
|
|
914
|
+
class: l.class,
|
|
915
|
+
style: l.style
|
|
916
|
+
})), f = t(() => {
|
|
917
|
+
let { class: e, style: t, ...n } = l;
|
|
918
|
+
return n;
|
|
919
|
+
}), m = x(), h = t(() => [c.value]);
|
|
920
|
+
function g(e) {
|
|
921
|
+
e?.[0] !== void 0 && (c.value = e[0]);
|
|
922
|
+
}
|
|
923
|
+
let _ = C("unit");
|
|
924
|
+
function w(e) {
|
|
925
|
+
a.disabled || e.button !== 0 || _.value?.querySelector("[role=\"slider\"]")?.focus({
|
|
926
|
+
preventScroll: !0,
|
|
927
|
+
focusVisible: !1
|
|
928
|
+
});
|
|
929
|
+
}
|
|
930
|
+
function T(e) {
|
|
931
|
+
e[0] !== void 0 && o("valueCommit", e[0]);
|
|
932
|
+
}
|
|
933
|
+
return (e, t) => (p(), i("div", u({
|
|
934
|
+
ref_key: "unit",
|
|
935
|
+
ref: _,
|
|
936
|
+
class: "fp-unit"
|
|
937
|
+
}, d.value, { onPointerdownCapture: w }), [s(y(O), {
|
|
938
|
+
class: "fp-fader",
|
|
939
|
+
"model-value": h.value,
|
|
940
|
+
min: a.min,
|
|
941
|
+
max: a.max,
|
|
942
|
+
step: a.step,
|
|
943
|
+
orientation: a.orientation,
|
|
944
|
+
disabled: a.disabled,
|
|
945
|
+
"onUpdate:modelValue": g,
|
|
946
|
+
onValueCommit: T
|
|
947
|
+
}, {
|
|
948
|
+
default: E(() => [s(y(A), { class: "fp-fader-slot" }), s(y(k), u(f.value, {
|
|
949
|
+
class: "fp-fader-cap",
|
|
950
|
+
"aria-valuetext": a.valueText?.(c.value),
|
|
951
|
+
"aria-labelledby": a.label ? y(m) : void 0,
|
|
952
|
+
"aria-disabled": a.disabled || void 0
|
|
953
|
+
}), null, 16, [
|
|
954
|
+
"aria-valuetext",
|
|
955
|
+
"aria-labelledby",
|
|
956
|
+
"aria-disabled"
|
|
957
|
+
])]),
|
|
958
|
+
_: 1
|
|
959
|
+
}, 8, [
|
|
960
|
+
"model-value",
|
|
961
|
+
"min",
|
|
962
|
+
"max",
|
|
963
|
+
"step",
|
|
964
|
+
"orientation",
|
|
965
|
+
"disabled"
|
|
966
|
+
]), a.label ? (p(), i("span", {
|
|
967
|
+
key: 0,
|
|
968
|
+
id: y(m),
|
|
969
|
+
class: "fp-silk"
|
|
970
|
+
}, v(a.label), 9, xe)) : r("", !0)], 16));
|
|
971
|
+
}
|
|
972
|
+
}), Ce = /* @__PURE__ */ c({
|
|
629
973
|
__name: "FpWell",
|
|
630
974
|
props: {
|
|
631
975
|
asChild: { type: Boolean },
|
|
632
976
|
as: { default: "div" }
|
|
633
977
|
},
|
|
634
978
|
setup(e) {
|
|
635
|
-
let
|
|
636
|
-
return (e, r) => (
|
|
637
|
-
as:
|
|
638
|
-
"as-child":
|
|
979
|
+
let t = e;
|
|
980
|
+
return (e, r) => (p(), n(y(D), {
|
|
981
|
+
as: t.as,
|
|
982
|
+
"as-child": t.asChild,
|
|
639
983
|
class: "fp-well"
|
|
640
984
|
}, {
|
|
641
|
-
default:
|
|
985
|
+
default: E(() => [h(e.$slots, "default")]),
|
|
642
986
|
_: 3
|
|
643
987
|
}, 8, ["as", "as-child"]));
|
|
644
988
|
}
|
|
645
|
-
}),
|
|
989
|
+
}), we = { class: "fp-module-title" }, Te = /* @__PURE__ */ c({
|
|
646
990
|
__name: "FpWindow",
|
|
647
991
|
props: {
|
|
992
|
+
as: { default: "section" },
|
|
648
993
|
title: {},
|
|
649
994
|
level: { default: 2 },
|
|
650
995
|
closable: { type: Boolean },
|
|
651
996
|
closeLabel: {},
|
|
652
|
-
sheet: { type: Boolean }
|
|
997
|
+
sheet: { type: Boolean },
|
|
998
|
+
flush: { type: Boolean }
|
|
653
999
|
},
|
|
654
1000
|
emits: ["close"],
|
|
655
|
-
setup(e, { emit:
|
|
656
|
-
let
|
|
657
|
-
return (e,
|
|
658
|
-
|
|
659
|
-
"
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
1001
|
+
setup(e, { emit: t }) {
|
|
1002
|
+
let i = e, c = t, l = x();
|
|
1003
|
+
return (e, t) => (p(), n(y(D), {
|
|
1004
|
+
as: i.as,
|
|
1005
|
+
class: d(["fp-window", [i.sheet ? "fp-sheet-panel" : "fp-module"]]),
|
|
1006
|
+
"aria-labelledby": y(l)
|
|
1007
|
+
}, {
|
|
1008
|
+
default: E(() => [a("div", we, [
|
|
1009
|
+
(p(), n(g(`h${i.level}`), {
|
|
1010
|
+
id: y(l),
|
|
1011
|
+
class: "fp-silk fp-window-title"
|
|
1012
|
+
}, {
|
|
1013
|
+
default: E(() => [o(v(i.title), 1)]),
|
|
1014
|
+
_: 1
|
|
1015
|
+
}, 8, ["id"])),
|
|
1016
|
+
h(e.$slots, "actions"),
|
|
1017
|
+
i.closable ? (p(), n(j, {
|
|
1018
|
+
key: 0,
|
|
1019
|
+
"aria-label": i.closeLabel ?? `Close ${i.title}`,
|
|
1020
|
+
onClick: t[0] ||= (e) => c("close")
|
|
1021
|
+
}, {
|
|
1022
|
+
default: E(() => [s(H, { name: "close" })]),
|
|
1023
|
+
_: 1
|
|
1024
|
+
}, 8, ["aria-label"])) : r("", !0)
|
|
1025
|
+
]), a("div", { class: d(i.flush ? void 0 : "fp-window-body") }, [h(e.$slots, "default")], 2)]),
|
|
1026
|
+
_: 3
|
|
1027
|
+
}, 8, [
|
|
1028
|
+
"as",
|
|
1029
|
+
"class",
|
|
1030
|
+
"aria-labelledby"
|
|
1031
|
+
]));
|
|
678
1032
|
}
|
|
679
1033
|
});
|
|
680
1034
|
//#endregion
|
|
681
|
-
export {
|
|
1035
|
+
export { j as FpButton, M as FpCap, ne as FpDevice, re as FpGelButton, N as FpHousing, H as FpIcon, J as FpKnob, Y as FpLcd, se as FpLcdLine, le as FpLed, fe as FpMeter, ve as FpReadout, ye as FpScrew, be as FpSilk, Se as FpSlider, Ce as FpWell, Te as FpWindow, R as fpIconNames, Q as fpReadoutGlyph };
|
package/dist/lens.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontpanel/vue",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "Vue 3 components for the Frontpanel early-2000s hardware skin: a scale-to-fit device frame, windows, chrome and gel buttons, caps, LCDs and LEDs, built on Reka UI.",
|
|
6
6
|
"author": "Dulan Katukurundage",
|
|
7
7
|
"license": "MIT",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"reka-ui": "^2.11.0",
|
|
39
|
-
"@frontpanel/css": "^0.
|
|
39
|
+
"@frontpanel/css": "^0.2.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@tailwindcss/oxide": "^4.3.3",
|