@frontpanel/vue 0.4.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.
@@ -0,0 +1,29 @@
1
+ import type { FpLedColor } from './FpLed.vue';
2
+ import type { FpKeyLed } from './keys';
3
+ export interface FpCheckboxProps {
4
+ /** A silkscreen label over the key, which also names it. Without one, give it an `aria-label`. */
5
+ label?: string;
6
+ /** Standing up, or on its side with the label before it. */
7
+ orientation?: 'vertical' | 'horizontal';
8
+ /** Where the light is: the strip at the foot of the key, an LED over the label, or none. */
9
+ led?: FpKeyLed;
10
+ /** The colour its LED lights in. */
11
+ color?: FpLedColor;
12
+ disabled?: boolean;
13
+ }
14
+ type __VLS_Props = FpCheckboxProps;
15
+ type __VLS_ModelProps = {
16
+ modelValue?: boolean;
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
+ "update:modelValue": (value: boolean) => any;
21
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
22
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
23
+ }>, {
24
+ color: FpLedColor;
25
+ orientation: "vertical" | "horizontal";
26
+ led: FpKeyLed;
27
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
28
+ declare const _default: typeof __VLS_export;
29
+ export default _default;
@@ -0,0 +1,31 @@
1
+ import type { FpLedColor } from './FpLed.vue';
2
+ import type { FpKeyLed, FpKeyOption } from './keys';
3
+ export interface FpCheckboxGroupProps {
4
+ /** The keys, left to right or top to bottom. */
5
+ options: FpKeyOption[];
6
+ /** A silkscreen label under the keys, which also names the group. Without one, give it an `aria-label`. */
7
+ label?: string;
8
+ /** Keys standing side by side, or on their side and stacked. */
9
+ orientation?: 'vertical' | 'horizontal';
10
+ /** Where the light is: the strip at the foot of each key, an LED over each label, or none. */
11
+ led?: FpKeyLed;
12
+ /** The colour the LEDs light in, unless an option sets its own. */
13
+ color?: FpLedColor;
14
+ disabled?: boolean;
15
+ }
16
+ type __VLS_Props = FpCheckboxGroupProps;
17
+ type __VLS_ModelProps = {
18
+ modelValue?: string[];
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
+ "update:modelValue": (value: string[]) => any;
23
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
24
+ "onUpdate:modelValue"?: ((value: string[]) => any) | undefined;
25
+ }>, {
26
+ color: FpLedColor;
27
+ orientation: "vertical" | "horizontal";
28
+ led: FpKeyLed;
29
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
@@ -17,14 +17,14 @@ type __VLS_ModelProps = {
17
17
  };
18
18
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
19
19
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
- valueCommit: (value: number) => any;
21
20
  "update:modelValue": (value: number) => any;
21
+ valueCommit: (value: number) => any;
22
22
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
23
- onValueCommit?: ((value: number) => any) | undefined;
24
23
  "onUpdate:modelValue"?: ((value: number) => any) | undefined;
24
+ onValueCommit?: ((value: number) => any) | undefined;
25
25
  }>, {
26
- min: number;
27
26
  max: number;
27
+ min: number;
28
28
  step: number;
29
29
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
30
  declare const _default: typeof __VLS_export;
@@ -22,11 +22,11 @@ export interface FpMeterProps {
22
22
  valueText?: (value: number) => string;
23
23
  }
24
24
  declare const __VLS_export: import("vue").DefineComponent<FpMeterProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FpMeterProps> & Readonly<{}>, {
25
+ orientation: "vertical" | "horizontal";
25
26
  value: number;
26
- min: number;
27
27
  max: number;
28
+ min: number;
28
29
  segments: number;
29
- orientation: "vertical" | "horizontal";
30
30
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
31
31
  declare const _default: typeof __VLS_export;
32
32
  export default _default;
@@ -0,0 +1,31 @@
1
+ import type { FpLedColor } from './FpLed.vue';
2
+ import type { FpKeyLed, FpKeyOption } from './keys';
3
+ export interface FpRadioGroupProps {
4
+ /** The keys, left to right or top to bottom. */
5
+ options: FpKeyOption[];
6
+ /** A silkscreen label under the keys, which also names the group. Without one, give it an `aria-label`. */
7
+ label?: string;
8
+ /** Keys standing side by side, or on their side and stacked. */
9
+ orientation?: 'vertical' | 'horizontal';
10
+ /** Where the light is: the strip at the foot of each key, an LED over each label, or none. */
11
+ led?: FpKeyLed;
12
+ /** The colour the LEDs light in, unless an option sets its own. */
13
+ color?: FpLedColor;
14
+ disabled?: boolean;
15
+ }
16
+ type __VLS_Props = FpRadioGroupProps;
17
+ type __VLS_ModelProps = {
18
+ modelValue?: string;
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
+ "update:modelValue": (value: string | undefined) => any;
23
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
24
+ "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
25
+ }>, {
26
+ color: FpLedColor;
27
+ orientation: "vertical" | "horizontal";
28
+ led: FpKeyLed;
29
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
@@ -19,16 +19,16 @@ type __VLS_ModelProps = {
19
19
  };
20
20
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
21
21
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
22
- valueCommit: (value: number) => any;
23
22
  "update:modelValue": (value: number) => any;
23
+ valueCommit: (value: number) => any;
24
24
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
25
- onValueCommit?: ((value: number) => any) | undefined;
26
25
  "onUpdate:modelValue"?: ((value: number) => any) | undefined;
26
+ onValueCommit?: ((value: number) => any) | undefined;
27
27
  }>, {
28
- min: number;
28
+ orientation: "vertical" | "horizontal";
29
29
  max: number;
30
+ min: number;
30
31
  step: number;
31
- orientation: "vertical" | "horizontal";
32
32
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
33
  declare const _default: typeof __VLS_export;
34
34
  export default _default;
package/dist/index.d.ts CHANGED
@@ -5,6 +5,10 @@ export { default as FpButtonGroup } from './FpButtonGroup.vue';
5
5
  export type { FpButtonGroupProps } from './FpButtonGroup.vue';
6
6
  export { default as FpCap } from './FpCap.vue';
7
7
  export type { FpCapColor, FpCapProps } from './FpCap.vue';
8
+ export { default as FpCheckbox } from './FpCheckbox.vue';
9
+ export type { FpCheckboxProps } from './FpCheckbox.vue';
10
+ export { default as FpCheckboxGroup } from './FpCheckboxGroup.vue';
11
+ export type { FpCheckboxGroupProps } from './FpCheckboxGroup.vue';
8
12
  export { default as FpDevice } from './FpDevice.vue';
9
13
  export type { FpDeviceProps } from './FpDevice.vue';
10
14
  export { default as FpGelButton } from './FpGelButton.vue';
@@ -28,6 +32,8 @@ export type { FpMenuItemProps } from './FpMenuItem.vue';
28
32
  export { default as FpMenuSeparator } from './FpMenuSeparator.vue';
29
33
  export { default as FpMeter } from './FpMeter.vue';
30
34
  export type { FpMeterProps } from './FpMeter.vue';
35
+ export { default as FpRadioGroup } from './FpRadioGroup.vue';
36
+ export type { FpRadioGroupProps } from './FpRadioGroup.vue';
31
37
  export { default as FpReadout } from './FpReadout.vue';
32
38
  export type { FpReadoutProps } from './FpReadout.vue';
33
39
  export { default as FpScrew } from './FpScrew.vue';
@@ -43,5 +49,6 @@ export { default as FpWindow } from './FpWindow.vue';
43
49
  export type { FpWindowProps } from './FpWindow.vue';
44
50
  export { fpIconNames } from './icons';
45
51
  export type { FpIconName } from './icons';
52
+ export type { FpKeyLed, FpKeyOption } from './keys';
46
53
  export type { FpLens } from './lens';
47
54
  export { fpReadoutGlyph } from './readout';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
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, onMounted as p, openBlock as m, ref as h, renderList as g, renderSlot as _, resolveDynamicComponent as v, shallowRef as y, toDisplayString as b, unref as x, useAttrs as S, useId as C, useModel as w, useTemplateRef as T, warn as E, watch as D, withCtx as O } from "vue";
2
- import { DropdownMenuContent as k, DropdownMenuItem as A, DropdownMenuPortal as j, DropdownMenuRoot as ee, DropdownMenuSeparator as M, DropdownMenuTrigger as N, Primitive as P, SliderRoot as F, SliderThumb as I, SliderTrack as te, SwitchRoot as ne, SwitchThumb as re } from "reka-ui";
2
+ import { CheckboxGroupRoot as k, CheckboxRoot as A, DropdownMenuContent as ee, DropdownMenuItem as te, DropdownMenuPortal as j, DropdownMenuRoot as ne, DropdownMenuSeparator as re, DropdownMenuTrigger as ie, Primitive as M, RadioGroupItem as ae, RadioGroupRoot as oe, SliderRoot as se, SliderThumb as ce, SliderTrack as le, SwitchRoot as ue, SwitchThumb as de } from "reka-ui";
3
3
  //#endregion
4
4
  //#region src/FpButton.vue
5
- var L = /* @__PURE__ */ c({
5
+ var N = /* @__PURE__ */ c({
6
6
  __name: "FpButton",
7
7
  props: {
8
8
  pressed: {
@@ -14,7 +14,7 @@ var L = /* @__PURE__ */ c({
14
14
  },
15
15
  setup(e) {
16
16
  let t = e;
17
- return (e, r) => (m(), n(x(P), {
17
+ return (e, r) => (m(), n(x(M), {
18
18
  as: t.as,
19
19
  "as-child": t.asChild,
20
20
  class: "fp-chrome-btn",
@@ -30,7 +30,7 @@ var L = /* @__PURE__ */ c({
30
30
  "aria-pressed"
31
31
  ]));
32
32
  }
33
- }), ie = /* @__PURE__ */ c({
33
+ }), P = /* @__PURE__ */ c({
34
34
  __name: "FpButtonGroup",
35
35
  props: {
36
36
  asChild: { type: Boolean },
@@ -38,7 +38,7 @@ var L = /* @__PURE__ */ c({
38
38
  },
39
39
  setup(e) {
40
40
  let t = e;
41
- return (e, r) => (m(), n(x(P), {
41
+ return (e, r) => (m(), n(x(M), {
42
42
  as: t.as,
43
43
  "as-child": t.asChild,
44
44
  class: "fp-button-group",
@@ -48,7 +48,7 @@ var L = /* @__PURE__ */ c({
48
48
  _: 3
49
49
  }, 8, ["as", "as-child"]));
50
50
  }
51
- }), ae = /* @__PURE__ */ c({
51
+ }), F = /* @__PURE__ */ c({
52
52
  __name: "FpCap",
53
53
  props: {
54
54
  color: { default: "white" },
@@ -67,7 +67,7 @@ var L = /* @__PURE__ */ c({
67
67
  graphite: "fp-cap-graphite",
68
68
  berry: "fp-cap-berry"
69
69
  };
70
- return (e, i) => (m(), n(x(P), {
70
+ return (e, i) => (m(), n(x(M), {
71
71
  as: t.as,
72
72
  "as-child": t.asChild,
73
73
  class: d(["fp-cap", r[t.color]]),
@@ -84,10 +84,130 @@ var L = /* @__PURE__ */ c({
84
84
  "aria-pressed"
85
85
  ]));
86
86
  }
87
+ }), I = {
88
+ green: "fp-led-green",
89
+ amber: "fp-led-amber",
90
+ red: "fp-led-red"
91
+ }, L = ["data-orientation"], R = ["id"], z = /* @__PURE__ */ c({
92
+ inheritAttrs: !1,
93
+ __name: "FpCheckbox",
94
+ props: /*@__PURE__*/ l({
95
+ label: {},
96
+ orientation: { default: "horizontal" },
97
+ led: { default: "strip" },
98
+ color: { default: "green" },
99
+ disabled: { type: Boolean }
100
+ }, {
101
+ modelValue: {
102
+ type: Boolean,
103
+ default: !1
104
+ },
105
+ modelModifiers: {}
106
+ }),
107
+ emits: ["update:modelValue"],
108
+ setup(e) {
109
+ let n = e, a = w(e, "modelValue"), c = C(), l = S(), f = t(() => ({
110
+ class: l.class,
111
+ style: l.style
112
+ })), p = t(() => {
113
+ let { class: e, style: t, ...n } = l;
114
+ return n;
115
+ });
116
+ return (e, t) => (m(), i("div", u({
117
+ class: "fp-keys",
118
+ "data-orientation": n.orientation
119
+ }, f.value), [n.label ? (m(), i("span", {
120
+ key: 0,
121
+ id: x(c),
122
+ class: "fp-silk"
123
+ }, [n.led === "above" ? (m(), i("span", {
124
+ key: 0,
125
+ class: d(["fp-led", [x(I)[n.color], { "fp-led-lit": a.value }]]),
126
+ "aria-hidden": "true"
127
+ }, null, 2)) : r("", !0), o(b(n.label), 1)], 8, R)) : r("", !0), s(x(A), u(p.value, {
128
+ modelValue: a.value,
129
+ "onUpdate:modelValue": t[0] ||= (e) => a.value = e,
130
+ class: ["fp-key", n.led === "strip" ? x(I)[n.color] : void 0],
131
+ "data-strip": n.led === "strip" ? void 0 : "plain",
132
+ disabled: n.disabled,
133
+ "aria-labelledby": n.label ? x(c) : void 0
134
+ }), null, 16, [
135
+ "modelValue",
136
+ "class",
137
+ "data-strip",
138
+ "disabled",
139
+ "aria-labelledby"
140
+ ])], 16, L));
141
+ }
142
+ }), B = ["id"], V = /* @__PURE__ */ c({
143
+ inheritAttrs: !1,
144
+ __name: "FpCheckboxGroup",
145
+ props: /*@__PURE__*/ l({
146
+ options: {},
147
+ label: {},
148
+ orientation: { default: "horizontal" },
149
+ led: { default: "strip" },
150
+ color: { default: "green" },
151
+ disabled: { type: Boolean }
152
+ }, {
153
+ modelValue: { default: () => [] },
154
+ modelModifiers: {}
155
+ }),
156
+ emits: ["update:modelValue"],
157
+ setup(n) {
158
+ let c = n, l = w(n, "modelValue"), f = C(), p = `${f}-label`, h = (e) => `${f}-key-${e}`, _ = (e) => I[e.color ?? c.color], v = S(), y = t(() => ({
159
+ class: v.class,
160
+ style: v.style
161
+ })), T = t(() => {
162
+ let { class: e, style: t, ...n } = v;
163
+ return n;
164
+ });
165
+ return (t, n) => (m(), i("div", u({ class: "fp-unit" }, y.value), [s(x(k), u(T.value, {
166
+ modelValue: l.value,
167
+ "onUpdate:modelValue": n[0] ||= (e) => l.value = e,
168
+ class: "fp-keys",
169
+ role: "group",
170
+ "roving-focus": !1,
171
+ "data-orientation": c.orientation,
172
+ disabled: c.disabled,
173
+ "aria-labelledby": c.label ? p : void 0
174
+ }), {
175
+ default: O(() => [(m(!0), i(e, null, g(c.options, (t, n) => (m(), i(e, { key: t.value }, [a("span", {
176
+ id: h(n),
177
+ class: "fp-silk"
178
+ }, [c.led === "above" ? (m(), i("span", {
179
+ key: 0,
180
+ class: d(["fp-led", [_(t), { "fp-led-lit": l.value.includes(t.value) }]]),
181
+ "aria-hidden": "true"
182
+ }, null, 2)) : r("", !0), o(b(t.label), 1)], 8, B), s(x(A), {
183
+ value: t.value,
184
+ disabled: t.disabled,
185
+ class: d(["fp-key", c.led === "strip" ? _(t) : void 0]),
186
+ "data-strip": c.led === "strip" ? void 0 : "plain",
187
+ "aria-labelledby": h(n)
188
+ }, null, 8, [
189
+ "value",
190
+ "disabled",
191
+ "class",
192
+ "data-strip",
193
+ "aria-labelledby"
194
+ ])], 64))), 128))]),
195
+ _: 1
196
+ }, 16, [
197
+ "modelValue",
198
+ "data-orientation",
199
+ "disabled",
200
+ "aria-labelledby"
201
+ ]), c.label ? (m(), i("span", {
202
+ key: 0,
203
+ id: p,
204
+ class: "fp-silk"
205
+ }, b(c.label), 1)) : r("", !0)], 16));
206
+ }
87
207
  });
88
208
  //#endregion
89
209
  //#region src/fit.ts
90
- function oe(e, t, n, r) {
210
+ function H(e, t, n, r) {
91
211
  if (t.width <= 0 || n.width <= 0) return null;
92
212
  let i = t.width / n.width;
93
213
  if (e === "contain") {
@@ -98,7 +218,7 @@ function oe(e, t, n, r) {
98
218
  }
99
219
  //#endregion
100
220
  //#region src/FpDevice.vue?vue&type=script&setup=true&lang.ts
101
- var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
221
+ var fe = { class: "fp-device-body" }, pe = /* @__PURE__ */ c({
102
222
  __name: "FpDevice",
103
223
  props: {
104
224
  backdrop: {
@@ -118,7 +238,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
118
238
  let n = e, r = T("stage"), o = T("device"), s = y({
119
239
  width: 0,
120
240
  height: 0
121
- }), c = y(0), l = t(() => n.fit === "none" ? !1 : n.width !== void 0 || (E(`FpDevice: fit="${n.fit}" needs a design width; the device is not scaled.`), !1)), u = t(() => n.height ?? c.value), p = t(() => !l.value || n.fit === "none" ? null : oe(n.fit, s.value, {
241
+ }), c = y(0), l = t(() => n.fit === "none" ? !1 : n.width !== void 0 || (E(`FpDevice: fit="${n.fit}" needs a design width; the device is not scaled.`), !1)), u = t(() => n.height ?? c.value), p = t(() => !l.value || n.fit === "none" ? null : H(n.fit, s.value, {
122
242
  width: n.width,
123
243
  height: u.value
124
244
  }, n.maxScale));
@@ -170,7 +290,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
170
290
  ref: o,
171
291
  class: "fp-device-rim",
172
292
  style: f(b.value)
173
- }, [a("div", R, [_(e.$slots, "default")])], 4)) : (m(), i("div", {
293
+ }, [a("div", fe, [_(e.$slots, "default")])], 4)) : (m(), i("div", {
174
294
  key: 1,
175
295
  ref_key: "device",
176
296
  ref: o,
@@ -178,7 +298,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
178
298
  style: f(b.value)
179
299
  }, [_(e.$slots, "default")], 4))], 4)], 6));
180
300
  }
181
- }), B = /* @__PURE__ */ c({
301
+ }), me = /* @__PURE__ */ c({
182
302
  __name: "FpGelButton",
183
303
  props: {
184
304
  asChild: { type: Boolean },
@@ -186,7 +306,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
186
306
  },
187
307
  setup(e) {
188
308
  let t = e;
189
- return (e, r) => (m(), n(x(P), {
309
+ return (e, r) => (m(), n(x(M), {
190
310
  as: t.as,
191
311
  "as-child": t.asChild,
192
312
  class: "fp-gel",
@@ -200,7 +320,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
200
320
  "type"
201
321
  ]));
202
322
  }
203
- }), V = /* @__PURE__ */ c({
323
+ }), he = /* @__PURE__ */ c({
204
324
  __name: "FpHousing",
205
325
  props: {
206
326
  asChild: { type: Boolean },
@@ -208,7 +328,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
208
328
  },
209
329
  setup(e) {
210
330
  let t = e;
211
- return (e, r) => (m(), n(x(P), {
331
+ return (e, r) => (m(), n(x(M), {
212
332
  as: t.as,
213
333
  "as-child": t.asChild,
214
334
  class: "fp-housing"
@@ -217,7 +337,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
217
337
  _: 3
218
338
  }, 8, ["as", "as-child"]));
219
339
  }
220
- }), H = [
340
+ }), U = [
221
341
  "................",
222
342
  "................",
223
343
  ".....#..........",
@@ -234,7 +354,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
234
354
  "................",
235
355
  "................",
236
356
  "................"
237
- ], U = [
357
+ ], W = [
238
358
  "................",
239
359
  "................",
240
360
  ".........##.....",
@@ -251,7 +371,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
251
371
  ".........##.....",
252
372
  "................",
253
373
  "................"
254
- ], W = (e) => e.map((e) => [...e].reverse().join("")), G = {
374
+ ], G = (e) => e.map((e) => [...e].reverse().join("")), K = {
255
375
  add: [
256
376
  "................",
257
377
  "................",
@@ -288,8 +408,8 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
288
408
  "................",
289
409
  "................"
290
410
  ],
291
- left: U,
292
- right: W(U),
411
+ left: W,
412
+ right: G(W),
293
413
  down: [
294
414
  "................",
295
415
  "................",
@@ -344,8 +464,8 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
344
464
  "................",
345
465
  "................"
346
466
  ],
347
- undo: H,
348
- redo: W(H),
467
+ undo: U,
468
+ redo: G(U),
349
469
  home: [
350
470
  "................",
351
471
  ".......##.......",
@@ -563,7 +683,7 @@ var R = { class: "fp-device-body" }, z = /* @__PURE__ */ c({
563
683
  "................"
564
684
  ]
565
685
  };
566
- function K(e) {
686
+ function ge(e) {
567
687
  let t = "";
568
688
  return e.forEach((e, n) => {
569
689
  let r = 0;
@@ -579,27 +699,27 @@ function K(e) {
579
699
  }
580
700
  }), t;
581
701
  }
582
- var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce = [
702
+ var q = Object.keys(K), _e = Object.fromEntries(q.map((e) => [e, ge(K[e])])), ve = [
583
703
  "role",
584
704
  "aria-label",
585
705
  "aria-hidden"
586
- ], le = ["d"], J = /* @__PURE__ */ c({
706
+ ], ye = ["d"], J = /* @__PURE__ */ c({
587
707
  __name: "FpIcon",
588
708
  props: {
589
709
  name: {},
590
710
  label: {}
591
711
  },
592
712
  setup(e) {
593
- let n = e, r = t(() => se[n.name]);
713
+ let n = e, r = t(() => _e[n.name]);
594
714
  return (e, t) => (m(), i("svg", {
595
715
  viewBox: "0 0 16 16",
596
716
  class: "fp-icon",
597
717
  role: n.label ? "img" : void 0,
598
718
  "aria-label": n.label || void 0,
599
719
  "aria-hidden": n.label ? void 0 : "true"
600
- }, [a("path", { d: r.value }, null, 8, le)], 8, ce));
720
+ }, [a("path", { d: r.value }, null, 8, ye)], 8, ve));
601
721
  }
602
- }), ue = [
722
+ }), be = [
603
723
  "tabindex",
604
724
  "aria-valuemin",
605
725
  "aria-valuemax",
@@ -607,7 +727,7 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
607
727
  "aria-valuetext",
608
728
  "aria-labelledby",
609
729
  "aria-disabled"
610
- ], de = ["id"], fe = 200, pe = .1, Y = 270, me = /* @__PURE__ */ c({
730
+ ], xe = ["id"], Se = 200, Ce = .1, Y = 270, we = /* @__PURE__ */ c({
611
731
  inheritAttrs: !1,
612
732
  __name: "FpKnob",
613
733
  props: /*@__PURE__*/ l({
@@ -672,7 +792,7 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
672
792
  }
673
793
  function k(e) {
674
794
  if (!D || e.pointerId !== D.pointerId) return;
675
- let t = (o.max - o.min) / fe * (e.shiftKey ? pe : 1);
795
+ let t = (o.max - o.min) / Se * (e.shiftKey ? Ce : 1);
676
796
  D.raw = Math.min(o.max, Math.max(o.min, D.raw + (D.y - e.clientY) * t)), D.y = e.clientY, T(D.raw);
677
797
  }
678
798
  function A(e) {
@@ -698,13 +818,13 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
698
818
  }), [a("span", {
699
819
  class: "fp-knob-mark",
700
820
  style: f({ rotate: `${y.value}deg` })
701
- }, null, 4)], 16, ue), o.label ? (m(), i("span", {
821
+ }, null, 4)], 16, be), o.label ? (m(), i("span", {
702
822
  key: 0,
703
823
  id: x(h),
704
824
  class: "fp-silk"
705
- }, b(o.label), 9, de)) : r("", !0)], 16));
825
+ }, b(o.label), 9, xe)) : r("", !0)], 16));
706
826
  }
707
- }), he = /* @__PURE__ */ c({
827
+ }), Te = /* @__PURE__ */ c({
708
828
  __name: "FpLcd",
709
829
  props: {
710
830
  asChild: { type: Boolean },
@@ -712,7 +832,7 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
712
832
  },
713
833
  setup(e) {
714
834
  let t = e;
715
- return (e, r) => (m(), n(x(P), {
835
+ return (e, r) => (m(), n(x(M), {
716
836
  as: t.as,
717
837
  "as-child": t.asChild,
718
838
  class: "fp-lcd"
@@ -721,11 +841,11 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
721
841
  _: 3
722
842
  }, 8, ["as", "as-child"]));
723
843
  }
724
- }), ge = {
844
+ }), Ee = {
725
845
  key: 0,
726
846
  class: "fp-lcd-ghost",
727
847
  "aria-hidden": "true"
728
- }, _e = { key: 2 }, ve = /* @__PURE__ */ c({
848
+ }, De = { key: 2 }, Oe = /* @__PURE__ */ c({
729
849
  __name: "FpLcdLine",
730
850
  props: {
731
851
  text: {},
@@ -737,15 +857,15 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
737
857
  },
738
858
  setup(e) {
739
859
  let a = e, o = t(() => "8".repeat(a.cells ?? a.text.length));
740
- return (e, t) => (m(), n(x(P), {
860
+ return (e, t) => (m(), n(x(M), {
741
861
  as: a.as,
742
862
  "as-child": a.asChild,
743
863
  class: "fp-lcd-line"
744
864
  }, {
745
- default: O(() => [a.ghost ? (m(), i("span", ge, b(o.value), 1)) : r("", !0), a.redraw ? (m(), i("span", {
865
+ default: O(() => [a.ghost ? (m(), i("span", Ee, b(o.value), 1)) : r("", !0), a.redraw ? (m(), i("span", {
746
866
  key: a.text,
747
867
  class: "fp-lcd-redraw"
748
- }, b(a.text), 1)) : (m(), i("span", _e, b(a.text), 1))]),
868
+ }, b(a.text), 1)) : (m(), i("span", De, b(a.text), 1))]),
749
869
  _: 1
750
870
  }, 8, ["as", "as-child"]));
751
871
  }
@@ -753,11 +873,11 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
753
873
  flat: "fp-lens-flat",
754
874
  diffused: "fp-lens-diffused",
755
875
  clear: "fp-lens-clear"
756
- }, ye = [
876
+ }, ke = [
757
877
  "role",
758
878
  "aria-label",
759
879
  "aria-hidden"
760
- ], be = /* @__PURE__ */ c({
880
+ ], Ae = /* @__PURE__ */ c({
761
881
  __name: "FpLed",
762
882
  props: {
763
883
  color: { default: "green" },
@@ -784,9 +904,9 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
784
904
  role: t.label ? "img" : void 0,
785
905
  "aria-label": t.label || void 0,
786
906
  "aria-hidden": t.label ? void 0 : "true"
787
- }, null, 10, ye));
907
+ }, null, 10, ke));
788
908
  }
789
- }), xe = /* @__PURE__ */ c({
909
+ }), je = /* @__PURE__ */ c({
790
910
  inheritAttrs: !1,
791
911
  __name: "FpMenu",
792
912
  props: /*@__PURE__*/ l({
@@ -815,12 +935,12 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
815
935
  e && c();
816
936
  }), p(() => {
817
937
  r.value && c();
818
- }), (e, c) => (m(), n(x(ee), {
938
+ }), (e, c) => (m(), n(x(ne), {
819
939
  open: r.value,
820
940
  "onUpdate:open": c[0] ||= (e) => r.value = e,
821
941
  modal: t.modal
822
942
  }, {
823
- default: O(() => [s(x(N), {
943
+ default: O(() => [s(x(ie), {
824
944
  ref_key: "trigger",
825
945
  ref: a,
826
946
  "as-child": ""
@@ -828,7 +948,7 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
828
948
  default: O(() => [_(e.$slots, "trigger", { open: r.value })]),
829
949
  _: 3
830
950
  }, 512), s(x(j), { to: t.to }, {
831
- default: O(() => [s(x(k), u(x(i), {
951
+ default: O(() => [s(x(ee), u(x(i), {
832
952
  class: "fp-menu",
833
953
  "data-fp-skin": o.value,
834
954
  side: t.side,
@@ -849,7 +969,7 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
849
969
  _: 3
850
970
  }, 8, ["open", "modal"]));
851
971
  }
852
- }), Se = /* @__PURE__ */ c({
972
+ }), Me = /* @__PURE__ */ c({
853
973
  __name: "FpMenuItem",
854
974
  props: {
855
975
  disabled: { type: Boolean },
@@ -860,7 +980,7 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
860
980
  emits: ["select"],
861
981
  setup(e, { emit: t }) {
862
982
  let r = e, i = t;
863
- return (e, t) => (m(), n(x(A), {
983
+ return (e, t) => (m(), n(x(te), {
864
984
  as: r.as,
865
985
  "as-child": r.asChild,
866
986
  disabled: r.disabled,
@@ -877,19 +997,19 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
877
997
  "text-value"
878
998
  ]));
879
999
  }
880
- }), Ce = /* @__PURE__ */ c({
1000
+ }), Ne = /* @__PURE__ */ c({
881
1001
  __name: "FpMenuSeparator",
882
1002
  setup(e) {
883
- return (e, t) => (m(), n(x(M), { class: "fp-menu-separator" }));
1003
+ return (e, t) => (m(), n(x(re), { class: "fp-menu-separator" }));
884
1004
  }
885
- }), we = [
1005
+ }), Pe = [
886
1006
  "data-orientation",
887
1007
  "aria-valuemin",
888
1008
  "aria-valuemax",
889
1009
  "aria-valuenow",
890
1010
  "aria-valuetext",
891
1011
  "aria-labelledby"
892
- ], Te = ["id"], Ee = /* @__PURE__ */ c({
1012
+ ], Fe = ["id"], Ie = /* @__PURE__ */ c({
893
1013
  inheritAttrs: !1,
894
1014
  __name: "FpMeter",
895
1015
  props: {
@@ -938,11 +1058,74 @@ var q = Object.keys(G), se = Object.fromEntries(q.map((e) => [e, K(G[e])])), ce
938
1058
  "aria-valuetext": n.valueText?.(d.value),
939
1059
  "aria-labelledby": n.label ? x(l) : void 0,
940
1060
  style: h.value
941
- }), null, 16, we), n.label ? (m(), i("span", {
1061
+ }), null, 16, Pe), n.label ? (m(), i("span", {
942
1062
  key: 0,
943
1063
  id: x(l),
944
1064
  class: "fp-silk"
945
- }, b(n.label), 9, Te)) : r("", !0)], 16));
1065
+ }, b(n.label), 9, Fe)) : r("", !0)], 16));
1066
+ }
1067
+ }), Le = ["id"], Re = /* @__PURE__ */ c({
1068
+ inheritAttrs: !1,
1069
+ __name: "FpRadioGroup",
1070
+ props: /*@__PURE__*/ l({
1071
+ options: {},
1072
+ label: {},
1073
+ orientation: { default: "horizontal" },
1074
+ led: { default: "strip" },
1075
+ color: { default: "green" },
1076
+ disabled: { type: Boolean }
1077
+ }, {
1078
+ modelValue: {},
1079
+ modelModifiers: {}
1080
+ }),
1081
+ emits: ["update:modelValue"],
1082
+ setup(n) {
1083
+ let c = n, l = w(n, "modelValue"), f = C(), p = `${f}-label`, h = (e) => `${f}-key-${e}`, _ = (e) => I[e.color ?? c.color], v = S(), y = t(() => ({
1084
+ class: v.class,
1085
+ style: v.style
1086
+ })), T = t(() => {
1087
+ let { class: e, style: t, ...n } = v;
1088
+ return n;
1089
+ });
1090
+ return (t, n) => (m(), i("div", u({ class: "fp-unit" }, y.value), [s(x(oe), u(T.value, {
1091
+ modelValue: l.value,
1092
+ "onUpdate:modelValue": n[0] ||= (e) => l.value = e,
1093
+ class: "fp-keys",
1094
+ orientation: c.orientation,
1095
+ disabled: c.disabled,
1096
+ "aria-labelledby": c.label ? p : void 0
1097
+ }), {
1098
+ default: O(() => [(m(!0), i(e, null, g(c.options, (t, n) => (m(), i(e, { key: t.value }, [a("span", {
1099
+ id: h(n),
1100
+ class: "fp-silk"
1101
+ }, [c.led === "above" ? (m(), i("span", {
1102
+ key: 0,
1103
+ class: d(["fp-led", [_(t), { "fp-led-lit": l.value === t.value }]]),
1104
+ "aria-hidden": "true"
1105
+ }, null, 2)) : r("", !0), o(b(t.label), 1)], 8, Le), s(x(ae), {
1106
+ value: t.value,
1107
+ disabled: t.disabled,
1108
+ class: d(["fp-key", c.led === "strip" ? _(t) : void 0]),
1109
+ "data-strip": c.led === "strip" ? void 0 : "plain",
1110
+ "aria-labelledby": h(n)
1111
+ }, null, 8, [
1112
+ "value",
1113
+ "disabled",
1114
+ "class",
1115
+ "data-strip",
1116
+ "aria-labelledby"
1117
+ ])], 64))), 128))]),
1118
+ _: 1
1119
+ }, 16, [
1120
+ "modelValue",
1121
+ "orientation",
1122
+ "disabled",
1123
+ "aria-labelledby"
1124
+ ]), c.label ? (m(), i("span", {
1125
+ key: 0,
1126
+ id: p,
1127
+ class: "fp-silk"
1128
+ }, b(c.label), 1)) : r("", !0)], 16));
946
1129
  }
947
1130
  }), Z = {
948
1131
  0: "abcdef",
@@ -988,10 +1171,10 @@ function Q(e) {
988
1171
  }
989
1172
  //#endregion
990
1173
  //#region src/FpReadout.vue?vue&type=script&setup=true&lang.ts
991
- var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-readout-lit" }, Ae = ["data-segment"], je = {
1174
+ var ze = { class: "fp-readout-text" }, Be = ["data-colon"], Ve = { class: "fp-readout-lit" }, He = ["data-segment"], Ue = {
992
1175
  key: 0,
993
1176
  "data-segment": "dp"
994
- }, Me = /* @__PURE__ */ c({
1177
+ }, We = /* @__PURE__ */ c({
995
1178
  __name: "FpReadout",
996
1179
  props: {
997
1180
  value: {},
@@ -1026,25 +1209,25 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1026
1209
  dot: !1
1027
1210
  })), ...e];
1028
1211
  });
1029
- return (t, n) => (m(), i("span", { class: d(["fp-readout", [s[o.color], o.lens && x(X)[o.lens]]]) }, [a("span", De, b(o.valueText ? o.valueText(c.value) : c.value), 1), (m(!0), i(e, null, g(l.value, (t, o) => (m(), i("span", {
1212
+ return (t, n) => (m(), i("span", { class: d(["fp-readout", [s[o.color], o.lens && x(X)[o.lens]]]) }, [a("span", ze, b(o.valueText ? o.valueText(c.value) : c.value), 1), (m(!0), i(e, null, g(l.value, (t, o) => (m(), i("span", {
1030
1213
  key: o,
1031
1214
  class: "fp-readout-cell",
1032
1215
  "data-colon": t.colon ? "" : void 0,
1033
1216
  "aria-hidden": "true"
1034
- }, [a("span", ke, [t.colon ? (m(), 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)) : (m(), i(e, { key: 1 }, [(m(!0), i(e, null, g(t.lit, (e) => (m(), i("span", {
1217
+ }, [a("span", Ve, [t.colon ? (m(), 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)) : (m(), i(e, { key: 1 }, [(m(!0), i(e, null, g(t.lit, (e) => (m(), i("span", {
1035
1218
  key: e,
1036
1219
  "data-segment": e
1037
- }, null, 8, Ae))), 128)), t.dot ? (m(), i("span", je)) : r("", !0)], 64))])], 8, Oe))), 128))], 2));
1220
+ }, null, 8, He))), 128)), t.dot ? (m(), i("span", Ue)) : r("", !0)], 64))])], 8, Be))), 128))], 2));
1038
1221
  }
1039
- }), Ne = {
1222
+ }), $ = {
1040
1223
  class: "fp-screw",
1041
1224
  "aria-hidden": "true"
1042
- }, Pe = /* @__PURE__ */ c({
1225
+ }, Ge = /* @__PURE__ */ c({
1043
1226
  __name: "FpScrew",
1044
1227
  setup(e) {
1045
- return (e, t) => (m(), i("span", Ne));
1228
+ return (e, t) => (m(), i("span", $));
1046
1229
  }
1047
- }), $ = /* @__PURE__ */ c({
1230
+ }), Ke = /* @__PURE__ */ c({
1048
1231
  __name: "FpSilk",
1049
1232
  props: {
1050
1233
  asChild: { type: Boolean },
@@ -1052,7 +1235,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1052
1235
  },
1053
1236
  setup(e) {
1054
1237
  let t = e;
1055
- return (e, r) => (m(), n(x(P), {
1238
+ return (e, r) => (m(), n(x(M), {
1056
1239
  as: t.as,
1057
1240
  "as-child": t.asChild,
1058
1241
  class: "fp-silk"
@@ -1061,7 +1244,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1061
1244
  _: 3
1062
1245
  }, 8, ["as", "as-child"]));
1063
1246
  }
1064
- }), Fe = ["id"], Ie = /* @__PURE__ */ c({
1247
+ }), qe = ["id"], Je = /* @__PURE__ */ c({
1065
1248
  inheritAttrs: !1,
1066
1249
  __name: "FpSlider",
1067
1250
  props: /*@__PURE__*/ l({
@@ -1102,7 +1285,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1102
1285
  ref_key: "unit",
1103
1286
  ref: _,
1104
1287
  class: "fp-unit"
1105
- }, d.value, { onPointerdownCapture: v }), [s(x(F), {
1288
+ }, d.value, { onPointerdownCapture: v }), [s(x(se), {
1106
1289
  class: "fp-fader",
1107
1290
  "model-value": h.value,
1108
1291
  min: a.min,
@@ -1113,7 +1296,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1113
1296
  "onUpdate:modelValue": g,
1114
1297
  onValueCommit: y
1115
1298
  }, {
1116
- default: O(() => [s(x(te), { class: "fp-fader-slot" }), s(x(I), u(f.value, {
1299
+ default: O(() => [s(x(le), { class: "fp-fader-slot" }), s(x(ce), u(f.value, {
1117
1300
  class: "fp-fader-cap",
1118
1301
  "aria-valuetext": a.valueText?.(c.value),
1119
1302
  "aria-labelledby": a.label ? x(p) : void 0,
@@ -1135,9 +1318,9 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1135
1318
  key: 0,
1136
1319
  id: x(p),
1137
1320
  class: "fp-silk"
1138
- }, b(a.label), 9, Fe)) : r("", !0)], 16));
1321
+ }, b(a.label), 9, qe)) : r("", !0)], 16));
1139
1322
  }
1140
- }), Le = ["data-label-placement"], Re = ["id"], ze = /* @__PURE__ */ c({
1323
+ }), Ye = ["data-label-placement"], Xe = ["id"], Ze = /* @__PURE__ */ c({
1141
1324
  inheritAttrs: !1,
1142
1325
  __name: "FpSwitch",
1143
1326
  props: /*@__PURE__*/ l({
@@ -1169,7 +1352,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1169
1352
  return (e, t) => (m(), i("div", u({
1170
1353
  class: "fp-unit",
1171
1354
  "data-label-placement": n.labelPlacement
1172
- }, f.value), [s(x(ne), u(p.value, {
1355
+ }, f.value), [s(x(ue), u(p.value, {
1173
1356
  modelValue: c.value,
1174
1357
  "onUpdate:modelValue": t[0] ||= (e) => c.value = e,
1175
1358
  class: ["fp-switch", o[n.color]],
@@ -1177,7 +1360,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1177
1360
  disabled: n.disabled,
1178
1361
  "aria-labelledby": n.label ? x(l) : void 0
1179
1362
  }), {
1180
- default: O(() => [s(x(re), { class: "fp-switch-rocker" }, {
1363
+ default: O(() => [s(x(de), { class: "fp-switch-rocker" }, {
1181
1364
  default: O(() => [...t[1] ||= [a("span", { class: "fp-switch-lamp" }, null, -1), a("span", { class: "fp-switch-face" }, null, -1)]]),
1182
1365
  _: 1
1183
1366
  })]),
@@ -1192,9 +1375,9 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1192
1375
  key: 0,
1193
1376
  id: x(l),
1194
1377
  class: "fp-silk"
1195
- }, b(n.label), 9, Re)) : r("", !0)], 16, Le));
1378
+ }, b(n.label), 9, Xe)) : r("", !0)], 16, Ye));
1196
1379
  }
1197
- }), Be = /* @__PURE__ */ c({
1380
+ }), Qe = /* @__PURE__ */ c({
1198
1381
  __name: "FpWell",
1199
1382
  props: {
1200
1383
  asChild: { type: Boolean },
@@ -1202,7 +1385,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1202
1385
  },
1203
1386
  setup(e) {
1204
1387
  let t = e;
1205
- return (e, r) => (m(), n(x(P), {
1388
+ return (e, r) => (m(), n(x(M), {
1206
1389
  as: t.as,
1207
1390
  "as-child": t.asChild,
1208
1391
  class: "fp-well"
@@ -1211,7 +1394,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1211
1394
  _: 3
1212
1395
  }, 8, ["as", "as-child"]));
1213
1396
  }
1214
- }), Ve = { class: "fp-module-title" }, He = /* @__PURE__ */ c({
1397
+ }), $e = { class: "fp-module-title" }, et = /* @__PURE__ */ c({
1215
1398
  __name: "FpWindow",
1216
1399
  props: {
1217
1400
  as: { default: "section" },
@@ -1225,12 +1408,12 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1225
1408
  emits: ["close"],
1226
1409
  setup(e, { emit: t }) {
1227
1410
  let i = e, c = t, l = C();
1228
- return (e, t) => (m(), n(x(P), {
1411
+ return (e, t) => (m(), n(x(M), {
1229
1412
  as: i.as,
1230
1413
  class: d(["fp-window", [i.sheet ? "fp-sheet-panel" : "fp-module"]]),
1231
1414
  "aria-labelledby": x(l)
1232
1415
  }, {
1233
- default: O(() => [a("div", Ve, [
1416
+ default: O(() => [a("div", $e, [
1234
1417
  (m(), n(v(`h${i.level}`), {
1235
1418
  id: x(l),
1236
1419
  class: "fp-silk fp-window-title"
@@ -1239,7 +1422,7 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1239
1422
  _: 1
1240
1423
  }, 8, ["id"])),
1241
1424
  _(e.$slots, "actions"),
1242
- i.closable ? (m(), n(L, {
1425
+ i.closable ? (m(), n(N, {
1243
1426
  key: 0,
1244
1427
  "aria-label": i.closeLabel ?? `Close ${i.title}`,
1245
1428
  onClick: t[0] ||= (e) => c("close")
@@ -1257,4 +1440,4 @@ var De = { class: "fp-readout-text" }, Oe = ["data-colon"], ke = { class: "fp-re
1257
1440
  }
1258
1441
  });
1259
1442
  //#endregion
1260
- export { L as FpButton, ie as FpButtonGroup, ae as FpCap, z as FpDevice, B as FpGelButton, V as FpHousing, J as FpIcon, me as FpKnob, he as FpLcd, ve as FpLcdLine, be as FpLed, xe as FpMenu, Se as FpMenuItem, Ce as FpMenuSeparator, Ee as FpMeter, Me as FpReadout, Pe as FpScrew, $ as FpSilk, Ie as FpSlider, ze as FpSwitch, Be as FpWell, He as FpWindow, q as fpIconNames, Q as fpReadoutGlyph };
1443
+ export { N as FpButton, P as FpButtonGroup, F as FpCap, z as FpCheckbox, V as FpCheckboxGroup, pe as FpDevice, me as FpGelButton, he as FpHousing, J as FpIcon, we as FpKnob, Te as FpLcd, Oe as FpLcdLine, Ae as FpLed, je as FpMenu, Me as FpMenuItem, Ne as FpMenuSeparator, Ie as FpMeter, Re as FpRadioGroup, We as FpReadout, Ge as FpScrew, Ke as FpSilk, Je as FpSlider, Ze as FpSwitch, Qe as FpWell, et as FpWindow, q as fpIconNames, Q as fpReadoutGlyph };
package/dist/keys.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { FpLedColor } from './FpLed.vue';
2
+ /** One key in an FpRadioGroup or FpCheckboxGroup. */
3
+ export interface FpKeyOption {
4
+ value: string;
5
+ /** Its silkscreen label, printed over the key, which also names it. */
6
+ label: string;
7
+ disabled?: boolean;
8
+ /** The colour its LED lights in. Unset, it takes the group's colour. */
9
+ color?: FpLedColor;
10
+ }
11
+ /**
12
+ * Where a piano key's light is: the strip at the foot of the key is the LED, an LED sits over its
13
+ * label, or there is none and the strip is plain plastic.
14
+ */
15
+ export type FpKeyLed = 'strip' | 'above' | 'none';
16
+ export declare const ledColorClass: Record<FpLedColor, string>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@frontpanel/vue",
3
3
  "type": "module",
4
- "version": "0.4.0",
4
+ "version": "0.5.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.4.0"
39
+ "@frontpanel/css": "^0.5.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@tailwindcss/oxide": "^4.3.3",