diff --git a/web/src/lib/components/kit/SchemaFields.svelte b/web/src/lib/components/kit/SchemaFields.svelte index 442c424..1fee64b 100644 --- a/web/src/lib/components/kit/SchemaFields.svelte +++ b/web/src/lib/components/kit/SchemaFields.svelte @@ -10,6 +10,7 @@ import CheckboxControl from "./fields/schema/CheckboxControl.svelte"; import ColorControl from "./fields/schema/ColorControl.svelte"; import ColorPairControl from "./fields/schema/ColorPairControl.svelte"; + import ColorsControl from "./fields/schema/ColorsControl.svelte"; import RangeControl from "./fields/schema/RangeControl.svelte"; import SelectControl from "./fields/schema/SelectControl.svelte"; import TextControl from "./fields/schema/TextControl.svelte"; @@ -31,6 +32,7 @@ slider: RangeControl, color: ColorControl, "color-pair": ColorPairControl, + colors: ColorsControl, select: SelectControl, checkbox: CheckboxControl, text: TextControl, diff --git a/web/src/lib/components/kit/fields/schema/ColorsControl.svelte b/web/src/lib/components/kit/fields/schema/ColorsControl.svelte new file mode 100644 index 0000000..adeb9ef --- /dev/null +++ b/web/src/lib/components/kit/fields/schema/ColorsControl.svelte @@ -0,0 +1,156 @@ + + +
( out[key] = { width: spec.width, height: spec.height }; } else if (spec.kind === "color-pair") { out[key] = { from: spec.from, to: spec.to }; + } else if (spec.kind === "colors") { + out[key] = [...spec.default]; } else if (spec.kind === "offset") { out[key] = { x: spec.x, y: spec.y }; } else if (spec.kind === "font-style") { @@ -431,6 +445,15 @@ export function sanitizeSchemaParams
( out[key] = { from, to }; break; } + case "colors": { + const r = + Array.isArray(raw) && + raw.every((c) => typeof c === "string" && /^#[0-9a-f]{6}$/i.test(c)) + ? (raw as string[]) + : undefined; + out[key] = r && r.length > 0 ? [...r] : [...spec.default]; + break; + } case "position9": out[key] = typeof raw === "string" &&