ember-headless-form 0.0.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.
Files changed (48) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +26 -0
  3. package/addon-main.js +5 -0
  4. package/dist/_app_/components/headless-form.js +1 -0
  5. package/dist/components/-private/capture-events.d.ts +21 -0
  6. package/dist/components/-private/capture-events.d.ts.map +1 -0
  7. package/dist/components/-private/capture-events.js +16 -0
  8. package/dist/components/-private/capture-events.js.map +1 -0
  9. package/dist/components/-private/control/checkbox.d.ts +16 -0
  10. package/dist/components/-private/control/checkbox.js +18 -0
  11. package/dist/components/-private/control/checkbox.js.map +1 -0
  12. package/dist/components/-private/control/input.d.ts +20 -0
  13. package/dist/components/-private/control/input.js +32 -0
  14. package/dist/components/-private/control/input.js.map +1 -0
  15. package/dist/components/-private/control/radio/input.d.ts +12 -0
  16. package/dist/components/-private/control/radio/input.js +10 -0
  17. package/dist/components/-private/control/radio/input.js.map +1 -0
  18. package/dist/components/-private/control/radio.d.ts +28 -0
  19. package/dist/components/-private/control/radio.js +23 -0
  20. package/dist/components/-private/control/radio.js.map +1 -0
  21. package/dist/components/-private/control/textarea.d.ts +16 -0
  22. package/dist/components/-private/control/textarea.js +18 -0
  23. package/dist/components/-private/control/textarea.js.map +1 -0
  24. package/dist/components/-private/errors.d.ts +15 -0
  25. package/dist/components/-private/errors.js +12 -0
  26. package/dist/components/-private/errors.js.map +1 -0
  27. package/dist/components/-private/field.d.ts +76 -0
  28. package/dist/components/-private/field.js +61 -0
  29. package/dist/components/-private/field.js.map +1 -0
  30. package/dist/components/-private/label.d.ts +11 -0
  31. package/dist/components/-private/label.js +10 -0
  32. package/dist/components/-private/label.js.map +1 -0
  33. package/dist/components/-private/types.d.ts +48 -0
  34. package/dist/components/-private/types.js +2 -0
  35. package/dist/components/-private/types.js.map +1 -0
  36. package/dist/components/-private/utils.d.ts +3 -0
  37. package/dist/components/-private/utils.js +16 -0
  38. package/dist/components/-private/utils.js.map +1 -0
  39. package/dist/components/headless-form.d.ts +123 -0
  40. package/dist/components/headless-form.js +258 -0
  41. package/dist/components/headless-form.js.map +1 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +2 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/template-registry.d.ts +5 -0
  46. package/dist/template-registry.js +2 -0
  47. package/dist/template-registry.js.map +1 -0
  48. package/package.json +120 -0
package/LICENSE.md ADDED
@@ -0,0 +1,9 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # ember-headless-form
2
+
3
+ [Short description of the addon.]
4
+
5
+ ## Compatibility
6
+
7
+ - Ember.js v4.8 or above
8
+ - Embroider or ember-auto-import v2
9
+
10
+ ## Installation
11
+
12
+ ```
13
+ ember install ember-headless-form
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ [Longer description of how to use the addon in apps.]
19
+
20
+ ## Contributing
21
+
22
+ See the [Contributing](CONTRIBUTING.md) guide for details.
23
+
24
+ ## License
25
+
26
+ This project is licensed under the [MIT License](LICENSE.md).
package/addon-main.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ const { addonV1Shim } = require('@embroider/addon-shim');
4
+
5
+ module.exports = addonV1Shim(__dirname);
@@ -0,0 +1 @@
1
+ export { default } from "ember-headless-form/components/headless-form";
@@ -0,0 +1,21 @@
1
+ interface CaptureEventsModifierSignature {
2
+ Element: HTMLElement;
3
+ Args: {
4
+ Named: {
5
+ event: 'focusout' | 'change';
6
+ triggerValidation(): void;
7
+ };
8
+ };
9
+ }
10
+ declare const CaptureEventsModifier: import("ember-modifier/.").FunctionBasedModifier<{
11
+ Element: HTMLElement;
12
+ Args: {
13
+ Named: {
14
+ event: 'focusout' | 'change';
15
+ triggerValidation(): void;
16
+ };
17
+ Positional: [];
18
+ };
19
+ }>;
20
+ export { CaptureEventsModifier as default, CaptureEventsModifierSignature };
21
+ //# sourceMappingURL=components/-private/capture-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components/-private/capture-events.d.ts","sourceRoot":"","sources":["../src/components/-private/capture-events.ts"],"names":[],"mappings":"AAEA,UAAiB,8BAA8B;IAC7C,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;YAC7B,iBAAiB,IAAI,IAAI,CAAC;SAC3B,CAAC;KACH,CAAC;CACH;AAED,QAAA,MAAM,qBAAqB;;;;mBANd,UAAU,GAAG,QAAQ;iCACP,IAAI;;;;EAa9B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { modifier } from 'ember-modifier';
2
+
3
+ const CaptureEventsModifier = modifier((element, _pos, {
4
+ event,
5
+ triggerValidation
6
+ }) => {
7
+ element.addEventListener(event, triggerValidation, {
8
+ passive: true
9
+ });
10
+ return () => {
11
+ element.removeEventListener(event, triggerValidation);
12
+ };
13
+ });
14
+
15
+ export { CaptureEventsModifier as default };
16
+ //# sourceMappingURL=capture-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-events.js","sources":["../../../src/components/-private/capture-events.ts"],"sourcesContent":["import { modifier } from 'ember-modifier';\n\nexport interface CaptureEventsModifierSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n event: 'focusout' | 'change';\n triggerValidation(): void;\n };\n };\n}\n\nconst CaptureEventsModifier = modifier<CaptureEventsModifierSignature>(\n (element, _pos, { event, triggerValidation }) => {\n element.addEventListener(event, triggerValidation, { passive: true });\n\n return () => {\n element.removeEventListener(event, triggerValidation);\n };\n }\n);\n\nexport default CaptureEventsModifier;\n"],"names":["CaptureEventsModifier","modifier","element","_pos","event","triggerValidation","addEventListener","passive","removeEventListener"],"mappings":";;AAYMA,MAAAA,qBAAqB,GAAGC,QAAQ,CACpC,CAACC,OAAO,EAAEC,IAAI,EAAE;EAAEC,KAAK;AAAEC,EAAAA,iBAAAA;AAAkB,CAAC,KAAK;AAC/CH,EAAAA,OAAO,CAACI,gBAAgB,CAACF,KAAK,EAAEC,iBAAiB,EAAE;AAAEE,IAAAA,OAAO,EAAE,IAAA;AAAK,GAAC,CAAC,CAAA;AAErE,EAAA,OAAO,MAAM;AACXL,IAAAA,OAAO,CAACM,mBAAmB,CAACJ,KAAK,EAAEC,iBAAiB,CAAC,CAAA;GACtD,CAAA;AACH,CAAC;;;;"}
@@ -0,0 +1,16 @@
1
+ import Component from '@glimmer/component';
2
+ interface HeadlessFormControlCheckboxComponentSignature {
3
+ Element: HTMLInputElement;
4
+ Args: {
5
+ value: boolean;
6
+ name: string;
7
+ fieldId: string;
8
+ setValue: (value: boolean) => void;
9
+ invalid: boolean;
10
+ errorId: string;
11
+ };
12
+ }
13
+ declare class HeadlessFormControlCheckboxComponent extends Component<HeadlessFormControlCheckboxComponentSignature> {
14
+ handleInput(e: Event | InputEvent): void;
15
+ }
16
+ export { HeadlessFormControlCheckboxComponentSignature, HeadlessFormControlCheckboxComponent as default };
@@ -0,0 +1,18 @@
1
+ import _applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
2
+ import { setComponentTemplate } from '@ember/component';
3
+ import { precompileTemplate } from '@ember/template-compilation';
4
+ import Component from '@glimmer/component';
5
+ import { action } from '@ember/object';
6
+
7
+ var TEMPLATE = precompileTemplate("<input\n name={{@name}}\n type=\'checkbox\'\n checked={{@value}}\n id={{@fieldId}}\n aria-invalid={{if @invalid \'true\'}}\n ...attributes\n {{on \'click\' this.handleInput}}\n/>");
8
+
9
+ var _class;
10
+ let HeadlessFormControlCheckboxComponent = (_class = class HeadlessFormControlCheckboxComponent extends Component {
11
+ handleInput(e) {
12
+ this.args.setValue(e.target.checked);
13
+ }
14
+ }, (_applyDecoratedDescriptor(_class.prototype, "handleInput", [action], Object.getOwnPropertyDescriptor(_class.prototype, "handleInput"), _class.prototype)), _class);
15
+ setComponentTemplate(TEMPLATE, HeadlessFormControlCheckboxComponent);
16
+
17
+ export { HeadlessFormControlCheckboxComponent as default };
18
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sources":["../../../../src/components/-private/control/checkbox.hbs.js","../../../../src/components/-private/control/checkbox.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<input\\n name={{@name}}\\n type=\\'checkbox\\'\\n checked={{@value}}\\n id={{@fieldId}}\\n aria-invalid={{if @invalid \\'true\\'}}\\n ...attributes\\n {{on \\'click\\' this.handleInput}}\\n/>\")","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport interface HeadlessFormControlCheckboxComponentSignature {\n Element: HTMLInputElement;\n Args: {\n value: boolean;\n name: string;\n fieldId: string;\n setValue: (value: boolean) => void;\n invalid: boolean;\n errorId: string;\n };\n}\n\nexport default class HeadlessFormControlCheckboxComponent extends Component<HeadlessFormControlCheckboxComponentSignature> {\n @action\n handleInput(e: Event | InputEvent): void {\n this.args.setValue((e.target as HTMLInputElement).checked);\n }\n}\n"],"names":["precompileTemplate","HeadlessFormControlCheckboxComponent","Component","handleInput","e","args","setValue","target","checked","action"],"mappings":";;;;;;AACA,eAAeA,kBAAkB,CAAC,2LAA2L,CAAC;;;ACAvL,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,CAAsBC,OAAO,CAAC,CAAA;AAC5D,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;;;;"}
@@ -0,0 +1,20 @@
1
+ import Component from '@glimmer/component';
2
+ type InputType = 'color' | 'date' | 'datetime-local' | 'email' | 'hidden' | 'month' | 'number' | 'password' | 'range' | 'search' | 'tel' | 'text' | 'time' | 'url' | 'week';
3
+ interface HeadlessFormControlInputComponentSignature {
4
+ Element: HTMLInputElement;
5
+ Args: {
6
+ value: string;
7
+ name: string;
8
+ type?: InputType;
9
+ fieldId: string;
10
+ setValue: (value: string) => void;
11
+ invalid: boolean;
12
+ errorId: string;
13
+ };
14
+ }
15
+ declare class HeadlessFormControlInputComponent extends Component<HeadlessFormControlInputComponentSignature> {
16
+ constructor(owner: unknown, args: HeadlessFormControlInputComponentSignature['Args']);
17
+ get type(): InputType;
18
+ handleInput(e: Event | InputEvent): void;
19
+ }
20
+ export { InputType, HeadlessFormControlInputComponentSignature, HeadlessFormControlInputComponent as default };
@@ -0,0 +1,32 @@
1
+ import _applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
2
+ import { setComponentTemplate } from '@ember/component';
3
+ import { precompileTemplate } from '@ember/template-compilation';
4
+ import Component from '@glimmer/component';
5
+ import { assert } from '@ember/debug';
6
+ import { action } from '@ember/object';
7
+
8
+ var TEMPLATE = 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/>");
9
+
10
+ var _class;
11
+
12
+ // Possible values for the input type, see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types
13
+ // for the sake ok completeness, we list all here, with some commented out that are better handled elsewhere, or not at all...
14
+ let HeadlessFormControlInputComponent = (_class = class HeadlessFormControlInputComponent extends Component {
15
+ constructor(owner, args) {
16
+ assert(`input component does not support @type="${args.type}" as there is a dedicated component for this. Please use the \`field.${args.type}\` instead!`, args.type === undefined ||
17
+ // TS would guard us against using an unsupported `InputType`, but for JS consumers we add a dev-only runtime check here
18
+ !['checkbox', 'radio'].includes(args.type));
19
+ super(owner, args);
20
+ }
21
+ get type() {
22
+ return this.args.type ?? 'text';
23
+ }
24
+ handleInput(e) {
25
+ assert('Expected HTMLInputElement', e.target instanceof HTMLInputElement);
26
+ this.args.setValue(e.target.value);
27
+ }
28
+ }, (_applyDecoratedDescriptor(_class.prototype, "handleInput", [action], Object.getOwnPropertyDescriptor(_class.prototype, "handleInput"), _class.prototype)), _class);
29
+ setComponentTemplate(TEMPLATE, HeadlessFormControlInputComponent);
30
+
31
+ export { HeadlessFormControlInputComponent as default };
32
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,12 @@
1
+ interface HeadlessFormControlRadioInputComponentSignature {
2
+ Element: HTMLInputElement;
3
+ Args: {
4
+ value: string;
5
+ name: string;
6
+ checked: boolean;
7
+ fieldId: string;
8
+ setValue: (value: string) => void;
9
+ };
10
+ }
11
+ declare const _default: import("@ember/component/template-only").TemplateOnlyComponent<HeadlessFormControlRadioInputComponentSignature>;
12
+ export { _default as default, HeadlessFormControlRadioInputComponentSignature };
@@ -0,0 +1,10 @@
1
+ import { setComponentTemplate } from '@ember/component';
2
+ import { precompileTemplate } from '@ember/template-compilation';
3
+ import templateOnlyComponent from '@ember/component/template-only';
4
+
5
+ var TEMPLATE = 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/>");
6
+
7
+ var RadioInputComponent = setComponentTemplate(TEMPLATE, templateOnlyComponent());
8
+
9
+ export { RadioInputComponent as default };
10
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,28 @@
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 };
@@ -0,0 +1,23 @@
1
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
+ import { setComponentTemplate } from '@ember/component';
3
+ import { precompileTemplate } from '@ember/template-compilation';
4
+ import Component from '@glimmer/component';
5
+ import LabelComponent from '../label.js';
6
+ import RadioInputComponent from './radio/input.js';
7
+
8
+ var TEMPLATE = 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}}");
9
+
10
+ class HeadlessFormControlRadioComponent extends Component {
11
+ constructor(...args) {
12
+ super(...args);
13
+ _defineProperty(this, "LabelComponent", LabelComponent);
14
+ _defineProperty(this, "RadioInputComponent", RadioInputComponent);
15
+ }
16
+ get isChecked() {
17
+ return this.args.selected === this.args.value;
18
+ }
19
+ }
20
+ setComponentTemplate(TEMPLATE, HeadlessFormControlRadioComponent);
21
+
22
+ export { HeadlessFormControlRadioComponent as default };
23
+ //# sourceMappingURL=radio.js.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,16 @@
1
+ import Component from '@glimmer/component';
2
+ interface HeadlessFormControlTextareaComponentSignature {
3
+ Element: HTMLTextAreaElement;
4
+ Args: {
5
+ value: string;
6
+ name: string;
7
+ fieldId: string;
8
+ setValue: (value: string) => void;
9
+ invalid: boolean;
10
+ errorId: string;
11
+ };
12
+ }
13
+ declare class HeadlessFormControlTextareaComponent extends Component<HeadlessFormControlTextareaComponentSignature> {
14
+ handleInput(e: Event | InputEvent): void;
15
+ }
16
+ export { HeadlessFormControlTextareaComponentSignature, HeadlessFormControlTextareaComponent as default };
@@ -0,0 +1,18 @@
1
+ import _applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
2
+ import { setComponentTemplate } from '@ember/component';
3
+ import { precompileTemplate } from '@ember/template-compilation';
4
+ import Component from '@glimmer/component';
5
+ import { action } from '@ember/object';
6
+
7
+ var TEMPLATE = 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>");
8
+
9
+ var _class;
10
+ let HeadlessFormControlTextareaComponent = (_class = class HeadlessFormControlTextareaComponent extends Component {
11
+ handleInput(e) {
12
+ this.args.setValue(e.target.value);
13
+ }
14
+ }, (_applyDecoratedDescriptor(_class.prototype, "handleInput", [action], Object.getOwnPropertyDescriptor(_class.prototype, "handleInput"), _class.prototype)), _class);
15
+ setComponentTemplate(TEMPLATE, HeadlessFormControlTextareaComponent);
16
+
17
+ export { HeadlessFormControlTextareaComponent as default };
18
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,15 @@
1
+ import Component from '@glimmer/component';
2
+ import { ValidationError } from "./types.js";
3
+ interface HeadlessFormErrorsComponentSignature<VALUE> {
4
+ Element: HTMLDivElement;
5
+ Args: {
6
+ errors: ValidationError<VALUE>[];
7
+ id: string;
8
+ };
9
+ Blocks: {
10
+ default?: [ValidationError<VALUE>[]];
11
+ };
12
+ }
13
+ declare class HeadlessFormErrorsComponent<VALUE> extends Component<HeadlessFormErrorsComponentSignature<VALUE>> {
14
+ }
15
+ export { HeadlessFormErrorsComponentSignature, HeadlessFormErrorsComponent as default };
@@ -0,0 +1,12 @@
1
+ import { setComponentTemplate } from '@ember/component';
2
+ import { precompileTemplate } from '@ember/template-compilation';
3
+ import Component from '@glimmer/component';
4
+
5
+ var TEMPLATE = 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>");
6
+
7
+ // 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>>
8
+ class HeadlessFormErrorsComponent extends Component {}
9
+ setComponentTemplate(TEMPLATE, HeadlessFormErrorsComponent);
10
+
11
+ export { HeadlessFormErrorsComponent as default };
12
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,76 @@
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 };
@@ -0,0 +1,61 @@
1
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
+ import _applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
3
+ import { setComponentTemplate } from '@ember/component';
4
+ import { precompileTemplate } from '@ember/template-compilation';
5
+ import Component from '@glimmer/component';
6
+ import { assert } from '@ember/debug';
7
+ import { action } from '@ember/object';
8
+ import CaptureEventsModifier from './capture-events.js';
9
+ import HeadlessFormControlCheckboxComponent from './control/checkbox.js';
10
+ import HeadlessFormControlInputComponent from './control/input.js';
11
+ import HeadlessFormControlRadioComponent from './control/radio.js';
12
+ import HeadlessFormControlTextareaComponent from './control/textarea.js';
13
+ import HeadlessFormErrorsComponent from './errors.js';
14
+ import LabelComponent from './label.js';
15
+
16
+ var TEMPLATE = 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}}");
17
+
18
+ var _class;
19
+ let HeadlessFormFieldComponent = (_class = class HeadlessFormFieldComponent extends Component {
20
+ constructor(owner, args) {
21
+ super(owner, args);
22
+ _defineProperty(this, "LabelComponent", LabelComponent);
23
+ _defineProperty(this, "InputComponent", HeadlessFormControlInputComponent);
24
+ _defineProperty(this, "CheckboxComponent", HeadlessFormControlCheckboxComponent);
25
+ _defineProperty(this, "ErrorsComponent", HeadlessFormErrorsComponent);
26
+ _defineProperty(this, "TextareaComponent", HeadlessFormControlTextareaComponent);
27
+ _defineProperty(this, "RadioComponent", HeadlessFormControlRadioComponent);
28
+ _defineProperty(this, "CaptureEventsModifier", CaptureEventsModifier);
29
+ this.args.registerField(this.args.name, {
30
+ validate: this.args.validate
31
+ });
32
+ }
33
+ willDestroy() {
34
+ this.args.unregisterField(this.args.name);
35
+ super.willDestroy();
36
+ }
37
+ get value() {
38
+ return this.args.data[this.args.name];
39
+ }
40
+ get errors() {
41
+ return this.args.errors?.[this.args.name];
42
+ }
43
+ get hasErrors() {
44
+ return this.errors !== undefined;
45
+ }
46
+ get valueAsString() {
47
+ assert(`Only string values are expected for ${String(this.args.name)}, but you passed ${typeof this.value}`, typeof this.value === 'undefined' || typeof this.value === 'string');
48
+ return this.value;
49
+ }
50
+ get valueAsBoolean() {
51
+ assert(`Only boolean values are expected for ${String(this.args.name)}, but you passed ${typeof this.value}`, typeof this.value === 'undefined' || typeof this.value === 'boolean');
52
+ return this.value;
53
+ }
54
+ setValue(value) {
55
+ this.args.set(this.args.name, value);
56
+ }
57
+ }, (_applyDecoratedDescriptor(_class.prototype, "setValue", [action], Object.getOwnPropertyDescriptor(_class.prototype, "setValue"), _class.prototype)), _class);
58
+ setComponentTemplate(TEMPLATE, HeadlessFormFieldComponent);
59
+
60
+ export { HeadlessFormFieldComponent as default };
61
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
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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"}
@@ -0,0 +1,11 @@
1
+ interface HeadlessFormLabelComponentSignature {
2
+ Element: HTMLLabelElement;
3
+ Args: {
4
+ fieldId: string;
5
+ };
6
+ Blocks: {
7
+ default: [];
8
+ };
9
+ }
10
+ declare const _default: import("@ember/component/template-only").TemplateOnlyComponent<HeadlessFormLabelComponentSignature>;
11
+ export { _default as default, HeadlessFormLabelComponentSignature };
@@ -0,0 +1,10 @@
1
+ import { setComponentTemplate } from '@ember/component';
2
+ import { precompileTemplate } from '@ember/template-compilation';
3
+ import templateOnlyComponent from '@ember/component/template-only';
4
+
5
+ var TEMPLATE = precompileTemplate("<label for={{@fieldId}} ...attributes>\n {{yield}}\n</label>");
6
+
7
+ var LabelComponent = setComponentTemplate(TEMPLATE, templateOnlyComponent());
8
+
9
+ export { LabelComponent as default };
10
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
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;;;;"}