diff --git a/.changeset/serious-dodos-scream.md b/.changeset/serious-dodos-scream.md new file mode 100644 index 000000000..39c18866e --- /dev/null +++ b/.changeset/serious-dodos-scream.md @@ -0,0 +1,5 @@ +--- +'@crowdstrike/ember-toucan-form': minor +--- + +Exposes validationState, submissionState, isInvalid and rawErrors from the HeadlessForm component diff --git a/docs-app/package.json b/docs-app/package.json index 4f327695c..26d6ca35a 100644 --- a/docs-app/package.json +++ b/docs-app/package.json @@ -93,6 +93,7 @@ "ember-fetch": "^8.1.2", "ember-headless-form": "1.1.0", "ember-headless-form-changeset": "1.0.0", + "ember-headless-form-yup": "1.0.0", "ember-load-initializers": "^2.1.2", "ember-page-title": "^8.0.0-beta.0", "ember-qunit": "^8.0.0", @@ -140,7 +141,8 @@ "ember-velcro": "^2.1.0", "highlight.js": "^11.6.0", "highlightjs-glimmer": "^2.0.0", - "tracked-built-ins": "^3.1.0" + "tracked-built-ins": "^3.1.0", + "yup": "^1.0.0" }, "dependenciesMeta": { "@crowdstrike/ember-toucan-core": { diff --git a/docs/toucan-form/async/demo/base-demo.md b/docs/toucan-form/async/demo/base-demo.md new file mode 100644 index 000000000..22d5d2a90 --- /dev/null +++ b/docs/toucan-form/async/demo/base-demo.md @@ -0,0 +1,54 @@ +# Async state + +Submit this form with a valid email, and with the same email again, to see how it disables the submit button, changes its label, and shows error messages coming from the "backend": + +```hbs template + + +
+ Email + +
+
+ + + + {{#if form.submissionState.isResolved}} +

We got your data! 🎉

+ {{else if form.submissionState.isRejected}} +

⛔️ {{form.submissionState.error}}

+ {{/if}} +
+``` + +```js component +import Component from '@glimmer/component'; +import { action } from '@ember/object'; + +export default class MyFormComponent extends Component { + saved = []; + + @action + async handleSubmit({ email }) { + // pretending something async is happening here + await new Promise((r) => setTimeout(r, 3000)); + + if (!email) { + throw new Error('No email given'); + } + + if (this.saved.includes(email)) { + // Throwing this error will cause the form to yield form.submissionState.isRejected as true + throw new Error(`${email} is already taken!`); + } + + this.saved.push(email); + } +} +``` diff --git a/docs/toucan-form/async/index.md b/docs/toucan-form/async/index.md new file mode 100644 index 000000000..4085ae66c --- /dev/null +++ b/docs/toucan-form/async/index.md @@ -0,0 +1,29 @@ +--- +title: Async state +order: 5 +--- + +# Managing asynchronous state + +toucan-form knows about two events that can be asynchronous: + +- **validation** will often be synchronous, but you can also use the ember-headless-form [asynchronous validations](https://ember-headless-form.pages.dev/docs/validation/custom-validation#asynchronous-validation) for e.g. validating data on the server +- **submission** is most often asynchronous when e.g. sending a `POST` request with your form data to the server + +To make the form aware of the asynchronous submission process, you just need to return a Promise from the submit callback passed to [`@onSubmit`](https://ember-headless-form.pages.dev/docs/usage/data#getting-data-out). + +ember-headless-form will then make the async state of both these events available to you in the template. This allows for use cases like + +- disabling the submit button while a submission is ongoing +- showing a loading indicator while submission or validation is pending +- rendering the results of the (either successful or failed) submission, after it is resolved/rejected + +To enable these, the form component is yielding `validationState` and `submissionState` objects with these properties: + +- `isPending` +- `isResolved` +- `isRejected` +- `value` (when resolved) +- `error` (when rejected) + +These derived properties are fully reactive and typed, as these are provided by the excellent [ember-async-data](https://github.com/tracked-tools/ember-async-data) addon. Refer to their documentation for additional details! diff --git a/docs/toucan-form/native-validation/index.md b/docs/toucan-form/native-validation/index.md index 7c3c2c852..87924a806 100644 --- a/docs/toucan-form/native-validation/index.md +++ b/docs/toucan-form/native-validation/index.md @@ -1,6 +1,6 @@ --- title: Native validation -order: 3 +order: 4 --- # Native validation diff --git a/docs/toucan-form/yup-validation/demo/base-demo.md b/docs/toucan-form/yup-validation/demo/base-demo.md new file mode 100644 index 000000000..2ff0a6036 --- /dev/null +++ b/docs/toucan-form/yup-validation/demo/base-demo.md @@ -0,0 +1,43 @@ +```hbs template +
+ + + + + + +
+``` + +```js component +import Component from '@glimmer/component'; +import { object, string } from 'yup'; + +export default class extends Component { + data = { + name: '', + email: '', + }; + + schema = object({ + name: string().required(), + email: string().required().email(), + }); + + handleSubmit(data) { + console.log({ data }); + + alert( + `Form submitted with:\n${Object.entries(data) + .map(([key, value]) => `${key}: ${value}`) + .join('\n')}` + ); + } +} +``` diff --git a/docs/toucan-form/yup-validation/index.md b/docs/toucan-form/yup-validation/index.md new file mode 100644 index 000000000..119f123bd --- /dev/null +++ b/docs/toucan-form/yup-validation/index.md @@ -0,0 +1,20 @@ +--- +title: Yup validation +order: 3 +--- + +# Yup validation + +This demo shows how to implement [yup](https://github.com/jquense/yup) validation with ember-toucan-form, powered by [ember-headless-form](https://ember-headless-form.pages.dev/docs/validation/yup). + +## Install the adapter package + +Before using yup validations with Toucan Form, you'll need to install it as a dependency. + +```bash +pnpm add yup ember-headless-form-yup +# or +yarn add yup ember-headless-form-yup +# or +npm install yup ember-headless-form-yup +``` diff --git a/packages/ember-toucan-form/package.json b/packages/ember-toucan-form/package.json index 7fef26dba..72e68b18e 100644 --- a/packages/ember-toucan-form/package.json +++ b/packages/ember-toucan-form/package.json @@ -89,6 +89,7 @@ "@typescript-eslint/parser": "^5.30.5", "autoprefixer": "^10.0.2", "concurrently": "^8.0.0", + "ember-async-data": "^1.0.3", "ember-cli-htmlbars": "^6.1.1", "ember-headless-form": "^1.0.0-beta.3", "ember-source": "~5.12.0", diff --git a/packages/ember-toucan-form/src/components/toucan-form.gts b/packages/ember-toucan-form/src/components/toucan-form.gts index e8898d7fb..58a0129f0 100644 --- a/packages/ember-toucan-form/src/components/toucan-form.gts +++ b/packages/ember-toucan-form/src/components/toucan-form.gts @@ -14,6 +14,8 @@ import TextareaFieldComponent from '../-private/textarea-field'; import type { HeadlessFormBlock, UserData } from '../-private/types'; import type { WithBoundArgs } from '@glint/template'; +import type { TrackedAsyncData } from 'ember-async-data'; +import type { ErrorRecord } from 'ember-headless-form'; import type { HeadlessFormComponentSignature } from 'ember-headless-form/components/headless-form'; type HeadlessFormArguments< @@ -52,6 +54,30 @@ export interface ToucanFormComponentSignature< >; Textarea: WithBoundArgs, 'form'>; + /** + * The (async) validation state as `TrackedAsyncData`. + * + * Use derived state like `.isPending` to render the UI conditionally. + */ + validationState?: TrackedAsyncData>; + + /** + * The (async) submission state as `TrackedAsyncData`. + * + * Use derived state like `.isPending` to render the UI conditionally. + */ + submissionState?: TrackedAsyncData; + + /** + * Will be true if at least one form field is invalid. + */ + isInvalid: boolean; + + /** + * An ErrorRecord, for custom rendering of error output + */ + rawErrors?: ErrorRecord; + /** * Yielded action that will trigger form validation and submission, same as when triggering the native `submit` event on the form. * @@ -114,6 +140,10 @@ export default class ToucanFormComponent< Multiselect=(component this.MultiselectFieldComponent form=form) RadioGroup=(component this.RadioGroupFieldComponent form=form) Textarea=(component this.TextareaFieldComponent form=form) + validationState=form.validationState + submissionState=form.submissionState + isInvalid=form.isInvalid + rawErrors=form.rawErrors reset=form.reset submit=form.submit ) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0320a3de..bbb744a36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,10 +71,13 @@ importers: tracked-built-ins: specifier: ^3.1.0 version: 3.3.0 + yup: + specifier: ^1.0.0 + version: 1.4.0 devDependencies: '@babel/core': specifier: ^7.19.6 - version: 7.26.0 + version: 7.26.0(supports-color@8.1.1) '@babel/eslint-parser': specifier: ^7.19.1 version: 7.25.9(@babel/core@7.26.0)(eslint@8.33.0) @@ -264,6 +267,9 @@ importers: ember-headless-form-changeset: specifier: 1.0.0 version: 1.0.0(ember-changeset@4.1.2(@glint/template@1.5.0)(webpack@5.96.1))(ember-headless-form@1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1)))(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))(validated-changeset@1.3.4) + ember-headless-form-yup: + specifier: 1.0.0 + version: 1.0.0(ember-headless-form@1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1)))(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))(yup@1.4.0) ember-load-initializers: specifier: ^2.1.2 version: 2.1.2(@babel/core@7.26.0) @@ -368,7 +374,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.17.0 - version: 7.26.0 + version: 7.26.0(supports-color@8.1.1) '@babel/eslint-parser': specifier: ^7.19.1 version: 7.25.9(@babel/core@7.26.0)(eslint@8.33.0) @@ -564,7 +570,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.17.0 - version: 7.26.0 + version: 7.26.0(supports-color@8.1.1) '@babel/eslint-parser': specifier: ^7.19.1 version: 7.25.9(@babel/core@7.26.0)(eslint@8.33.0) @@ -685,6 +691,9 @@ importers: concurrently: specifier: ^8.0.0 version: 8.2.2 + ember-async-data: + specifier: ^1.0.3 + version: 1.0.3(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)) ember-cli-htmlbars: specifier: ^6.1.1 version: 6.3.0 @@ -759,7 +768,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.0.0 - version: 7.26.0 + version: 7.26.0(supports-color@8.1.1) '@babel/eslint-parser': specifier: ^7.19.1 version: 7.25.9(@babel/core@7.26.0)(eslint@8.33.0) @@ -3658,7 +3667,7 @@ packages: hasBin: true ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} engines: {node: '>=0.10.0'} ansi-regex@3.0.1: @@ -3670,7 +3679,7 @@ packages: engines: {node: '>=6'} ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + resolution: {integrity: sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=} engines: {node: '>=8'} ansi-regex@6.1.0: @@ -5509,6 +5518,13 @@ packages: ember-source: '>=4.4.0' validated-changeset: ^1.3.4 + ember-headless-form-yup@1.0.0: + resolution: {integrity: sha512-sdbybZJMl31DYXLDp+n2TjYrCb7+UM+lYOKOMPKzICpF06+/ajZeH7Uupw7dKvo/H/L3K7I35TvA0Ye8CpUs+Q==} + peerDependencies: + ember-headless-form: ^1.0.0 + ember-source: '>=4.4.0' + yup: ^1.0.0 + ember-headless-form@1.1.0: resolution: {integrity: sha512-FYiBk4Lk7yFsnyr6Ilm7Jc6ADj8jzPpmWVyqRMKl7/Pep+3NPuoyZKyRWD/C6Fen0DwzsdXRitk+HNPD+JFXqA==} peerDependencies: @@ -8685,6 +8701,9 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + property-information@5.6.0: resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} @@ -9748,6 +9767,9 @@ packages: resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} engines: {node: '>=4'} + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} @@ -9811,6 +9833,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + tough-cookie@4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} @@ -9921,6 +9946,10 @@ packages: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -10427,6 +10456,9 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + yup@1.4.0: + resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==} + zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -10453,26 +10485,6 @@ snapshots: '@babel/compat-data@7.26.2': {} - '@babel/core@7.26.0': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 - convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@9.4.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.26.0(supports-color@8.1.1)': dependencies: '@ampproject/remapping': 2.3.0 @@ -10495,7 +10507,7 @@ snapshots: '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.33.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.33.0 eslint-visitor-keys: 2.1.0 @@ -10523,7 +10535,7 @@ snapshots: '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -10546,7 +10558,7 @@ snapshots: '@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 @@ -10559,34 +10571,34 @@ snapshots: '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 5.3.2 semver: 6.3.1 '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 '@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4(supports-color@8.1.1) @@ -10598,10 +10610,10 @@ snapshots: '@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -10609,10 +10621,10 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -10635,7 +10647,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -10644,13 +10656,6 @@ snapshots: dependencies: '@babel/types': 7.26.0 - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-imports@7.25.9(supports-color@8.1.1)': dependencies: '@babel/traverse': 7.25.9(supports-color@8.1.1) @@ -10658,18 +10663,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-module-imports': 7.25.9(supports-color@8.1.1) '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.25.9(supports-color@8.1.1) @@ -10690,33 +10686,33 @@ snapshots: '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@babel/helper-replace-supers@7.24.1(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10726,7 +10722,7 @@ snapshots: '@babel/helper-simple-access@7.25.9': dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -10737,7 +10733,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -10767,7 +10763,7 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -10794,37 +10790,37 @@ snapshots: '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.26.0) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) @@ -10833,21 +10829,21 @@ snapshots: '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.26.0) @@ -10855,13 +10851,13 @@ snapshots: '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-proposal-class-static-block@7.20.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) @@ -10870,14 +10866,14 @@ snapshots: '@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) @@ -10886,44 +10882,44 @@ snapshots: '@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) '@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.26.0) '@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) @@ -10931,20 +10927,20 @@ snapshots: '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) '@babel/plugin-proposal-optional-chaining@7.20.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) @@ -10953,7 +10949,7 @@ snapshots: '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: @@ -10961,11 +10957,11 @@ snapshots: '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 @@ -10973,144 +10969,144 @@ snapshots: '@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.26.0) @@ -11118,17 +11114,17 @@ snapshots: '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-imports': 7.25.9(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.26.0) transitivePeerDependencies: @@ -11136,8 +11132,8 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-imports': 7.25.9(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: @@ -11145,27 +11141,27 @@ snapshots: '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 transitivePeerDependencies: @@ -11173,7 +11169,7 @@ snapshots: '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: @@ -11181,7 +11177,7 @@ snapshots: '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: @@ -11189,7 +11185,7 @@ snapshots: '@babel/plugin-transform-classes@7.23.8(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-environment-visitor': 7.22.20 @@ -11201,86 +11197,86 @@ snapshots: '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/template': 7.25.9 '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/template': 7.25.9 '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: @@ -11288,24 +11284,24 @@ snapshots: '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: @@ -11313,82 +11309,82 @@ snapshots: '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-literals@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: @@ -11396,8 +11392,8 @@ snapshots: '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: @@ -11405,9 +11401,9 @@ snapshots: '@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.25.9 transitivePeerDependencies: @@ -11415,78 +11411,78 @@ snapshots: '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) @@ -11494,20 +11490,20 @@ snapshots: '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-replace-supers': 7.24.1(@babel/core@7.26.0) '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: @@ -11515,25 +11511,25 @@ snapshots: '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: @@ -11541,17 +11537,17 @@ snapshots: '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 transitivePeerDependencies: @@ -11559,7 +11555,7 @@ snapshots: '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: @@ -11567,7 +11563,7 @@ snapshots: '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 @@ -11577,7 +11573,7 @@ snapshots: '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 @@ -11586,45 +11582,45 @@ snapshots: '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-runtime@7.19.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.26.0) @@ -11636,8 +11632,8 @@ snapshots: '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.0(supports-color@8.1.1) + '@babel/helper-module-imports': 7.25.9(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) @@ -11648,23 +11644,23 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-spread@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: @@ -11672,37 +11668,37 @@ snapshots: '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-typescript@7.24.1(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 @@ -11710,7 +11706,7 @@ snapshots: '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 @@ -11721,13 +11717,13 @@ snapshots: '@babel/plugin-transform-typescript@7.4.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.26.0) '@babel/plugin-transform-typescript@7.5.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.26.0) @@ -11736,7 +11732,7 @@ snapshots: '@babel/plugin-transform-typescript@7.8.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) @@ -11745,47 +11741,47 @@ snapshots: '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 @@ -11797,7 +11793,7 @@ snapshots: '@babel/preset-env@7.20.2(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 @@ -11878,7 +11874,7 @@ snapshots: '@babel/preset-env@7.23.9(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 @@ -11964,7 +11960,7 @@ snapshots: '@babel/preset-env@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.26.2 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 @@ -12038,7 +12034,7 @@ snapshots: '@babel/preset-modules@0.1.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.26.0) '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.26.0) @@ -12047,14 +12043,14 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/types': 7.26.0 esutils: 2.0.3 '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) @@ -12117,18 +12113,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - debug: 4.3.7(supports-color@9.4.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.25.9(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.26.2 @@ -12614,7 +12598,7 @@ snapshots: '@embroider/compat@2.1.1(@embroider/core@2.1.1)': dependencies: '@babel/code-frame': 7.18.6 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) '@babel/preset-env': 7.20.2(@babel/core@7.26.0) '@babel/traverse': 7.20.13 @@ -12658,7 +12642,7 @@ snapshots: '@embroider/core@2.1.1': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/parser': 7.22.7 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.26.0) @@ -12695,9 +12679,9 @@ snapshots: '@embroider/core@3.4.5(@glint/template@1.5.0)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/parser': 7.26.2 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) '@embroider/macros': 1.14.0(@glint/template@1.5.0) '@embroider/shared-internals': 2.5.2 assert-never: 1.2.1 @@ -12706,7 +12690,7 @@ snapshots: broccoli-persistent-filter: 3.1.3 broccoli-plugin: 4.0.7 broccoli-source: 3.0.1 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) fast-sourcemap-concat: 1.4.0 filesize: 10.1.0 fs-extra: 9.1.0 @@ -12797,7 +12781,7 @@ snapshots: '@embroider/shared-internals@2.5.2': dependencies: babel-import-util: 2.0.1 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) ember-rfc176-data: 0.3.18 fs-extra: 9.1.0 js-string-escape: 1.0.1 @@ -12811,7 +12795,7 @@ snapshots: '@embroider/shared-internals@2.8.1': dependencies: babel-import-util: 2.1.1 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) ember-rfc176-data: 0.3.18 fs-extra: 9.1.0 is-subdir: 1.2.0 @@ -13389,7 +13373,7 @@ snapshots: eslint-plugin-simple-import-sort: 10.0.0(eslint@8.33.0) prettier-plugin-ember-template-tag: 1.1.0(prettier@3.0.1) optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@8.33.0) '@typescript-eslint/eslint-plugin': 5.50.0(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint@8.33.0)(typescript@5.0.2) '@typescript-eslint/parser': 5.50.0(eslint@8.33.0)(typescript@5.0.2) @@ -13409,14 +13393,14 @@ snapshots: eslint: 8.33.0 eslint-import-resolver-typescript: 3.6.1(eslint-plugin-import@2.29.1(eslint@8.33.0))(eslint@8.33.0) eslint-plugin-decorator-position: 5.0.2(@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.33.0))(eslint@8.33.0) - eslint-plugin-import: 2.29.1(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) + eslint-plugin-import: 2.29.1(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.1(eslint@8.33.0))(eslint@8.33.0))(eslint@8.33.0) eslint-plugin-json: 3.1.0 eslint-plugin-n: 16.6.2(eslint@8.33.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.6.0(eslint@8.33.0))(eslint@8.33.0)(prettier@3.0.1) eslint-plugin-simple-import-sort: 10.0.0(eslint@8.33.0) prettier-plugin-ember-template-tag: 1.1.0(prettier@3.0.1) optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@8.33.0) eslint-plugin-ember: 11.8.0(eslint@8.33.0) eslint-plugin-qunit: 7.3.4(eslint@8.33.0) @@ -13839,26 +13823,6 @@ snapshots: - ember-source - supports-color - '@types/ember@4.0.11': - dependencies: - '@types/ember__application': 4.0.11(@babel/core@7.26.0) - '@types/ember__array': 4.0.10(@babel/core@7.26.0) - '@types/ember__component': 4.0.22(@babel/core@7.26.0) - '@types/ember__controller': 4.0.12(@babel/core@7.26.0) - '@types/ember__debug': 4.0.8(@babel/core@7.26.0) - '@types/ember__engine': 4.0.11(@babel/core@7.26.0) - '@types/ember__error': 4.0.6 - '@types/ember__object': 4.0.12(@babel/core@7.26.0) - '@types/ember__polyfills': 4.0.6 - '@types/ember__routing': 4.0.22(@babel/core@7.26.0) - '@types/ember__runloop': 4.0.10 - '@types/ember__service': 4.0.9(@babel/core@7.26.0) - '@types/ember__string': 3.0.15 - '@types/ember__template': 4.0.7 - '@types/ember__test': 4.0.6(@babel/core@7.26.0) - '@types/ember__utils': 4.0.7 - '@types/rsvp': 4.0.9 - '@types/ember@4.0.11(@babel/core@7.26.0)': dependencies: '@types/ember__application': 4.0.11(@babel/core@7.26.0) @@ -13885,7 +13849,7 @@ snapshots: '@types/ember__application@4.0.11(@babel/core@7.26.0)': dependencies: '@glimmer/component': 1.1.2(@babel/core@7.26.0) - '@types/ember': 4.0.11 + '@types/ember': 4.0.11(@babel/core@7.26.0) '@types/ember__engine': 4.0.11(@babel/core@7.26.0) '@types/ember__object': 4.0.12(@babel/core@7.26.0) '@types/ember__owner': 4.0.9 @@ -13976,10 +13940,6 @@ snapshots: - '@babel/core' - supports-color - '@types/ember__runloop@4.0.10': - dependencies: - '@types/ember': 4.0.11 - '@types/ember__runloop@4.0.10(@babel/core@7.26.0)': dependencies: '@types/ember': 4.0.11(@babel/core@7.26.0) @@ -14009,10 +13969,6 @@ snapshots: - '@babel/core' - supports-color - '@types/ember__utils@4.0.7': - dependencies: - '@types/ember': 4.0.11 - '@types/ember__utils@4.0.7(@babel/core@7.26.0)': dependencies: '@types/ember': 4.0.11(@babel/core@7.26.0) @@ -14745,7 +14701,7 @@ snapshots: babel-loader@8.3.0(@babel/core@7.26.0)(webpack@5.96.1): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 @@ -14754,7 +14710,7 @@ snapshots: babel-loader@8.4.1(@babel/core@7.26.0)(webpack@5.96.1): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 @@ -14771,12 +14727,12 @@ snapshots: babel-plugin-debug-macros@0.2.0(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) semver: 5.7.2 babel-plugin-debug-macros@0.3.4(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) semver: 5.7.2 babel-plugin-ember-data-packages-polyfill@0.1.2: @@ -14833,7 +14789,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.26.0): dependencies: '@babel/compat-data': 7.26.2 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: @@ -14842,7 +14798,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): dependencies: '@babel/compat-data': 7.26.2 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: @@ -14851,7 +14807,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.26.0): dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: @@ -14859,7 +14815,7 @@ snapshots: babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) core-js-compat: 3.39.0 transitivePeerDependencies: @@ -14867,7 +14823,7 @@ snapshots: babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.26.0) core-js-compat: 3.36.0 transitivePeerDependencies: @@ -14875,7 +14831,7 @@ snapshots: babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.26.0) core-js-compat: 3.36.0 transitivePeerDependencies: @@ -14883,21 +14839,21 @@ snapshots: babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.26.0) transitivePeerDependencies: - supports-color babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.26.0) transitivePeerDependencies: - supports-color babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -15297,7 +15253,7 @@ snapshots: broccoli-babel-transpiler@7.8.1: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/polyfill': 7.12.1 broccoli-funnel: 2.0.2 broccoli-merge-trees: 3.0.2 @@ -15314,7 +15270,7 @@ snapshots: broccoli-babel-transpiler@8.0.0(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) broccoli-persistent-filter: 3.1.3 clone: 2.1.2 hash-for-dep: 1.5.1 @@ -15451,7 +15407,7 @@ snapshots: dependencies: array-equal: 1.0.2 broccoli-plugin: 4.0.7 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) fs-tree-diff: 2.0.1 heimdalljs: 0.2.6 minimatch: 3.1.2 @@ -15648,7 +15604,7 @@ snapshots: broccoli-persistent-filter: 2.3.1 broccoli-plugin: 2.1.0 chalk: 2.4.2 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) ensure-posix-path: 1.1.1 fs-extra: 8.1.0 minimatch: 3.1.2 @@ -15673,7 +15629,7 @@ snapshots: dependencies: async-promise-queue: 1.0.5 broccoli-plugin: 4.0.7 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) lodash.defaultsdeep: 4.6.1 matcher-collection: 2.0.1 source-map-url: 0.4.1 @@ -16571,7 +16527,7 @@ snapshots: ember-auto-import@2.10.0(@glint/template@1.5.0)(webpack@5.96.1): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.0) @@ -16590,7 +16546,7 @@ snapshots: broccoli-plugin: 4.0.7 broccoli-source: 3.0.1 css-loader: 5.2.7(webpack@5.96.1) - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) fs-extra: 10.1.0 fs-tree-diff: 2.0.1 handlebars: 4.7.8 @@ -16655,7 +16611,7 @@ snapshots: ember-cli-babel@7.26.11: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.23.6 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.26.0) @@ -16690,7 +16646,7 @@ snapshots: ember-cli-babel@8.2.0(@babel/core@7.26.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.25.9 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -16801,7 +16757,7 @@ snapshots: ember-cli-preprocess-registry@5.0.1: dependencies: broccoli-funnel: 3.0.8 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -16837,7 +16793,7 @@ snapshots: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) '@babel/plugin-transform-typescript': 7.4.5(@babel/core@7.26.0) ansi-to-html: 0.6.15 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) ember-cli-babel-plugin-helpers: 1.1.1 execa: 1.0.0 fs-extra: 7.0.1 @@ -16854,7 +16810,7 @@ snapshots: dependencies: '@babel/plugin-transform-typescript': 7.5.5(@babel/core@7.26.0) ansi-to-html: 0.6.15 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) ember-cli-babel-plugin-helpers: 1.1.1 execa: 2.1.0 fs-extra: 8.1.0 @@ -16874,7 +16830,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.8.7(@babel/core@7.26.0) ansi-to-html: 0.6.15 broccoli-stew: 3.0.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) ember-cli-babel-plugin-helpers: 1.1.1 execa: 3.4.0 fs-extra: 8.1.0 @@ -17133,7 +17089,7 @@ snapshots: ember-headless-form-changeset@1.0.0(ember-changeset@4.1.2(@glint/template@1.5.0)(webpack@5.96.1))(ember-headless-form@1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1)))(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))(validated-changeset@1.3.4): dependencies: - '@embroider/addon-shim': 1.8.6 + '@embroider/addon-shim': 1.9.0 ember-changeset: 4.1.2(@glint/template@1.5.0)(webpack@5.96.1) ember-headless-form: 1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)) ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1) @@ -17141,6 +17097,16 @@ snapshots: transitivePeerDependencies: - supports-color + ember-headless-form-yup@1.0.0(ember-headless-form@1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1)))(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1))(yup@1.4.0): + dependencies: + '@embroider/addon-shim': 1.9.0 + ember-functions-as-helper-polyfill: 2.1.2(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)) + ember-headless-form: 1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)) + ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1) + yup: 1.4.0 + transitivePeerDependencies: + - supports-color + ember-headless-form@1.1.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.26.0))(@types/ember__component@4.0.22(@babel/core@7.26.0))(@types/ember__controller@4.0.12(@babel/core@7.26.0))(@types/ember__object@4.0.12(@babel/core@7.26.0))(@types/ember__routing@4.0.22(@babel/core@7.26.0))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5))))(@glint/template@1.5.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)): dependencies: '@babel/runtime': 7.26.0 @@ -17227,7 +17193,7 @@ snapshots: ember-router-generator@2.0.0: dependencies: '@babel/parser': 7.26.2 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.25.9(supports-color@8.1.1) recast: 0.18.10 transitivePeerDependencies: - supports-color @@ -17240,7 +17206,7 @@ snapshots: ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@ember/edition-utils': 1.2.0 '@glimmer/compiler': 0.92.4 '@glimmer/component': 1.1.2(@babel/core@7.26.0) @@ -17448,7 +17414,7 @@ snapshots: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) engine.io-parser: 5.0.6 ws: 8.2.3 transitivePeerDependencies: @@ -17662,10 +17628,10 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-plugin-import@2.29.1)(eslint@8.33.0): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.33.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-plugin-import@2.29.1)(eslint@8.33.0))(eslint@8.33.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 @@ -17679,11 +17645,11 @@ snapshots: eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.1(eslint@8.33.0))(eslint@8.33.0): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.33.0 eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.1(eslint@8.33.0))(eslint@8.33.0))(eslint@8.33.0) - eslint-plugin-import: 2.29.1(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) + eslint-plugin-import: 2.29.1(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.1(eslint@8.33.0))(eslint@8.33.0))(eslint@8.33.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -17694,7 +17660,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-plugin-import@2.29.1)(eslint@8.33.0))(eslint@8.33.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -17717,7 +17683,7 @@ snapshots: eslint-plugin-decorator-position@5.0.2(@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.33.0))(eslint@8.33.0): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) '@ember-data/rfc395-data': 0.0.4 ember-rfc176-data: 0.3.18 @@ -17775,7 +17741,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.33.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@5.0.2))(eslint-plugin-import@2.29.1)(eslint@8.33.0))(eslint@8.33.0) hasown: 2.0.1 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -17792,7 +17758,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0): + eslint-plugin-import@2.29.1(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.1(eslint@8.33.0))(eslint@8.33.0))(eslint@8.33.0): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 @@ -20735,7 +20701,7 @@ snapshots: prettier-plugin-ember-template-tag@1.1.0(prettier@3.0.1): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@glimmer/syntax': 0.84.3 ember-cli-htmlbars: 6.3.0 ember-template-imports: 3.4.2 @@ -20745,7 +20711,7 @@ snapshots: prettier-plugin-ember-template-tag@2.0.4(prettier@3.0.1): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) content-tag: 2.0.3 prettier: 3.0.1 transitivePeerDependencies: @@ -20793,6 +20759,8 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 + property-expr@2.0.6: {} + property-information@5.6.0: dependencies: xtend: 4.0.2 @@ -21085,7 +21053,7 @@ snapshots: remove-types@1.0.0: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) prettier: 2.8.8 @@ -21232,7 +21200,7 @@ snapshots: rollup-plugin-glimmer-template-tag@0.4.1(@babel/core@7.26.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5))(ember-template-imports@3.4.2): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.96.1) ember-template-imports: 3.4.2 @@ -21251,7 +21219,7 @@ snapshots: tslib: 2.6.2 typescript: 5.0.2 optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) @@ -21589,7 +21557,7 @@ snapshots: socket.io-parser@4.2.2: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -21597,7 +21565,7 @@ snapshots: dependencies: accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7(supports-color@8.1.1) engine.io: 6.2.1 socket.io-adapter: 2.4.0 socket.io-parser: 4.2.2 @@ -22146,6 +22114,8 @@ snapshots: time-zone@1.0.0: {} + tiny-case@1.0.3: {} + tiny-glob@0.2.9: dependencies: globalyzer: 0.1.0 @@ -22213,6 +22183,8 @@ snapshots: toidentifier@1.0.1: {} + toposort@2.0.2: {} + tough-cookie@4.1.2: dependencies: psl: 1.9.0 @@ -22323,6 +22295,8 @@ snapshots: type-fest@0.6.0: {} + type-fest@2.19.0: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -22800,7 +22774,7 @@ snapshots: workerpool@3.1.2: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.0(supports-color@8.1.1) object-assign: 4.1.1 rsvp: 4.8.5 transitivePeerDependencies: @@ -22902,4 +22876,11 @@ snapshots: yocto-queue@1.0.0: {} + yup@1.4.0: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + zwitch@1.0.5: {} diff --git a/test-app/tests/integration/components/toucan-form/async-toucan-form-test.gts b/test-app/tests/integration/components/toucan-form/async-toucan-form-test.gts new file mode 100644 index 000000000..bb5914d2a --- /dev/null +++ b/test-app/tests/integration/components/toucan-form/async-toucan-form-test.gts @@ -0,0 +1,335 @@ +/* eslint-disable no-undef -- Until https://github.com/ember-cli/eslint-plugin-ember/issues/1747 is resolved... */ + +import { click, render, rerender, waitFor } from '@ember/test-helpers'; +import { module, test } from 'qunit'; + +import ToucanForm from '@crowdstrike/ember-toucan-form/components/toucan-form'; +import { setupRenderingTest } from 'test-app/tests/helpers'; + +import type { FieldValidateCallback } from 'ember-headless-form'; + +module('Integration Component ToucanForm > Async state', function (hooks) { + setupRenderingTest(hooks); + + interface TestFormData { + firstName?: string; + lastName?: string; + } + + const validateFieldCallbackSync: FieldValidateCallback = ( + value, + field + ) => { + const errors = []; + + if (value == undefined) { + errors.push({ + type: 'required', + value, + message: `${field} is required!`, + }); + } else { + if (value.charAt(0).toUpperCase() !== value.charAt(0)) { + errors.push({ + type: 'uppercase', + value, + message: `${field} must be upper case!`, + }); + } + + if (value.toLowerCase() === 'foo') { + errors.push({ + type: 'notFoo', + value, + message: `Foo is an invalid ${field}!`, + }); + } + } + + return errors.length > 0 ? errors : undefined; + }; + + const validateFieldCallbackAsync: FieldValidateCallback< + TestFormData + > = async (value, field, data) => { + // intentionally adding a delay here, to make the validation behave truly async and assert that we are correctly waiting for it in tests + await new Promise((resolve) => setTimeout(resolve, 10)); + + return validateFieldCallbackSync(value, field, data); + }; + + const stringify = (data: unknown) => JSON.stringify(data); + + module('validation', function () { + test('validation state is yielded - valid', async function (assert) { + const data: TestFormData = { firstName: 'Tony', lastName: 'Ward' }; + + await render(); + + assert + .dom('[data-test-validation-state]') + .doesNotExist( + 'form.validationState is not present until first validation' + ); + + const promise = click('[data-test-submit]'); + + await waitFor('[data-test-validation-state]'); + + assert + .dom('[data-test-validation-state]') + .hasText('PENDING', 'form.validationState is pending'); + + await promise; + await rerender(); + + assert + .dom('[data-test-validation-state]') + .hasText('RESOLVED', 'form.validationState has resolved'); + assert + .dom('[data-test-validation-value]') + .hasText('{}', 'form.validationState.value has no errors'); + }); + + test('validation state is yielded - invalid', async function (assert) { + const data: TestFormData = { firstName: 'Foo', lastName: 'Smith' }; + + await render(); + + assert + .dom('[data-test-validation-state]') + .doesNotExist( + 'form.validationState is not present until first validation' + ); + + const promise = click('[data-test-submit]'); + + await waitFor('[data-test-validation-state]'); + + assert + .dom('[data-test-validation-state]') + .hasText('PENDING', 'form.validationState is pending'); + + await promise; + await rerender(); + + assert + .dom('[data-test-validation-state]') + .hasText('RESOLVED', 'form.validationState has resolved'); + assert + .dom('[data-test-validation-value]') + .hasText( + '{"firstName":[{"type":"notFoo","value":"Foo","message":"Foo is an invalid firstName!"}]}', + 'form.validationState.value has ErrorRecord' + ); + }); + }); + + module('submission', function () { + test('submission state is yielded - resolved', async function (assert) { + const data: TestFormData = { firstName: 'Tony', lastName: 'Ward' }; + const submitHandler = (): Promise => + new Promise((resolve) => { + setTimeout(() => resolve('SUCCESS'), 10); + }); + + await render(); + + assert + .dom('[data-test-submission-state]') + .doesNotExist( + 'form.submissionState is not present until first submission' + ); + + const promise = click('[data-test-submit]'); + + await waitFor('[data-test-submission-state]'); + + assert + .dom('[data-test-submission-state]') + .hasText('PENDING', 'form.submissionState is pending'); + + await promise; + await rerender(); + + assert + .dom('[data-test-submission-state]') + .hasText('RESOLVED', 'form.submissionState has resolved'); + assert + .dom('[data-test-submission-value]') + .hasText( + 'SUCCESS', + 'form.submissionState.value has value returned by @onSubmit action' + ); + }); + + test('submission state is yielded - rejected', async function (assert) { + const data: TestFormData = { firstName: 'Tony', lastName: 'Ward' }; + const submitHandler = (): Promise => + new Promise((_resolve, reject) => { + setTimeout(() => reject('ERROR'), 10); + }); + + await render(); + + assert + .dom('[data-test-submission-state]') + .doesNotExist( + 'form.submissionState is not present until first submission' + ); + + const promise = click('[data-test-submit]'); + + await waitFor('[data-test-submission-state]'); + + assert + .dom('[data-test-submission-state]') + .hasText('PENDING', 'form.submissionState is pending'); + + await promise; + await rerender(); + + assert + .dom('[data-test-submission-state]') + .hasText('REJECTED', 'form.submissionState has rejected'); + assert + .dom('[data-test-submission-error]') + .hasText( + '"ERROR"', + 'form.submissionState.error has error returned by @onSubmit action' + ); + }); + + test('validation and submission are sequential', async function (assert) { + const data: TestFormData = { firstName: 'Tony', lastName: 'Ward' }; + const submitHandler = (): Promise => + new Promise((resolve) => { + setTimeout(() => resolve('SUCCESS'), 10); + }); + + await render(); + + const promise = click('[data-test-submit]'); + + await waitFor('[data-test-validation-state]'); + + assert + .dom('[data-test-validation-state]') + .hasText('PENDING', 'form.validationState is pending'); + assert + .dom('[data-test-submission-state]') + .doesNotExist( + 'form.submissionStatenis not present until validation has finished' + ); + + await waitFor('[data-test-submission-state]'); + + assert + .dom('[data-test-validation-state]') + .hasText('RESOLVED', 'form.validationState is resolved'); + assert + .dom('[data-test-submission-state]') + .hasText('PENDING', 'form.submissionState is pending'); + + await promise; + await rerender(); + + assert + .dom('[data-test-validation-state]') + .hasText('RESOLVED', 'form.validationState is still resolved'); + assert + .dom('[data-test-submission-state]') + .hasText('RESOLVED', 'form.submissionState has resolved'); + }); + }); +});