Skeleton v3 RC1
Installation
Section titled “Installation”npm i @sjsf/basic-theme@next @sjsf/skeleton-theme@next
yarn add @sjsf/basic-theme@next @sjsf/skeleton-theme@next
pnpm add @sjsf/basic-theme@next @sjsf/skeleton-theme@next
bun add @sjsf/basic-theme@next @sjsf/skeleton-theme@next
Install Skeleton
Section titled “Install Skeleton”SvelteKit - Skeleton
Setup styles
Section titled “Setup styles”There is two ways to setup styles:
- Use tailwindcss config
import { skeleton } from '@skeletonlabs/skeleton/plugin';import * as themes from '@skeletonlabs/skeleton/themes';import forms from '@tailwindcss/forms'import { THEME_CONTENT } from '@sjsf/skeleton-theme/preset'
/** @type {import('tailwindcss').Config} */export default { content: ['./src/**/*.{html,js,svelte,ts}', THEME_CONTENT], plugins: [ forms, skeleton({ themes: [/* themes.something */], }) ],}
- Inject prepared styles (not recommended)
// Inject them as you likeimport daisyStyles from "@sjsf/skeleton-theme/styles.css?inline";
Bundled themes:
cerberus
catppuccin
pine
rose
Extra widgets
Section titled “Extra widgets”checkboxes
date-picker
file
multi-select
radio
range
textarea
UI options
Section titled “UI options”import type { HTMLAttributes, HTMLButtonAttributes, HTMLFormAttributes, HTMLInputAttributes, HTMLLabelAttributes, HTMLSelectAttributes, HTMLTextareaAttributes,} from "svelte/elements";import type { ButtonType, LayoutType } from "@sjsf/form/fields/components";
export interface UiOptions { /** * Overrides the attributes of any button component. */ button?: HTMLButtonAttributes; /** * Overrides the attributes of a button with a specific type. * This override takes precedence over the `button` override, but does not replace it. */ buttons?: { [B in ButtonType]?: HTMLButtonAttributes; }; /** * Overrides the attributes of the description. */ descriptionAttributes?: HTMLAttributes<HTMLDivElement>; /** * Overrides the attributes of the errors list. */ errorsList?: HTMLAttributes<HTMLUListElement>;
form?: HTMLFormAttributes; /** * Overrides the attributes of the help. */ helpAttributes?: HTMLAttributes<HTMLDivElement>; /** * Overrides the attributes of the field label. */ labelAttributes?: HTMLLabelAttributes; /** * Overrides the attributes of any layout component. */ layout?: HTMLAttributes<HTMLDivElement>; /** * Overrides the attributes of a layout with a specific type. * This override takes precedence over the `layout` override, but does not replace it. */ layouts?: { [L in LayoutType]?: HTMLAttributes<HTMLDivElement>; }; submitButton?: HTMLButtonAttributes; /** * Overrides the attributes of the field title */ titleAttributes?: HTMLAttributes<HTMLDivElement>;
checkbox?: HTMLInputAttributes;
number?: HTMLInputAttributes;
select?: HTMLSelectAttributes;
text?: HTMLInputAttributes;
checkboxes?: HTMLInputAttributes;
datePicker?: HTMLInputAttributes;
file?: HTMLInputAttributes;
multiSelect?: HTMLSelectAttributes;
radio?: HTMLInputAttributes;
range?: HTMLInputAttributes;
textarea?: HTMLTextareaAttributes;}
Widgets demo
Section titled “Widgets demo”{ "type": "object", "properties": { "checkbox": { "type": "object", "properties": { "default": { "type": "boolean" }, "error": { "type": "boolean" } } }, "checkboxes": { "type": "object", "properties": { "default": { "type": "array", "items": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] }, "uniqueItems": true }, "error": { "type": "array", "items": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] }, "uniqueItems": true } } }, "file": { "type": "object", "properties": { "default": { "type": "string", "format": "data-url" }, "error": { "type": "string", "format": "data-url" } } }, "multiFile": { "type": "object", "properties": { "default": { "type": "array", "items": { "type": "string", "format": "data-url" } }, "error": { "type": "array", "items": { "type": "string", "format": "data-url" } } } }, "number": { "type": "object", "properties": { "default": { "type": "number" }, "error": { "type": "number" } } }, "select": { "type": "object", "properties": { "default": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] }, "error": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] } } }, "text": { "type": "object", "properties": { "default": { "type": "string" }, "error": { "type": "string" } } }, "datePicker": { "type": "object", "properties": { "default": { "type": "string" }, "error": { "type": "string" } } }, "multiSelect": { "type": "object", "properties": { "default": { "type": "array", "items": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] }, "uniqueItems": true }, "error": { "type": "array", "items": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] }, "uniqueItems": true } } }, "radio": { "type": "object", "properties": { "default": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] }, "error": { "type": "string", "enum": [ "foo", "bar", "fuzz", "qux" ] } } }, "range": { "type": "object", "properties": { "default": { "type": "number" }, "error": { "type": "number" } } }, "textarea": { "type": "object", "properties": { "default": { "type": "string" }, "error": { "type": "string" } } } }}
{ "checkbox": { "default": {}, "error": {} }, "checkboxes": { "default": {}, "error": {} }, "file": { "default": {}, "error": {} }, "multiFile": { "default": {}, "error": {} }, "number": { "default": {}, "error": {} }, "select": { "default": {}, "error": {} }, "text": { "default": {}, "error": {} }, "datePicker": { "default": { "ui:components": { "textWidget": "datePickerWidget" } }, "error": { "ui:components": { "textWidget": "datePickerWidget" } } }, "multiSelect": { "default": { "ui:components": { "checkboxesWidget": "multiSelectWidget" } }, "error": { "ui:components": { "checkboxesWidget": "multiSelectWidget" } } }, "radio": { "default": { "ui:components": { "selectWidget": "radioWidget" } }, "error": { "ui:components": { "selectWidget": "radioWidget" } } }, "range": { "default": { "ui:components": { "numberWidget": "rangeWidget" } }, "error": { "ui:components": { "numberWidget": "rangeWidget" } } }, "textarea": { "default": { "ui:components": { "textWidget": "textareaWidget" } }, "error": { "ui:components": { "textWidget": "textareaWidget" } } }}