The official FormKit core library. This package is responsible for most of FormKit’s internal functionality. You can read documentation specifically on how it works at formkit.com.
You can add this package by using npm install @formkit/core
or yarn add @formkit/core
.
FormKit's Node object produced by createNode(). Every <FormKit />
input has 1 FormKitNode ("core node") associated with it. All inputs, forms, and groups are instances of nodes. Read more about core nodes in the architecture
documentation.
Add a child to a node. The node must be a group or list.
add: (node: FormKitNode, index?: number) => FormKitNode
The added FormKitNode.
The address of the current node from the root of the tree.
address: FormKitAddress
Adds props to the given node by removing them from node.props.attrs and moving them to the top-level node.props object.
addProps: (props: string[]) => FormKitNode
props
— An array of strings to be added as keys for props.The FormKitNode.
Gets a node at another address. Addresses are dot-syntax paths (or arrays) of node names. For example: form.users.0.first_name
. There are a few "special" traversal tokens as well:
$root
— Selects the root node.$parent
— Selects the parent node.$self
— Selects the current node.at: (address: FormKitAddress | string) => FormKitNode | undefined
address
— An valid string or FormKitAddress.The found FormKitNode or undefined
.
An array of child nodes (groups and lists).
children: Array<FormKitNode>
An array of FormKitNode.
Clears the errors of the node, and optionally all the children.
clearErrors: (clearChildren?: boolean, sourceKey?: string) => FormKitNode
clearChildren
optional — If it should clear the children.sourceKey
optional — A source key to use for reset.The FormKitNode.
An object of FormKitConfig that is shared tree -wide with various configuration options that should be applied to the entire tree.
config: FormKitConfig
Defines the current input's library type definition including node type, schema, and props.
define: (definition: FormKitTypeDefinition) => void
definition
— A FormKitTypeDefinition.Removes the node from the global registry, its parent, and emits the 'destroying' event.
destroy: () => void
Perform given callback on each of the given node's children.
each: (callback: FormKitChildCallback) => void
callback
— A FormKitChildCallback to be called for each child.Emit an event from the node so it can be listened by on.
emit: (event: string, payload?: any, bubble?: boolean, meta: Record<string, unknown>) => FormKitNode
event
— The event name to be emitted.payload
optional — A value to be passed together with the event.bubble
optional — If the event should bubble to the parent.The FormKitNode.
Extend a FormKitNode by adding arbitrary properties that are accessible via node.{property}()
.
extend: (property: string, trap: FormKitTrap) => FormKitNode
property
— The property to add the core node (node.{property}
).trap
— An object with a get and set property.The FormKitNode.
Within a given tree, find a node matching a given selector. Selectors can be simple strings or a function.
find: (
selector: string,
searcher?: keyof FormKitNode | FormKitSearchFunction
) => FormKitNode | undefined
selector
— A selector string.searcher
optional — A keyof FormKitNode or FormKitSearchFunction.The found FormKitNode or undefined
.
Set of hooks.
hook: FormKitHooks
The FormKitHooks.
The index of a node compared to its siblings. This is only applicable in cases where a node is a child of a list.
index: number
A number
.
The function used to set the value of a node. All changes to a node's value should use this function as it ensures the tree's state is always fully tracked.
input: (value: unknown, async?: boolean) => Promise<unknown>
value
— Any value to used for the node.async
optional — If the input should happen asynchronously.A Promise<unknown>
.
Begins as false, set to true when the node is finished being created.
isCreated: boolean
A boolean
.
Boolean reflecting the settlement state of the node and its subtree.
isSettled: boolean
A boolean
.
A counting ledger for arbitrary message counters.
ledger: FormKitLedger
The name of the input in the node tree. When a node is a child of a list, this automatically becomes its index.
name: string
A string
.
Removes an event listener by its token. Receipts can be shared among many event listeners by explicitly declaring the "receipt" property of the listener function.
off: (receipt: string) => FormKitNode
receipt
— A receipt generated by the on
function.A receipt string
.
Adds an event listener for a given event, and returns a "receipt" which is a random string token. This token should be used to remove the listener in the future. Alternatively you can assign a "receipt" property to the listener function and that receipt will be used instead. This allows multiple listeners to all be de-registered with a single off() call if they share the same receipt.
on: (eventName: string, listener: FormKitEventListener) => string
eventName
— The event name to listen to.listener
— A FormKitEventListener to run when the event happens.A receipt string
.
The parent of a node.
parent: FormKitNode | null
If found a FormKitNode or null
.
An proxied object of props. These are typically provided by the adapter of choice.
props: Partial<FormKitProps>
An optional list of FormKitProps.
Removes a child from the node.
remove: (node: FormKitNode) => FormKitNode
node
— A FormKitNode to be removed.The FormKitNode.
Resets the node’s value back to its original value.
reset: () => FormKitNode
The FormKitNode.
Retrieves the root node of a tree. This is accomplished via tree-traversal on-request, and as such should not be used in frequently called functions.
root: FormKitNode
The FormKitNode.
Sets errors on the input, and optionally to child inputs.
setErrors: (localErrors: ErrorMessages, childErrors?: ErrorMessages) => void
localErrors
— A ErrorMessages to be used.childErrors
optional — A ErrorMessages to be used for children.A promise that resolves when a node and its entire subtree is settled. In other words — all the inputs are done committing their values.
settled: Promise<unknown>
A Promise<unknown>
.
The internal node store.
store: FormKitStore
A FormKitStore.
Triggers a submit event on the nearest form.
submit: () => void
A text or translation function that exposes a given string to the "text" hook. All text shown to users should be passed through this function before being displayed — especially for core and plugin authors.
t: (key: string | FormKitTextFragment) => string
key
— A key or a FormKitTextFragment to find the translation for.The translated string
.
The type of node, should only be 'input', 'list', or 'group'.
type: FormKitNodeType
Registers a new plugin on the node and its subtree.
use: (
plugin: FormKitPlugin | FormKitPlugin[] | Set<FormKitPlugin>,
run?: boolean,
library?: boolean
) => FormKitNode
plugin
— A FormKitPlugin or an Array or Set of FormKitPlugin.run
optional — Should the plugin be executed on creation.library
optional — Should the plugin's library function be executed on creation.The FormKitNode.
The value of the input. This should never be directly modified. Any desired mutations should be made through input.
readonly value: unknown
Performs a function on every node in its subtree (but not the node itself). This is an expensive operation so it should be done very rarely and only lifecycle events that are relatively rare like boot up and shut down.
walk: (callback: FormKitChildCallback, stopOnFalse?: boolean, recurseOnFalse?: boolean) => void
callback
— A FormKitChildCallback to be executed for each child.stopOnFalse
optional — If it should stop when the return is false.Perform a breadth-first search on a node subtree and locate the first instance of a match.
bfs(tree: FormKitNode, searchValue: string | number, searchGoal?: keyof FormKitNode | FormKitSearchFunction): FormKitNode | undefined;
tree
— A FormKitNode to start from.searchValue
— A value to be searched.searchGoal
optional — A goal value.A FormKitNode or undefined
.
Clears errors on the node and optionally its children.
clearErrors(id: string, clearChildren?: boolean): void;
id
— The id of the node you want to clear errors for.clearChildren
optional — Determines if the children of this node should have their errors cleared.Compiles a logical string like "a != z || b == c"
into a single function. The return value is an object with a "provide" method that iterates over all requirement tokens to use as replacements.
compile(expr: string): FormKitCompilerOutput;
expr
— A string to compile.let name = {
value: 'jon'
}
const condition = compile("$name == 'bob'").provide((token) => {
return () => name.value // must return a function!
})
condition() // false
Function that produces a standardized object representation of CSS classes.
createClasses(propertyKey: string, node: FormKitNode, sectionClassList?: FormKitClasses | string | Record<string, boolean>): Record<string, boolean>;
propertyKey
— the section key.node
— A FormKitNode.sectionClassList
optional — A string | Record<string, boolean>
or a FormKitClasses.Record<string, boolean>
Creates a new instance of a global configuration option. This object is essentially just a FormKitOption object, but it can be used as the root for FormKitConfig's proxy and retain event "emitting".
createConfig(options?: Partial<FormKitConfig>): FormKitRootConfig;
options
optional — An object of optional properties of FormKitConfig.Creates a new FormKitMessage object.
createMessage(conf: Partial<FormKitMessage>, node?: FormKitNode): FormKitMessageProps;
conf
— An object of optional properties of FormKitMessage.node
optional — A FormKitNode.Creates a new instance of a FormKit Node. Nodes are the atomic unit of a FormKit graph.
createNode<V = unknown>(options?: FormKitOptions): FormKitNode<V>;
options
optional — An options object of FormKitOptions to override the defaults.A FormKitNode.
import { createNode } from '@formkit/core'
const input = createNode({
type: 'input', // defaults to 'input' if not specified
value: 'hello node world',
})
console.log(input.value)
// 'hello node world'
Creates the initial value for a node based on the options passed in and the type of the input.
createValue(options: FormKitOptions): unknown;
options
— A FormKitOptions.unknown
Deregister a node from the registry.
deregister(node: FormKitNode): void;
node
— A FormKitNode.Emits an error. Generally should result in an exception.
error(code: number, data?: any): never;
code
— The integer error code.data
optional — Usually an object of information to include.Combines multiple class lists into a single list.
generateClassList(node: FormKitNode, property: string, ...args: Record<string, boolean>[]): string | null;
node
— A FormKitNode.property
— The property key to which the class list will be applied.args
— And array of Record<string, boolean>
of CSS class list(s).string | null
Get a node by a particular id.
getNode(id: string): FormKitNode | undefined;
id
— Get a node by a given id.A FormKitNode or undefined
.
Type narrow that a node is a DOM node.
isComponent(node: string | Record<PropertyKey, any>): node is FormKitSchemaComponent;
node
— A schema node to check.boolean
Determines if a node is conditionally rendered or not.
isConditional(node: FormKitSchemaNode): node is FormKitSchemaCondition;
isConditional(node: FormKitSchemaAttributesCondition | FormKitSchemaAttributes): node is FormKitSchemaAttributesCondition;
node
— A schema node to check.boolean
Type narrow that a node is a DOM node.
isDOM(node: string | Record<PropertyKey, any>): node is FormKitSchemaDOMNode;
node
— A schema node to checkboolean
A simple type guard to determine if the context being evaluated is a list type.
isList(arg: FormKitContextShape): arg is FormKitListContext;
arg
— A FormKitContextShape.Returns a boolean
.
Determine if a given object is a node.
isNode(node: any): node is FormKitNode;
node
— Any value.Returns a boolean
.
import { isNode, createNode } from '@formkit/core'
const input = createNode({
type: 'input', // defaults to 'input' if not specified
value: 'hello node world',
})
const obj = {};
isNode(obj)
// false
isNode(input)
// true
Determines if a node is a placeholder node.
isPlaceholder(node: FormKitNode | FormKitPlaceholderNode): node is FormKitPlaceholderNode;
node
— A FormKitNodeDetermines if the node is syntactic sugar or not.
isSugar(node: FormKitSchemaNode): node is FormKitSchemaFormKit;
node
— A schema node to check.boolean
Create a name-based dictionary of all children in an array.
names(children: FormKitNode[]): {
[index: string]: FormKitNode;
};
children
— An array of FormKitNode.A dictionary of named FormKitNode.
Registers a node to the registry if the node is a root node, or if the node has an explicit node.props.alias. If these two things are not true, then no node is registered (idempotent).
register(node: FormKitNode): void;
node
— A FormKitNode.Resets an input to its "initial" value. If the input is a group or list it resets all the children as well.
reset(id: string | FormKitNode, resetTo?: unknown): FormKitNode | undefined;
id
— The id of an input to reset.resetTo
optional — A value to reset the node to.A FormKitNode or undefined
.
Resets the global number of node registrations, useful for deterministic node naming.
resetCount(): void;
Resets the entire registry. Deregisters all nodes and removes all listeners.
resetRegistry(): void;
Sets errors on a form, group, or input.
setErrors(id: string, localErrors: ErrorMessages, childErrors?: ErrorMessages): void;
id
— The id of a form.localErrors
— The errors to set on the form or the form’s inputs in the format of ErrorMessages.childErrors
optional — (optional) The errors to set on the form or the form’s inputs in the format of ErrorMessages.Submits a FormKit form programmatically.
submitForm(id: string): void;
id
— The id of the form.Converts syntactic sugar nodes to standard nodes.
sugar<T extends FormKitSchemaNode>(node: T): Exclude<FormKitSchemaNode, string | FormKitSchemaFormKit>;
node
— A node to covert.A FormKitSchemaNode without the properties of FormKitSchemaFormKit.
Globally emits a warning.
warn(code: number, data?: any): void;
code
— The integer warning code.data
optional — Usually an object of information to include.A way of watching changes in the global registry.
watchRegistry(id: string, callback: FormKitEventListener): void;
id
— A dot
-syntax id where the node is located.callback
— A callback in the format of FormKitEventListener to notify when the node is set or removed.The callback type for node.each().
interface FormKitChildCallback {
(child: FormKitNode): any;
}
A descriptor of a child value, generally passed up a node tree.
interface FormKitChildValue {
from?: number | symbol;
name: string | number | symbol;
value: any;
}
Definition for a function that produces CSS classes.
interface FormKitClasses {
(node: FormKitNode, sectionKey: string): string | Record<string, boolean>;
}
The compiler output, a function that adds the required tokens.
interface FormKitCompilerOutput {
(tokens?: Record<string, any>): boolean | number | string;
provide: FormKitCompilerProvider;
}
General "app" like configuration options, these are automatically inherited by all children — they are not reactive.
interface FormKitConfig {
[index: string]: any;
classes?: Record<string, FormKitClasses | string | Record<string, boolean>>;
delimiter: string;
rootClasses: ((sectionKey: string, node: FormKitNode) => Record<string, boolean>) | false;
rootConfig?: FormKitRootConfig;
}
The interface of a FormKit node's context object. A FormKit node is a proxy of this object.
interface FormKitContext {
_d: number;
_e: FormKitEventEmitter;
_resolve: ((value: unknown) => void) | false;
_tmo: number | false;
_value: unknown;
children: Array<FormKitNode | FormKitPlaceholderNode>;
config: FormKitConfig;
context?: FormKitFrameworkContext;
hook: FormKitHooks;
isCreated: boolean;
isSettled: boolean;
ledger: FormKitLedger;
name: string | symbol;
parent: FormKitNode | null;
plugins: Set<FormKitPlugin>;
props: Partial<FormKitProps>;
settled: Promise<unknown>;
store: FormKitStore;
sync: boolean;
traps: FormKitTraps;
type: FormKitNodeType;
uid: symbol;
value: unknown;
}
Define the most basic shape of a context object for type guards trying to reason about a context's value.
interface FormKitContextShape {
_value: unknown;
type: FormKitNodeType;
value: unknown;
}
The counter object used to perform instance counting within a tree.
interface FormKitCounter {
condition: FormKitCounterCondition;
count: number;
name: string;
node: FormKitNode;
promise: Promise<void>;
resolve: () => void;
}
Ledger counters require a condition function that determines if a given message applies to it or not.
interface FormKitCounterCondition {
(message: FormKitMessage): boolean;
}
The FormKitDispatcher interface is responsible creating/running "hooks".
interface FormKitDispatcher<T> {
(dispatchable: FormKitMiddleware<T>): number;
dispatch: (payload: T) => T;
remove: (dispatchable: FormKitMiddleware<T>) => void;
unshift: (dispatchable: FormKitMiddleware<T>) => number;
}
The internal structure of a FormKitEvent.
interface FormKitEvent {
bubble: boolean;
meta?: Record<string, unknown>;
name: string;
origin: FormKitNode;
payload: any;
}
The FormKitEventEmitter definition.
interface FormKitEventEmitter {
(node: FormKitNode, event: FormKitEvent): void;
flush: () => void;
off: (receipt: string) => void;
on: (eventName: string, listener: FormKitEventListener) => string;
pause: (node?: FormKitNode) => void;
play: (node?: FormKitNode) => void;
}
Event listener functions definition.
interface FormKitEventListener {
(event: FormKitEvent): void;
receipt?: string;
}
Defines a function that allows selectively overriding a given schema.
interface FormKitExtendableSchemaRoot {
(extensions: Record<string, Partial<FormKitSchemaNode> | FormKitSchemaCondition>): FormKitSchemaDefinition;
memoKey?: string;
}
Context object to be created by and used by each respective UI framework. No values are created or output by FormKitCore, but this interface should be followed by each respective plugin.
interface FormKitFrameworkContext<T = any> {
__root?: Document | ShadowRoot;
_value: T;
[index: string]: unknown;
attrs: Record<string, any>;
classes: Record<string, string>;
defaultMessagePlacement: boolean;
fns: Record<string, (...args: any[]) => any>;
handlers:{
blur: () => void;
touch: () => void;
DOMInput: (e: Event) => void;
}&Record<string, (...args: any[]) => void>;
help?: string;
id: string;
items: symbol[];
label?: string;
messages: Record<string, FormKitMessage>;
node: FormKitNode;
options?: Array<Record<string, any>&{
label: string;
value: any;
}>;
slots: Record<string, CallableFunction>;
state: FormKitFrameworkContextState;
type: string;
value: T;
}
The state inside a node’s framework context. Usually used to track things like blurred and validity states.
interface FormKitFrameworkContextState {
[index: string]: boolean;
blurred: boolean;
complete: boolean;
dirty: boolean;
errors: boolean;
rules: boolean;
settled: boolean;
submitted: boolean;
valid: boolean;
validationVisible: boolean;
}
FormKit inputs of type 'group' must have keyed values by default.
interface FormKitGroupValue {
__init?: boolean;
[index: string]: unknown;
}
Describes the data passing through the error and warning handlers.
interface FormKitHandlerPayload {
code: number;
data: any;
message?: string;
}
The available hooks for middleware.
interface FormKitHooks {
classes: FormKitDispatcher<{
property: string;
classes: Record<string, boolean>;
}>;
commit: FormKitDispatcher<any>;
error: FormKitDispatcher<string>;
init: FormKitDispatcher<FormKitNode>;
input: FormKitDispatcher<any>;
message: FormKitDispatcher<FormKitMessage>;
prop: FormKitDispatcher<{
prop: string | symbol;
value: any;
}>;
schema: FormKitDispatcher<FormKitSchemaNode[] | FormKitSchemaCondition>;
setErrors: FormKitDispatcher<{
localErrors: ErrorMessages;
childErrors?: ErrorMessages;
}>;
submit: FormKitDispatcher<Record<string, any>>;
text: FormKitDispatcher<FormKitTextFragment>;
}
A registry of input messages that should be applied to children of the node they are passed to — where the string key of the object is the address of the node to apply the messages on and the value is the message itself.
interface FormKitInputMessages {
[address: string]: FormKitMessage[];
}
The FormKit ledger, a general-purpose message counting service provided by FormKit core for counting messages throughout a tree.
interface FormKitLedger {
count: (name: string, condition?: FormKitCounterCondition, increment?: number) => Promise<void>;
init: (node: FormKitNode) => void;
merge: (child: FormKitNode) => void;
settled: (name: string) => Promise<void>;
unmerge: (child: FormKitNode) => void;
value: (name: string) => number;
}
A library of inputs, keyed by the name of the type.
interface FormKitLibrary {
[index: string]: FormKitTypeDefinition;
}
The simplest definition for a context of type "list".
interface FormKitListContext {
_value: FormKitListContextValue;
type:'list';
value: FormKitListContextValue;
}
Messages have can have any arbitrary meta data attached to them.
interface FormKitMessageMeta {
[index: string]: any;
i18nArgs?: any[];
messageKey?: string;
}
The structure of a core FormKitMessage. These messages are used to store information about the state of a node.
interface FormKitMessageProps {
blocking: boolean;
key: string;
meta: FormKitMessageMeta;
type: string;
value?: string | number | boolean;
visible: boolean;
}
Defines the actual store of messages.
interface FormKitMessageStore {
[index: string]: FormKitMessage;
}
An empty interface for adding FormKit node extensions.
interface FormKitNodeExtensions {
}
A faux node that is used as a placeholder in the children node array during various node manipulations.
interface FormKitPlaceholderNode<V = unknown> {
__FKP: true;
_value: V;
input: (value: unknown, async?: boolean) => Promise<unknown>;
isSettled: boolean;
name: string;
type: FormKitNodeType;
uid: symbol;
use: (...args: any[]) => void;
value: V;
}
The base interface definition for a FormKitPlugin. It's just a function that accepts a node argument.
interface FormKitPlugin {
(node: FormKitNode): false | any | void;
library?: (node: FormKitNode) => void;
}
Conditions nested inside attribute declarations.
interface FormKitSchemaAttributesCondition {
else?: FormKitAttributeValue;
if: string;
then: FormKitAttributeValue;
}
Definition for a function that can extend a given schema node.
interface FormKitSchemaComposable {
(extendWith?: Partial<FormKitSchemaNode>, children?: string | FormKitSchemaNode[] | FormKitSchemaCondition, ...args: any[]): FormKitSchemaNode;
}
The context that is passed from one schema render to the next.
interface FormKitSchemaContext {
__FK_SCP: Map<symbol, Record<string, any>>;
[index: string]: any;
}
Properties available in all schema nodes.
interface FormKitSchemaProps {
bind?: string;
children?: string | FormKitSchemaNode[] | FormKitSchemaCondition;
for?: FormKitListStatement;
if?: string;
key?: string;
meta?: FormKitSchemaMeta;
}
The available traps on the FormKit store.
interface FormKitStoreTraps {
apply: (messages: Array<FormKitMessage> | FormKitInputMessages, clear?: MessageClearer) => void;
filter: (callback: (message: FormKitMessage) => boolean, type?: string) => FormKitStore;
reduce:<T>(reducer: (accumulator: T, message: FormKitMessage) => T, accumulator: T) => T;
release: () => void;
remove: (key: string) => FormKitStore;
set: (message: FormKitMessageProps) => FormKitStore;
touch: () => void;
}
The definition of a FormKitTrap. These are somewhat like methods on each FormKitNode. They are always symmetrical (get/set) — although it's acceptable for either to throw an Exception.
interface FormKitTrap {
get: TrapGetter;
set: TrapSetter;
}
Arbitrary data that has properties. Could be a POJO, could be an array.
interface KeyedValue {
[index: number]: any;
[index: string]: any;
}
Child messages that were not immediately applied due to the child not existing.
export type ChildMessageBuffer = Map<string, Array<[FormKitMessage[], MessageClearer | undefined]>>;
Error messages.
export type ErrorMessages = string | string[] | Record<string, string | string[]>;
Describes the path to a particular node from the top of the tree.
export type FormKitAddress = Array<string | number>;
The possible value types of attributes (in the schema).
export type FormKitAttributeValue = string | number | boolean | undefined | FormKitSchemaAttributes | FormKitSchemaAttributesCondition;
A function that accepts a callback with a token as the only argument, and must return a function that provides the true value of the token.
export type FormKitCompilerProvider = (callback: (requirements: string[]) => Record<string, () => any>) => FormKitCompilerOutput;
FormKit inputs of type 'list' must have array values by default.
export type FormKitListContextValue<T = any> = Array<T>;
A full loop statement in tuple syntax. Can be read like "foreach value, key? in list".
export type FormKitListStatement = [value: any, key: number | string, list: FormKitListValue] | [value: any, list: FormKitListValue];
The value being listed out. Can be an array, an object, or a number.
export type FormKitListValue = string | Record<string, any> | Array<string | number | Record<string, any>> | number;
A FormKit message is immutable, so all properties should be readonly.
export type FormKitMessage = Readonly<FormKitMessageProps>;
All FormKitMiddleware conform to the pattern of accepting a payload and a next()
function. They can either pass the payload to the next middleware explicitly (as an argument of next), or implicitly (no argument for next).
export type FormKitMiddleware<T = unknown> = (payload: T, next: (payload?: T) => T) => T;
These are the types of nodes that can be created. These are different from the type of inputs available and rather describe their purpose in the tree.
export type FormKitNodeType = 'input' | 'list' | 'group';
Options that can be used to instantiate a new node via createNode()
.
export type FormKitOptions = Partial<Omit<FormKitContext, 'children' | 'plugins' | 'config' | 'hook'> & {
config: Partial<FormKitConfig>;
props: Partial<FormKitProps>;
children: FormKitNode[] | Set<FormKitNode>;
index?: number;
sync: boolean;
plugins: FormKitPlugin[];
alias: string;
schemaAlias: string;
}>;
The user-land per-instance "props", which are generally akin to the props passed into components on the front end.
export type FormKitProps = {
__root?: Document | ShadowRoot;
delay: number;
id: string;
validationLabelStrategy?: (node?: FormKitNode) => string;
validationRules?: Record<string, (node: FormKitNode) => boolean | Promise<boolean>>;
validationMessages?: Record<string, ((ctx: {
name: string;
args: any[];
node: FormKitNode;
}) => string) | string>;
definition?: FormKitTypeDefinition;
context?: FormKitFrameworkContext;
[index: string]: any;
} & FormKitConfig;
Global configuration options.
export type FormKitRootConfig = Partial<FormKitConfig> & {
_add: (node: FormKitNode) => void;
_rm: (node: FormKitNode) => void;
};
DOM attributes are simple string dictionaries.
export type FormKitSchemaAttributes = {
[index: string]: FormKitAttributeValue;
} | null | FormKitSchemaAttributesCondition;
Properties available when defining a generic non-FormKit component.
export type FormKitSchemaComponent = {
$cmp: string;
props?: Record<string, any>;
} & FormKitSchemaProps;
A schema node that determines which content to render.
export type FormKitSchemaCondition = {
if: string;
then: FormKitSchemaNode | FormKitSchemaNode[];
else?: FormKitSchemaNode | FormKitSchemaNode[];
};
An entire schema object or subtree from any entry point. Can be a single node, an array of nodes, or a conditional. This is the type that is passed to the FormKitSchema constructor.
export type FormKitSchemaDefinition = FormKitSchemaNode | FormKitSchemaNode[] | FormKitSchemaCondition;
Properties available when using a DOM node.
export type FormKitSchemaDOMNode = {
$el: string | null;
attrs?: FormKitSchemaAttributes;
} & FormKitSchemaProps;
Syntactic sugar for a FormKitSchemaComponent node that uses FormKit.
export type FormKitSchemaFormKit = {
$formkit: string;
} & Record<string, any> & FormKitSchemaProps;
Meta attributes are not used when parsing the schema, but can be used to create tooling.
export type FormKitSchemaMeta = {
[key: string]: string | number | boolean | undefined | null | CallableFunction | FormKitSchemaMeta;
};
Properties available then defining a schema node.
export type FormKitSchemaNode = FormKitSchemaDOMNode | FormKitSchemaComponent | FormKitSchemaTextNode | FormKitSchemaCondition | FormKitSchemaFormKit;
A simple text node.
export type FormKitSchemaTextNode = string;
Breadth and depth-first searches can use a callback of this notation.
export type FormKitSearchFunction = (node: FormKitNode, searchTerm?: string | number) => boolean;
The message store contains all of the messages that pertain to a given node.
export type FormKitStore = FormKitMessageStore & {
_n: FormKitNode;
_b: Array<[messages: FormKitMessage[], clear?: MessageClearer]>;
_m: ChildMessageBuffer;
_r?: string;
buffer: boolean;
} & FormKitStoreTraps;
Text fragments are small pieces of text used for things like interface validation messages, or errors that may be exposed for modification or even translation.
export type FormKitTextFragment = Partial<FormKitMessageProps> & {
key: string;
value: string;
type: string;
};
The map signature for a node's traps Map.
export type FormKitTraps = Map<string | symbol, FormKitTrap>;
Definition of a library item — when registering a new library item, these are the required and available properties.
export type FormKitTypeDefinition = {
type: FormKitNodeType;
family?: string;
forceTypeProp?: string;
props?: string[];
schema?: FormKitExtendableSchemaRoot | FormKitSchemaNode[] | FormKitSchemaCondition;
component?: unknown;
library?: Record<string, unknown>;
features?: Array<(node: FormKitNode) => void>;
schemaMemoKey?: string;
};
A string or function that allows clearing messages.
export type MessageClearer = string | ((message: FormKitMessage) => boolean);
Signature for any of the node's getter traps. Keep in mind that because these are traps and not class methods, their response types are declared explicitly in the FormKitNode interface.
export type TrapGetter = ((node: FormKitNode, context: FormKitContext, ...args: any[]) => unknown) | false;
The signature for a node's trap setter — these are more rare than getter traps, but can be useful for blocking access to certain context properties or modifying the behavior of an assignment (ex. see setParent).
export type TrapSetter = ((node: FormKitNode, context: FormKitContext, property: string | number | symbol, value: any) => boolean | never) | false;