From 2c291257d03adeff163ff3b2d56cc5f4390c9e0c Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Sun, 3 Aug 2025 21:07:09 -0700 Subject: [PATCH 1/2] docs: add standard schema example for Angular --- docs/config.json | 4 + .../angular/standard-schema/.editorconfig | 16 +++ examples/angular/standard-schema/.gitignore | 42 ++++++ examples/angular/standard-schema/README.md | 27 ++++ examples/angular/standard-schema/angular.json | 78 +++++++++++ examples/angular/standard-schema/package.json | 35 +++++ .../standard-schema/src/app/app.component.ts | 132 ++++++++++++++++++ .../angular/standard-schema/src/favicon.ico | Bin 0 -> 15086 bytes .../angular/standard-schema/src/index.html | 13 ++ examples/angular/standard-schema/src/main.ts | 4 + .../angular/standard-schema/tsconfig.app.json | 10 ++ .../angular/standard-schema/tsconfig.json | 28 ++++ .../standard-schema/tsconfig.spec.json | 9 ++ pnpm-lock.yaml | 69 ++++++++- 14 files changed, 465 insertions(+), 2 deletions(-) create mode 100644 examples/angular/standard-schema/.editorconfig create mode 100644 examples/angular/standard-schema/.gitignore create mode 100644 examples/angular/standard-schema/README.md create mode 100644 examples/angular/standard-schema/angular.json create mode 100644 examples/angular/standard-schema/package.json create mode 100644 examples/angular/standard-schema/src/app/app.component.ts create mode 100644 examples/angular/standard-schema/src/favicon.ico create mode 100644 examples/angular/standard-schema/src/index.html create mode 100644 examples/angular/standard-schema/src/main.ts create mode 100644 examples/angular/standard-schema/tsconfig.app.json create mode 100644 examples/angular/standard-schema/tsconfig.json create mode 100644 examples/angular/standard-schema/tsconfig.spec.json diff --git a/docs/config.json b/docs/config.json index 2cf8bb0c9..841aed05e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -580,6 +580,10 @@ { "label": "Form Composition", "to": "framework/angular/examples/large-form" + }, + { + "label": "Standard Schema", + "to": "framework/angular/examples/standard-schema" } ] }, diff --git a/examples/angular/standard-schema/.editorconfig b/examples/angular/standard-schema/.editorconfig new file mode 100644 index 000000000..59d9a3a3e --- /dev/null +++ b/examples/angular/standard-schema/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/examples/angular/standard-schema/.gitignore b/examples/angular/standard-schema/.gitignore new file mode 100644 index 000000000..0711527ef --- /dev/null +++ b/examples/angular/standard-schema/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/examples/angular/standard-schema/README.md b/examples/angular/standard-schema/README.md new file mode 100644 index 000000000..3e87f4c6d --- /dev/null +++ b/examples/angular/standard-schema/README.md @@ -0,0 +1,27 @@ +# Simple + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.1. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/examples/angular/standard-schema/angular.json b/examples/angular/standard-schema/angular.json new file mode 100644 index 000000000..0cc433f7f --- /dev/null +++ b/examples/angular/standard-schema/angular.json @@ -0,0 +1,78 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "simple": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/simple", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "tsconfig.app.json", + "assets": ["src/favicon.ico", "src/assets"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "simple:build:production" + }, + "development": { + "buildTarget": "simple:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "simple:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": ["zone.js", "zone.js/testing"], + "tsConfig": "tsconfig.spec.json", + "assets": ["src/favicon.ico", "src/assets"], + "scripts": [] + } + } + } + } + } +} diff --git a/examples/angular/standard-schema/package.json b/examples/angular/standard-schema/package.json new file mode 100644 index 000000000..fe8bf7eba --- /dev/null +++ b/examples/angular/standard-schema/package.json @@ -0,0 +1,35 @@ +{ + "name": "@tanstack/form-example-angular-simple", + "private": true, + "type": "module", + "scripts": { + "ng": "ng", + "start": "ng cache clean && ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "dependencies": { + "@angular/animations": "^20.0.0", + "@angular/common": "^20.0.0", + "@angular/compiler": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/forms": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-browser-dynamic": "^20.0.0", + "@angular/router": "^20.0.0", + "@tanstack/angular-form": "^1.15.1", + "effect": "^3.16.7", + "rxjs": "^7.8.2", + "tslib": "^2.8.1", + "valibot": "^1.1.0", + "zod": "^3.25.64", + "zone.js": "0.15.1" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^20.0.0", + "@angular/cli": "^20.0.0", + "@angular/compiler-cli": "^20.0.0", + "typescript": "5.8.2" + } +} diff --git a/examples/angular/standard-schema/src/app/app.component.ts b/examples/angular/standard-schema/src/app/app.component.ts new file mode 100644 index 000000000..408346666 --- /dev/null +++ b/examples/angular/standard-schema/src/app/app.component.ts @@ -0,0 +1,132 @@ +import { Component } from '@angular/core' +import { TanStackField, injectForm, injectStore } from '@tanstack/angular-form' +import * as v from 'valibot' +import { z } from 'zod' +import { Schema as S } from 'effect' + +const ZodSchema = z.object({ + firstName: z + .string() + .min(3, '[Zod] You must have a length of at least 3') + .startsWith('A', "[Zod] First name must start with 'A'"), + lastName: z.string().min(3, '[Zod] You must have a length of at least 3'), +}) + +const ValibotSchema = v.object({ + firstName: v.pipe( + v.string(), + v.minLength(3, '[Valibot] You must have a length of at least 3'), + v.startsWith('A', "[Valibot] First name must start with 'A'"), + ), + lastName: v.pipe( + v.string(), + v.minLength(3, '[Valibot] You must have a length of at least 3'), + ), +}) + +const EffectSchema = S.standardSchemaV1( + S.Struct({ + firstName: S.String.pipe( + S.minLength(3), + S.annotations({ + message: () => '[Effect/Schema] You must have a length of at least 3', + }), + ), + lastName: S.String.pipe( + S.minLength(3), + S.annotations({ + message: () => '[Effect/Schema] You must have a length of at least 3', + }), + ), + }), +) + +@Component({ + selector: 'app-root', + standalone: true, + imports: [TanStackField], + template: ` +
+
+ + + + @if (firstName.api.state.meta.isTouched) { + @for (error of firstName.api.state.meta.errors; track $index) { +
+ {{ error.message }} +
+ } + } + @if (firstName.api.state.meta.isValidating) { +

Validating...

+ } +
+
+
+ + + + @if (firstName.api.state.meta.isTouched) { + @for (error of firstName.api.state.meta.errors; track $index) { +
+ {{ error.message }} +
+ } + } + @if (firstName.api.state.meta.isValidating) { +

Validating...

+ } +
+
+ + +
+ `, +}) +export class AppComponent { + form = injectForm({ + defaultValues: { + firstName: '', + lastName: '', + }, + + validators: { + // DEMO: You can switch between schemas seamlessly + onChange: ZodSchema, + // onChange: ValibotSchema, + // onChange: EffectSchema, + }, + onSubmit({ value }) { + // Do something with form data + console.log(value) + }, + }) + + canSubmit = injectStore(this.form, (state) => state.canSubmit) + isSubmitting = injectStore(this.form, (state) => state.isSubmitting) + + handleSubmit(event: SubmitEvent) { + event.preventDefault() + event.stopPropagation() + this.form.handleSubmit() + } +} diff --git a/examples/angular/standard-schema/src/favicon.ico b/examples/angular/standard-schema/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/examples/angular/standard-schema/src/index.html b/examples/angular/standard-schema/src/index.html new file mode 100644 index 000000000..c3c6fbbdd --- /dev/null +++ b/examples/angular/standard-schema/src/index.html @@ -0,0 +1,13 @@ + + + + + Simple + + + + + + + + diff --git a/examples/angular/standard-schema/src/main.ts b/examples/angular/standard-schema/src/main.ts new file mode 100644 index 000000000..56773910e --- /dev/null +++ b/examples/angular/standard-schema/src/main.ts @@ -0,0 +1,4 @@ +import { bootstrapApplication } from '@angular/platform-browser' +import { AppComponent } from './app/app.component' + +bootstrapApplication(AppComponent).catch((err) => console.error(err)) diff --git a/examples/angular/standard-schema/tsconfig.app.json b/examples/angular/standard-schema/tsconfig.app.json new file mode 100644 index 000000000..84f1f992d --- /dev/null +++ b/examples/angular/standard-schema/tsconfig.app.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/examples/angular/standard-schema/tsconfig.json b/examples/angular/standard-schema/tsconfig.json new file mode 100644 index 000000000..f077510cd --- /dev/null +++ b/examples/angular/standard-schema/tsconfig.json @@ -0,0 +1,28 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": ["ES2022", "dom"] + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/examples/angular/standard-schema/tsconfig.spec.json b/examples/angular/standard-schema/tsconfig.spec.json new file mode 100644 index 000000000..47e3dd755 --- /dev/null +++ b/examples/angular/standard-schema/tsconfig.spec.json @@ -0,0 +1,9 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["jasmine"] + }, + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c2fcd037..0996a43d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,7 +134,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^20.0.0 - version: 20.0.5(76ecc4c34b81a4060af826234478a183) + version: 20.0.5(f245dd77b4c9f1390c45f4ecddc1533a) '@angular/cli': specifier: ^20.0.0 version: 20.0.5(@types/node@24.1.0)(chokidar@4.0.3) @@ -186,7 +186,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^20.0.0 - version: 20.0.5(f245dd77b4c9f1390c45f4ecddc1533a) + version: 20.0.5(76ecc4c34b81a4060af826234478a183) '@angular/cli': specifier: ^20.0.0 version: 20.0.5(@types/node@24.1.0)(chokidar@4.0.3) @@ -249,6 +249,67 @@ importers: specifier: 5.8.2 version: 5.8.2 + examples/angular/standard-schema: + dependencies: + '@angular/animations': + specifier: ^20.0.0 + version: 20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': + specifier: ^20.0.0 + version: 20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + '@angular/compiler': + specifier: ^20.0.0 + version: 20.0.6 + '@angular/core': + specifier: ^20.0.0 + version: 20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/forms': + specifier: ^20.0.0 + version: 20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/animations@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@angular/platform-browser': + specifier: ^20.0.0 + version: 20.0.6(@angular/animations@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/platform-browser-dynamic': + specifier: ^20.0.0 + version: 20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@20.0.6)(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/animations@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))) + '@angular/router': + specifier: ^20.0.0 + version: 20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/animations@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@tanstack/angular-form': + specifier: ^1.15.1 + version: link:../../../packages/angular-form + effect: + specifier: ^3.16.7 + version: 3.16.7 + rxjs: + specifier: ^7.8.2 + version: 7.8.2 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + valibot: + specifier: ^1.1.0 + version: 1.1.0(typescript@5.8.2) + zod: + specifier: ^3.25.64 + version: 3.25.64 + zone.js: + specifier: 0.15.1 + version: 0.15.1 + devDependencies: + '@angular-devkit/build-angular': + specifier: ^20.0.0 + version: 20.0.5(f245dd77b4c9f1390c45f4ecddc1533a) + '@angular/cli': + specifier: ^20.0.0 + version: 20.0.5(@types/node@24.1.0)(chokidar@4.0.3) + '@angular/compiler-cli': + specifier: ^20.0.0 + version: 20.0.6(@angular/compiler@20.0.6)(typescript@5.8.2) + typescript: + specifier: 5.8.2 + version: 5.8.2 + examples/lit/simple: dependencies: '@tanstack/lit-form': @@ -22031,6 +22092,10 @@ snapshots: optionalDependencies: typescript: 5.8.2 + valibot@1.1.0(typescript@5.8.2): + optionalDependencies: + typescript: 5.8.2 + valibot@1.1.0(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 From c7a65bbbba68c1839b5211805c880d9929b37f7b Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Sun, 3 Aug 2025 21:13:23 -0700 Subject: [PATCH 2/2] chore: fix Nx CI --- examples/angular/standard-schema/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/angular/standard-schema/package.json b/examples/angular/standard-schema/package.json index fe8bf7eba..d44a8085c 100644 --- a/examples/angular/standard-schema/package.json +++ b/examples/angular/standard-schema/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/form-example-angular-simple", + "name": "@tanstack/form-example-angular-standard-schema", "private": true, "type": "module", "scripts": {