multi
mithril-ui-form
A powerful, declarative framework for creating accessible, high-performance forms in Mithril applications.
7 stars
How mithril-ui-form Compares
| Feature / Agent | mithril-ui-form | Standard Approach |
|---|---|---|
| Platform Support | multi | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
A powerful, declarative framework for creating accessible, high-performance forms in Mithril applications.
Which AI agents support this skill?
This skill is compatible with multi.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Mithril UI Form
`mithril-ui-form` is a powerful, declarative framework for creating accessible, high-performance forms in Mithril applications. It uses a JSON-based schema to dynamically generate forms with a wide range of features.
## Key Features
* **Object-based and array-based forms:** Support for editing single objects or collections of objects.
* **Rich component library:** Includes a variety of input types, such as text, textarea, select, checkbox, radio, date, time, and file uploads.
* **Conditional logic:** Show or hide form fields based on the values of other fields.
* **Validation:** Built-in support for required fields and custom validation rules.
* **Plugin system:** Extend the library with custom components and functionality.
* **Accessibility:** Full compliance with WCAG 2.1 AA standards.
## Core Components
The core library, `mithril-ui-form`, provides the main components for creating forms:
* `LayoutForm`: For creating forms that edit a single object.
* `ArrayLayoutForm`: For creating forms that edit a collection of objects.
## Plugin System
`mithril-ui-form` has a plugin system that allows you to extend its functionality with custom components. The `mithril-ui-form-plugin` package defines the plugin architecture.
Some example plugins include:
* `mithril-ui-form-leaflet-plugin`: Adds a Leaflet map component.
* `mithril-ui-form-rating-plugin`: Adds a star rating component.
## Form Field Examples
Here are some examples of the form fields you can create with `mithril-ui-form`.
### Automatic id generation
Automatically generate an `id` for a new object, only if it is undefined. You can also use `guid` if you need GUID. And instead of type "none", you can also set type "text" and disabled to true. Using type "none" will not show it.
```json
{ "id": "id", type: "none", "autogenerate": "id" }
```
### Text Input
For single-line text input.
```json
{
"id": "name",
"label": "Name",
"type": "text",
"required": true,
"maxLength": 50,
"placeholder": "Enter your full name"
}
```
Other useful types are `url`, `email`, and `password`.
### Text Area
For multi-line text input.
```json
{
"id": "description",
"label": "Description",
"type": "textarea",
"maxLength": 500,
"placeholder": "Enter a description"
}
```
### Number Input
For numeric input. Use `integer` for whole numbers.
```json
{
"id": "age",
"label": "Age",
"type": "number",
"min": 0,
"max": 120,
"required": true
}
```
### Date and Time
For date and time input. `date`, `time`, and `datetime` types are available.
```json
{
"id": "event_date",
"label": "Event Date",
"type": "datetime",
"required": true
}
```
### Color Picker
For selecting a color.
```json
{
"id": "theme_color",
"label": "Theme Color",
"type": "color"
}
```
### Select Dropdown
For selecting one or more options from a list.
```json
{
"id": "country",
"label": "Country",
"type": "select",
"options": [
{ "id": "us", "label": "United States" },
{ "id": "ca", "label": "Canada" },
{ "id": "mx", "label": "Mexico" }
]
}
```
### Radio Buttons
For selecting a single option from a set of choices.
```json
{
"id": "gender",
"label": "Gender",
"type": "radio",
"options": [
{ "id": "male", "label": "Male" },
{ "id": "female", "label": "Female" },
{ "id": "other", "label": "Other" }
]
}
```
### Checkboxes
For selecting multiple options.
```json
{
"id": "interests",
"label": "Interests",
"type": "checkbox",
"options": [
{ "id": "sports", "label": "Sports" },
{ "id": "music", "label": "Music" },
{ "id": "movies", "label": "Movies" }
]
}
```
### Switch
For a boolean toggle.
```json
{
"id": "notifications",
"label": "Enable Notifications",
"type": "switch"
}
```
### File Upload
For uploading files. The `base64` type can be used to store the file as a base64 string.
```json
{
"id": "avatar",
"label": "Avatar",
"type": "file",
"url": "/upload",
"options": [{ "id": "image/*" }]
}
```
### Tags Input
For creating a list of tags.
```json
{
"id": "tags",
"label": "Tags",
"type": "tags"
}
```
### Autocomplete
For a text input with suggestions.
```json
{
"id": "framework",
"label": "JS Framework",
"type": "autocomplete",
"options": [
{ "id": "react", "label": "React" },
{ "id": "vue", "label": "Vue" },
{ "id": "angular", "label": "Angular" }
]
}
```
### Rating
A star rating component (requires the `mithril-ui-form-rating-plugin`).
```json
{
"id": "satisfaction",
"label": "Satisfaction",
"type": "rating",
"min": 1,
"max": 5
}
```
### Map
For selecting a location on a map (requires the `mithril-ui-form-leaflet-plugin`).
```json
{
"id": "location",
"label": "Location",
"type": "map",
"required": true
}
```
### Markdown
For displaying static markdown content.
```json
{
"type": "md",
"value": "### Section Title\n\nThis is some informational text."
}
```
### Repeating Sections
To create a list of items, such as a list of editors.
```json
{
"id": "editors",
"label": "Editors",
"repeat": true,
"type": [
{ "id": "name", "label": "Name", "type": "text" },
{ "id": "role", "label": "Role", "type": "text" }
]
}
```
## Conditional Visibility
You can show or hide fields based on the values of other fields using the `show` property.
```json
{
"id": "is_company",
"label": "Are you a company?",
"type": "switch"
},
{
"id": "company_name",
"label": "Company Name",
"type": "text",
"show": "is_company"
}
```
This will only show the `company_name` field when the `is_company` switch is on. `show` can also be an array, using multiple properties, e.g. `["color=red", "optionId=4"]`.
## Getting Started
To get started with `mithril-ui-form`, you can use the example application provided in the `example` package.
### Installation
```bash
pnpm install
```
### Development
```bash
pnpm start
```
This will build all the packages and start a development server for the example application.