2014-09-18 21:56:38 +00:00
|
|
|
{
|
2015-10-15 16:57:29 +00:00
|
|
|
"name": "angular-srcs",
|
2026-04-15 21:27:45 +00:00
|
|
|
"version": "21.2.9",
|
2016-04-29 00:50:03 +00:00
|
|
|
"private": true,
|
2017-01-27 06:30:42 +00:00
|
|
|
"description": "Angular - a web framework for modern web apps",
|
2015-02-10 23:18:16 +00:00
|
|
|
"homepage": "https://github.com/angular/angular",
|
|
|
|
|
"bugs": "https://github.com/angular/angular/issues",
|
2016-01-12 16:36:43 +00:00
|
|
|
"license": "MIT",
|
2026-03-27 06:07:45 +00:00
|
|
|
"packageManager": "pnpm@10.33.0",
|
2015-12-01 22:09:31 +00:00
|
|
|
"engines": {
|
2025-07-31 15:17:27 +00:00
|
|
|
"npm": "Please use pnpm instead of NPM to install dependencies",
|
|
|
|
|
"yarn": "Please use pnpm instead of Yarn to install dependencies",
|
2026-03-27 06:07:45 +00:00
|
|
|
"pnpm": "10.33.0"
|
2015-12-01 22:09:31 +00:00
|
|
|
},
|
2015-01-24 18:50:18 +00:00
|
|
|
"repository": {
|
|
|
|
|
"type": "git",
|
|
|
|
|
"url": "https://github.com/angular/angular.git"
|
|
|
|
|
},
|
2014-09-18 21:56:38 +00:00
|
|
|
"scripts": {
|
2024-02-07 14:48:35 +00:00
|
|
|
"prepare": "husky",
|
2025-12-18 20:28:08 +00:00
|
|
|
"ng-dev": "ng-dev",
|
|
|
|
|
"build": "node scripts/build/build-packages-dist.mts",
|
2021-11-09 18:59:21 +00:00
|
|
|
"test": "bazelisk test",
|
2025-09-10 16:56:37 +00:00
|
|
|
"test:ci": "bazelisk test -- //... -//integration/... -//adev/... -//vscode-ng-language-service/... -//devtools/... -//modules/ssr-benchmarks/...",
|
2025-03-27 18:28:16 +00:00
|
|
|
"integration-tests:ci": "bazelisk test -- //integration/...",
|
2021-08-13 04:50:34 +00:00
|
|
|
"test-tsec": "bazelisk test //... --build_tag_filters=tsec --test_tag_filters=tsec",
|
2025-07-31 15:17:27 +00:00
|
|
|
"lint": "pnpm --silent tslint && pnpm --silent ng-dev format changed --check",
|
2021-07-06 17:41:48 +00:00
|
|
|
"tslint": "tslint -c tslint.json --project tsconfig-tslint.json",
|
2020-02-26 17:09:35 +00:00
|
|
|
"public-api:check": "node goldens/public-api/manage.js test",
|
2020-02-24 11:03:15 +00:00
|
|
|
"public-api:update": "node goldens/public-api/manage.js accept",
|
2020-09-11 21:54:53 +00:00
|
|
|
"symbol-extractor:check": "node tools/symbol-extractor/run_all_symbols_extractor_tests.js test",
|
|
|
|
|
"symbol-extractor:update": "node tools/symbol-extractor/run_all_symbols_extractor_tests.js accept",
|
2025-12-18 20:28:08 +00:00
|
|
|
"ts-circular-deps:check": "pnpm -s ng-dev ts-circular-deps check --config ./packages/circular-deps-test.conf.cjs",
|
2025-11-06 20:56:06 +00:00
|
|
|
"check-tooling-setup": "tsc --project scripts/tsconfig.json",
|
2021-12-16 07:00:43 +00:00
|
|
|
"devtools:devserver": "ibazel run //devtools/src:devserver",
|
2025-08-21 12:52:59 +00:00
|
|
|
"devtools:test:e2e": "cypress run --project ./devtools/cypress",
|
|
|
|
|
"devtools:e2e:open": "cypress open --project ./devtools/cypress",
|
2025-06-11 20:17:10 +00:00
|
|
|
"devtools:build:chrome": "bazelisk build --//devtools/projects/shell-browser/src:flag_browser=chrome //devtools/projects/shell-browser/src:prodapp",
|
|
|
|
|
"devtools:build:firefox": "bazelisk build --config snapshot-build-firefox --//devtools/projects/shell-browser/src:flag_browser=firefox //devtools/projects/shell-browser/src:prodapp",
|
2025-07-31 15:17:27 +00:00
|
|
|
"devtools:build:chrome:release": "pnpm run -s devtools:build:chrome",
|
|
|
|
|
"devtools:build:firefox:release": "pnpm run -s devtools:build:firefox --jobs 4",
|
2024-05-07 19:33:07 +00:00
|
|
|
"devtools:test": "bazelisk test --//devtools/projects/shell-browser/src:flag_browser=chrome -- //devtools/...",
|
2025-02-24 16:11:05 +00:00
|
|
|
"devtools:test:unit": "bazelisk test -- //devtools/...",
|
2025-12-18 20:28:08 +00:00
|
|
|
"devtools:release": "node devtools/tools/release.mts",
|
2025-08-21 12:52:59 +00:00
|
|
|
"adev": "[[ -n $CI ]] && echo 'Cannot run this pnpm script on CI' && exit 1 || ibazel run //adev:build.serve",
|
|
|
|
|
"adev:build": "[[ -n $CI ]] && echo 'Cannot run this pnpm script on CI' && exit 1 || bazel build //adev:build",
|
2025-11-06 17:05:32 +00:00
|
|
|
"dev": "pnpm --filter=dev-app dev",
|
2025-11-06 22:43:35 +00:00
|
|
|
"dev:prod": "pnpm --filter=dev-app dev:prod",
|
2025-11-06 17:05:32 +00:00
|
|
|
"dev:build": "pnpm --filter=dev-app dev:build",
|
2025-12-18 20:28:08 +00:00
|
|
|
"benchmarks": "node scripts/benchmarks/index.mts",
|
|
|
|
|
"diff-release-package": "node scripts/diff-release-package.mts"
|
2014-09-18 21:56:38 +00:00
|
|
|
},
|
2018-10-22 21:26:52 +00:00
|
|
|
"// 1": "dependencies are used locally and by bazel",
|
2014-09-18 21:56:38 +00:00
|
|
|
"dependencies": {
|
2026-04-09 10:05:30 +00:00
|
|
|
"@angular-devkit/build-angular": "21.2.7",
|
|
|
|
|
"@angular-devkit/core": "21.2.7",
|
|
|
|
|
"@angular-devkit/schematics": "21.2.7",
|
2025-07-31 15:17:27 +00:00
|
|
|
"@angular/animations": "workspace:*",
|
2025-08-04 20:14:24 +00:00
|
|
|
"@angular/benchpress": "workspace: *",
|
2026-04-09 10:05:30 +00:00
|
|
|
"@angular/build": "21.2.7",
|
2026-04-17 19:31:53 +00:00
|
|
|
"@angular/cdk": "21.2.7",
|
2026-04-09 10:05:30 +00:00
|
|
|
"@angular/cli": "21.2.7",
|
2025-07-31 15:17:27 +00:00
|
|
|
"@angular/common": "workspace:*",
|
|
|
|
|
"@angular/compiler": "workspace:*",
|
|
|
|
|
"@angular/compiler-cli": "workspace:*",
|
|
|
|
|
"@angular/core": "workspace:*",
|
|
|
|
|
"@angular/elements": "workspace:*",
|
|
|
|
|
"@angular/forms": "workspace:*",
|
2025-08-04 20:14:24 +00:00
|
|
|
"@angular/language-service": "workspace: *",
|
|
|
|
|
"@angular/localize": "workspace: *",
|
2026-04-17 19:31:53 +00:00
|
|
|
"@angular/material": "21.2.7",
|
2025-07-31 15:17:27 +00:00
|
|
|
"@angular/platform-browser": "workspace:*",
|
|
|
|
|
"@angular/platform-browser-dynamic": "workspace:*",
|
|
|
|
|
"@angular/platform-server": "workspace:*",
|
|
|
|
|
"@angular/router": "workspace:*",
|
|
|
|
|
"@angular/service-worker": "workspace:*",
|
2026-04-09 10:05:30 +00:00
|
|
|
"@angular/ssr": "21.2.7",
|
2025-08-04 20:14:24 +00:00
|
|
|
"@angular/upgrade": "workspace: *",
|
2026-01-15 08:48:18 +00:00
|
|
|
"@babel/cli": "7.28.6",
|
2026-02-06 16:51:45 +00:00
|
|
|
"@babel/core": "7.29.0",
|
|
|
|
|
"@babel/generator": "7.29.1",
|
2022-12-07 15:45:56 +00:00
|
|
|
"@jridgewell/sourcemap-codec": "^1.4.14",
|
2022-06-05 09:09:55 +00:00
|
|
|
"@microsoft/api-extractor": "^7.24.2",
|
2022-10-08 04:45:06 +00:00
|
|
|
"@rollup/plugin-babel": "^6.0.0",
|
2025-11-05 05:10:00 +00:00
|
|
|
"@rollup/plugin-commonjs": "^29.0.0",
|
2025-05-14 09:55:43 +00:00
|
|
|
"@rollup/plugin-node-resolve": "^16.0.0",
|
2026-04-09 10:05:30 +00:00
|
|
|
"@schematics/angular": "21.2.7",
|
feat(forms): add experimental signal-based forms (#63408)
This commit introduces an experimental version of a new signal-based forms API for Angular. This new API aims to explore how signals can be leveraged to create a more declarative, intuitive, and reactive way of handling forms.
The primary goals of this new signal-based approach are:
* **Signal-centric Design:** Place signals at the core of the forms experience, enabling a truly reactive programming model for form state and logic.
* **Declarative Logic:** Allow developers to define form behavior, such as validation and conditional fields, declaratively using TypeScript. This moves logic out of the template and into a typed, testable schema.
* **Developer-Owned Data Model:** The library does not maintain a copy of data in a form model, but instead read and write it via a developer-provided `WritableSignal`, eliminating the need for applications to synchronize their data with the form system.
* **Interoperability:** A key design goal is seamless interoperability with existing reactive forms, allowing for incremental adoption.
* **Bridging Template and Reactive Forms:** This exploration hopes to close the gap between template and reactive forms, offering a unified and more powerful approach that combines the best aspects of both.
This initial version of the experimental API includes the core building blocks, such as the `form()` function, `Field` and `FieldState` objects, and a `[control]` directive for binding to UI elements. It also introduces a schema-based system for defining validation, conditional logic, and other form behaviors.
Note: This is an early, experimental API. It is not yet complete and is subject to change based on feedback and further exploration.
Co-authored-by: Kirill Cherkashin <kirts@google.com>
Co-authored-by: Alex Rickabaugh <alxhub@users.noreply.github.com>
Co-authored-by: Leon Senft <leonsenft@users.noreply.github.com>
Co-authored-by: Dylan Hunn <dylhunn@gmail.com>
Co-authored-by: Michael Small <michael-small@users.noreply.github.com>
PR Close #63408
2025-08-26 22:15:54 +00:00
|
|
|
"@standard-schema/spec": "^1.0.0",
|
2019-01-28 20:59:25 +00:00
|
|
|
"@types/angular": "^1.6.47",
|
2024-01-31 21:04:56 +00:00
|
|
|
"@types/babel__core": "7.20.5",
|
2025-04-08 05:11:41 +00:00
|
|
|
"@types/babel__generator": "7.27.0",
|
2025-07-11 18:11:31 +00:00
|
|
|
"@types/chrome": "^0.1.0",
|
2023-07-18 21:08:07 +00:00
|
|
|
"@types/convert-source-map": "^2.0.0",
|
2025-04-03 04:19:26 +00:00
|
|
|
"@types/dom-navigation": "^1.0.5",
|
2025-10-18 19:37:09 +00:00
|
|
|
"@types/firefox-webext-browser": "^143.0.0",
|
2024-11-05 06:11:37 +00:00
|
|
|
"@types/hammerjs": "2.0.46",
|
2026-02-04 10:23:04 +00:00
|
|
|
"@types/jasmine": "^6.0.0",
|
2020-01-03 05:28:06 +00:00
|
|
|
"@types/jasminewd2": "^2.0.8",
|
2025-09-05 20:04:20 +00:00
|
|
|
"@types/node": "^20.14.8",
|
2017-09-22 17:51:03 +00:00
|
|
|
"@types/selenium-webdriver": "3.0.7",
|
2026-01-15 08:48:18 +00:00
|
|
|
"@types/selenium-webdriver4": "npm:@types/selenium-webdriver@4.35.5",
|
2021-04-05 09:57:24 +00:00
|
|
|
"@types/semver": "^7.3.4",
|
2025-11-26 09:10:24 +00:00
|
|
|
"@types/systemjs": "6.15.4",
|
2021-09-26 10:29:54 +00:00
|
|
|
"@types/yargs": "^17.0.3",
|
2018-02-15 17:21:18 +00:00
|
|
|
"angular-1.5": "npm:angular@1.5",
|
2018-07-31 12:10:13 +00:00
|
|
|
"angular-1.6": "npm:angular@1.6",
|
2020-12-04 14:53:12 +00:00
|
|
|
"angular-1.7": "npm:angular@1.7",
|
2021-07-06 13:29:19 +00:00
|
|
|
"angular-1.8": "npm:angular@1.8",
|
2018-02-15 17:21:18 +00:00
|
|
|
"angular-mocks-1.5": "npm:angular-mocks@1.5",
|
2018-07-31 12:10:13 +00:00
|
|
|
"angular-mocks-1.6": "npm:angular-mocks@1.6",
|
2020-12-04 14:53:12 +00:00
|
|
|
"angular-mocks-1.7": "npm:angular-mocks@1.7",
|
2021-07-06 13:29:19 +00:00
|
|
|
"angular-mocks-1.8": "npm:angular-mocks@1.8",
|
2025-03-07 19:18:08 +00:00
|
|
|
"chalk": "^5.4.1",
|
2025-12-02 10:09:41 +00:00
|
|
|
"chokidar": "^5.0.0",
|
2018-10-22 21:26:52 +00:00
|
|
|
"convert-source-map": "^1.5.1",
|
2022-01-29 12:01:59 +00:00
|
|
|
"d3": "^7.0.0",
|
2026-01-07 14:43:34 +00:00
|
|
|
"dagre-d3-es": "^7.0.14",
|
2025-05-16 05:13:58 +00:00
|
|
|
"diff": "^8.0.0",
|
2026-03-25 16:57:08 +00:00
|
|
|
"domino": "https://github.com/angular/domino.git#928dffb9d9431b2cd2a73d7b940d1575f221e072",
|
2026-01-01 08:47:06 +00:00
|
|
|
"esbuild": "0.27.2",
|
2025-07-23 18:26:58 +00:00
|
|
|
"esbuild-plugin-umd-wrapper": "^3.0.0",
|
2021-10-20 12:18:46 +00:00
|
|
|
"http-server": "^14.0.0",
|
2026-02-25 08:59:08 +00:00
|
|
|
"jasmine": "6.1.0",
|
|
|
|
|
"jasmine-core": "6.1.0",
|
2025-05-06 20:59:30 +00:00
|
|
|
"jasmine-reporters": "^2.5.2",
|
2022-08-05 17:09:37 +00:00
|
|
|
"karma": "~6.4.0",
|
2021-04-05 09:57:24 +00:00
|
|
|
"karma-chrome-launcher": "^3.1.0",
|
|
|
|
|
"karma-firefox-launcher": "^2.1.0",
|
2022-06-29 17:49:08 +00:00
|
|
|
"karma-jasmine": "^5.0.0",
|
2019-11-22 21:12:05 +00:00
|
|
|
"karma-requirejs": "^1.1.0",
|
2023-02-28 03:09:54 +00:00
|
|
|
"karma-sourcemap-loader": "^0.4.0",
|
refactor(compiler-cli): update type check generation code to use new import manager (#54819)
Updates the type-check block generation code (also for inline type check
blocks) to use the new import manager.
This is now a requirement because the translator utilities from the
reference emit environment expect an import manager that follows the
new contract established via `ImportGenerator<TFile, TExpression>`.
For type check files, we can simply print new imports as we don't expect
existing imports to be updated. That is because type check files do not
have any _original_ source files (or in practice— those are empty).
For type check blocks inline, or constructors, imports _may_ be re-used.
This is great as it helps fixing some incrementality bugs that we were
seeing in the type check code. That is, sometimes the type check block
code may generate imports conditionally for e.g. `TemplateRef`, or
animations. Those then **prevent** incremental re-use if TCB code
switches between those continously. We tried to account for that with
signal inputs by always pre-generating such imports. This fixed the
issue for type-check files, but for inline type check blocks this is
different as we would introduce new imports in user code that would then
be changed back in subsequential edit iterations. See:
https://github.com/angular/angular/pull/53521#pullrequestreview-1778130879.
In practice, the assumption was that we would be fine since user code is
most likely containing imports to `@angular/core` already. That is a
true assumption, but unfortunately it doesn't help with incremental
re-use because TypeScript's structural change detection does not dedupe
and expects 1:1 exact imports from their old source files.
https://github.com/microsoft/TypeScript/pull/56845
To improve incremental re-use for the type check integration, we should
re-use original source file imports when possible. This commit enables
this.
To update imports and execute inline operations, we are now uisng
`magic-string` (which is then bundled) as it simplifies the string
manipulatuons.
PR Close #54819
2024-03-11 14:50:36 +00:00
|
|
|
"magic-string": "^0.30.8",
|
2025-06-27 07:40:02 +00:00
|
|
|
"ngx-flamegraph": "0.1.1",
|
2024-07-23 16:34:36 +00:00
|
|
|
"open-in-idx": "^0.1.1",
|
2021-04-05 09:57:24 +00:00
|
|
|
"protractor": "^7.0.0",
|
2024-01-18 17:05:48 +00:00
|
|
|
"reflect-metadata": "^0.2.0",
|
2026-02-06 16:51:45 +00:00
|
|
|
"rollup": "4.57.1",
|
2025-03-11 13:06:34 +00:00
|
|
|
"rollup-plugin-dts": "^6.1.1",
|
2021-09-27 21:41:51 +00:00
|
|
|
"rollup-plugin-preserve-shebang": "^1.0.1",
|
2023-12-11 17:26:46 +00:00
|
|
|
"rxjs": "^7.0.0",
|
2018-10-22 21:26:52 +00:00
|
|
|
"selenium-webdriver": "3.5.0",
|
2026-01-22 21:43:44 +00:00
|
|
|
"selenium-webdriver4": "npm:selenium-webdriver@4.40.0",
|
2021-12-16 07:00:43 +00:00
|
|
|
"semver-dsl": "^1.0.1",
|
2025-07-24 09:44:11 +00:00
|
|
|
"source-map": "0.7.6",
|
2021-11-19 11:32:21 +00:00
|
|
|
"source-map-support": "0.5.21",
|
2019-02-01 13:27:13 +00:00
|
|
|
"systemjs": "0.18.10",
|
2021-09-27 21:41:51 +00:00
|
|
|
"terser": "^5.8.0",
|
2025-03-07 09:31:06 +00:00
|
|
|
"tinyglobby": "^0.2.12",
|
2021-12-16 07:00:43 +00:00
|
|
|
"todomvc-app-css": "^2.3.0",
|
|
|
|
|
"todomvc-common": "^1.0.5",
|
2021-09-22 18:50:59 +00:00
|
|
|
"tslib": "^2.3.0",
|
2020-07-15 10:21:04 +00:00
|
|
|
"tslint": "6.1.3",
|
2026-03-04 11:10:32 +00:00
|
|
|
"typescript": "5.9.3",
|
2021-12-16 07:00:43 +00:00
|
|
|
"webtreemap": "^2.0.1",
|
2023-12-10 15:42:09 +00:00
|
|
|
"ws": "^8.15.0",
|
2021-04-05 09:57:24 +00:00
|
|
|
"xhr2": "0.2.1",
|
2025-06-04 17:04:38 +00:00
|
|
|
"yargs": "^18.0.0",
|
2025-11-26 09:10:24 +00:00
|
|
|
"zone.js": "0.16.0"
|
2018-10-22 21:26:52 +00:00
|
|
|
},
|
|
|
|
|
"// 2": "devDependencies are not used under Bazel. Many can be removed after test.sh is deleted.",
|
|
|
|
|
"devDependencies": {
|
2026-01-30 17:20:51 +00:00
|
|
|
"@actions/core": "^3.0.0",
|
2026-01-30 06:21:47 +00:00
|
|
|
"@actions/github": "^9.0.0",
|
2026-04-17 19:31:53 +00:00
|
|
|
"@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#40e97052a6e9a06c880b7f2d6de9bfa70a326a52",
|
2025-03-07 09:31:06 +00:00
|
|
|
"@babel/plugin-proposal-async-generator-functions": "7.20.7",
|
2025-07-07 14:18:21 +00:00
|
|
|
"@babel/plugin-transform-async-generator-functions": "^7.27.1",
|
2021-04-13 17:07:12 +00:00
|
|
|
"@bazel/bazelisk": "^1.7.5",
|
2025-01-09 11:16:20 +00:00
|
|
|
"@bazel/buildifier": "^8.0.0",
|
2025-12-07 23:39:06 +00:00
|
|
|
"@bazel/ibazel": "0.28.0",
|
2025-11-19 05:10:29 +00:00
|
|
|
"@inquirer/prompts": "^8.0.0",
|
2025-04-10 07:47:21 +00:00
|
|
|
"@nginfra/angular-linking": "^1.0.10",
|
2025-05-20 12:12:01 +00:00
|
|
|
"@octokit/graphql": "^9.0.0",
|
2023-06-16 12:53:35 +00:00
|
|
|
"@types/adm-zip": "^0.5.0",
|
2025-09-01 01:07:36 +00:00
|
|
|
"@types/cldr": "^7.1.4",
|
build: convert CLDR locale extraction from Gulp to Bazel tool (#42230)
Converts the CLDR locale extraction script to a Bazel tool.
This allows us to generate locale files within Bazel, so that
locales don't need to live as sources within the repo. Also
it allows us to get rid of the legacy Gulp tooling.
The migration of the Gulp script to a Bazel tool involved the
following things:
1. Basic conversion of the `extract.js` script to TypeScript.
This mostly was about adding explicit types. e.g. adding `locale:
string` or `localeData: CldrStatic`.
2. Split-up into separate files. Instead of keeping the large
`extract.js` file, the tool has been split into separate files.
The logic remains the same, just that code is more readable and
maintainable.
3. Introduction of a new `index.ts` file that is the entry-point
for the Bazel tool. Previously the Gulp tool just generated
all locale files, the default locale and base currency files
at once. The new entry-point accepts a mode to be passed as
first process argument. based on that argument, either locales
are generated into a specified directory, or the default locale,
base currencies or closure file is generated.
This allows us to generate files with a Bazel genrule where
we simply run the tool and specify the outputs. Note: It's
necessary to have multiple modes because files live in separate
locations. e.g. the default locale in `@angular/core`, but the
rest in `@angular/common`.
4. Removal of the `cldr-data-downloader` and custom CLDR resolution
logic. Within Bazel we cannot run a downloader using network.
We switch this to something more Bazel idiomatic with better
caching. For this a new repository rule is introduced that
downloads the CLDR JSON repository and extracts it. Within
that rule we determine the supported locales so that they
can be used to pre-declare outputs (for the locales) within
Bazel analysis phase. This allows us to add the generated locale
files to a `ts_library` (which we want to have for better testing,
and consistent JS transpilation).
Note that the removal of `cldr-data-downloader` also requires us to
add logic for detecting locales without data. The CLDR data
downloader overwrote the `availableLocales.json` file with a file
that only lists locales that CLDR provides data for. We use the
official `availableLocales` file CLDR provides, but filter out
locales for which no data is available. This is needed until we
update to CLDR 39 where data is available for all such locales
listed in `availableLocales.json`.
PR Close #42230
2021-05-21 20:57:42 +00:00
|
|
|
"@types/cldrjs": "^0.4.22",
|
2023-12-04 19:44:53 +00:00
|
|
|
"@types/d3": "^7.4.3",
|
2025-05-02 16:56:21 +00:00
|
|
|
"@types/tmp": "^0.2.6",
|
2019-11-25 15:48:18 +00:00
|
|
|
"@yarnpkg/lockfile": "^1.1.0",
|
2023-06-16 12:53:35 +00:00
|
|
|
"adm-zip": "^0.5.10",
|
2025-12-05 05:12:58 +00:00
|
|
|
"cldr": "8.0.0",
|
2021-04-05 09:57:24 +00:00
|
|
|
"cldrjs": "0.5.5",
|
2025-05-20 09:40:56 +00:00
|
|
|
"conventional-changelog": "^7.0.0",
|
2026-02-06 16:51:45 +00:00
|
|
|
"cypress": "15.10.0",
|
2025-12-12 06:10:59 +00:00
|
|
|
"firebase-tools": "^15.0.0",
|
2025-06-04 13:08:45 +00:00
|
|
|
"get-tsconfig": "^4.10.1",
|
2024-03-29 03:04:44 +00:00
|
|
|
"gulp": "^5.0.0",
|
2024-05-14 18:05:48 +00:00
|
|
|
"gulp-conventional-changelog": "^5.0.0",
|
2024-11-19 06:12:23 +00:00
|
|
|
"husky": "9.1.7",
|
2024-01-09 16:45:52 +00:00
|
|
|
"karma-coverage": "^2.2.1",
|
2026-02-04 10:23:04 +00:00
|
|
|
"karma-jasmine-html-reporter": "^2.2.0",
|
2021-09-30 20:37:22 +00:00
|
|
|
"karma-sauce-launcher": "^4.3.6",
|
2026-01-22 21:13:17 +00:00
|
|
|
"prettier": "^3.8.0",
|
2025-05-12 15:30:21 +00:00
|
|
|
"rollup-plugin-sourcemaps2": "^0.5.1",
|
2021-04-05 09:57:24 +00:00
|
|
|
"semver": "^7.3.5",
|
2024-05-06 15:56:57 +00:00
|
|
|
"tmp": "^0.2.3",
|
2023-03-02 13:59:37 +00:00
|
|
|
"ts-node": "^10.9.1",
|
2025-09-11 06:44:34 +00:00
|
|
|
"tsec": "0.2.9",
|
2020-03-02 18:00:50 +00:00
|
|
|
"tslint-eslint-rules": "5.4.0",
|
2019-05-02 15:44:24 +00:00
|
|
|
"tslint-no-toplevel-property-access": "0.0.2",
|
2021-04-21 12:23:57 +00:00
|
|
|
"typed-graphqlify": "^3.1.1",
|
2025-05-20 15:08:39 +00:00
|
|
|
"undici": "^7.0.0",
|
feat(forms): add experimental signal-based forms (#63408)
This commit introduces an experimental version of a new signal-based forms API for Angular. This new API aims to explore how signals can be leveraged to create a more declarative, intuitive, and reactive way of handling forms.
The primary goals of this new signal-based approach are:
* **Signal-centric Design:** Place signals at the core of the forms experience, enabling a truly reactive programming model for form state and logic.
* **Declarative Logic:** Allow developers to define form behavior, such as validation and conditional fields, declaratively using TypeScript. This moves logic out of the template and into a typed, testable schema.
* **Developer-Owned Data Model:** The library does not maintain a copy of data in a form model, but instead read and write it via a developer-provided `WritableSignal`, eliminating the need for applications to synchronize their data with the form system.
* **Interoperability:** A key design goal is seamless interoperability with existing reactive forms, allowing for incremental adoption.
* **Bridging Template and Reactive Forms:** This exploration hopes to close the gap between template and reactive forms, offering a unified and more powerful approach that combines the best aspects of both.
This initial version of the experimental API includes the core building blocks, such as the `form()` function, `Field` and `FieldState` objects, and a `[control]` directive for binding to UI elements. It also introduces a schema-based system for defining validation, conditional logic, and other form behaviors.
Note: This is an early, experimental API. It is not yet complete and is subject to change based on feedback and further exploration.
Co-authored-by: Kirill Cherkashin <kirts@google.com>
Co-authored-by: Alex Rickabaugh <alxhub@users.noreply.github.com>
Co-authored-by: Leon Senft <leonsenft@users.noreply.github.com>
Co-authored-by: Dylan Hunn <dylhunn@gmail.com>
Co-authored-by: Michael Small <michael-small@users.noreply.github.com>
PR Close #63408
2025-08-26 22:15:54 +00:00
|
|
|
"vrsource-tslint-rules": "6.0.0",
|
|
|
|
|
"zod": "^4.0.10"
|
2019-01-18 18:43:04 +00:00
|
|
|
},
|
|
|
|
|
"resolutions": {
|
2025-04-30 17:02:45 +00:00
|
|
|
"https-proxy-agent": "7.0.6",
|
2026-03-04 11:10:32 +00:00
|
|
|
"saucelabs": "9.0.2"
|
2025-04-30 17:02:45 +00:00
|
|
|
},
|
|
|
|
|
"pnpm": {
|
2026-01-07 14:43:34 +00:00
|
|
|
"patchedDependencies": {},
|
2025-07-31 15:17:27 +00:00
|
|
|
"packageExtensions": {
|
|
|
|
|
"grpc-gcp": {
|
|
|
|
|
"peerDependencies": {
|
|
|
|
|
"protobufjs": "*"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"onlyBuiltDependencies": [
|
|
|
|
|
"cypress"
|
|
|
|
|
]
|
build: convert CLDR locale extraction from Gulp to Bazel tool (#42230)
Converts the CLDR locale extraction script to a Bazel tool.
This allows us to generate locale files within Bazel, so that
locales don't need to live as sources within the repo. Also
it allows us to get rid of the legacy Gulp tooling.
The migration of the Gulp script to a Bazel tool involved the
following things:
1. Basic conversion of the `extract.js` script to TypeScript.
This mostly was about adding explicit types. e.g. adding `locale:
string` or `localeData: CldrStatic`.
2. Split-up into separate files. Instead of keeping the large
`extract.js` file, the tool has been split into separate files.
The logic remains the same, just that code is more readable and
maintainable.
3. Introduction of a new `index.ts` file that is the entry-point
for the Bazel tool. Previously the Gulp tool just generated
all locale files, the default locale and base currency files
at once. The new entry-point accepts a mode to be passed as
first process argument. based on that argument, either locales
are generated into a specified directory, or the default locale,
base currencies or closure file is generated.
This allows us to generate files with a Bazel genrule where
we simply run the tool and specify the outputs. Note: It's
necessary to have multiple modes because files live in separate
locations. e.g. the default locale in `@angular/core`, but the
rest in `@angular/common`.
4. Removal of the `cldr-data-downloader` and custom CLDR resolution
logic. Within Bazel we cannot run a downloader using network.
We switch this to something more Bazel idiomatic with better
caching. For this a new repository rule is introduced that
downloads the CLDR JSON repository and extracts it. Within
that rule we determine the supported locales so that they
can be used to pre-declare outputs (for the locales) within
Bazel analysis phase. This allows us to add the generated locale
files to a `ts_library` (which we want to have for better testing,
and consistent JS transpilation).
Note that the removal of `cldr-data-downloader` also requires us to
add logic for detecting locales without data. The CLDR data
downloader overwrote the `availableLocales.json` file with a file
that only lists locales that CLDR provides data for. We use the
official `availableLocales` file CLDR provides, but filter out
locales for which no data is available. This is needed until we
update to CLDR 39 where data is available for all such locales
listed in `availableLocales.json`.
PR Close #42230
2021-05-21 20:57:42 +00:00
|
|
|
}
|
2024-04-03 22:22:01 +00:00
|
|
|
}
|