@vaadin/hilla-lit-form 24.4.0-alpha2 → 24.4.0-alpha3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Field.d.ts.map +1 -1
- package/Field.js +3 -2
- package/Field.js.map +2 -2
- package/Models.d.ts +1 -1
- package/Models.d.ts.map +1 -1
- package/Models.js +3 -1
- package/Models.js.map +2 -2
- package/index.js +1 -1
- package/package.json +2 -2
package/Field.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["src/Field.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["src/Field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAqB,KAAK,YAAY,EAAE,MAAM,KAAK,CAAC;AAC7E,OAAO,EAAkD,KAAK,QAAQ,EAAY,MAAM,kBAAkB,CAAC;AAE3G,OAAO,EAAe,KAAK,aAAa,EAAwD,MAAM,aAAa,CAAC;AAIpH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,IAAI,OAAO,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAIxG,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,CAElF;AAED,UAAU,kBAAkB,CAAC,CAAC;IAC5B,IAAI,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAE/B;;;OAGG;IACH,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE;CACvC;AAED,UAAU,KAAK,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACnC;AAED,UAAU,UAAU,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,GAC3C,yBAAyB,GAAG;IAC1B,oBAAoB,IAAI,IAAI,CAAC;CAC9B,CAAC;AAEJ,8BAAsB,qBAAqB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAC9F,YAAW,aAAa,CAAC,CAAC,CAAC;;IAE3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;gBAUtB,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAKhD,IAAI,OAAO,IAAI,CAAC,CAEf;IAED;;;OAGG;IACH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAErB;IAED,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAE7B;IAED,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,EAAI;IAE9B,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,aAAa,IAAI,OAAO;IAcxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI;IAQzC,oBAAoB,IAAI,IAAI;CAqB7B;AAED,qBAAa,mBAAmB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAE,SAAQ,qBAAqB,CAClH,CAAC,EACD,CAAC,CACF;;gBAIa,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAKhD,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,IAAa,YAAY,CAAC,KAAK,EAAE,MAAM,EAEtC;IAEQ,oBAAoB,IAAI,IAAI;CAgBtC;AAED,qBAAa,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAE,SAAQ,qBAAqB,CACnH,CAAC,EACD,CAAC,CACF;IACC,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;CACF;AAED,KAAK,mBAAmB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAC9C,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,oBAAoB,CAC/B,CAAC,GAAG,GAAG,EACP,CAAC,SAAS,mBAAmB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CACzD,SAAQ,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,IAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAMlC;IAED,IAAa,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,EAEpC;CACF;AAED,KAAK,oBAAoB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,qBAAa,qBAAqB,CAChC,CAAC,EACD,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAC3D,SAAQ,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,IAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAOlC;IAED,IAAa,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,EAMpC;CACF;AAED,qBAAa,yBAA0B,SAAQ,mBAAmB,CAAC,MAAM,CAAC;IACxE,IAAa,KAAK,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAa,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAIzC;CACF;AAED,KAAK,+BAA+B,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAC1D,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,CAAC,CAAC;CAClB,CAAC;AAEF,qBAAa,gCAAgC,CAC3C,CAAC,EACD,CAAC,SAAS,+BAA+B,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,CACjF,SAAQ,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,IAAa,KAAK,IAAI,CAAC,CAEtB;IAED,IAAa,KAAK,CAAC,GAAG,EAAE,GAAG,EAE1B;CACF;AAED,KAAK,oBAAoB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,CAAC,CAAC;CACb,CAAC;AAEF,qBAAa,qBAAqB,CAChC,CAAC,EACD,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAC3D,SAAQ,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,IAAa,KAAK,IAAI,CAAC,CAEtB;IAED,IAAa,KAAK,CAAC,GAAG,EAAE,CAAC,EAExB;CACF;AAMD,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CA0BnH;AAMD;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,oDAakD,OAAO,KAAK,IAAI;mBAT1D,QAAQ;;uBASN,cAAc,GAAG,CAAC,uBAAsB,OAAO,KAAK,IAAI;qBAI1D,WAAW,GAAG,YAAY,qEAJgB,OAAO,KAAK,IAAI;;;EA4FnF,CAAC"}
|
package/Field.js
CHANGED
|
@@ -254,8 +254,9 @@ const field = directive(
|
|
|
254
254
|
const { value } = binderNode;
|
|
255
255
|
const valueFromField = convertFieldValue(model, fieldState.value);
|
|
256
256
|
if (value !== valueFromField && !(Number.isNaN(value) && Number.isNaN(valueFromField))) {
|
|
257
|
-
|
|
258
|
-
fieldState.
|
|
257
|
+
const nonNanValue = Number.isNaN(value) ? "" : value;
|
|
258
|
+
fieldState.value = nonNanValue;
|
|
259
|
+
fieldState.strategy.value = nonNanValue;
|
|
259
260
|
}
|
|
260
261
|
const { required } = binderNode;
|
|
261
262
|
if (required !== fieldState.required) {
|
package/Field.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/Field.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable accessor-pairs,sort-keys */\nimport { type ElementPart, noChange, nothing, type PropertyPart } from 'lit';\nimport { directive, Directive, type DirectiveParameters, type PartInfo, PartType } from 'lit/directive.js';\nimport { getBinderNode } from './BinderNode.js';\nimport { _fromString, type AbstractModel, ArrayModel, BooleanModel, hasFromString, ObjectModel } from './Models.js';\nimport type { ValueError } from './Validation.js';\nimport { _validity, defaultValidity } from './Validity.js';\n\nexport interface FieldBase<T> {\n required: boolean;\n invalid: boolean;\n errorMessage: string;\n value: T | undefined;\n}\n\n/**\n * Subset of the HTML constraint validation API with the `checkValidity()` method.\n */\nexport type FieldConstraintValidation = Readonly<{\n validity: ValidityState;\n checkValidity(): boolean;\n}>;\n\nexport type FieldElement<T = unknown> = FieldBase<T> & HTMLElement & Partial<FieldConstraintValidation>;\n\nconst props = ['required', 'invalid', 'errorMessage', 'value', 'validity', 'checkValidity'];\n\nexport function isFieldElement<T>(element: HTMLElement): element is FieldElement<T> {\n return props.some((prop) => prop in element);\n}\n\ninterface FieldElementHolder<T> {\n get element(): FieldElement<T>;\n\n /**\n * @param element - the new element value\n * @deprecated will be read-only in future\n */\n set element(element: FieldElement<T>);\n}\n\ninterface Field<T> extends FieldBase<T> {\n readonly model?: AbstractModel<T>;\n}\n\ninterface FieldState<T> extends Field<T>, FieldElementHolder<T> {\n name: string;\n validity: ValidityState;\n strategy: FieldStrategy<T>;\n}\n\nexport type FieldStrategy<T = any> = Field<T> &\n FieldConstraintValidation & {\n removeEventListeners(): void;\n };\n\nexport abstract class AbstractFieldStrategy<T = any, E extends FieldElement<T> = FieldElement<T>>\n implements FieldStrategy<T>\n{\n abstract required: boolean;\n\n abstract invalid: boolean;\n\n readonly model?: AbstractModel<T>;\n\n #element: E;\n\n /**\n * @privateRemarks\n * Fallback for missing .validity property API in Vaadin components.\n */\n #validityFallback: ValidityState = defaultValidity;\n\n constructor(element: E, model?: AbstractModel<T>) {\n this.#element = element;\n this.model = model;\n }\n\n get element(): E {\n return this.#element;\n }\n\n /**\n * @param element - the new element value\n * @deprecated will be read-only in future\n */\n set element(element: E) {\n this.#element = element;\n }\n\n get value(): T | undefined {\n return this.#element.value;\n }\n\n set value(value: T | undefined) {\n this.#element.value = value;\n }\n\n set errorMessage(_: string) {}\n\n get validity(): ValidityState {\n return this.#element.validity ?? this.#validityFallback;\n }\n\n checkValidity(): boolean {\n if (!this.#element.checkValidity) {\n return true;\n }\n\n const valid = this.#element.checkValidity();\n this.#validityFallback = {\n ...defaultValidity,\n valid,\n ...(valid ? {} : this.#detectValidityError()),\n };\n return valid;\n }\n\n setAttribute(key: string, val: any): void {\n if (val) {\n this.#element.setAttribute(key, '');\n } else {\n this.#element.removeAttribute(key);\n }\n }\n\n removeEventListeners(): void {}\n\n #detectValidityError(): Readonly<Partial<ValidityState>> {\n if (!('inputElement' in this.#element)) {\n // Not a Vaadin component field\n return { customError: true };\n }\n\n const inputElement = this.#element.inputElement as FieldElement<string>;\n\n if (this.#element.value === '') {\n if (inputElement.value === '') {\n return { valueMissing: true };\n }\n // Some value is entered, but not meaningful to the\n // web component \u2014 assume parse error.\n return { badInput: true };\n }\n // Unknown constraint violation\n return { customError: true };\n }\n}\n\nexport class VaadinFieldStrategy<T = any, E extends FieldElement<T> = FieldElement<T>> extends AbstractFieldStrategy<\n T,\n E\n> {\n #invalid = false;\n readonly #boundOnValidated = this.#onValidated.bind(this);\n\n constructor(element: E, model?: AbstractModel<T>) {\n super(element, model);\n element.addEventListener('validated', this.#boundOnValidated);\n }\n\n set required(value: boolean) {\n this.element.required = value;\n }\n\n set invalid(value: boolean) {\n this.#invalid = value;\n this.element.invalid = value;\n }\n\n override set errorMessage(value: string) {\n this.element.errorMessage = value;\n }\n\n override removeEventListeners(): void {\n this.element.removeEventListener('validated', this.#boundOnValidated);\n }\n\n #onValidated(e: Event): void {\n if (!(e instanceof CustomEvent) || typeof e.detail !== 'object') {\n return;\n }\n\n // Override built-in changes of the `invalid` flag in Vaadin components\n // to keep the `invalid` property state of the web component in sync.\n const invalid = !(e.detail satisfies Partial<ValidityState> as Partial<ValidityState>).valid;\n if (this.#invalid !== invalid) {\n this.element.invalid = this.#invalid;\n }\n }\n}\n\nexport class GenericFieldStrategy<T = any, E extends FieldElement<T> = FieldElement<T>> extends AbstractFieldStrategy<\n T,\n E\n> {\n set required(value: boolean) {\n this.setAttribute('required', value);\n }\n\n set invalid(value: boolean) {\n this.setAttribute('invalid', value);\n }\n}\n\ntype CheckedFieldElement<T> = FieldElement<T> & {\n checked: boolean;\n};\n\nexport class CheckedFieldStrategy<\n T = any,\n E extends CheckedFieldElement<T> = CheckedFieldElement<T>,\n> extends GenericFieldStrategy<T, E> {\n override get value(): T | undefined {\n if (this.model instanceof BooleanModel) {\n return this.element.checked as T;\n }\n\n return this.element.checked ? this.element.value : undefined;\n }\n\n override set value(val: T | undefined) {\n (this.element as { checked: boolean }).checked = /^(true|on)$/iu.test(String(val));\n }\n}\n\ntype ComboBoxFieldElement<T> = FieldElement<T> & {\n value: string;\n selectedItem: T | null;\n};\n\nexport class ComboBoxFieldStrategy<\n T,\n E extends ComboBoxFieldElement<T> = ComboBoxFieldElement<T>,\n> extends VaadinFieldStrategy<T, E> {\n override get value(): T | undefined {\n if (this.model && (this.model instanceof ObjectModel || this.model instanceof ArrayModel)) {\n const { selectedItem } = this.element;\n return selectedItem ?? undefined;\n }\n\n return super.value;\n }\n\n override set value(val: T | undefined) {\n if (this.model instanceof ObjectModel || this.model instanceof ArrayModel) {\n this.element.selectedItem = val ?? null;\n } else {\n super.value = val;\n }\n }\n}\n\nexport class VaadinStringFieldStrategy extends VaadinFieldStrategy<string> {\n override get value(): string | undefined {\n return super.value;\n }\n\n override set value(val: string | undefined) {\n // Some Vaadin components (e.g. vaadin-time-picker) do not support setting\n // the value to `null` or `undefined`. Instead, set it to an empty string.\n super.value = val ?? '';\n }\n}\n\ntype MultiSelectComboBoxFieldElement<T> = FieldElement<T> & {\n value: never;\n selectedItems: T;\n};\n\nexport class MultiSelectComboBoxFieldStrategy<\n T,\n E extends MultiSelectComboBoxFieldElement<T> = MultiSelectComboBoxFieldElement<T>,\n> extends VaadinFieldStrategy<T, E> {\n override get value(): T {\n return this.element.selectedItems;\n }\n\n override set value(val: any) {\n this.element.selectedItems = val;\n }\n}\n\ntype SelectedFieldElement<T> = FieldElement<T> & {\n value: never;\n selected: T;\n};\n\nexport class SelectedFieldStrategy<\n T,\n E extends SelectedFieldElement<T> = SelectedFieldElement<T>,\n> extends GenericFieldStrategy<T, E> {\n override get value(): T {\n return this.element.selected;\n }\n\n override set value(val: T) {\n this.element.selected = val;\n }\n}\n\ntype MaybeVaadinElementConstructor = {\n readonly version?: string;\n};\n\nexport function getDefaultFieldStrategy<T>(elm: FieldElement<T>, model?: AbstractModel<T>): AbstractFieldStrategy<T> {\n switch (elm.localName) {\n case 'vaadin-checkbox':\n case 'vaadin-radio-button':\n return new CheckedFieldStrategy(elm as CheckedFieldElement<T>, model);\n case 'vaadin-combo-box':\n return new ComboBoxFieldStrategy(elm as ComboBoxFieldElement<T>, model);\n case 'vaadin-list-box':\n return new SelectedFieldStrategy(elm as SelectedFieldElement<T>, model);\n case 'vaadin-multi-select-combo-box':\n return new MultiSelectComboBoxFieldStrategy(elm as MultiSelectComboBoxFieldElement<T>, model);\n case 'vaadin-rich-text-editor':\n return new GenericFieldStrategy(elm, model);\n case 'vaadin-time-picker':\n return new VaadinStringFieldStrategy(\n elm as FieldElement<string>,\n model as AbstractModel<string>,\n ) as AbstractFieldStrategy<T>;\n default:\n if (elm.localName === 'input' && /^(checkbox|radio)$/u.test((elm as unknown as HTMLInputElement).type)) {\n return new CheckedFieldStrategy(elm as CheckedFieldElement<T>, model);\n }\n return (elm.constructor as unknown as MaybeVaadinElementConstructor).version\n ? new VaadinFieldStrategy(elm, model)\n : new GenericFieldStrategy(elm, model);\n }\n}\n\nfunction convertFieldValue<T extends AbstractModel>(model: T, fieldValue: unknown) {\n return typeof fieldValue === 'string' && hasFromString(model) ? model[_fromString](fieldValue) : fieldValue;\n}\n\n/**\n * Binds a form field component into a model.\n *\n * Example usage:\n *\n * ```\n * <vaadin-text-field ...=\"${field(model.name)}\">\n * </vaadin-text-field>\n * ```\n */\nexport const field = directive(\n class extends Directive {\n fieldState?: FieldState<any>;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.PROPERTY && partInfo.type !== PartType.ELEMENT) {\n throw new Error('Use as \"<element {field(...)}\" or <element ...={field(...)}\"');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n override render(_model: AbstractModel<any>, _effect?: (element: Element) => void) {\n return nothing;\n }\n\n override update(part: ElementPart | PropertyPart, [model, effect]: DirectiveParameters<this>) {\n const element = part.element as FieldElement & HTMLInputElement;\n\n const binderNode = getBinderNode(model);\n\n if (!this.fieldState) {\n const fieldState = {\n errorMessage: '',\n name: '',\n value: '',\n required: false,\n invalid: false,\n model,\n validity: defaultValidity,\n element,\n strategy: binderNode.binder.getFieldStrategy(element, model),\n };\n\n this.fieldState = fieldState;\n\n const updateValueFromElement = () => {\n fieldState.strategy.checkValidity();\n // When bad input is detected, skip reading new value in binder state\n if (!fieldState.strategy.validity.badInput) {\n fieldState.value = fieldState.strategy.value;\n }\n fieldState.validity = fieldState.strategy.validity;\n binderNode[_validity] = fieldState.validity;\n binderNode.value = convertFieldValue(model, fieldState.value);\n if (effect !== undefined) {\n effect.call(element, element);\n }\n };\n\n element.addEventListener('input', updateValueFromElement);\n\n const changeBlurHandler = () => {\n updateValueFromElement();\n binderNode.visited = true;\n };\n\n element.addEventListener('blur', changeBlurHandler);\n element.addEventListener('change', changeBlurHandler);\n }\n\n const { fieldState } = this;\n\n if (fieldState.element !== element || fieldState.model !== model) {\n fieldState.strategy = binderNode.binder.getFieldStrategy(element, model);\n }\n\n const { name } = binderNode;\n if (name !== fieldState.name) {\n fieldState.name = name;\n element.setAttribute('name', name);\n }\n\n const { value } = binderNode;\n const valueFromField = convertFieldValue(model, fieldState.value);\n if (value !== valueFromField && !(Number.isNaN(value) && Number.isNaN(valueFromField))) {\n fieldState.value = value;\n fieldState.strategy.value = value;\n }\n\n const { required } = binderNode;\n if (required !== fieldState.required) {\n fieldState.required = required;\n fieldState.strategy.required = required;\n }\n\n const firstError: ValueError<any> | undefined = binderNode.ownErrors[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const errorMessage = firstError?.message || '';\n if (errorMessage !== fieldState.errorMessage) {\n fieldState.errorMessage = errorMessage;\n fieldState.strategy.errorMessage = errorMessage;\n }\n\n const { invalid } = binderNode;\n if (invalid !== fieldState.invalid) {\n fieldState.invalid = invalid;\n fieldState.strategy.invalid = invalid;\n }\n\n return noChange;\n }\n },\n);\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/* eslint-disable accessor-pairs,sort-keys */\nimport { type ElementPart, noChange, nothing, type PropertyPart } from 'lit';\nimport { directive, Directive, type DirectiveParameters, type PartInfo, PartType } from 'lit/directive.js';\nimport { getBinderNode } from './BinderNode.js';\nimport { _fromString, type AbstractModel, ArrayModel, BooleanModel, hasFromString, ObjectModel } from './Models.js';\nimport type { ValueError } from './Validation.js';\nimport { _validity, defaultValidity } from './Validity.js';\n\nexport interface FieldBase<T> {\n required: boolean;\n invalid: boolean;\n errorMessage: string;\n value: T | undefined;\n}\n\n/**\n * Subset of the HTML constraint validation API with the `checkValidity()` method.\n */\nexport type FieldConstraintValidation = Readonly<{\n validity: ValidityState;\n checkValidity(): boolean;\n}>;\n\nexport type FieldElement<T = unknown> = FieldBase<T> & HTMLElement & Partial<FieldConstraintValidation>;\n\nconst props = ['required', 'invalid', 'errorMessage', 'value', 'validity', 'checkValidity'];\n\nexport function isFieldElement<T>(element: HTMLElement): element is FieldElement<T> {\n return props.some((prop) => prop in element);\n}\n\ninterface FieldElementHolder<T> {\n get element(): FieldElement<T>;\n\n /**\n * @param element - the new element value\n * @deprecated will be read-only in future\n */\n set element(element: FieldElement<T>);\n}\n\ninterface Field<T> extends FieldBase<T> {\n readonly model?: AbstractModel<T>;\n}\n\ninterface FieldState<T> extends Field<T>, FieldElementHolder<T> {\n name: string;\n validity: ValidityState;\n strategy: FieldStrategy<T>;\n}\n\nexport type FieldStrategy<T = any> = Field<T> &\n FieldConstraintValidation & {\n removeEventListeners(): void;\n };\n\nexport abstract class AbstractFieldStrategy<T = any, E extends FieldElement<T> = FieldElement<T>>\n implements FieldStrategy<T>\n{\n abstract required: boolean;\n\n abstract invalid: boolean;\n\n readonly model?: AbstractModel<T>;\n\n #element: E;\n\n /**\n * @privateRemarks\n * Fallback for missing .validity property API in Vaadin components.\n */\n #validityFallback: ValidityState = defaultValidity;\n\n constructor(element: E, model?: AbstractModel<T>) {\n this.#element = element;\n this.model = model;\n }\n\n get element(): E {\n return this.#element;\n }\n\n /**\n * @param element - the new element value\n * @deprecated will be read-only in future\n */\n set element(element: E) {\n this.#element = element;\n }\n\n get value(): T | undefined {\n return this.#element.value;\n }\n\n set value(value: T | undefined) {\n this.#element.value = value;\n }\n\n set errorMessage(_: string) {}\n\n get validity(): ValidityState {\n return this.#element.validity ?? this.#validityFallback;\n }\n\n checkValidity(): boolean {\n if (!this.#element.checkValidity) {\n return true;\n }\n\n const valid = this.#element.checkValidity();\n this.#validityFallback = {\n ...defaultValidity,\n valid,\n ...(valid ? {} : this.#detectValidityError()),\n };\n return valid;\n }\n\n setAttribute(key: string, val: any): void {\n if (val) {\n this.#element.setAttribute(key, '');\n } else {\n this.#element.removeAttribute(key);\n }\n }\n\n removeEventListeners(): void {}\n\n #detectValidityError(): Readonly<Partial<ValidityState>> {\n if (!('inputElement' in this.#element)) {\n // Not a Vaadin component field\n return { customError: true };\n }\n\n const inputElement = this.#element.inputElement as FieldElement<string>;\n\n if (this.#element.value === '') {\n if (inputElement.value === '') {\n return { valueMissing: true };\n }\n // Some value is entered, but not meaningful to the\n // web component \u2014 assume parse error.\n return { badInput: true };\n }\n // Unknown constraint violation\n return { customError: true };\n }\n}\n\nexport class VaadinFieldStrategy<T = any, E extends FieldElement<T> = FieldElement<T>> extends AbstractFieldStrategy<\n T,\n E\n> {\n #invalid = false;\n readonly #boundOnValidated = this.#onValidated.bind(this);\n\n constructor(element: E, model?: AbstractModel<T>) {\n super(element, model);\n element.addEventListener('validated', this.#boundOnValidated);\n }\n\n set required(value: boolean) {\n this.element.required = value;\n }\n\n set invalid(value: boolean) {\n this.#invalid = value;\n this.element.invalid = value;\n }\n\n override set errorMessage(value: string) {\n this.element.errorMessage = value;\n }\n\n override removeEventListeners(): void {\n this.element.removeEventListener('validated', this.#boundOnValidated);\n }\n\n #onValidated(e: Event): void {\n if (!(e instanceof CustomEvent) || typeof e.detail !== 'object') {\n return;\n }\n\n // Override built-in changes of the `invalid` flag in Vaadin components\n // to keep the `invalid` property state of the web component in sync.\n const invalid = !(e.detail satisfies Partial<ValidityState> as Partial<ValidityState>).valid;\n if (this.#invalid !== invalid) {\n this.element.invalid = this.#invalid;\n }\n }\n}\n\nexport class GenericFieldStrategy<T = any, E extends FieldElement<T> = FieldElement<T>> extends AbstractFieldStrategy<\n T,\n E\n> {\n set required(value: boolean) {\n this.setAttribute('required', value);\n }\n\n set invalid(value: boolean) {\n this.setAttribute('invalid', value);\n }\n}\n\ntype CheckedFieldElement<T> = FieldElement<T> & {\n checked: boolean;\n};\n\nexport class CheckedFieldStrategy<\n T = any,\n E extends CheckedFieldElement<T> = CheckedFieldElement<T>,\n> extends GenericFieldStrategy<T, E> {\n override get value(): T | undefined {\n if (this.model instanceof BooleanModel) {\n return this.element.checked as T;\n }\n\n return this.element.checked ? this.element.value : undefined;\n }\n\n override set value(val: T | undefined) {\n (this.element as { checked: boolean }).checked = /^(true|on)$/iu.test(String(val));\n }\n}\n\ntype ComboBoxFieldElement<T> = FieldElement<T> & {\n value: string;\n selectedItem: T | null;\n};\n\nexport class ComboBoxFieldStrategy<\n T,\n E extends ComboBoxFieldElement<T> = ComboBoxFieldElement<T>,\n> extends VaadinFieldStrategy<T, E> {\n override get value(): T | undefined {\n if (this.model && (this.model instanceof ObjectModel || this.model instanceof ArrayModel)) {\n const { selectedItem } = this.element;\n return selectedItem ?? undefined;\n }\n\n return super.value;\n }\n\n override set value(val: T | undefined) {\n if (this.model instanceof ObjectModel || this.model instanceof ArrayModel) {\n this.element.selectedItem = val ?? null;\n } else {\n super.value = val;\n }\n }\n}\n\nexport class VaadinStringFieldStrategy extends VaadinFieldStrategy<string> {\n override get value(): string | undefined {\n return super.value;\n }\n\n override set value(val: string | undefined) {\n // Some Vaadin components (e.g. vaadin-time-picker) do not support setting\n // the value to `null` or `undefined`. Instead, set it to an empty string.\n super.value = val ?? '';\n }\n}\n\ntype MultiSelectComboBoxFieldElement<T> = FieldElement<T> & {\n value: never;\n selectedItems: T;\n};\n\nexport class MultiSelectComboBoxFieldStrategy<\n T,\n E extends MultiSelectComboBoxFieldElement<T> = MultiSelectComboBoxFieldElement<T>,\n> extends VaadinFieldStrategy<T, E> {\n override get value(): T {\n return this.element.selectedItems;\n }\n\n override set value(val: any) {\n this.element.selectedItems = val;\n }\n}\n\ntype SelectedFieldElement<T> = FieldElement<T> & {\n value: never;\n selected: T;\n};\n\nexport class SelectedFieldStrategy<\n T,\n E extends SelectedFieldElement<T> = SelectedFieldElement<T>,\n> extends GenericFieldStrategy<T, E> {\n override get value(): T {\n return this.element.selected;\n }\n\n override set value(val: T) {\n this.element.selected = val;\n }\n}\n\ntype MaybeVaadinElementConstructor = {\n readonly version?: string;\n};\n\nexport function getDefaultFieldStrategy<T>(elm: FieldElement<T>, model?: AbstractModel<T>): AbstractFieldStrategy<T> {\n switch (elm.localName) {\n case 'vaadin-checkbox':\n case 'vaadin-radio-button':\n return new CheckedFieldStrategy(elm as CheckedFieldElement<T>, model);\n case 'vaadin-combo-box':\n return new ComboBoxFieldStrategy(elm as ComboBoxFieldElement<T>, model);\n case 'vaadin-list-box':\n return new SelectedFieldStrategy(elm as SelectedFieldElement<T>, model);\n case 'vaadin-multi-select-combo-box':\n return new MultiSelectComboBoxFieldStrategy(elm as MultiSelectComboBoxFieldElement<T>, model);\n case 'vaadin-rich-text-editor':\n return new GenericFieldStrategy(elm, model);\n case 'vaadin-time-picker':\n return new VaadinStringFieldStrategy(\n elm as FieldElement<string>,\n model as AbstractModel<string>,\n ) as AbstractFieldStrategy<T>;\n default:\n if (elm.localName === 'input' && /^(checkbox|radio)$/u.test((elm as unknown as HTMLInputElement).type)) {\n return new CheckedFieldStrategy(elm as CheckedFieldElement<T>, model);\n }\n return (elm.constructor as unknown as MaybeVaadinElementConstructor).version\n ? new VaadinFieldStrategy(elm, model)\n : new GenericFieldStrategy(elm, model);\n }\n}\n\nfunction convertFieldValue<T extends AbstractModel>(model: T, fieldValue: unknown) {\n return typeof fieldValue === 'string' && hasFromString(model) ? model[_fromString](fieldValue) : fieldValue;\n}\n\n/**\n * Binds a form field component into a model.\n *\n * Example usage:\n *\n * ```\n * <vaadin-text-field ...=\"${field(model.name)}\">\n * </vaadin-text-field>\n * ```\n */\nexport const field = directive(\n class extends Directive {\n fieldState?: FieldState<any>;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.PROPERTY && partInfo.type !== PartType.ELEMENT) {\n throw new Error('Use as \"<element {field(...)}\" or <element ...={field(...)}\"');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n override render(_model: AbstractModel<any>, _effect?: (element: Element) => void) {\n return nothing;\n }\n\n override update(part: ElementPart | PropertyPart, [model, effect]: DirectiveParameters<this>) {\n const element = part.element as FieldElement & HTMLInputElement;\n\n const binderNode = getBinderNode(model);\n\n if (!this.fieldState) {\n const fieldState = {\n errorMessage: '',\n name: '',\n value: '',\n required: false,\n invalid: false,\n model,\n validity: defaultValidity,\n element,\n strategy: binderNode.binder.getFieldStrategy(element, model),\n };\n\n this.fieldState = fieldState;\n\n const updateValueFromElement = () => {\n fieldState.strategy.checkValidity();\n // When bad input is detected, skip reading new value in binder state\n if (!fieldState.strategy.validity.badInput) {\n fieldState.value = fieldState.strategy.value;\n }\n fieldState.validity = fieldState.strategy.validity;\n binderNode[_validity] = fieldState.validity;\n binderNode.value = convertFieldValue(model, fieldState.value);\n if (effect !== undefined) {\n effect.call(element, element);\n }\n };\n\n element.addEventListener('input', updateValueFromElement);\n\n const changeBlurHandler = () => {\n updateValueFromElement();\n binderNode.visited = true;\n };\n\n element.addEventListener('blur', changeBlurHandler);\n element.addEventListener('change', changeBlurHandler);\n }\n\n const { fieldState } = this;\n\n if (fieldState.element !== element || fieldState.model !== model) {\n fieldState.strategy = binderNode.binder.getFieldStrategy(element, model);\n }\n\n const { name } = binderNode;\n if (name !== fieldState.name) {\n fieldState.name = name;\n element.setAttribute('name', name);\n }\n\n const { value } = binderNode;\n const valueFromField = convertFieldValue(model, fieldState.value);\n if (value !== valueFromField && !(Number.isNaN(value) && Number.isNaN(valueFromField))) {\n const nonNanValue = Number.isNaN(value) ? '' : value;\n fieldState.value = nonNanValue;\n fieldState.strategy.value = nonNanValue;\n }\n\n const { required } = binderNode;\n if (required !== fieldState.required) {\n fieldState.required = required;\n fieldState.strategy.required = required;\n }\n\n const firstError: ValueError<any> | undefined = binderNode.ownErrors[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const errorMessage = firstError?.message || '';\n if (errorMessage !== fieldState.errorMessage) {\n fieldState.errorMessage = errorMessage;\n fieldState.strategy.errorMessage = errorMessage;\n }\n\n const { invalid } = binderNode;\n if (invalid !== fieldState.invalid) {\n fieldState.invalid = invalid;\n fieldState.strategy.invalid = invalid;\n }\n\n return noChange;\n }\n },\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["fieldState"]
|
|
7
7
|
}
|
package/Models.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export declare class BooleanModel extends PrimitiveModel<boolean> implements Has
|
|
|
54
54
|
[_fromString](str: string): boolean;
|
|
55
55
|
}
|
|
56
56
|
export declare class NumberModel extends PrimitiveModel<number> implements HasFromString<number | undefined> {
|
|
57
|
-
static createEmptyValue:
|
|
57
|
+
static createEmptyValue(): number;
|
|
58
58
|
constructor(parent: ModelParent, key: keyof any, optional: boolean, options?: ModelOptions<number>);
|
|
59
59
|
[_fromString](str: string): number | undefined;
|
|
60
60
|
}
|
package/Models.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["src/Models.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["src/Models.ts"],"names":[],"mappings":"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"}
|
package/Models.js
CHANGED
|
@@ -53,7 +53,9 @@ class BooleanModel extends PrimitiveModel {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
class NumberModel extends PrimitiveModel {
|
|
56
|
-
static createEmptyValue
|
|
56
|
+
static createEmptyValue() {
|
|
57
|
+
return NaN;
|
|
58
|
+
}
|
|
57
59
|
constructor(parent, key, optional, options) {
|
|
58
60
|
const validators = [new IsNumber(optional), ...options?.validators ?? []];
|
|
59
61
|
super(parent, key, optional, { ...options, validators });
|
package/Models.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/Models.ts"],
|
|
4
|
-
"sourcesContent": ["import isNumeric from 'validator/es/lib/isNumeric.js';\nimport { type BinderNode, getBinderNode } from './BinderNode.js';\nimport type { Validator } from './Validation.js';\nimport { IsNumber } from './Validators.js';\n\nexport const _createEmptyItemValue = Symbol('itemModel');\nexport const _parent = Symbol('parent');\nexport const _key = Symbol('key');\nexport const _fromString = Symbol('fromString');\nexport const _validators = Symbol('validators');\nexport const _meta = Symbol('meta');\nexport const _getPropertyModel = Symbol('getPropertyModel');\nexport const _enum = Symbol('enum');\n\nconst _optional = Symbol('optional');\n\nexport interface HasFromString<T> {\n [_fromString](value: string): T;\n}\n\nexport function hasFromString<T>(model: AbstractModel<T>): model is AbstractModel<T> & HasFromString<T> {\n return _fromString in model;\n}\n\nexport type Value<M> = M extends AbstractModel<infer T> ? T : never;\n\nexport const modelDetachedParent = { $value$: undefined };\n\nexport type ModelParent = AbstractModel | BinderNode | typeof modelDetachedParent;\n\nexport interface Annotation {\n name: string;\n attributes?: Record<string, unknown>;\n}\n\nexport interface ModelMetadata {\n javaType?: string;\n annotations?: Annotation[];\n}\n\nexport interface ModelOptions<T> {\n validators?: ReadonlyArray<Validator<T>>;\n meta?: ModelMetadata;\n}\n\nexport type DetachedModelConstructor<M> = {\n prototype: object;\n new (parent: typeof modelDetachedParent, key: '$value$', optional: boolean): M;\n};\n\nexport function createDetachedModel<M extends AbstractModel>(type: DetachedModelConstructor<M>): M {\n return new type(modelDetachedParent, '$value$', false);\n}\n\nexport abstract class AbstractModel<T = unknown> {\n static createEmptyValue(): unknown {\n return undefined;\n }\n\n declare readonly ['constructor']: typeof AbstractModel<T>;\n\n readonly [_parent]?: ModelParent;\n\n readonly [_validators]: ReadonlyArray<Validator<T>>;\n\n readonly [_meta]: ModelMetadata;\n\n readonly [_optional]: boolean;\n\n [_key]: keyof any;\n\n constructor(parent: ModelParent, key: keyof any, optional: boolean, options?: ModelOptions<T>) {\n this[_parent] = parent;\n this[_key] = key;\n this[_optional] = optional;\n this[_validators] = options?.validators ?? [];\n this[_meta] = options?.meta ?? {};\n }\n\n toString(): string {\n return String(this.valueOf());\n }\n\n valueOf(): T {\n const { value } = getBinderNode(this);\n\n if (value === undefined) {\n throw new TypeError('Value is undefined');\n }\n\n return value! as T;\n }\n}\n\nexport abstract class PrimitiveModel<T> extends AbstractModel<T> {}\n\nexport class BooleanModel extends PrimitiveModel<boolean> implements HasFromString<boolean> {\n static override createEmptyValue = Boolean;\n\n [_fromString](str: string): boolean {\n // This implementation matches the values accepted by validator.js and converts all other values to false\n // See https://github.com/validatorjs/validator.js/blob/master/src/lib/isBoolean.js\n return ['true', '1', 'yes'].includes(str.toLowerCase());\n }\n}\n\nexport class NumberModel extends PrimitiveModel<number> implements HasFromString<number | undefined> {\n static override createEmptyValue
|
|
5
|
-
"mappings": "AAAA,OAAO,eAAe;AACtB,SAA0B,qBAAqB;AAE/C,SAAS,gBAAgB;AAElB,MAAM,wBAAwB,OAAO,WAAW;AAChD,MAAM,UAAU,OAAO,QAAQ;AAC/B,MAAM,OAAO,OAAO,KAAK;AACzB,MAAM,cAAc,OAAO,YAAY;AACvC,MAAM,cAAc,OAAO,YAAY;AACvC,MAAM,QAAQ,OAAO,MAAM;AAC3B,MAAM,oBAAoB,OAAO,kBAAkB;AACnD,MAAM,QAAQ,OAAO,MAAM;AAElC,MAAM,YAAY,OAAO,UAAU;AAM5B,SAAS,cAAiB,OAAuE;AACtG,SAAO,eAAe;AACxB;AAIO,MAAM,sBAAsB,EAAE,SAAS,OAAU;AAwBjD,SAAS,oBAA6C,MAAsC;AACjG,SAAO,IAAI,KAAK,qBAAqB,WAAW,KAAK;AACvD;AAEO,MAAe,cAA2B;AAAA,EAC/C,OAAO,mBAA4B;AACjC,WAAO;AAAA,EACT;AAAA,EAIA,CAAU,OAAO;AAAA,EAEjB,CAAU,WAAW;AAAA,EAErB,CAAU,KAAK;AAAA,EAEf,CAAU,SAAS;AAAA,EAEnB,CAAC,IAAI;AAAA,EAEL,YAAY,QAAqB,KAAgB,UAAmB,SAA2B;AAC7F,SAAK,OAAO,IAAI;AAChB,SAAK,IAAI,IAAI;AACb,SAAK,SAAS,IAAI;AAClB,SAAK,WAAW,IAAI,SAAS,cAAc,CAAC;AAC5C,SAAK,KAAK,IAAI,SAAS,QAAQ,CAAC;AAAA,EAClC;AAAA,EAEA,WAAmB;AACjB,WAAO,OAAO,KAAK,QAAQ,CAAC;AAAA,EAC9B;AAAA,EAEA,UAAa;AACX,UAAM,EAAE,MAAM,IAAI,cAAc,IAAI;AAEpC,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,UAAU,oBAAoB;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AACF;AAEO,MAAe,uBAA0B,cAAiB;AAAC;AAE3D,MAAM,qBAAqB,eAA0D;AAAA,EAC1F,OAAgB,mBAAmB;AAAA,EAEnC,CAAC,WAAW,EAAE,KAAsB;AAGlC,WAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,SAAS,IAAI,YAAY,CAAC;AAAA,EACxD;AACF;AAEO,MAAM,oBAAoB,eAAoE;AAAA,EACnG,OAAgB,
|
|
4
|
+
"sourcesContent": ["import isNumeric from 'validator/es/lib/isNumeric.js';\nimport { type BinderNode, getBinderNode } from './BinderNode.js';\nimport type { Validator } from './Validation.js';\nimport { IsNumber } from './Validators.js';\n\nexport const _createEmptyItemValue = Symbol('itemModel');\nexport const _parent = Symbol('parent');\nexport const _key = Symbol('key');\nexport const _fromString = Symbol('fromString');\nexport const _validators = Symbol('validators');\nexport const _meta = Symbol('meta');\nexport const _getPropertyModel = Symbol('getPropertyModel');\nexport const _enum = Symbol('enum');\n\nconst _optional = Symbol('optional');\n\nexport interface HasFromString<T> {\n [_fromString](value: string): T;\n}\n\nexport function hasFromString<T>(model: AbstractModel<T>): model is AbstractModel<T> & HasFromString<T> {\n return _fromString in model;\n}\n\nexport type Value<M> = M extends AbstractModel<infer T> ? T : never;\n\nexport const modelDetachedParent = { $value$: undefined };\n\nexport type ModelParent = AbstractModel | BinderNode | typeof modelDetachedParent;\n\nexport interface Annotation {\n name: string;\n attributes?: Record<string, unknown>;\n}\n\nexport interface ModelMetadata {\n javaType?: string;\n annotations?: Annotation[];\n}\n\nexport interface ModelOptions<T> {\n validators?: ReadonlyArray<Validator<T>>;\n meta?: ModelMetadata;\n}\n\nexport type DetachedModelConstructor<M> = {\n prototype: object;\n new (parent: typeof modelDetachedParent, key: '$value$', optional: boolean): M;\n};\n\nexport function createDetachedModel<M extends AbstractModel>(type: DetachedModelConstructor<M>): M {\n return new type(modelDetachedParent, '$value$', false);\n}\n\nexport abstract class AbstractModel<T = unknown> {\n static createEmptyValue(): unknown {\n return undefined;\n }\n\n declare readonly ['constructor']: typeof AbstractModel<T>;\n\n readonly [_parent]?: ModelParent;\n\n readonly [_validators]: ReadonlyArray<Validator<T>>;\n\n readonly [_meta]: ModelMetadata;\n\n readonly [_optional]: boolean;\n\n [_key]: keyof any;\n\n constructor(parent: ModelParent, key: keyof any, optional: boolean, options?: ModelOptions<T>) {\n this[_parent] = parent;\n this[_key] = key;\n this[_optional] = optional;\n this[_validators] = options?.validators ?? [];\n this[_meta] = options?.meta ?? {};\n }\n\n toString(): string {\n return String(this.valueOf());\n }\n\n valueOf(): T {\n const { value } = getBinderNode(this);\n\n if (value === undefined) {\n throw new TypeError('Value is undefined');\n }\n\n return value! as T;\n }\n}\n\nexport abstract class PrimitiveModel<T> extends AbstractModel<T> {}\n\nexport class BooleanModel extends PrimitiveModel<boolean> implements HasFromString<boolean> {\n static override createEmptyValue = Boolean;\n\n [_fromString](str: string): boolean {\n // This implementation matches the values accepted by validator.js and converts all other values to false\n // See https://github.com/validatorjs/validator.js/blob/master/src/lib/isBoolean.js\n return ['true', '1', 'yes'].includes(str.toLowerCase());\n }\n}\n\nexport class NumberModel extends PrimitiveModel<number> implements HasFromString<number | undefined> {\n static override createEmptyValue(): number {\n return NaN;\n }\n\n constructor(parent: ModelParent, key: keyof any, optional: boolean, options?: ModelOptions<number>) {\n // Prepend a built-in validator to indicate NaN input\n const validators = [new IsNumber(optional), ...(options?.validators ?? [])];\n super(parent, key, optional, { ...options, validators });\n }\n\n [_fromString](str: string): number | undefined {\n // Returning undefined is needed to support passing the validation when the value of an optional number field is\n // an empty string\n if (str === '') return undefined;\n return isNumeric(str) ? Number.parseFloat(str) : NaN;\n }\n}\n\nexport class StringModel extends PrimitiveModel<string> implements HasFromString<string> {\n static override createEmptyValue = String;\n [_fromString] = String;\n}\n\ndeclare enum Enum {}\n\nexport function makeEnumEmptyValueCreator<M extends EnumModel>(type: DetachedModelConstructor<M>): () => Value<M> {\n const { [_enum]: enumObject } = createDetachedModel(type);\n const defaultValue = Object.values(enumObject)[0] as Value<M>;\n\n return () => defaultValue;\n}\n\nexport abstract class EnumModel<E extends typeof Enum = typeof Enum>\n extends AbstractModel<E[keyof E]>\n implements HasFromString<E[keyof E] | undefined>\n{\n abstract readonly [_enum]: E;\n\n [_fromString](value: string): E[keyof E] | undefined {\n return value in this[_enum] ? (value as E[keyof E]) : undefined;\n }\n}\n\nexport function* getObjectModelOwnAndParentGetters<M extends ObjectModel>(\n model: M,\n): Generator<readonly [key: keyof Value<M>, getter: () => AbstractModel]> {\n for (\n let proto = Object.getPrototypeOf(model);\n proto !== ObjectModel.prototype;\n proto = Object.getPrototypeOf(proto)\n ) {\n const descriptors = Object.getOwnPropertyDescriptors(proto);\n for (const [name, { get }] of Object.entries(descriptors)) {\n if (get) {\n yield [name as keyof Value<M>, get];\n }\n }\n }\n}\n\nexport function makeObjectEmptyValueCreator<M extends ObjectModel>(type: DetachedModelConstructor<M>): () => Value<M> {\n const model = createDetachedModel(type);\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const obj: Partial<Value<M>> = {};\n\n // Iterate the model class hierarchy up to the ObjectModel, and extract\n // the property getter names from every prototypes\n for (const [key, getter] of getObjectModelOwnAndParentGetters(model)) {\n const propertyModel = getter.call(model);\n obj[key] = (\n propertyModel[_optional] ? undefined : propertyModel.constructor.createEmptyValue()\n ) as Value<M>[keyof Value<M>];\n }\n\n return obj as Value<M>;\n };\n}\n\ntype ChildModel<T extends Record<never, never>, K extends keyof T> = AbstractModel<NonNullable<T[K]>>;\n\nexport class ObjectModel<T extends Record<never, never> = Record<never, never>> extends AbstractModel<T> {\n static override createEmptyValue = makeObjectEmptyValueCreator(ObjectModel);\n\n #properties: { [K in keyof T]?: ChildModel<T, K> } = {};\n\n protected [_getPropertyModel]<K extends keyof T, M extends ChildModel<T, K>>(\n key: K,\n init: (parent: this, key: K) => M,\n ): M {\n if (!this.#properties[key]) {\n this.#properties[key] = init(this, key);\n }\n\n return this.#properties[key] as M;\n }\n}\n\nexport type ArrayItemModel<M> = M extends ArrayModel<infer MItem> ? MItem : never;\n\nexport class ArrayModel<MItem extends AbstractModel = AbstractModel> extends AbstractModel<Array<Value<MItem>>> {\n static override createEmptyValue(): [] {\n return [];\n }\n\n [_createEmptyItemValue]: () => Value<MItem>;\n\n readonly #createItem: (parent: this, index: number) => MItem;\n #items: Array<MItem | undefined> = [];\n\n constructor(\n parent: ModelParent,\n key: keyof any,\n optional: boolean,\n createItem: (parent: ArrayModel<MItem>, key: number) => MItem,\n options?: ModelOptions<Array<Value<MItem>>>,\n ) {\n super(parent, key, optional, options);\n this.#createItem = createItem;\n this[_createEmptyItemValue] = createItem(this, 0).constructor.createEmptyValue as () => Value<MItem>;\n }\n\n /**\n * Iterates the current array value and yields a binder node for every item.\n */\n *[Symbol.iterator](): IterableIterator<BinderNode<MItem>> {\n const array = this.valueOf();\n\n if (array.length !== this.#items.length) {\n this.#items.length = array.length;\n }\n\n for (let i = 0; i < array.length; i++) {\n let item: MItem | undefined = this.#items[i];\n\n if (!item) {\n item = this.#createItem(this, i);\n this.#items[i] = item;\n }\n\n yield getBinderNode(item);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/index.js
CHANGED
|
@@ -3,7 +3,7 @@ function __REGISTER__(feature) {
|
|
|
3
3
|
window.Vaadin.registrations ??= [];
|
|
4
4
|
window.Vaadin.registrations.push({
|
|
5
5
|
is: feature ? `${"@vaadin/hilla-lit-form"}/${feature}` : "@vaadin/hilla-lit-form",
|
|
6
|
-
version: "24.4.0-
|
|
6
|
+
version: "24.4.0-alpha3"
|
|
7
7
|
});
|
|
8
8
|
}
|
|
9
9
|
export * from "./Binder.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/hilla-lit-form",
|
|
3
|
-
"version": "24.4.0-
|
|
3
|
+
"version": "24.4.0-alpha3",
|
|
4
4
|
"description": "Hilla form utils",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.js",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"access": "public"
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@vaadin/hilla-core": "24.4.0-
|
|
74
|
+
"@vaadin/hilla-core": "24.4.0-alpha3",
|
|
75
75
|
"validator": "^13.11.0"
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|