@pixerate/editor-svelte 0.26.0 → 0.27.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/README.md +1 -0
- package/dist/agentTools.svelte.d.ts +1 -1
- package/dist/canvas/createCanvasAnimation.svelte.d.ts +3 -3
- package/dist/canvas/createCanvasAnimation.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasArrange.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasAutoLayout.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasComponents.svelte.d.ts.map +1 -1
- package/dist/parameters/KeyframeDiamond.svelte +41 -0
- package/dist/parameters/KeyframeDiamond.svelte.d.ts +13 -0
- package/dist/parameters/KeyframeDiamond.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterColor.svelte +109 -0
- package/dist/parameters/ParameterColor.svelte.d.ts +15 -0
- package/dist/parameters/ParameterColor.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterCommitInput.svelte +41 -0
- package/dist/parameters/ParameterCommitInput.svelte.d.ts +13 -0
- package/dist/parameters/ParameterCommitInput.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterFieldControl.svelte +41 -0
- package/dist/parameters/ParameterFieldControl.svelte.d.ts +15 -0
- package/dist/parameters/ParameterFieldControl.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterImage.svelte +77 -0
- package/dist/parameters/ParameterImage.svelte.d.ts +14 -0
- package/dist/parameters/ParameterImage.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterNumberInput.svelte +54 -0
- package/dist/parameters/ParameterNumberInput.svelte.d.ts +13 -0
- package/dist/parameters/ParameterNumberInput.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterSelect.svelte +54 -0
- package/dist/parameters/ParameterSelect.svelte.d.ts +12 -0
- package/dist/parameters/ParameterSelect.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterSlider.svelte +64 -0
- package/dist/parameters/ParameterSlider.svelte.d.ts +15 -0
- package/dist/parameters/ParameterSlider.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterText.svelte +26 -0
- package/dist/parameters/ParameterText.svelte.d.ts +12 -0
- package/dist/parameters/ParameterText.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterToggle.svelte +31 -0
- package/dist/parameters/ParameterToggle.svelte.d.ts +12 -0
- package/dist/parameters/ParameterToggle.svelte.d.ts.map +1 -0
- package/dist/parameters/ParameterVector.svelte +34 -0
- package/dist/parameters/ParameterVector.svelte.d.ts +12 -0
- package/dist/parameters/ParameterVector.svelte.d.ts.map +1 -0
- package/dist/parameters/ParametersPanel.svelte +239 -0
- package/dist/parameters/ParametersPanel.svelte.d.ts +28 -0
- package/dist/parameters/ParametersPanel.svelte.d.ts.map +1 -0
- package/dist/parameters/createParameters.svelte.d.ts +32 -0
- package/dist/parameters/createParameters.svelte.d.ts.map +1 -0
- package/dist/parameters/createParameters.svelte.js +41 -0
- package/dist/parameters/index.d.ts +18 -0
- package/dist/parameters/index.d.ts.map +1 -0
- package/dist/parameters/index.js +14 -0
- package/dist/parameters/styles.d.ts +4 -0
- package/dist/parameters/styles.d.ts.map +1 -0
- package/dist/parameters/styles.js +4 -0
- package/package.json +11 -3
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
clampParameterNumber,
|
|
4
|
+
formatParameterNumber,
|
|
5
|
+
isSliderField,
|
|
6
|
+
parameterLabel,
|
|
7
|
+
parameterStep,
|
|
8
|
+
type NumberParameterField
|
|
9
|
+
} from '@pixerate/editor/parameters';
|
|
10
|
+
import ParameterNumberInput from './ParameterNumberInput.svelte';
|
|
11
|
+
import { parameterRangeClass } from './styles.js';
|
|
12
|
+
|
|
13
|
+
interface Props {
|
|
14
|
+
field: NumberParameterField;
|
|
15
|
+
value: number;
|
|
16
|
+
onchange: (value: number) => void;
|
|
17
|
+
/** A drag started: merge changes into one undo step until `ongestureend`. */
|
|
18
|
+
ongesturestart?: () => void;
|
|
19
|
+
ongestureend?: () => void;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
id?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let { field, value, onchange, ongesturestart, ongestureend, disabled = false, id }: Props = $props();
|
|
25
|
+
|
|
26
|
+
let dragging = false;
|
|
27
|
+
function start() {
|
|
28
|
+
if (dragging) return;
|
|
29
|
+
dragging = true;
|
|
30
|
+
ongesturestart?.();
|
|
31
|
+
}
|
|
32
|
+
function end() {
|
|
33
|
+
if (!dragging) return;
|
|
34
|
+
dragging = false;
|
|
35
|
+
ongestureend?.();
|
|
36
|
+
}
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<!-- A slider plus number box for `number` / `int` fields (number box only for `control: 'input'` or unbounded fields). -->
|
|
40
|
+
{#if isSliderField(field)}
|
|
41
|
+
<div class="flex items-center gap-2">
|
|
42
|
+
<input
|
|
43
|
+
type="range"
|
|
44
|
+
aria-label={parameterLabel(field)}
|
|
45
|
+
aria-valuetext={formatParameterNumber(field, value)}
|
|
46
|
+
min={field.min}
|
|
47
|
+
max={field.max}
|
|
48
|
+
step={parameterStep(field)}
|
|
49
|
+
{value}
|
|
50
|
+
disabled={disabled || field.readOnly}
|
|
51
|
+
class={parameterRangeClass}
|
|
52
|
+
onpointerdown={start}
|
|
53
|
+
onpointerup={end}
|
|
54
|
+
onpointercancel={end}
|
|
55
|
+
onblur={end}
|
|
56
|
+
oninput={(e) => onchange(clampParameterNumber(field, Number(e.currentTarget.value)))}
|
|
57
|
+
/>
|
|
58
|
+
<div class="w-20 shrink-0">
|
|
59
|
+
<ParameterNumberInput {field} {value} {onchange} {disabled} {id} aria-label="{parameterLabel(field)} value" />
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
{:else}
|
|
63
|
+
<ParameterNumberInput {field} {value} {onchange} {disabled} {id} />
|
|
64
|
+
{/if}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type NumberParameterField } from '@pixerate/editor/parameters';
|
|
2
|
+
interface Props {
|
|
3
|
+
field: NumberParameterField;
|
|
4
|
+
value: number;
|
|
5
|
+
onchange: (value: number) => void;
|
|
6
|
+
/** A drag started: merge changes into one undo step until `ongestureend`. */
|
|
7
|
+
ongesturestart?: () => void;
|
|
8
|
+
ongestureend?: () => void;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
id?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const ParameterSlider: import("svelte").Component<Props, {}, "">;
|
|
13
|
+
type ParameterSlider = ReturnType<typeof ParameterSlider>;
|
|
14
|
+
export default ParameterSlider;
|
|
15
|
+
//# sourceMappingURL=ParameterSlider.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParameterSlider.svelte.d.ts","sourceRoot":"","sources":["../../src/parameters/ParameterSlider.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAMH,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAKrC,UAAU,KAAK;IACb,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAoCH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { parameterLabel, type TextParameterField } from '@pixerate/editor/parameters';
|
|
3
|
+
import ParameterCommitInput from './ParameterCommitInput.svelte';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
field: TextParameterField;
|
|
7
|
+
value: string;
|
|
8
|
+
onchange: (value: string) => void;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
id?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let { field, value, onchange, disabled = false, id }: Props = $props();
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<!-- A text box (or textarea with `multiline`) that commits on blur or Enter. -->
|
|
17
|
+
<ParameterCommitInput
|
|
18
|
+
{id}
|
|
19
|
+
aria-label={parameterLabel(field)}
|
|
20
|
+
multiline={field.multiline}
|
|
21
|
+
placeholder={field.placeholder}
|
|
22
|
+
maxlength={field.maxLength}
|
|
23
|
+
{value}
|
|
24
|
+
disabled={disabled || field.readOnly}
|
|
25
|
+
oncommit={onchange}
|
|
26
|
+
/>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type TextParameterField } from '@pixerate/editor/parameters';
|
|
2
|
+
interface Props {
|
|
3
|
+
field: TextParameterField;
|
|
4
|
+
value: string;
|
|
5
|
+
onchange: (value: string) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
id?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const ParameterText: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type ParameterText = ReturnType<typeof ParameterText>;
|
|
11
|
+
export default ParameterText;
|
|
12
|
+
//# sourceMappingURL=ParameterText.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParameterText.svelte.d.ts","sourceRoot":"","sources":["../../src/parameters/ParameterText.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAIpF,UAAU,KAAK;IACb,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAcH,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { parameterLabel, type BooleanParameterField } from '@pixerate/editor/parameters';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
field: BooleanParameterField;
|
|
6
|
+
value: boolean;
|
|
7
|
+
onchange: (value: boolean) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
id?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let { field, value, onchange, disabled = false, id }: Props = $props();
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<!-- An on/off switch for `boolean` fields. -->
|
|
16
|
+
<button
|
|
17
|
+
type="button"
|
|
18
|
+
role="switch"
|
|
19
|
+
{id}
|
|
20
|
+
aria-checked={value}
|
|
21
|
+
aria-label={parameterLabel(field)}
|
|
22
|
+
disabled={disabled || field.readOnly}
|
|
23
|
+
onclick={() => onchange(!value)}
|
|
24
|
+
class="relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:opacity-50 {value
|
|
25
|
+
? 'bg-primary'
|
|
26
|
+
: 'bg-muted'}"
|
|
27
|
+
>
|
|
28
|
+
<span
|
|
29
|
+
class="pointer-events-none block h-4 w-4 rounded-full bg-background shadow transition-transform {value ? 'translate-x-4' : 'translate-x-0.5'}"
|
|
30
|
+
></span>
|
|
31
|
+
</button>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type BooleanParameterField } from '@pixerate/editor/parameters';
|
|
2
|
+
interface Props {
|
|
3
|
+
field: BooleanParameterField;
|
|
4
|
+
value: boolean;
|
|
5
|
+
onchange: (value: boolean) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
id?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const ParameterToggle: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type ParameterToggle = ReturnType<typeof ParameterToggle>;
|
|
11
|
+
export default ParameterToggle;
|
|
12
|
+
//# sourceMappingURL=ParameterToggle.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParameterToggle.svelte.d.ts","sourceRoot":"","sources":["../../src/parameters/ParameterToggle.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,UAAU,KAAK;IACb,KAAK,EAAE,qBAAqB,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAiBH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { parameterLabel, vectorComponentField, vectorSize, type VectorParameterField } from '@pixerate/editor/parameters';
|
|
3
|
+
import ParameterNumberInput from './ParameterNumberInput.svelte';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
field: VectorParameterField;
|
|
7
|
+
value: number[];
|
|
8
|
+
onchange: (value: number[]) => void;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
id?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let { field, value, onchange, disabled = false, id }: Props = $props();
|
|
14
|
+
|
|
15
|
+
const size = $derived(vectorSize(field));
|
|
16
|
+
const components = $derived(Array.from({ length: size }, (_, i) => vectorComponentField(field, i)));
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<!-- One number box per component for `vector` fields. -->
|
|
20
|
+
<div class="grid gap-1.5" style:grid-template-columns="repeat({size}, minmax(0, 1fr))">
|
|
21
|
+
{#each components as component, i (i)}
|
|
22
|
+
<label class="flex min-w-0 items-center gap-1">
|
|
23
|
+
<span class="w-3 shrink-0 text-[10px] uppercase text-muted-foreground">{component.label}</span>
|
|
24
|
+
<ParameterNumberInput
|
|
25
|
+
field={component}
|
|
26
|
+
value={value[i] ?? 0}
|
|
27
|
+
id={i === 0 ? id : undefined}
|
|
28
|
+
aria-label="{parameterLabel(field)} {component.label}"
|
|
29
|
+
disabled={disabled || field.readOnly}
|
|
30
|
+
onchange={(n) => onchange(Array.from({ length: size }, (_, j) => (j === i ? n : (value[j] ?? 0))))}
|
|
31
|
+
/>
|
|
32
|
+
</label>
|
|
33
|
+
{/each}
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type VectorParameterField } from '@pixerate/editor/parameters';
|
|
2
|
+
interface Props {
|
|
3
|
+
field: VectorParameterField;
|
|
4
|
+
value: number[];
|
|
5
|
+
onchange: (value: number[]) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
id?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const ParameterVector: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type ParameterVector = ReturnType<typeof ParameterVector>;
|
|
11
|
+
export default ParameterVector;
|
|
12
|
+
//# sourceMappingURL=ParameterVector.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParameterVector.svelte.d.ts","sourceRoot":"","sources":["../../src/parameters/ParameterVector.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAIxH,UAAU,KAAK;IACb,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAwBH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
// A counter keeps label ids unique per panel (`$props.id()` needs Svelte 5.20, newer than
|
|
3
|
+
// our peer range). Pass `idPrefix` for ids that match between server and client renders.
|
|
4
|
+
let nextId = 0;
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import { untrack, type Snippet } from 'svelte';
|
|
9
|
+
import {
|
|
10
|
+
isParameterGroup,
|
|
11
|
+
parameterLabel,
|
|
12
|
+
parameterValuesEqual,
|
|
13
|
+
type ParameterField,
|
|
14
|
+
type ParameterSchemaItem,
|
|
15
|
+
type ParametersController,
|
|
16
|
+
type ParametersState
|
|
17
|
+
} from '@pixerate/editor/parameters';
|
|
18
|
+
import KeyframeDiamond from './KeyframeDiamond.svelte';
|
|
19
|
+
import ParameterFieldControl from './ParameterFieldControl.svelte';
|
|
20
|
+
import { parameterButtonClass, parameterInputClass } from './styles.js';
|
|
21
|
+
|
|
22
|
+
interface Props {
|
|
23
|
+
controller: ParametersController;
|
|
24
|
+
/** Heading (default: the schema's title). Pass `null` for none. */
|
|
25
|
+
title?: string | null;
|
|
26
|
+
/** Undo, redo, reset and randomize buttons (default `true`). */
|
|
27
|
+
showToolbar?: boolean;
|
|
28
|
+
/** The preset picker with save and delete (default `true`). */
|
|
29
|
+
showPresets?: boolean;
|
|
30
|
+
/** Keyframe diamonds (default: when the controller has a keyframes adapter). */
|
|
31
|
+
showKeyframes?: boolean;
|
|
32
|
+
/** Per-field reset buttons on changed values (default `true`). */
|
|
33
|
+
showFieldReset?: boolean;
|
|
34
|
+
/** Turns a picked file into a URL for image fields. */
|
|
35
|
+
resolveFile?: (file: File) => string | Promise<string>;
|
|
36
|
+
/** Shown when the schema has no fields. */
|
|
37
|
+
emptyMessage?: string;
|
|
38
|
+
/** Prefix for the panel's element ids. */
|
|
39
|
+
idPrefix?: string;
|
|
40
|
+
class?: string;
|
|
41
|
+
/** Extra content after the fields. */
|
|
42
|
+
children?: Snippet;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
let {
|
|
46
|
+
controller,
|
|
47
|
+
title,
|
|
48
|
+
showToolbar = true,
|
|
49
|
+
showPresets = true,
|
|
50
|
+
showKeyframes,
|
|
51
|
+
showFieldReset = true,
|
|
52
|
+
resolveFile,
|
|
53
|
+
emptyMessage = 'No parameters.',
|
|
54
|
+
idPrefix = `pixerate-parameters-${++nextId}`,
|
|
55
|
+
class: className = '',
|
|
56
|
+
children
|
|
57
|
+
}: Props = $props();
|
|
58
|
+
|
|
59
|
+
// Follows a replaced `controller` prop too.
|
|
60
|
+
let view: ParametersState = $state.raw(untrack(() => controller.getState()));
|
|
61
|
+
$effect(() => {
|
|
62
|
+
const current = controller;
|
|
63
|
+
view = current.getState();
|
|
64
|
+
return untrack(() =>
|
|
65
|
+
current.subscribe((next) => {
|
|
66
|
+
view = next;
|
|
67
|
+
})
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const keys = $derived(showKeyframes ?? view.keyframesEnabled);
|
|
72
|
+
const heading = $derived(title === undefined ? view.schema.title : title);
|
|
73
|
+
|
|
74
|
+
let saving = $state(false);
|
|
75
|
+
let presetName = $state('');
|
|
76
|
+
let presetMessage = $state<string | null>(null);
|
|
77
|
+
const activePreset = $derived(view.presets.find((p) => p.name === view.activePreset));
|
|
78
|
+
|
|
79
|
+
function savePreset(e: SubmitEvent) {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
const result = controller.savePreset(presetName);
|
|
82
|
+
if (result.ok) {
|
|
83
|
+
saving = false;
|
|
84
|
+
presetName = '';
|
|
85
|
+
presetMessage = null;
|
|
86
|
+
} else presetMessage = result.message;
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
{#snippet fieldRow(field: ParameterField)}
|
|
91
|
+
{@const label = parameterLabel(field)}
|
|
92
|
+
{@const inputId = `${idPrefix}-${field.id}`}
|
|
93
|
+
{@const error = view.errors[field.id]}
|
|
94
|
+
<div data-parameter-id={field.id} data-parameter-type={field.type} class="space-y-1">
|
|
95
|
+
<div class="flex min-h-[1.25rem] items-center gap-1.5">
|
|
96
|
+
{#if keys}
|
|
97
|
+
<KeyframeDiamond state={view.keys[field.id] ?? 'none'} {label} ontoggle={() => controller.toggleKeyframe(field.id)} />
|
|
98
|
+
{/if}
|
|
99
|
+
<label for={inputId} class="min-w-0 flex-1 truncate text-xs font-medium text-foreground" title={field.description}>{label}</label>
|
|
100
|
+
{#if showFieldReset && !field.readOnly && !parameterValuesEqual(view.values[field.id], view.defaults[field.id])}
|
|
101
|
+
<button
|
|
102
|
+
type="button"
|
|
103
|
+
class="rounded px-1 text-[11px] text-muted-foreground hover:text-foreground"
|
|
104
|
+
title="Reset to {String(view.defaults[field.id])}"
|
|
105
|
+
aria-label="Reset {label}"
|
|
106
|
+
onclick={() => controller.reset([field.id])}>↺</button
|
|
107
|
+
>
|
|
108
|
+
{/if}
|
|
109
|
+
</div>
|
|
110
|
+
{#if field.description}
|
|
111
|
+
<p class="text-[11px] leading-snug text-muted-foreground">{field.description}</p>
|
|
112
|
+
{/if}
|
|
113
|
+
<ParameterFieldControl
|
|
114
|
+
{field}
|
|
115
|
+
value={view.values[field.id]}
|
|
116
|
+
id={inputId}
|
|
117
|
+
{resolveFile}
|
|
118
|
+
onchange={(v) => controller.setValue(field.id, v)}
|
|
119
|
+
ongesturestart={() => controller.beginGesture(field.id)}
|
|
120
|
+
ongestureend={() => controller.endGesture()}
|
|
121
|
+
/>
|
|
122
|
+
{#if error}
|
|
123
|
+
<p role="alert" class="text-[11px] text-destructive">{error}</p>
|
|
124
|
+
{/if}
|
|
125
|
+
</div>
|
|
126
|
+
{/snippet}
|
|
127
|
+
|
|
128
|
+
{#snippet items(list: readonly ParameterSchemaItem[])}
|
|
129
|
+
{#each list as item (item.id)}
|
|
130
|
+
{#if view.visible[item.id] !== false}
|
|
131
|
+
{#if isParameterGroup(item)}
|
|
132
|
+
{@const collapsed = !!view.collapsed[item.id]}
|
|
133
|
+
<section data-parameter-group={item.id} class="rounded-md border border-border">
|
|
134
|
+
<button
|
|
135
|
+
type="button"
|
|
136
|
+
aria-expanded={!collapsed}
|
|
137
|
+
aria-controls="{idPrefix}-group-{item.id}"
|
|
138
|
+
onclick={() => controller.toggleCollapsed(item.id)}
|
|
139
|
+
class="flex w-full items-center gap-1.5 px-2 py-1.5 text-left text-xs font-semibold text-foreground hover:bg-muted"
|
|
140
|
+
>
|
|
141
|
+
<span aria-hidden="true" class="inline-block text-[10px] text-muted-foreground transition-transform {collapsed ? '' : 'rotate-90'}"
|
|
142
|
+
>▶</span
|
|
143
|
+
>
|
|
144
|
+
{parameterLabel(item)}
|
|
145
|
+
</button>
|
|
146
|
+
{#if !collapsed}
|
|
147
|
+
<div id="{idPrefix}-group-{item.id}" class="space-y-3 border-t border-border px-2 py-2">
|
|
148
|
+
{#if item.description}
|
|
149
|
+
<p class="text-[11px] text-muted-foreground">{item.description}</p>
|
|
150
|
+
{/if}
|
|
151
|
+
{@render items(item.fields)}
|
|
152
|
+
</div>
|
|
153
|
+
{/if}
|
|
154
|
+
</section>
|
|
155
|
+
{:else}
|
|
156
|
+
{@render fieldRow(item)}
|
|
157
|
+
{/if}
|
|
158
|
+
{/if}
|
|
159
|
+
{/each}
|
|
160
|
+
{/snippet}
|
|
161
|
+
|
|
162
|
+
<!--
|
|
163
|
+
Renders a whole parameter schema: collapsible groups, one control per visible field,
|
|
164
|
+
keyframe diamonds, per-field reset, presets, and undo / redo / reset / randomize. Slider
|
|
165
|
+
drags and colour picks are one undo step each.
|
|
166
|
+
-->
|
|
167
|
+
<div class="space-y-3 text-foreground {className}" data-parameters-panel="">
|
|
168
|
+
{#if heading || showToolbar}
|
|
169
|
+
<div class="flex flex-wrap items-center gap-1.5">
|
|
170
|
+
{#if heading}
|
|
171
|
+
<h3 class="mr-auto text-sm font-semibold">{heading}</h3>
|
|
172
|
+
{/if}
|
|
173
|
+
{#if showToolbar}
|
|
174
|
+
<div class="flex flex-wrap gap-1" role="toolbar" aria-label="Parameter actions">
|
|
175
|
+
<button
|
|
176
|
+
type="button"
|
|
177
|
+
class={parameterButtonClass}
|
|
178
|
+
disabled={!view.canUndo}
|
|
179
|
+
title={view.canUndo ? `Undo ${view.undoLabel}` : 'Nothing to undo'}
|
|
180
|
+
onclick={() => controller.undo()}>Undo</button
|
|
181
|
+
>
|
|
182
|
+
<button
|
|
183
|
+
type="button"
|
|
184
|
+
class={parameterButtonClass}
|
|
185
|
+
disabled={!view.canRedo}
|
|
186
|
+
title={view.canRedo ? `Redo ${view.redoLabel}` : 'Nothing to redo'}
|
|
187
|
+
onclick={() => controller.redo()}>Redo</button
|
|
188
|
+
>
|
|
189
|
+
<button type="button" class={parameterButtonClass} disabled={!view.modified} onclick={() => controller.reset()}>Reset</button>
|
|
190
|
+
<button type="button" class={parameterButtonClass} onclick={() => controller.randomize()}>Randomize</button>
|
|
191
|
+
</div>
|
|
192
|
+
{/if}
|
|
193
|
+
</div>
|
|
194
|
+
{/if}
|
|
195
|
+
|
|
196
|
+
{#if showPresets}
|
|
197
|
+
<div class="space-y-1.5" data-parameter-presets="">
|
|
198
|
+
<div class="flex items-center gap-1.5">
|
|
199
|
+
<select
|
|
200
|
+
aria-label="Preset"
|
|
201
|
+
class={parameterInputClass}
|
|
202
|
+
value={view.activePreset ?? ''}
|
|
203
|
+
onchange={(e) => e.currentTarget.value && controller.applyPreset(e.currentTarget.value)}
|
|
204
|
+
>
|
|
205
|
+
<option value="">{view.presets.length ? 'Presets…' : 'No presets'}</option>
|
|
206
|
+
{#each view.presets as p (p.name)}
|
|
207
|
+
<option value={p.name} title={p.description}>{p.name}</option>
|
|
208
|
+
{/each}
|
|
209
|
+
</select>
|
|
210
|
+
<button type="button" class={parameterButtonClass} aria-expanded={saving} onclick={() => (saving = !saving)}>Save…</button>
|
|
211
|
+
{#if activePreset && !activePreset.builtIn}
|
|
212
|
+
<button
|
|
213
|
+
type="button"
|
|
214
|
+
class={parameterButtonClass}
|
|
215
|
+
aria-label="Delete preset {activePreset.name}"
|
|
216
|
+
onclick={() => controller.deletePreset(activePreset.name)}>Delete</button
|
|
217
|
+
>
|
|
218
|
+
{/if}
|
|
219
|
+
</div>
|
|
220
|
+
{#if saving}
|
|
221
|
+
<form class="flex items-center gap-1.5" onsubmit={savePreset}>
|
|
222
|
+
<!-- svelte-ignore a11y_autofocus -->
|
|
223
|
+
<input autofocus aria-label="Preset name" placeholder="Preset name" class={parameterInputClass} bind:value={presetName} />
|
|
224
|
+
<button type="submit" class={parameterButtonClass}>Save</button>
|
|
225
|
+
</form>
|
|
226
|
+
{/if}
|
|
227
|
+
{#if presetMessage}
|
|
228
|
+
<p role="alert" class="text-[11px] text-destructive">{presetMessage}</p>
|
|
229
|
+
{/if}
|
|
230
|
+
</div>
|
|
231
|
+
{/if}
|
|
232
|
+
|
|
233
|
+
{#if view.fields.length === 0}
|
|
234
|
+
<p class="text-xs text-muted-foreground">{emptyMessage}</p>
|
|
235
|
+
{:else}
|
|
236
|
+
{@render items(view.schema.fields)}
|
|
237
|
+
{/if}
|
|
238
|
+
{@render children?.()}
|
|
239
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import { type ParametersController } from '@pixerate/editor/parameters';
|
|
3
|
+
interface Props {
|
|
4
|
+
controller: ParametersController;
|
|
5
|
+
/** Heading (default: the schema's title). Pass `null` for none. */
|
|
6
|
+
title?: string | null;
|
|
7
|
+
/** Undo, redo, reset and randomize buttons (default `true`). */
|
|
8
|
+
showToolbar?: boolean;
|
|
9
|
+
/** The preset picker with save and delete (default `true`). */
|
|
10
|
+
showPresets?: boolean;
|
|
11
|
+
/** Keyframe diamonds (default: when the controller has a keyframes adapter). */
|
|
12
|
+
showKeyframes?: boolean;
|
|
13
|
+
/** Per-field reset buttons on changed values (default `true`). */
|
|
14
|
+
showFieldReset?: boolean;
|
|
15
|
+
/** Turns a picked file into a URL for image fields. */
|
|
16
|
+
resolveFile?: (file: File) => string | Promise<string>;
|
|
17
|
+
/** Shown when the schema has no fields. */
|
|
18
|
+
emptyMessage?: string;
|
|
19
|
+
/** Prefix for the panel's element ids. */
|
|
20
|
+
idPrefix?: string;
|
|
21
|
+
class?: string;
|
|
22
|
+
/** Extra content after the fields. */
|
|
23
|
+
children?: Snippet;
|
|
24
|
+
}
|
|
25
|
+
declare const ParametersPanel: import("svelte").Component<Props, {}, "">;
|
|
26
|
+
type ParametersPanel = ReturnType<typeof ParametersPanel>;
|
|
27
|
+
export default ParametersPanel;
|
|
28
|
+
//# sourceMappingURL=ParametersPanel.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParametersPanel.svelte.d.ts","sourceRoot":"","sources":["../../src/parameters/ParametersPanel.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAMH,KAAK,oBAAoB,EAE1B,MAAM,6BAA6B,CAAC;AAMrC,UAAU,KAAK;IACb,UAAU,EAAE,oBAAoB,CAAC;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uDAAuD;IACvD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAiKH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ParametersController, type ParameterCommandOptions, type ParametersControllerOptions, type ParameterSetResult, type ParametersState, type ParameterValue } from "@pixerate/editor/parameters";
|
|
2
|
+
export interface SvelteParameters {
|
|
3
|
+
readonly controller: ParametersController;
|
|
4
|
+
/** The controller's state (reactive). */
|
|
5
|
+
readonly state: ParametersState;
|
|
6
|
+
/** Shorthand for `state.values` (reactive). */
|
|
7
|
+
readonly values: ParametersState["values"];
|
|
8
|
+
setValue(id: string, value: ParameterValue): ParameterSetResult;
|
|
9
|
+
undo(): void;
|
|
10
|
+
redo(): void;
|
|
11
|
+
reset(ids?: readonly string[]): void;
|
|
12
|
+
randomize(ids?: readonly string[]): void;
|
|
13
|
+
/** Stops listening to the controller. */
|
|
14
|
+
destroy(): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Svelte 5 rune: subscribes to a `ParametersController` (or creates one from options) and
|
|
18
|
+
* exposes its state reactively with bound actions.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createParameters(controllerOrOptions: ParametersController | ParametersControllerOptions): SvelteParameters;
|
|
21
|
+
/** Anything with `register(specs) → unregister` (a `CommandRegistry`). */
|
|
22
|
+
export interface ParameterCommandTarget {
|
|
23
|
+
register(specs: any): () => void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Registers the controller's palette / agent commands (`parameters.set`, `…randomize`, …)
|
|
27
|
+
* for the lifetime of the calling component (call it during initialisation), so
|
|
28
|
+
* `createCommandToolProvider` exposes them to agents. Pass a getter to follow a changing
|
|
29
|
+
* registry.
|
|
30
|
+
*/
|
|
31
|
+
export declare function useParameterCommands(registry: ParameterCommandTarget | null | undefined | (() => ParameterCommandTarget | null | undefined), controller: ParametersController, options?: ParameterCommandOptions): void;
|
|
32
|
+
//# sourceMappingURL=createParameters.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createParameters.svelte.d.ts","sourceRoot":"","sources":["../../src/parameters/createParameters.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAEpB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,kBAAkB,CAAC;IAChE,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACzC,yCAAyC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,2BAA2B,GAAG,gBAAgB,CAsB1H;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC,EACvG,UAAU,EAAE,oBAAoB,EAChC,OAAO,GAAE,uBAA4B,GACpC,IAAI,CAMN"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ParametersController, createParameterCommands, } from "@pixerate/editor/parameters";
|
|
2
|
+
/**
|
|
3
|
+
* Svelte 5 rune: subscribes to a `ParametersController` (or creates one from options) and
|
|
4
|
+
* exposes its state reactively with bound actions.
|
|
5
|
+
*/
|
|
6
|
+
export function createParameters(controllerOrOptions) {
|
|
7
|
+
const controller = controllerOrOptions instanceof ParametersController ? controllerOrOptions : new ParametersController(controllerOrOptions);
|
|
8
|
+
let state = $state.raw(controller.getState());
|
|
9
|
+
const unsubscribe = controller.subscribe((next) => {
|
|
10
|
+
state = next;
|
|
11
|
+
});
|
|
12
|
+
return {
|
|
13
|
+
controller,
|
|
14
|
+
get state() {
|
|
15
|
+
return state;
|
|
16
|
+
},
|
|
17
|
+
get values() {
|
|
18
|
+
return state.values;
|
|
19
|
+
},
|
|
20
|
+
setValue: (id, value) => controller.setValue(id, value),
|
|
21
|
+
undo: () => void controller.undo(),
|
|
22
|
+
redo: () => void controller.redo(),
|
|
23
|
+
reset: (ids) => void controller.reset(ids),
|
|
24
|
+
randomize: (ids) => void controller.randomize({ ids }),
|
|
25
|
+
destroy: unsubscribe,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Registers the controller's palette / agent commands (`parameters.set`, `…randomize`, …)
|
|
30
|
+
* for the lifetime of the calling component (call it during initialisation), so
|
|
31
|
+
* `createCommandToolProvider` exposes them to agents. Pass a getter to follow a changing
|
|
32
|
+
* registry.
|
|
33
|
+
*/
|
|
34
|
+
export function useParameterCommands(registry, controller, options = {}) {
|
|
35
|
+
$effect(() => {
|
|
36
|
+
const target = typeof registry === "function" ? registry() : registry;
|
|
37
|
+
if (!target)
|
|
38
|
+
return;
|
|
39
|
+
return target.register(createParameterCommands(controller, options));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ComponentProps } from "svelte";
|
|
2
|
+
import type ParametersPanelComponent from "./ParametersPanel.svelte";
|
|
3
|
+
export { default as ParametersPanel } from "./ParametersPanel.svelte";
|
|
4
|
+
export { default as ParameterFieldControl } from "./ParameterFieldControl.svelte";
|
|
5
|
+
export { default as ParameterSlider } from "./ParameterSlider.svelte";
|
|
6
|
+
export { default as ParameterNumberInput } from "./ParameterNumberInput.svelte";
|
|
7
|
+
export { default as ParameterToggle } from "./ParameterToggle.svelte";
|
|
8
|
+
export { default as ParameterSelect } from "./ParameterSelect.svelte";
|
|
9
|
+
export { default as ParameterColor } from "./ParameterColor.svelte";
|
|
10
|
+
export { default as ParameterVector } from "./ParameterVector.svelte";
|
|
11
|
+
export { default as ParameterImage } from "./ParameterImage.svelte";
|
|
12
|
+
export { default as ParameterText } from "./ParameterText.svelte";
|
|
13
|
+
export { default as ParameterCommitInput } from "./ParameterCommitInput.svelte";
|
|
14
|
+
export { default as KeyframeDiamond } from "./KeyframeDiamond.svelte";
|
|
15
|
+
export * from "./createParameters.svelte.js";
|
|
16
|
+
export * from "./styles.js";
|
|
17
|
+
export type ParametersPanelProps = ComponentProps<typeof ParametersPanelComponent>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parameters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,wBAAwB,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { default as ParametersPanel } from "./ParametersPanel.svelte";
|
|
2
|
+
export { default as ParameterFieldControl } from "./ParameterFieldControl.svelte";
|
|
3
|
+
export { default as ParameterSlider } from "./ParameterSlider.svelte";
|
|
4
|
+
export { default as ParameterNumberInput } from "./ParameterNumberInput.svelte";
|
|
5
|
+
export { default as ParameterToggle } from "./ParameterToggle.svelte";
|
|
6
|
+
export { default as ParameterSelect } from "./ParameterSelect.svelte";
|
|
7
|
+
export { default as ParameterColor } from "./ParameterColor.svelte";
|
|
8
|
+
export { default as ParameterVector } from "./ParameterVector.svelte";
|
|
9
|
+
export { default as ParameterImage } from "./ParameterImage.svelte";
|
|
10
|
+
export { default as ParameterText } from "./ParameterText.svelte";
|
|
11
|
+
export { default as ParameterCommitInput } from "./ParameterCommitInput.svelte";
|
|
12
|
+
export { default as KeyframeDiamond } from "./KeyframeDiamond.svelte";
|
|
13
|
+
export * from "./createParameters.svelte.js";
|
|
14
|
+
export * from "./styles.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const parameterInputClass = "h-7 w-full min-w-0 rounded-md border border-input bg-background px-2 text-xs text-foreground tabular-nums focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:cursor-not-allowed disabled:opacity-50";
|
|
2
|
+
export declare const parameterButtonClass = "inline-flex h-7 items-center justify-center gap-1 rounded-md border border-input bg-background px-2 text-xs text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:pointer-events-none disabled:opacity-50";
|
|
3
|
+
export declare const parameterRangeClass = "h-4 w-full min-w-0 flex-1 cursor-pointer accent-primary disabled:cursor-not-allowed disabled:opacity-50";
|
|
4
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/parameters/styles.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,mBAAmB,yOACwM,CAAC;AACzO,eAAO,MAAM,oBAAoB,2QACyO,CAAC;AAC3Q,eAAO,MAAM,mBAAmB,4GAC2E,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Class names shared by the parameter controls (the same as the React package's).
|
|
2
|
+
export const parameterInputClass = "h-7 w-full min-w-0 rounded-md border border-input bg-background px-2 text-xs text-foreground tabular-nums focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:cursor-not-allowed disabled:opacity-50";
|
|
3
|
+
export const parameterButtonClass = "inline-flex h-7 items-center justify-center gap-1 rounded-md border border-input bg-background px-2 text-xs text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:pointer-events-none disabled:opacity-50";
|
|
4
|
+
export const parameterRangeClass = "h-4 w-full min-w-0 flex-1 cursor-pointer accent-primary disabled:cursor-not-allowed disabled:opacity-50";
|