<script lang="ts"> import { createEventDispatcher } from "svelte"; export let type: string; // Setting Type export let title: string; // Displayint Setting Title export let text: string; // Displaying Setting Text export let settingKey: string; export let settingValue: any; //Optional export let placeholder: string = ""; // Use it if type is input export let options: { [key: string]: string } = {}; // Use it if type is select export let slider: { min: number; max: number; step: number; } = {min: 0, max: 100, step: 1}; // Use it if type is slider const dispatch = createEventDispatcher(); function clicked() { dispatch("clicked"); } function changed() { dispatch("changed", { key: settingKey, value: settingValue }); } </script> <label class="fn__flex b3-label"> <div class="fn__flex-1"> {title} <div class="b3-label__text"> {text} </div> </div> <span class="fn__space" /> <!-- <slot /> --> {#if type === "checkbox"} <!-- Checkbox --> <input class="b3-switch fn__flex-center" id={settingKey} type="checkbox" bind:checked={settingValue} on:change={changed} /> {:else if type === "input"} <!-- Text Input --> <input class="b3-text-field fn__flex-center fn__size200" id={settingKey} {placeholder} bind:value={settingValue} on:change={changed} /> {:else if type === "button"} <!-- Button Input --> <button class="b3-button b3-button--outline fn__flex-center fn__size200" id={settingKey} on:click={clicked} > {settingValue} </button> {:else if type === "select"} <!-- Dropdown select --> <select class="b3-select fn__flex-center fn__size200" id="iconPosition" bind:value={settingValue} on:change={changed} > {#each Object.entries(options) as [value, text]} <option {value}>{text}</option> {/each} </select> {:else if type == "slider"} <!-- Slider --> <input class="b3-slider fn__size200" id="fontSize" min="{slider.min}" max="{slider.max}" step="{slider.step}" type="range" bind:value={settingValue} on:change={changed} /> {/if} </label>