ember-headless-form 0.0.0 → 1.0.0-beta.0
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/README.md +16 -3
- package/dist/{components/-private → -private/components}/control/checkbox.d.ts +1 -0
- package/dist/-private/components/control/checkbox.d.ts.map +1 -0
- package/dist/-private/components/control/checkbox.js.map +1 -0
- package/dist/{components/-private → -private/components}/control/input.d.ts +17 -1
- package/dist/{components/-private → -private/components}/control/input.js +1 -1
- package/dist/-private/components/control/input.js.map +1 -0
- package/dist/-private/components/control/radio/input.js.map +1 -0
- package/dist/-private/components/control/radio.d.ts +35 -0
- package/dist/{components/-private → -private/components}/control/radio.js +1 -1
- package/dist/-private/components/control/radio.js.map +1 -0
- package/dist/-private/components/control/select/option.d.ts +18 -0
- package/dist/-private/components/control/select/option.js +15 -0
- package/dist/-private/components/control/select/option.js.map +1 -0
- package/dist/-private/components/control/select.d.ts +26 -0
- package/dist/-private/components/control/select.js +24 -0
- package/dist/-private/components/control/select.js.map +1 -0
- package/dist/-private/components/control/textarea.js.map +1 -0
- package/dist/{components/-private → -private/components}/errors.d.ts +1 -1
- package/dist/-private/components/errors.js.map +1 -0
- package/dist/-private/components/field.d.ts +146 -0
- package/dist/{components/-private → -private/components}/field.js +9 -4
- package/dist/-private/components/field.js.map +1 -0
- package/dist/-private/components/label.js.map +1 -0
- package/dist/{components/-private → -private/modifiers}/capture-events.d.ts +1 -2
- package/dist/-private/modifiers/capture-events.js.map +1 -0
- package/dist/{components/-private → -private}/types.d.ts +1 -1
- package/dist/-private/utils.js.map +1 -0
- package/dist/components/headless-form.d.ts +103 -14
- package/dist/components/headless-form.js +71 -23
- package/dist/components/headless-form.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -1
- package/dist/template-registry.d.ts +30 -0
- package/package.json +14 -10
- package/dist/components/-private/capture-events.d.ts.map +0 -1
- package/dist/components/-private/capture-events.js.map +0 -1
- package/dist/components/-private/control/checkbox.js.map +0 -1
- package/dist/components/-private/control/input.js.map +0 -1
- package/dist/components/-private/control/radio/input.js.map +0 -1
- package/dist/components/-private/control/radio.d.ts +0 -28
- package/dist/components/-private/control/radio.js.map +0 -1
- package/dist/components/-private/control/textarea.js.map +0 -1
- package/dist/components/-private/errors.js.map +0 -1
- package/dist/components/-private/field.d.ts +0 -76
- package/dist/components/-private/field.js.map +0 -1
- package/dist/components/-private/label.js.map +0 -1
- package/dist/components/-private/utils.js.map +0 -1
- /package/dist/{components/-private → -private/components}/control/checkbox.js +0 -0
- /package/dist/{components/-private → -private/components}/control/radio/input.d.ts +0 -0
- /package/dist/{components/-private → -private/components}/control/radio/input.js +0 -0
- /package/dist/{components/-private → -private/components}/control/textarea.d.ts +0 -0
- /package/dist/{components/-private → -private/components}/control/textarea.js +0 -0
- /package/dist/{components/-private → -private/components}/errors.js +0 -0
- /package/dist/{components/-private → -private/components}/label.d.ts +0 -0
- /package/dist/{components/-private → -private/components}/label.js +0 -0
- /package/dist/{components/-private → -private/modifiers}/capture-events.js +0 -0
- /package/dist/{components/-private → -private}/types.js +0 -0
- /package/dist/{components/-private → -private}/types.js.map +0 -0
- /package/dist/{components/-private → -private}/utils.d.ts +0 -0
- /package/dist/{components/-private → -private}/utils.js +0 -0
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"input.js","sources":["../../../../src/components/-private/control/input.hbs.js","../../../../src/components/-private/control/input.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<input\\n name={{@name}}\\n type={{@type}}\\n value={{@value}}\\n id={{@fieldId}}\\n aria-invalid={{if @invalid \\'true\\'}}\\n aria-errormessage={{if @invalid @errorId}}\\n ...attributes\\n {{on \\'input\\' this.handleInput}}\\n/>\")","import Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\n// Possible values for the input type, see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types\n// for the sake ok completeness, we list all here, with some commented out that are better handled elsewhere, or not at all...\nexport type InputType =\n // | 'button' - not useful as a control component\n // | 'checkbox' - handled separately, for handling `checked` correctly and operating with true boolean values\n | 'color'\n | 'date'\n | 'datetime-local'\n | 'email'\n // | 'file' - would need special handling\n | 'hidden'\n // | 'image' - not useful as a control component\n | 'month'\n | 'number'\n | 'password'\n // | 'radio' - handled separately, for handling groups or radio buttons\n | 'range'\n // | 'reset' - would need special handling\n | 'search'\n // | 'submit' - not useful as a control component\n | 'tel'\n | 'text'\n | 'time'\n | 'url'\n | 'week';\n\nexport interface HeadlessFormControlInputComponentSignature {\n Element: HTMLInputElement;\n Args: {\n value: string;\n name: string;\n type?: InputType;\n fieldId: string;\n setValue: (value: string) => void;\n invalid: boolean;\n errorId: string;\n };\n}\n\nexport default class HeadlessFormControlInputComponent extends Component<HeadlessFormControlInputComponentSignature> {\n constructor(\n owner: unknown,\n args: HeadlessFormControlInputComponentSignature['Args']\n ) {\n assert(\n `input component does not support @type=\"${args.type}\" as there is a dedicated component for this. Please use the \\`field.${args.type}\\` instead!`,\n args.type === undefined ||\n // TS would guard us against using an unsupported `InputType`, but for JS consumers we add a dev-only runtime check here\n !['checkbox', 'radio'].includes(args.type as string)\n );\n\n super(owner, args);\n }\n\n get type(): InputType {\n return this.args.type ?? 'text';\n }\n\n @action\n handleInput(e: Event | InputEvent): void {\n assert('Expected HTMLInputElement', e.target instanceof HTMLInputElement);\n this.args.setValue(e.target.value);\n }\n}\n"],"names":["precompileTemplate","HeadlessFormControlInputComponent","Component","constructor","owner","args","assert","type","undefined","includes","handleInput","e","target","HTMLInputElement","setValue","value","action"],"mappings":";;;;;;;AACA,eAAeA,kBAAkB,CAAC,oOAAoO,CAAC;;;;ACGvQ;AACA;AAAA,IAsCqBC,iCAAiC,IAAvC,MAAA,GAAA,MAAMA,iCAAiC,SAASC,SAAS,CAA6C;AACnHC,EAAAA,WAAW,CACTC,KAAc,EACdC,IAAwD,EACxD;AACAC,IAAAA,MAAM,CACH,CAAA,wCAAA,EAA0CD,IAAI,CAACE,IAAK,CAAuEF,qEAAAA,EAAAA,IAAI,CAACE,IAAK,aAAY,EAClJF,IAAI,CAACE,IAAI,KAAKC,SAAS;AACrB;AACA,IAAA,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAACC,QAAQ,CAACJ,IAAI,CAACE,IAAI,CAAW,CACvD,CAAA;AAED,IAAA,KAAK,CAACH,KAAK,EAAEC,IAAI,CAAC,CAAA;AACpB,GAAA;AAEA,EAAA,IAAIE,IAAI,GAAc;AACpB,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,IAAI,IAAI,MAAM,CAAA;AACjC,GAAA;EAGAG,WAAW,CAACC,CAAqB,EAAQ;IACvCL,MAAM,CAAC,2BAA2B,EAAEK,CAAC,CAACC,MAAM,YAAYC,gBAAgB,CAAC,CAAA;IACzE,IAAI,CAACR,IAAI,CAACS,QAAQ,CAACH,CAAC,CAACC,MAAM,CAACG,KAAK,CAAC,CAAA;AACpC,GAAA;AACF,CAAC,+DALEC,MAAM,CAAA,EAAA,MAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,GAAA,MAAA,EAAA;AAnB6C,oBAAA,CAAA,QAAA,EAAA,iCAAA,CAAA;;;;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"input.js","sources":["../../../../../src/components/-private/control/radio/input.hbs.js","../../../../../src/components/-private/control/radio/input.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<input\\n name={{@name}}\\n type=\\'radio\\'\\n value={{@value}}\\n checked={{@checked}}\\n id={{@fieldId}}\\n ...attributes\\n {{on \\'change\\' (fn @setValue @value)}}\\n/>\")","import templateOnlyComponent from '@ember/component/template-only';\n\nexport interface HeadlessFormControlRadioInputComponentSignature {\n Element: HTMLInputElement;\n Args: {\n value: string;\n name: string;\n checked: boolean;\n fieldId: string;\n setValue: (value: string) => void;\n };\n}\n\nexport default templateOnlyComponent<HeadlessFormControlRadioInputComponentSignature>();\n"],"names":["precompileTemplate","templateOnlyComponent"],"mappings":";;;;AACA,eAAeA,kBAAkB,CAAC,2KAA2K,CAAC;;ACY9M,0BAAA,oBAAA,CAAA,QAAA,EAAeC,qBAAqB,EAAmD,CAAA;;;;"}
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import Component from '@glimmer/component';
|
2
|
-
import LabelComponent from "../label.js";
|
3
|
-
import { HeadlessFormLabelComponentSignature } from "../label.js";
|
4
|
-
import RadioInputComponent from "./radio/input.js";
|
5
|
-
import { HeadlessFormControlRadioInputComponentSignature } from "./radio/input.js";
|
6
|
-
import { ComponentLike, WithBoundArgs } from '@glint/template';
|
7
|
-
interface HeadlessFormControlRadioComponentSignature {
|
8
|
-
Args: {
|
9
|
-
value: string;
|
10
|
-
name: string;
|
11
|
-
selected: string;
|
12
|
-
setValue: (value: string) => void;
|
13
|
-
};
|
14
|
-
Blocks: {
|
15
|
-
default: [
|
16
|
-
{
|
17
|
-
label: WithBoundArgs<typeof LabelComponent, 'fieldId'>;
|
18
|
-
input: WithBoundArgs<typeof RadioInputComponent, 'fieldId' | 'value' | 'setValue' | 'checked' | 'name'>;
|
19
|
-
}
|
20
|
-
];
|
21
|
-
};
|
22
|
-
}
|
23
|
-
declare class HeadlessFormControlRadioComponent extends Component<HeadlessFormControlRadioComponentSignature> {
|
24
|
-
LabelComponent: ComponentLike<HeadlessFormLabelComponentSignature>;
|
25
|
-
RadioInputComponent: ComponentLike<HeadlessFormControlRadioInputComponentSignature>;
|
26
|
-
get isChecked(): boolean;
|
27
|
-
}
|
28
|
-
export { HeadlessFormControlRadioComponentSignature, HeadlessFormControlRadioComponent as default };
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"radio.js","sources":["../../../../src/components/-private/control/radio.hbs.js","../../../../src/components/-private/control/radio.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let (unique-id) as |uuid|}}\\n {{yield\\n (hash\\n label=(component (ensure-safe-component this.LabelComponent) fieldId=uuid)\\n input=(component\\n (ensure-safe-component this.RadioInputComponent)\\n name=@name\\n fieldId=uuid\\n value=@value\\n checked=this.isChecked\\n setValue=@setValue\\n )\\n )\\n }}\\n{{/let}}\")","import Component from '@glimmer/component';\n\nimport LabelComponent from '../label';\nimport RadioInputComponent from './radio/input';\n\nimport type { HeadlessFormLabelComponentSignature } from '../label';\nimport type { HeadlessFormControlRadioInputComponentSignature } from './radio/input';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\n\nexport interface HeadlessFormControlRadioComponentSignature {\n Args: {\n value: string;\n name: string;\n selected: string;\n setValue: (value: string) => void;\n };\n Blocks: {\n default: [\n {\n label: WithBoundArgs<typeof LabelComponent, 'fieldId'>;\n input: WithBoundArgs<\n typeof RadioInputComponent,\n 'fieldId' | 'value' | 'setValue' | 'checked' | 'name'\n >;\n }\n ];\n };\n}\n\nexport default class HeadlessFormControlRadioComponent extends Component<HeadlessFormControlRadioComponentSignature> {\n LabelComponent: ComponentLike<HeadlessFormLabelComponentSignature> =\n LabelComponent;\n RadioInputComponent: ComponentLike<HeadlessFormControlRadioInputComponentSignature> =\n RadioInputComponent;\n\n get isChecked(): boolean {\n return this.args.selected === this.args.value;\n }\n}\n"],"names":["precompileTemplate","HeadlessFormControlRadioComponent","Component","LabelComponent","RadioInputComponent","isChecked","args","selected","value"],"mappings":";;;;;;;AACA,eAAeA,kBAAkB,CAAC,sXAAsX,CAAC;;AC4B1Y,MAAMC,iCAAiC,SAASC,SAAS,CAA6C;AAAA,EAAA,WAAA,CAAA,GAAA,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EAEjHC,cAAc,CAAA,CAAA;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,qBAAA,EAEdC,mBAAmB,CAAA,CAAA;AAAA,GAAA;AAErB,EAAA,IAAIC,SAAS,GAAY;IACvB,OAAO,IAAI,CAACC,IAAI,CAACC,QAAQ,KAAK,IAAI,CAACD,IAAI,CAACE,KAAK,CAAA;AAC/C,GAAA;AACF,CAAA;AAAC,oBAAA,CAAA,QAAA,EAToBP,iCAAiC,CAAA;;;;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"textarea.js","sources":["../../../../src/components/-private/control/textarea.hbs.js","../../../../src/components/-private/control/textarea.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<textarea\\n name={{@name}}\\n id={{@fieldId}}\\n aria-invalid={{if @invalid \\'true\\'}}\\n aria-errormessage={{if @invalid @errorId}}\\n ...attributes\\n {{on \\'input\\' this.handleInput}}\\n>{{@value}}</textarea>\")","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport interface HeadlessFormControlTextareaComponentSignature {\n Element: HTMLTextAreaElement;\n Args: {\n value: string;\n name: string;\n fieldId: string;\n setValue: (value: string) => void;\n invalid: boolean;\n errorId: string;\n };\n}\n\nexport default class HeadlessFormControlTextareaComponent extends Component<HeadlessFormControlTextareaComponentSignature> {\n @action\n handleInput(e: Event | InputEvent): void {\n this.args.setValue((e.target as HTMLTextAreaElement).value);\n }\n}\n"],"names":["precompileTemplate","HeadlessFormControlTextareaComponent","Component","handleInput","e","args","setValue","target","value","action"],"mappings":";;;;;;AACA,eAAeA,kBAAkB,CAAC,qNAAqN,CAAC;;;ACAjN,IAclBC,oCAAoC,IAA1C,MAAA,GAAA,MAAMA,oCAAoC,SAASC,SAAS,CAAgD;EAEzHC,WAAW,CAACC,CAAqB,EAAQ;IACvC,IAAI,CAACC,IAAI,CAACC,QAAQ,CAAEF,CAAC,CAACG,MAAM,CAAyBC,KAAK,CAAC,CAAA;AAC7D,GAAA;AACF,CAAC,+DAJEC,MAAM,CAAA,EAAA,MAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,GAAA,MAAA,EAAA;AADgD,oBAAA,CAAA,QAAA,EAAA,oCAAA,CAAA;;;;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"errors.js","sources":["../../../src/components/-private/errors.hbs.js","../../../src/components/-private/errors.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div id={{@id}} aria-live=\\'assertive\\' ...attributes>\\n {{#if (has-block)}}\\n {{yield @errors}}\\n {{else}}\\n {{#each @errors as |e|}}\\n {{#if e.message}}\\n {{e.message}}<br />\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n</div>\")","import Component from '@glimmer/component';\n\nimport type { ValidationError } from './types';\n\nexport interface HeadlessFormErrorsComponentSignature<VALUE> {\n Element: HTMLDivElement;\n Args: {\n errors: ValidationError<VALUE>[];\n id: string;\n };\n Blocks: {\n default?: [ValidationError<VALUE>[]];\n };\n}\n\n// eslint-disable-next-line ember/no-empty-glimmer-component-classes -- unfortunately we cannot use templateOnlyComponent() here, as it is not possible to type that as a generic type, like templateOnlyComponent<HeadlessFormErrorsComponentSignature<VALUE>>\nexport default class HeadlessFormErrorsComponent<VALUE> extends Component<\n HeadlessFormErrorsComponentSignature<VALUE>\n> {}\n"],"names":["precompileTemplate","HeadlessFormErrorsComponent","Component"],"mappings":";;;;AACA,eAAeA,kBAAkB,CAAC,uPAAuP,CAAC;;ACc1R;AACe,MAAMC,2BAA2B,SAAgBC,SAAS,CAEvE,EAAA;AAAE,oBAAA,CAAA,QAAA,EAFiBD,2BAA2B,CAAA;;;;"}
|
@@ -1,76 +0,0 @@
|
|
1
|
-
import Component from '@glimmer/component';
|
2
|
-
import CheckboxComponent from "./control/checkbox.js";
|
3
|
-
import { HeadlessFormControlCheckboxComponentSignature } from "./control/checkbox.js";
|
4
|
-
import InputComponent from "./control/input.js";
|
5
|
-
import { HeadlessFormControlInputComponentSignature } from "./control/input.js";
|
6
|
-
import RadioComponent from "./control/radio.js";
|
7
|
-
import { HeadlessFormControlRadioComponentSignature } from "./control/radio.js";
|
8
|
-
import TextareaComponent from "./control/textarea.js";
|
9
|
-
import { HeadlessFormControlTextareaComponentSignature } from "./control/textarea.js";
|
10
|
-
import ErrorsComponent from "./errors.js";
|
11
|
-
import { HeadlessFormErrorsComponentSignature } from "./errors.js";
|
12
|
-
import LabelComponent from "./label.js";
|
13
|
-
import { HeadlessFormLabelComponentSignature } from "./label.js";
|
14
|
-
import { CaptureEventsModifierSignature } from "./capture-events.js";
|
15
|
-
import { ErrorRecord, FieldValidateCallback, FormData, RegisterFieldCallback, UnregisterFieldCallback, FormKey, UserData, ValidationError } from "./types.js";
|
16
|
-
import { ComponentLike, ModifierLike, WithBoundArgs } from '@glint/template';
|
17
|
-
interface HeadlessFormFieldComponentSignature<DATA extends UserData, KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>> {
|
18
|
-
Args: {
|
19
|
-
data: FormData<DATA>;
|
20
|
-
name: KEY;
|
21
|
-
set: (key: KEY, value: DATA[KEY]) => void;
|
22
|
-
validate?: FieldValidateCallback<FormData<DATA>, KEY>;
|
23
|
-
errors?: ErrorRecord<DATA, KEY>;
|
24
|
-
registerField: RegisterFieldCallback<FormData<DATA>, KEY>;
|
25
|
-
unregisterField: UnregisterFieldCallback<FormData<DATA>, KEY>;
|
26
|
-
triggerValidationFor(name: KEY): Promise<void>;
|
27
|
-
fieldValidationEvent: 'focusout' | 'change' | 'input' | undefined;
|
28
|
-
fieldRevalidationEvent: 'focusout' | 'change' | 'input' | undefined;
|
29
|
-
};
|
30
|
-
Blocks: {
|
31
|
-
default: [
|
32
|
-
{
|
33
|
-
label: WithBoundArgs<typeof LabelComponent, 'fieldId'>;
|
34
|
-
input: WithBoundArgs<typeof InputComponent, 'name' | 'fieldId' | 'value' | 'setValue' | 'invalid' | 'errorId'>;
|
35
|
-
checkbox: WithBoundArgs<typeof CheckboxComponent, 'name' | 'fieldId' | 'value' | 'setValue' | 'invalid' | 'errorId'>;
|
36
|
-
radio: WithBoundArgs<typeof RadioComponent, 'name' | 'selected' | 'setValue'>;
|
37
|
-
textarea: WithBoundArgs<typeof TextareaComponent, 'name' | 'fieldId' | 'value' | 'setValue' | 'invalid' | 'errorId'>;
|
38
|
-
value: DATA[KEY];
|
39
|
-
setValue: (value: DATA[KEY]) => void;
|
40
|
-
id: string;
|
41
|
-
errorId: string;
|
42
|
-
errors?: WithBoundArgs<typeof ErrorsComponent<DATA[KEY]>, 'errors' | 'id'>;
|
43
|
-
isInvalid: boolean;
|
44
|
-
triggerValidation: () => void;
|
45
|
-
captureEvents: WithBoundArgs<ModifierLike<CaptureEventsModifierSignature>, 'event' | 'triggerValidation'>;
|
46
|
-
}
|
47
|
-
];
|
48
|
-
};
|
49
|
-
}
|
50
|
-
declare class HeadlessFormFieldComponent<DATA extends FormData, KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>> extends Component<HeadlessFormFieldComponentSignature<DATA, KEY>> {
|
51
|
-
LabelComponent: ComponentLike<HeadlessFormLabelComponentSignature>;
|
52
|
-
InputComponent: ComponentLike<HeadlessFormControlInputComponentSignature>;
|
53
|
-
CheckboxComponent: ComponentLike<HeadlessFormControlCheckboxComponentSignature>;
|
54
|
-
ErrorsComponent: ComponentLike<HeadlessFormErrorsComponentSignature<DATA[KEY]>>;
|
55
|
-
TextareaComponent: ComponentLike<HeadlessFormControlTextareaComponentSignature>;
|
56
|
-
RadioComponent: ComponentLike<HeadlessFormControlRadioComponentSignature>;
|
57
|
-
CaptureEventsModifier: import("ember-modifier/.").FunctionBasedModifier<{
|
58
|
-
Element: HTMLElement;
|
59
|
-
Args: {
|
60
|
-
Named: {
|
61
|
-
event: "focusout" | "change";
|
62
|
-
triggerValidation(): void;
|
63
|
-
};
|
64
|
-
Positional: [];
|
65
|
-
};
|
66
|
-
}>;
|
67
|
-
constructor(owner: unknown, args: HeadlessFormFieldComponentSignature<DATA, KEY>['Args']);
|
68
|
-
willDestroy(): void;
|
69
|
-
get value(): DATA[KEY];
|
70
|
-
get errors(): ValidationError<DATA[KEY]>[] | undefined;
|
71
|
-
get hasErrors(): boolean;
|
72
|
-
get valueAsString(): string | undefined;
|
73
|
-
get valueAsBoolean(): boolean | undefined;
|
74
|
-
setValue(value: unknown): void;
|
75
|
-
}
|
76
|
-
export { HeadlessFormFieldComponentSignature, HeadlessFormFieldComponent as default };
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"field.js","sources":["../../../src/components/-private/field.hbs.js","../../../src/components/-private/field.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let\\n (unique-id)\\n (unique-id)\\n (fn @set @name)\\n (fn @triggerValidationFor @name)\\n as |fieldId errorId setValue triggerValidation|\\n}}\\n {{yield\\n (hash\\n label=(component\\n (ensure-safe-component this.LabelComponent) fieldId=fieldId\\n )\\n input=(component\\n (ensure-safe-component this.InputComponent)\\n name=@name\\n fieldId=fieldId\\n errorId=errorId\\n value=this.valueAsString\\n setValue=this.setValue\\n invalid=this.hasErrors\\n )\\n checkbox=(component\\n (ensure-safe-component this.CheckboxComponent)\\n name=@name\\n fieldId=fieldId\\n errorId=errorId\\n value=this.valueAsBoolean\\n setValue=this.setValue\\n invalid=this.hasErrors\\n )\\n textarea=(component\\n (ensure-safe-component this.TextareaComponent)\\n name=@name\\n fieldId=fieldId\\n errorId=errorId\\n value=this.valueAsString\\n setValue=this.setValue\\n invalid=this.hasErrors\\n )\\n radio=(component\\n (ensure-safe-component this.RadioComponent)\\n name=@name\\n selected=this.valueAsString\\n setValue=this.setValue\\n )\\n value=this.value\\n setValue=setValue\\n id=fieldId\\n errorId=errorId\\n errors=(if\\n this.errors\\n (component\\n (ensure-safe-component this.ErrorsComponent)\\n errors=this.errors\\n id=errorId\\n )\\n )\\n isInvalid=this.hasErrors\\n triggerValidation=triggerValidation\\n captureEvents=(modifier\\n this.CaptureEventsModifier\\n event=(if this.hasErrors @fieldRevalidationEvent @fieldValidationEvent)\\n triggerValidation=triggerValidation\\n )\\n )\\n }}\\n{{/let}}\")","import Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport CaptureEventsModifier from './capture-events';\nimport CheckboxComponent from './control/checkbox';\nimport InputComponent from './control/input';\nimport RadioComponent from './control/radio';\nimport TextareaComponent from './control/textarea';\nimport ErrorsComponent from './errors';\nimport LabelComponent from './label';\n\nimport type { CaptureEventsModifierSignature } from './capture-events';\nimport type { HeadlessFormControlCheckboxComponentSignature } from './control/checkbox';\nimport type { HeadlessFormControlInputComponentSignature } from './control/input';\nimport type { HeadlessFormControlRadioComponentSignature } from './control/radio';\nimport type { HeadlessFormControlTextareaComponentSignature } from './control/textarea';\nimport type { HeadlessFormErrorsComponentSignature } from './errors';\nimport type { HeadlessFormLabelComponentSignature } from './label';\nimport type {\n ErrorRecord,\n FieldValidateCallback,\n FormData,\n RegisterFieldCallback,\n UnregisterFieldCallback,\n} from './types';\nimport type { FormKey, UserData, ValidationError } from './types';\nimport type {\n ComponentLike,\n ModifierLike,\n WithBoundArgs,\n} from '@glint/template';\n\nexport interface HeadlessFormFieldComponentSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Args: {\n data: FormData<DATA>;\n name: KEY;\n set: (key: KEY, value: DATA[KEY]) => void;\n validate?: FieldValidateCallback<FormData<DATA>, KEY>;\n errors?: ErrorRecord<DATA, KEY>;\n registerField: RegisterFieldCallback<FormData<DATA>, KEY>;\n unregisterField: UnregisterFieldCallback<FormData<DATA>, KEY>;\n triggerValidationFor(name: KEY): Promise<void>;\n fieldValidationEvent: 'focusout' | 'change' | 'input' | undefined;\n fieldRevalidationEvent: 'focusout' | 'change' | 'input' | undefined;\n };\n Blocks: {\n default: [\n {\n label: WithBoundArgs<typeof LabelComponent, 'fieldId'>;\n input: WithBoundArgs<\n typeof InputComponent,\n 'name' | 'fieldId' | 'value' | 'setValue' | 'invalid' | 'errorId'\n >;\n checkbox: WithBoundArgs<\n typeof CheckboxComponent,\n 'name' | 'fieldId' | 'value' | 'setValue' | 'invalid' | 'errorId'\n >;\n radio: WithBoundArgs<\n typeof RadioComponent,\n 'name' | 'selected' | 'setValue'\n >;\n textarea: WithBoundArgs<\n typeof TextareaComponent,\n 'name' | 'fieldId' | 'value' | 'setValue' | 'invalid' | 'errorId'\n >;\n value: DATA[KEY];\n setValue: (value: DATA[KEY]) => void;\n id: string;\n errorId: string;\n errors?: WithBoundArgs<\n typeof ErrorsComponent<DATA[KEY]>,\n 'errors' | 'id'\n >;\n isInvalid: boolean;\n triggerValidation: () => void;\n captureEvents: WithBoundArgs<\n ModifierLike<CaptureEventsModifierSignature>,\n 'event' | 'triggerValidation'\n >;\n }\n ];\n };\n}\n\nexport default class HeadlessFormFieldComponent<\n DATA extends FormData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<HeadlessFormFieldComponentSignature<DATA, KEY>> {\n LabelComponent: ComponentLike<HeadlessFormLabelComponentSignature> =\n LabelComponent;\n InputComponent: ComponentLike<HeadlessFormControlInputComponentSignature> =\n InputComponent;\n CheckboxComponent: ComponentLike<HeadlessFormControlCheckboxComponentSignature> =\n CheckboxComponent;\n ErrorsComponent: ComponentLike<\n HeadlessFormErrorsComponentSignature<DATA[KEY]>\n > = ErrorsComponent;\n TextareaComponent: ComponentLike<HeadlessFormControlTextareaComponentSignature> =\n TextareaComponent;\n RadioComponent: ComponentLike<HeadlessFormControlRadioComponentSignature> =\n RadioComponent;\n CaptureEventsModifier = CaptureEventsModifier;\n\n constructor(\n owner: unknown,\n args: HeadlessFormFieldComponentSignature<DATA, KEY>['Args']\n ) {\n super(owner, args);\n\n this.args.registerField(this.args.name, {\n validate: this.args.validate,\n });\n }\n\n willDestroy(): void {\n this.args.unregisterField(this.args.name);\n\n super.willDestroy();\n }\n\n get value(): DATA[KEY] {\n return this.args.data[this.args.name];\n }\n\n get errors(): ValidationError<DATA[KEY]>[] | undefined {\n return this.args.errors?.[this.args.name];\n }\n\n get hasErrors(): boolean {\n return this.errors !== undefined;\n }\n\n get valueAsString(): string | undefined {\n assert(\n `Only string values are expected for ${String(\n this.args.name\n )}, but you passed ${typeof this.value}`,\n typeof this.value === 'undefined' || typeof this.value === 'string'\n );\n\n return this.value;\n }\n\n get valueAsBoolean(): boolean | undefined {\n assert(\n `Only boolean values are expected for ${String(\n this.args.name\n )}, but you passed ${typeof this.value}`,\n typeof this.value === 'undefined' || typeof this.value === 'boolean'\n );\n\n return this.value;\n }\n\n @action\n setValue(value: unknown): void {\n this.args.set(this.args.name, value as DATA[KEY]);\n }\n}\n"],"names":["precompileTemplate","HeadlessFormFieldComponent","Component","constructor","owner","args","LabelComponent","InputComponent","CheckboxComponent","ErrorsComponent","TextareaComponent","RadioComponent","CaptureEventsModifier","registerField","name","validate","willDestroy","unregisterField","value","data","errors","hasErrors","undefined","valueAsString","assert","String","valueAsBoolean","setValue","set","action"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"label.js","sources":["../../../src/components/-private/label.hbs.js","../../../src/components/-private/label.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<label for={{@fieldId}} ...attributes>\\n {{yield}}\\n</label>\")","import templateOnlyComponent from '@ember/component/template-only';\n\nexport interface HeadlessFormLabelComponentSignature {\n Element: HTMLLabelElement;\n Args: {\n fieldId: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default templateOnlyComponent<HeadlessFormLabelComponentSignature>();\n"],"names":["precompileTemplate","templateOnlyComponent"],"mappings":";;;;AACA,eAAeA,kBAAkB,CAAC,+DAA+D,CAAC;;ACWlG,qBAAA,oBAAA,CAAA,QAAA,EAAeC,qBAAqB,EAAuC,CAAA;;;;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/components/-private/utils.ts"],"sourcesContent":["import type { ErrorRecord, FormData, FormKey, ValidationError } from './types';\n\nexport function mergeErrorRecord<\n DATA extends FormData,\n KEY extends FormKey<DATA> = FormKey<DATA>\n>(\n ...records: Array<ErrorRecord<DATA, KEY> | undefined>\n): ErrorRecord<DATA, KEY> {\n const errors: ErrorRecord<DATA, KEY> = {};\n\n for (const record of records) {\n if (!record) {\n continue;\n }\n\n for (const [name, fieldErrors] of Object.entries(record) as [\n // TS does not infer the types correctly here, fieldErrors would be unknown, not sure why\n KEY,\n ValidationError<DATA[KEY]>[]\n ][]) {\n const existingFieldErrors = errors[name];\n\n errors[name] = existingFieldErrors\n ? [...existingFieldErrors, ...fieldErrors]\n : fieldErrors;\n }\n }\n\n return errors;\n}\n"],"names":["mergeErrorRecord","records","errors","record","name","fieldErrors","Object","entries","existingFieldErrors"],"mappings":"AAEO,SAASA,gBAAgB,CAI9B,GAAGC,OAAkD,EAC7B;EACxB,MAAMC,MAA8B,GAAG,EAAE,CAAA;AAEzC,EAAA,KAAK,MAAMC,MAAM,IAAIF,OAAO,EAAE;IAC5B,IAAI,CAACE,MAAM,EAAE;AACX,MAAA,SAAA;AACF,KAAA;AAEA,IAAA,KAAK,MAAM,CAACC,IAAI,EAAEC,WAAW,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,MAAM,CAAC,EAInD;AACH,MAAA,MAAMK,mBAAmB,GAAGN,MAAM,CAACE,IAAI,CAAC,CAAA;AAExCF,MAAAA,MAAM,CAACE,IAAI,CAAC,GAAGI,mBAAmB,GAC9B,CAAC,GAAGA,mBAAmB,EAAE,GAAGH,WAAW,CAAC,GACxCA,WAAW,CAAA;AACjB,KAAA;AACF,GAAA;AAEA,EAAA,OAAOH,MAAM,CAAA;AACf;;;;"}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|