formio-sfds v0.0.0-fa5fb74
formio-sfds
This is a Form.io theme for the SF Design System.
👉 See DEVELOP.md for development documentation.
Table of contents
- Usage
- Custom components
- Form options
- Formio.createForm() improvements
- Localization
- Icons
- Declarative actions
Usage
There are a couple of different ways to use this package in your app:
- Standalone bundle (recommended)
- UMD bundle
- CommonJS (
require()) - CSS
Standalone bundle
This is the recommended import method. To use the standalone bundle, add a
single script tag to your document after the one for formio.js, e.g.
<script src="https://unpkg.com/formiojs/dist/formio.full.min.js"></script>
<script src="https://unpkg.com/formio-sfds/dist/formio-sfds.standalone.js"></script>The standalone bundle does a bunch of things automatically:
- Inlines the CSS in the
<head> - Calls
Formio.use(FormioSFDS) - Patches
Formio.createForm()so that any form created from then includes SFDS-specific enhancements
CSS
The CSS in this package provides a suite of styles that target a mix of Form.io-generated selectors, classes used in the custom theme templates, and a suite of general-purpose utility classes for tweaking individual elements.
Scoped CSS
All of the selectors in the packaged CSS are scoped to (nested in) a
.formio-sfds class selector, which effectively prevents them from leaking
into the page where the form is embedded.
Unless you're using the standalone bundle (which wraps
the form elements automatically), you'll need to wrap all of your the elements
targeted by Formio.createForm() with a <div class="formio-sfds">.
UMD bundle
The UMD bundle exports only the Formio theme as FormioSFDS, and does not
automatically patch Formio.createForm(). This may be your best option if
you're working in an environment with multiple forms on a single page, and/or
other Form.io themes.
First, load both the formiojs and formio-sfds bundles from your CDN of
choice (e.g. unpkg) and link to the CSS:
<script src="https://unpkg.com/formiojs/dist/formio.full.min.js"></script>
<script src="https://unpkg.com/formio-sfds/dist/formio-sfds.umd.js"></script>
<link rel="stylesheet" href="https://unpkg.com/formio-sfds/dist/formio-sfds.css">Then, either in a deferred script or on window load, tell Form.io to "use" the SFDS theme:
Formio.use(FormioSFDS)You'll need to do this before you call Formio.createForm() to ensure that the templates are registered before the form is built.
CommonJS
If you're using a CommonJS bundler like webpack, browserify, et al:
Install both
formiojsandformio-sfdsnpm packages:npm install formiojs formio-sfdsImport in your app:
const { Formio } = require('formiojs') const FormioSFDS = require('formio-sfds') Formio.use(FormioSFDS)
Custom components
addressfields are rendered as multiple text and number inputs with address lines (1 and 2), city, state and zip code.Fields with type
staterender an HTML<select>input with the 50 U.S. states.Fields with type
ziprender a ZIP code input field that validates against a 5-digit number or a ZIP+4 pattern (e.g.94110-1234).
Form options
This theme provides support from additional options by patching Formio.createForm():
data option
If provided, the data option will be passed along as the form's initial
submission. See also: the prefill option.
googleTranslate option
If googleTranslate is false, the notranslate class is added to the
form element wrapper to prevent Google Translate from touching it. This is
preferable (but not required!) when translations are provided via the
i18n option, since Google Translate will attempt to translate any element
that doesn't have the notranslate class, and may replace a human
translation with a machine translation.
hooks option
If the hooks option is an object, any value that isn't a function is
converted to a declarative action. See formiojs's
hooks documentation
for the list of available hooks.
i18n option
If the i18n option is a string, it's treated as a JSON URL from which to
load localizations (translations of form content and field info).
on option
Like hooks, the on object can be used to specify declarative
actions for any of formiojs's
known form events.
prefill option
The prefill option allows you to pre-fill form inputs with submission
data:
The value
querystringwill cause pre-fill values to be parsed fromwindow.location.search. E.g.?foo=barwill initialze the form submission as{foo: 'bar'}.The value
hashwill cause pre-fill values to be parsed fromwindow.location.hash(afer the leading#), so#foo=barwill initialize the form submission as{foo: 'bar'}.Otherwise, if
prefillis an instance of URLSearchParams, the form submission will be initialized using its entries.
formioSFDSOptOut option
Setting the formioSFDSOptOut option to true disables all of the
following customizations for your form:
Scoped style modifications. Note: template modifications can't be opted out because they're provided at the theme level, so you'll need to style the selectors generated by this theme's template, not the built-in ones!
Select components will not be rendered as plain old
<select>elements by default, and theautocompletetag will be ignored.Custom event handlers will not be registered.
The
prefilloption will be ignored.
Formio.createForm() improvements
Detects the form rendering language (locale) by looking for the closest element with a
langattribute.Select components are made to always use the
html5"widget", which is just an HTML<select>inputForm elements are wrapped automatically in
<div class="formio-sfds">, which allows the element itself to receive styles defined in the scoped CSS. This behavior can be disabled via theformioSFDSOptOutoption.
Localization
Localization of form field labels and descriptions can be implemented without
having to keep form.io and the English equivalent in sync with string IDs in
the format {key}_label (for field labels) and {key}_description (for field
descriptions). For example, given this translation spreadsheet:
| String | en | es |
|---|---|---|
homeAddress_label | Home address | Dirección de casa |
...a field with an API key of homeAddress will get the spreadsheet
value, regardless of the label's value in form.io.
The same rule applies for HTML content components, which can be overridden
using the {key}_content string ID.
Icons
SFDS icons are rendered with a selector
observer to inject SVG icons into
any element with a data-icon attribute, as in:
<span data-icon="next" aria-label="Next"></span>See the source for a full list of possible data-icon
attribute values.
Declarative actions
The hooks and on options allow you to customize form behaviors using a
limited vocabulary of "declarative" actions. Each key of these objects is
the name of a hook or event, and its value is an object with a single key
that corresponds to one of the following actions:
redirecttakes either a URL string or an object with aurlkey and redirects (by settingwindow.location) to the URL. Submission data values may be interpolated in the redirect URL as{key}, wherekeyis the API key of the form input. For example:{ "on": { "submit": { "redirect": "/confirm?username={username}" } } }validateWithServicepasses the submission data to an HTTP web service for validation. Theurlis the URL of the web service, and may contain form value interpolations (e.g.{username}expands toform.submission.data.username),methodtells it the HTTP verb (default:POST), andmessagesis an optional object containing custom messages for different types of errors, such as{empty: "error message if the response was empty"}. For instance, you might wish to validate a username field via an external service that would respond with an error if the provided username is already taken:{ "hooks": { "beforeSubmit": { "validateWithService": { "url": "https://some-validation-service.example.com/username/{username}" } } } }If the web service fails, or if it's successful and the response JSON has an
errorsorerrorkey, those are reported as errors and will abortbeforeSubmithooks.valuesvalidates submissions by comparing the value of the submission data with each key in thevaluesobject. For instance, to ensure that thefooform input has a value of"bar"before submission:{ "hooks": { "beforeSubmit": { "values": { "foo": "bar" } } } }
License: MIT
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago