{#if element.type === 'text' || element.type === 'data'} {:else if element.type === 'svelte'} {:else if element.type === 'shape'} {:else if element.type === 'icon'} {:else if element.type === 'repeater'} {:else if element.type === 'gauge'} {:else if element.type === 'ticker'} {:else if element.type === 'lottie'} {:else if element.type === 'button'} {:else if element.type === 'path'} {:else if element.type === 'particles'} {:else if element.type === 'clock'} {:else if element.type === 'countdown'} {:else if element.type === 'widget'} {#if element.widget === 'avatar'} {:else} {/if} {:else} {/if}

{element.type} layer

{element.id}

(element.name = (event.currentTarget as HTMLInputElement).value)} />
{Math.round((element.opacity ?? 1) * 100)}%
(element.opacity = value)} />
Object.assign(element, patch)} />
(element.hidden = checked === true)} />
(element.locked = checked === true)} />
(element.interactive = checked === true)} />
{ if (parentGroupMorphs) { element.morph = checked === true ? true : false; } else { element.morph = checked === true; } }} /> {#if parentGroupMorphs && element.morph !== false} (group) {/if} {#if parentGroupMorphs && element.morph !== undefined} {/if}
{#if element.morph === true || (element.morph !== false && parentGroupMorphs)}
{element.morphDuration ?? (parentGroupMorphDuration || 400)}ms
{ const val = Number((event.currentTarget as HTMLInputElement).value); element.morphDuration = Number.isFinite(val) && val > 0 ? val : 400; }} />
{/if}
(element.cssClasses = value)} /> {#if element.type === 'text' || element.type === 'data'} {#if element.type === 'data'}
{ if (value) element.field = value as typeof element.field; }} > {currentFieldLabel} {#each THEME_DATA_FIELDS as field (field.value)} {/each}
Selected Value ({currentFieldLabel}) {#if currentRawValue && currentRawValue.trim() !== ''} Live value {:else if element.defaultValue && element.defaultValue.trim() !== ''} Default {:else if currentSampleValue} Sample preview {:else} Empty {/if}
{previewDisplayValue ? previewDisplayValue : '(empty)'} {#if !currentRawValue && (!element.defaultValue || element.defaultValue.trim() === '') && currentSampleValue} (sample preview) {:else if !currentRawValue && element.defaultValue} (using default) {/if}
{#if element.field.startsWith('user.') && element.field !== 'user.name' && element.field !== 'user.country'}
{ if (value) element.mode = value as typeof element.mode; }} > {element.mode ?? 'osu'}
{/if}

{value} is replaced with the live value. Rule variables such as {score} still work too.

Fallback value used when the data is empty or unavailable (such as when logged out).

Result Preview
{previewResult || '(empty)'}
{:else}