UNPKG

svelte-settings

Version:

> [!WARNING] > This project is a work in progress. Do not use it in any of your projects yet.

71 lines (70 loc) 2.58 kB
import BasicPageRenderer from './components/pages/BasicPageRenderer.svelte'; import ChangelogPage from './components/pages/ChangelogPage.svelte'; import ListSettingPage from './components/pages/ListSettingPage.svelte'; import BasicItemRenderer from './components/items/BasicItemRenderer.svelte'; import ActionItem from './components/items/ActionItem.svelte'; import DescriptionItem from './components/items/DescriptionItem.svelte'; import PageItem from './components/items/PageItem.svelte'; import NotImplementedItem from './components/items/NotImplementedItem.svelte'; import ValueDisplayItem from './components/items/ValueDisplayItem.svelte'; import GroupWrapper from './components/wrappers/GroupWrapper.svelte'; import BooleanInput from './components/inputs/BooleanInput.svelte'; import SelectInput from './components/inputs/SelectInput.svelte'; import NumberInput from './components/inputs/NumberInput.svelte'; import MultiSelectInput from './components/inputs/MultiSelectInput.svelte'; import MultiSelectReorderInput from './components/inputs/MultiSelectReorderInput.svelte'; import TextInput from './components/inputs/TextInput.svelte'; // TODO: consider making this a real one-source-of-truth registry, where each component is registered, e.g. // { key: 'changelog', type: 'page', component: ChangelogPage } const inputs = { select: SelectInput, multiselect: MultiSelectInput, 'multiselect-reorder': MultiSelectReorderInput, boolean: BooleanInput, number: NumberInput, text: TextInput, }; export function getInputComponent(type) { return inputs[type]; } export function isInput(item) { return item.type in inputs; } const pages = { changelog: ChangelogPage, list: ListSettingPage, page: BasicPageRenderer, }; export function getPageComponent(type) { return pages[type]; } export function isPage(item) { return item.type in pages; } const items = { action: ActionItem, description: DescriptionItem, value: ValueDisplayItem, 'not-implemented': NotImplementedItem, }; export function getItemComponent(item) { if (isPage(item)) return PageItem; if (isInput(item)) return BasicItemRenderer; if (isItem(item)) return items[item.type]; if (isWrapper(item)) return wrappers[item.type]; console.error('Settings item with unknown type: ', item); return NotImplementedItem; } export function isItem(item) { return item.type in items; } const wrappers = { group: GroupWrapper, }; export function isWrapper(item) { return item.type in wrappers; }