Compare commits

...

144 Commits

Author SHA1 Message Date
Dylan Hunn dee6817407 release: cut the v15.1.3 release 2023-02-02 13:35:06 -08:00
Dylan Hunn 7f5d0352c5 Revert "build: pin dependency aspect_bazel_lib to de8d9ca (#48887)" (#48928)
This reverts commit b0a5b3873a.

PR Close #48928
2023-02-02 10:56:30 -08:00
Payam Valadkhan 21af883970 refactor(compiler-cli): Export the interface PluginCompilerHost for 1p use. (#48874)
Some 1p module which uses the method TscPlugin.wrapHost requires to import this type to make its internal class definitions compatible with this type.

PR Close #48874
2023-02-02 09:44:18 -08:00
Matthieu Riegler d5b2c249a3 fix(router): Handle routerLink directive on svg anchors. (#48857)
On svgs, the tagNames are lowercase even for non-svg related tags like `a`.

fixes #48854

PR Close #48857
2023-02-02 09:38:06 -08:00
Angular Robot 5ccca91654 build: update cross-repo angular dependencies (#48875)
See associated pull request for more information.

PR Close #48875
2023-02-02 09:37:40 -08:00
Angular Robot c3dcb379c9 build: update dependency madge to v6 (#48877)
See associated pull request for more information.

PR Close #48877
2023-02-02 09:37:13 -08:00
Matthieu Riegler c5a50ce72d docs: display the exact command to generate a browserslist config (#48879)
`ng generate config browserslist` is the command to generate the browerslist

fixes #48878
PR Close #48879
2023-02-02 09:36:47 -08:00
Angular Robot 48997c15a4 build: update actions/cache digest to 627f0f4 (#48884)
See associated pull request for more information.

PR Close #48884
2023-02-02 09:33:20 -08:00
Angular Robot ba5c4d4cc4 build: pin dependency aspect_bazel_lib to de8d9ca (#48887)
See associated pull request for more information.

PR Close #48887
2023-02-02 09:32:50 -08:00
Angular Robot a6bea306d5 build: update eslint dependencies to v5.50.0 (#48892)
See associated pull request for more information.

PR Close #48892
2023-02-02 09:32:22 -08:00
Angular Robot 71a713dc51 build: update io_bazel_rules_sass digest to 901d22c (#48897)
See associated pull request for more information.

PR Close #48897
2023-02-02 09:31:43 -08:00
Matthieu Riegler 6193cebacd refactor(common): Remove currency pipe depreciation notice about the default currency (#48872)
Currency pipe won't be using the LOCALE_ID to determine the default currency.

fixes #47612

PR Close #48872
2023-02-02 09:30:05 -08:00
Besim Gürbüz 8c45033577 docs: fix indentation error in content/guide/build.md (#48893)
PR Close #48893
2023-02-02 09:29:16 -08:00
Matthieu Riegler d4926f3861 refactor: remove todos on forms tests (#48894)
Removing the todos implied using fakeAsync and passing an async validator as async (3rd parameter).

PR Close #48894
2023-02-02 09:28:39 -08:00
Matthieu Riegler b4d93d16d4 refactor(forms): remove deprecated uses from the unit tests (#48894)
Jasmine has deprecated the `expectationFailOutput` argument and replaced it by the `withContext()` method

Also removing all references to #24571 from the forms unit tests as the non null assertions are fine in the context.

PR Close #48894
2023-02-02 09:28:39 -08:00
Alan Agius 73972c684e fix(platform-server): insert transfer state script before other script tags (#48868)
Previously, the state `script` was always appended as the last item in the `body` tag. This can result in the state not being available when the Angular application is bootstrap.
A workaround for this was to delay the bootstrapping of the application until by using the `DOMContentLoaded` event listener.

```ts
const bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);

document.addEventListener('DOMContentLoaded', bootstrap);
```

With this change the above workaround is no longer necessary as the state `script` tag is now added prior of any other `script` which guarantees that the state is present prior of the Angular application is bootstrapped.

PR Close #48868
2023-01-30 16:54:07 -08:00
Brecht Billiet 2d30161a03 docs(docs-infra): update strongbrew resource to new website (#48340)
StrongBrew has stopped a few years back.
We are taking over at https://simplified.courses where we have an Angular blog, do on-site training and create content.

PR Close #48340
2023-01-27 17:07:19 +00:00
Santosh Yadav 23df724359 docs: add angular getting started course (#48619)
PR Close #48619
2023-01-27 16:51:06 +00:00
Santosh Yadav ef6e0b8f65 docs: add this is angular to Community Curations (#48618)
PR Close #48618
2023-01-27 16:23:53 +00:00
Walid Bouguima cfb55b0592 docs: update Reactive Forms' FormControl usage description (#48858)
It seems that the description of the `FormControl` usage is  incorrect or at least the copy is not very helpful for beginners and can be very confusing as we do not have a command to generate a `FormControl`, as far as I know  😄.  Additionally, the link for component generation points to the CLI page instead of the component generation section on the CLI page. It would be DX/UX for readers and users to get where the link's text is supposed to take them.
PR Close #48858
2023-01-27 16:22:11 +00:00
Onkar Ruikar 6df21fb7d0 docs(docs-infra): in navigation put prerequisites page 'guide/property-binding' before 'guide/attribute-binding' (#48766)
Pages 'https://angular.io/guide/attribute-binding' and 'https://angular.io/guide/class-binding' have prerequisite of 'https://angular.io/guide/property-binding' but in navigation the property binding page comes much later.
The change puts the binding pages in prerequisite order.
PR Close #48766
2023-01-27 16:21:28 +00:00
Dario Piotrowicz d36dfd4b62 fix(animations): fix non-animatable warnings for easing (#48583)
the easing "prop" used to specify the easing function to
apply to animations isn't a valid css property, it is thus
considered not animatable but different values for such
property shouldn't cause non-animatable warnings

resolves #48571

PR Close #48583
2023-01-26 22:03:08 +00:00
Matthieu Riegler 64430869fb docs: fix crisis-center / crisis-list route parameter (#48853)
The params is in the child component, let's reflect that in the code.

fixes #36970

PR Close #48853
2023-01-26 22:01:42 +00:00
Angular Robot 74603b9437 build: update cross-repo angular dependencies (#48843)
See associated pull request for more information.

PR Close #48843
2023-01-26 22:00:41 +00:00
Jessica Janiuk 9e86dd231b fix(migrations): Fixed file format issue with lint (#48859)
A file was out of format and throwing lint errors. This fixes it.

PR Close #48859
2023-01-26 16:47:25 +00:00
Kristiyan Kostadinov af31f98b00 fix(migrations): migration host incorrectly reading empty files (#48849)
Fixes that the migration host was doing a basic falsy check if the content was read correctly which meant that a component with an empty template would be considered as having a missing template file.

Fixes #48846.

PR Close #48849
2023-01-26 15:54:14 +00:00
Iván Navarro a334e4efbe fix(common): warn if using ngSrcset without a configured image loader (#48804)
Warn the user in the console in case the `ngSrcset` is present and no
loader is configured. In this case, the default loader is used and
it ignores this attribute.

PR Close #48804
2023-01-25 19:27:01 +00:00
Matthieu Riegler 6e197520dd refactor(upgrade): rewrite the downgrade component adapter (#48715)
To remove the non-null assertions linked to #24571, DowngradeComponentAdapter has been refactored and the public methods have been simplifed.

PR Close #48715
2023-01-25 18:32:05 +00:00
Matthieu Riegler 936beade99 refactor(upgrade): code cleaning on upgrade module (#48715)
This commit removes unused code, non-null assertions linked to #24571 and improves readability

PR Close #48715
2023-01-25 18:32:05 +00:00
Matthieu Riegler 566f2918eb refactor(upgrade): code cleaning on tests (#48715)
This commit removes the null assertions linked to #24571

PR Close #48715
2023-01-25 18:32:05 +00:00
Kristiyan Kostadinov 171b4d4640 fix(compiler): incorrect code when non-null assertion is used after a safe access (#48801)
Fixes that the expression converter was producing code that throws a runtime error if a non-null assertion is used as a part of a safe read, write or call.

Fixes #48742.

PR Close #48801
2023-01-25 18:31:37 +00:00
Matthieu Riegler 6caa51ee6e docs: fix the documentation for BootstrapOptions (#48834)
Inline code was being rendered on aio, this commit fixes this.

PR Close #48834
2023-01-25 18:31:08 +00:00
Virginia Dooley 8514e14a49 docs: add new files for HTTP content (#47684)
PR Close #47684
2023-01-25 18:29:47 +00:00
Jessica Janiuk 0861471112 release: cut the v15.1.2 release 2023-01-25 08:51:27 -08:00
Angular Robot 2403d3dac8 docs: update Angular CLI help [15.1.x] (#48828)
Updated Angular CLI help contents.

PR Close #48828
2023-01-24 21:27:40 +00:00
dario-piotrowicz 552cd3fb5c refactor: remove unnecessary test support check utilities (#47543)
remove the following utilities used in unit tests which check for features
that are supported by all supported browsers:
 - supportsCustomElements
 - supportsWebAnimation
 - supportsRegExUnicodeFlag
 - supportsTemplateElement

also remove the following utilities which check for features that are
not supported (and aren't going to be) by any of the supported browsers:
 - supportsDeprecatedCustomCustomElementsV0
 - supportsDeprecatedShadowDomV0

PR Close #47543
2023-01-24 21:06:09 +00:00
Charles Lyding 067c4ce4fd refactor(localize): bundle message digest algorithm directly in npm package (#48799)
The main entry point for the `@angular/localize` package no longer imports
the `@angular/compiler` package and now has no external dependencies. This
allows the main functionality of the package to be used without requiring
any other Angular packages. Only the message digest algorithm implementation
from the `@angular/compiler` package was being used and this code is now
bundled directly into the final npm package for `@angular/localize`.
The `tooling` secondary entry point still leverages and requires Angular
related packages (`@angular/compiler`/`@angular/compiler-cli`). However,
the tooling functionality is not intended to be used and/or bundled in
a web application.

Closes #48163

PR Close #48799
2023-01-24 18:31:25 +00:00
Angular Robot 6cf4364ced build: update cross-repo angular dependencies (#48437)
See associated pull request for more information.

PR Close #48437
2023-01-24 18:30:43 +00:00
Matthieu Riegler d80b98dc08 fix(docs-infra): consistent table width with min-width:100% (#48815)
Let's have a consistent min-width of the tables across AIO to improve the look of the docs.

fixes #43840

PR Close #48815
2023-01-24 18:30:04 +00:00
Matthieu Riegler 98ccb57117 fix(compiler): handle css selectors with space after an escaped character. (#48558)
In Css, selectors with escaped characters require a space after if the following character is a hex character. ie: .\fc ber which matches class="über"
These escaped selectors happen for example when esbuild run with `optimization.minify`

fixes #48524

PR Close #48558
2023-01-24 17:46:34 +00:00
Dylan Hunn 64416a6e4d docs: Use of $any() has no runtime incidence. (#48785)
Some users are woried about `$any()` as function calls are to be avoided in templates. This sentence clarifies the situation.

fixes #48781

PR Close #48785
2023-01-24 16:47:33 +00:00
JoostK 145f848a10 fix(compiler-cli): resolve deprecation warning (#48812)
This commit updates one usage of the `ts.factory.createMethodDeclaration` API
to avoid a deprecated function signature, which avoids logging a warning.

PR Close #48812
2023-01-24 16:45:12 +00:00
Alan Agius a89e8afebe test: update size golden to reflect Angular cross dependency updates (#48809)
The increase is caused by changes in Material which causes more CSS to be generated.

Before
```css
.mat-pseudo-checkbox {
  color: #0000008a;
}
.mat-pseudo-checkbox:after {
  color: #fafafa;
}
.mat-pseudo-checkbox-disabled {
  color: #b0b0b0;
}
.mat-primary .mat-pseudo-checkbox-checked,
.mat-primary .mat-pseudo-checkbox-indeterminate {
  background: #1976d2;
}
.mat-pseudo-checkbox-checked,
.mat-pseudo-checkbox-indeterminate,
.mat-accent .mat-pseudo-checkbox-checked,
.mat-accent .mat-pseudo-checkbox-indeterminate {
  background: #d32f2f;
}
.mat-warn .mat-pseudo-checkbox-checked,
.mat-warn .mat-pseudo-checkbox-indeterminate {
  background: #f44336;
}
.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,
.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {
  background: #b0b0b0;
}
```

After
```css
.mat-pseudo-checkbox-full {
  color: #0000008a;
}
.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled {
  color: #b0b0b0;
}
.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,
.mat-primary
  .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after {
  color: #1976d2;
}
.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,
.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full {
  background: #1976d2;
}
.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,
.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after {
  color: #fafafa;
}
.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,
.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after {
  color: #d32f2f;
}
.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,
.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full {
  background: #d32f2f;
}
.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,
.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after {
  color: #fafafa;
}
.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,
.mat-accent
  .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after {
  color: #d32f2f;
}
.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,
.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full {
  background: #d32f2f;
}
.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,
.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after {
  color: #fafafa;
}
.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,
.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after {
  color: #f44336;
}
.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,
.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full {
  background: #f44336;
}
.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,
.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after {
  color: #fafafa;
}
.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,
.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after {
  color: #b0b0b0;
}
.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,
.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full {
  background: #b0b0b0;
}
```

Closes #48701

PR Close #48809
2023-01-24 16:44:32 +00:00
Angular Robot e9c5c60d9b build: update cross-repo angular dependencies (#48809)
See associated pull request for more information.

(cherry picked from commit f254c98403303aeee20b5d7b94b4799907aa2de9)

PR Close #48809
2023-01-24 16:44:32 +00:00
Angular Robot eeb952ba25 build: update github/codeql-action action to v2.1.39 (#48816)
See associated pull request for more information.

PR Close #48816
2023-01-24 16:43:02 +00:00
Matthieu Riegler 7d2a28d746 refactor(service-worker): removing some todos (#48707)
Removing some outdated/unnecessary todos.

PR Close #48707
2023-01-24 16:40:23 +00:00
Matthieu Riegler 72a07c4301 build(docs-infra): replace base64 images for stackblitz by svgs (#48774)
PNG converted to base64 don't work on stackblitz.
As stackblitz does't support binary files for dynamicaly created projects, we now use only svgs.

Fixes: #48773

PR Close #48774
2023-01-24 16:39:28 +00:00
Yann Thomas LE MOIGNE 8255e455e3 build: Fix version of images in recommended-Dockerfile. node:14-browsers doesn't exist anymore in Dockerhub (#48803)
Change the version of recommended-Dockerfile image to cim/node:16.13-browsers.

Closes #48802

PR Close #48803
2023-01-24 16:38:33 +00:00
Angular Robot a79bee689c build: update eslint dependencies to v5.49.0 (#48818)
See associated pull request for more information.

PR Close #48818
2023-01-24 16:37:36 +00:00
Paul Gschwendtner 2f83366f58 build: remove unused build optimizer dependency (#48797)
This dependency is no longer used and causes other versions
of e.g. typescript to be installed. We should remove it.

PR Close #48797
2023-01-23 13:39:04 +00:00
Paul Gschwendtner 0b00817079 build: update lock file to reflect latest package.json (#48797)
It looks like running `yarn` in the repository results in some
lock file changes. Likely due to a rebase and changes landing
in the meanwhile, the lock file became a little outdated.

This commit uploads the lock file as `yarn` suggests.

PR Close #48797
2023-01-23 13:39:04 +00:00
Paul Gschwendtner 92ab80d44a refactor(bazel): remove unnecessary banner stamping code (#48798)
The `ng_package` rule supports replacing `0.0.0-PLACEHOLDER`
in license files that are inserted as part of rollup. This
requires additional logic to detect stamping, reading the status
files and then replacing the placeholder.

All of this already handled as part of normal package substitutions
and we can replace this unnecessary complexity.

See: https://github.com/bazelbuild/rules_nodejs/blob/da50feb23f911b8b6932d31bbff284fb21b44b6c/internal/pkg_npm/pkg_npm.bzl#L195

PR Close #48798
2023-01-20 18:39:22 +00:00
Alan Agius 6632a06ba5 docs: update supported Chrome version description (#48782)
- Update Chrome supported version description to match other browsers.
- Updates browserslist configuration in build section to match supported browsers

PR Close #48782
2023-01-20 17:07:54 +00:00
Virginia Dooley 2341433d0c docs: Document extracted from the original Introduction document, which is to be retired. Linting suggested corrections made. Restructuring or rewording sentences to be shorter and clearer. (#47907)
PR Close #47907
2023-01-20 01:21:07 +00:00
Virginia Dooley 8441972237 docs: Document extracted from the original Introduction document, which is to be retired. Linting suggested corrections made. Restructuring or rewording sentences to be shorter and clearer. (#47906)
docs: Document extracted from the original Introduction document, which is to be retired. Linting suggested corrections made.  Restructuring or rewording sentences to be shorter and clearer.

docs: revised understanding doc and pullapprove.yml

PR Close #47906
2023-01-19 21:32:34 +00:00
Payam Valadkhan 60a7214ab2 refactor(bazel): Extract the helper patchNgHostWithFileNameToModuleName to its own file for 1P use (#48739)
Some 1P tools require to use the helper patchNgHostWithFileNameToModuleName, and the present location of this helper leads to circular depedency. So it is required to move this helper into a separate module to facilitate importing.

PR Close #48739
2023-01-19 17:34:57 +00:00
Andrew Kushnir 97f6535219 ci: increase payload size for an integration test app (#48772)
The most recent commit added extra logic that brought the payload size above the limit. Likely an actual limit was already pretty close to the threshold, so we are just updating the payload.

PR Close #48772
2023-01-18 13:32:42 -08:00
Andrew Scott a6b10f6e59 fix(router): 'createUrlTreeFromSnapshot' with empty paths and named outlets (#48734)
The details of this commit are pretty thoroughly described in the tests
and code comments. In short, it is sometimes ambiguous where to apply commands in
a `SegmentGroup` tree that is created from an `ActivatedRoute` when
dealing with empty paths. This adjusts the strategy to tolerate more
ambiguity while still allowing developers to be explicit.

This is a fix-forward for b/265215141

PR Close #48734
2023-01-18 10:46:44 -08:00
Andrew Scott 080b87559e test(router): update createUrlTree tests to not use mocks (#48734)
The mocks in the tests make them hard to understand and they don't always test real router behavior

PR Close #48734
2023-01-18 10:46:44 -08:00
AleksanderBodurri fe3eadd5d0 build(devtools): fix issue where esbuild configs were not being set properly in DevTools (#48762)
Previously, a createConfig helper function was created to consolidate common esbuild configurations for DevTools. This function is asynchronous, but when it was used to set the configuration in various esbuild config files, it was used as if it was synchronous.

This commit fixes this issue by wrapping the output of the function in await, so that it propagates the configurations to esbuild correctly.

PR Close #48762
2023-01-18 10:45:13 -08:00
Alan Agius 9c04c7691a docs: update documentation to use ng generate config and ng generate environments (#48757)
In Angular CLI 15.1  new sub commands to generate configuration and environments files were added. This commit updates several docs to mention these commands.

Closes #48364

PR Close #48757
2023-01-18 10:44:14 -08:00
Angular Robot 314b2a7658 build: update dependency rimraf to v4 (#48726)
See associated pull request for more information.

PR Close #48726
2023-01-18 10:43:22 -08:00
Andrew Kushnir e3a8a5cc42 release: cut the v15.1.1 release 2023-01-18 10:11:30 -08:00
Paul Gschwendtner 0f8a4f97d6 test: update size golden to reflect Angular cross dependency updates (#48747)
The `main` bundle size has increased, as well as the CSS styles from
Angular Material. Only the `main` bundle exceeded the golden, but
we update all other entries to make future updates easier and to prevent
gradually getting closer and closer to the threshold.

Investigating/comparing the `main` bundles before and after the update
did not unveil any significant changes, except for thousands of
different identifiers, with different length due to mangling. That
seems to be the only reason for having exceeded the threshold.

Very likely there were more size-affecting changes over time. Also
for example the downleveling of class fields for Safari v15 support.
See: https://github.com/angular/angular-cli/issues/24355#issuecomment-1333477033

PR Close #48747
2023-01-17 10:46:45 -08:00
Angular Robot e611a22294 build: update cross-repo angular dependencies (#48747)
See associated pull request for more information.

PR Close #48747
2023-01-17 10:46:45 -08:00
Andrew Scott 6686eacb90 docs: Fix example in breaking changes to apply to correct sentence (#48758)
The "for example..." was supposed to apply to the production code, not the test code sentence.

fixes #48744

PR Close #48758
2023-01-17 09:21:50 -08:00
Angular Robot dc1972c822 build: update eslint dependencies to v5.48.2 (#48756)
See associated pull request for more information.

PR Close #48756
2023-01-17 09:17:04 -08:00
Angular Robot ec5aae467c build: update all non-major dependencies (#48755)
See associated pull request for more information.

PR Close #48755
2023-01-17 09:16:20 -08:00
Kristiyan Kostadinov 0eec71f806 test: remove usages of deprecated runSchematicAsync function (#48745)
Removes our usages of `runSchematicAsync` since it is deprecated.

PR Close #48745
2023-01-17 09:13:39 -08:00
Kristiyan Kostadinov a386496cbf build: update Angular packages to 15.1.0 stable (#48745)
Bumps up the Angular package dependencies to 15.1.0 stable.

PR Close #48745
2023-01-17 09:13:39 -08:00
Pawel Kozlowski 032b2bd689 perf(common): avoid excessive DOM mutation in NgClass (#48433)
This commit represents rewrite of the NgClass directive to address
severe performance problem (excessive DOM mutation). The modified
algorithm removes all the known performance clifs and has number of
desirable properties:
- it is shorter and (arguably) easier to follow;
- drops usage of existing differs thus limiting dependencies on other
part of the code without increasing size of the directive;
- doesn't degrade any other performance metrics.

Fixes #25518

PR Close #48433
2023-01-13 10:38:54 -08:00
Pawel Kozlowski 3f440d979e refactor(common): remove unnecessary curly brackets (#48433)
Remove unnecessary curly brackets in tests.

PR Close #48433
2023-01-13 10:38:54 -08:00
Angular Robot 22d099a41e docs: update Angular CLI help [15.1.x] (#48733)
Updated Angular CLI help contents.

PR Close #48733
2023-01-13 10:38:09 -08:00
ced 99c55c4345 refactor(router): remove unused parameter in navigation internal function (#48724)
The internal `cancelNavigationTransition` required an unused `router` parameter.

PR Close #48724
2023-01-13 10:37:25 -08:00
Angular Robot 2f332cdc6c build: update actions/cache digest to 58c146c (#48564)
See associated pull request for more information.

PR Close #48564
2023-01-13 10:35:51 -08:00
Angular Robot 112941d693 build: update dependency @rollup/plugin-commonjs to v24 (#48530)
See associated pull request for more information.

PR Close #48530
2023-01-13 10:35:19 -08:00
Angular Robot 0f7cb3b271 build: update scorecard action dependencies (#48465)
See associated pull request for more information.

PR Close #48465
2023-01-13 10:34:47 -08:00
Angular Robot 35b2c82d18 build: update actions/checkout digest to ac59398 (#48460)
See associated pull request for more information.

PR Close #48460
2023-01-13 10:33:48 -08:00
Angular Robot cec9365604 build: update io_bazel_rules_sass digest to 57ade09 (#48407)
See associated pull request for more information.

PR Close #48407
2023-01-13 10:32:35 -08:00
Paul Gschwendtner 5978eedec0 build: update tslint esm-cjs interop settings (#48732)
The TSLint rule for ESM/CJS interop was apparently not working
for a short period of time due to diverging TypeScript versions.

The rule is updated to not disallow `cluster` anymore. The
types for cluster do no allow for e.g. `cluster.Worker` if cluster
refers to the default import. The whole lint rule is not strictly
needed anymore since we build & test with ESM in this repo now!

PR Close #48732
2023-01-13 14:37:13 +00:00
Paul Gschwendtner 4e2bf140e8 build: update ng-dev and account for stamping changes (#48732)
* updates ng-dev and build-tooling since the previous SHAs are
no longer existent after the CircleCI incident snapshot build removal.
* accounts for the new stamping variables.

PR Close #48732
2023-01-13 14:37:13 +00:00
Alex Rickabaugh dd54f6bd96 fix(core): makeEnvironmentProviders should accept EnvironmentProviders (#48720)
`makeEnvironmentProviders` constructs the wrapped `EnvironmentProviders`
type, which can only be used in environment injectors (not element
injectors). It makes sense that `makeEnvironmentProviders` should be able
to accept existing `EnvironmentProviders`-wrapped providers, since it will
be providing the same guarantee, but the current types do not allow this.

This commit fixes the typings to allow nesting `EnvironmentProviders` and
adds a test to verify that it will work.

PR Close #48720
2023-01-12 13:48:00 -08:00
Konstantin Kharitonov 68ce4f6ab4 fix(common): Update Location to get a normalized URL valid in case a represented URL starts with the substring equals APP_BASE_HREF (#48489)
```ts
@NgModule({
  imports: [RouterModule.forRoot([{path: '/enigma', component: EnigmaComponent}])],
  providers: [{provide: APP_BASE_HREF, useValue: '/en'}]
})
export class AppModule {}
```

Navigating to `/enigma` will redirect to `/en/igma` not to `/en/enigma` as it expects

Fixes: #45744

PR Close #48489
2023-01-12 11:45:32 -08:00
Paul Gschwendtner 20a1b43e52 ci: include branch name in update CLI help PRs (#48716)
This should make it easier to distinguish between PRs
as currently they same equivalent but actually target
different branches.

PR Close #48716
2023-01-12 11:44:51 -08:00
Bob Watson 30ee969a76 docs: add first-app-lesson-13 example (#48512)
PR Close #48512
2023-01-12 11:44:09 -08:00
Bob Watson 686a4077c3 docs: add first-app-lesson-12 example (#48512)
PR Close #48512
2023-01-12 11:44:09 -08:00
Bob Watson 952d3b74f5 docs: add first-app-lesson-11 example (#48512)
PR Close #48512
2023-01-12 11:44:09 -08:00
Bob Watson d3223010b0 docs: add first-app-lesson-10 example (#48512)
PR Close #48512
2023-01-12 11:44:09 -08:00
Bob Watson 8daf9c8406 docs: add first-app-lesson-09 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson 866ccd62a6 docs: add first-app-lesson-08 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson 079b1d3e17 docs: add first-app-lesson-07 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson ef61bc4355 docs: add first-app-lesson-06 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson 905993fe31 docs: add first-app-lesson-05 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson 42fdaab971 docs: add first-app-lesson-04 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson e51df686a5 docs: add first-app-lesson-03 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson c771469684 docs: add first-app-lesson-02 example (#48512)
PR Close #48512
2023-01-12 11:44:08 -08:00
Bob Watson 696bffd159 docs: add first-app-lesson-01 example (#48512)
PR Close #48512
2023-01-12 11:44:07 -08:00
Matthieu Riegler cc392e532b refactor(forms): replace type any for the providers (#48647)
The providers for the directives in forms can be typed as Provider. Also the export is not required.

PR Close #48647
2023-01-11 15:01:57 -08:00
Angular Robot ea5bbd3fce docs: update Angular CLI help (#48703)
Updated Angular CLI help contents.

Closes #48700

PR Close #48703
2023-01-11 14:59:48 -08:00
Andrew Scott 262b985401 docs: Add heading to the router writable properties deprecation (#48684)
The deprecation note is missing a header. This commit adds one.

PR Close #48684
2023-01-11 14:59:04 -08:00
mgechev 497329522e docs: add angular devsat q1 2023 (#48683)
PR Close #48683
2023-01-11 14:58:36 -08:00
Jens fcbd12f2b3 docs: Add support for previous Chrome release (#48669)
Previous Chrome stable version should also be supported
PR Close #48669
2023-01-11 14:57:45 -08:00
Matthieu Riegler 8157ae45d4 docs: remove unused style guides. (#48587)
PR Close #48587
2023-01-11 14:57:09 -08:00
Bob Watson d8d29a541a docs: minor copy edit to suggestion (#48484)
PR Close #48484
2023-01-11 14:56:32 -08:00
Bob Watson 7d65c8cb35 docs: minor copy edit to suggestion (#48484)
PR Close #48484
2023-01-11 14:56:32 -08:00
Bob Watson 11c6659ae0 docs: minor copy edit to suggestion (#48484)
PR Close #48484
2023-01-11 14:56:31 -08:00
Bob Watson c05aa940d5 docs: minor copy edit to suggestion (#48484)
PR Close #48484
2023-01-11 14:56:31 -08:00
Aristeidis Bampakos 0c779d098e docs: review router guards section in router guide (#48484)
PR Close #48484
2023-01-11 14:56:31 -08:00
dario-piotrowicz c1f88824b7 refactor(compiler): refactor the shadow css specs (#48443)
apply different quality of life improvements to the shadow
css unit tests:

- refactor the tests so that they are nicely divided in multiple files
   in a logical manner instead of having most of them all in a single big file

- remove the css normalization logic inconsistently used throughout  the tests, which
  causes tests to be inconsistent and it also introduced unintuitive checks

- provide a shared shim utility function (instead of re-defining it
  multiple times)

- add a `toEqualCss` matcher that can be used in the tests in order to
  match css strings without caring about spacing and indentation

PR Close #48443
2023-01-11 14:55:52 -08:00
Angular Robot 6d83493096 build: update dependency puppeteer-core to v19 (#48183)
See associated pull request for more information.

PR Close #48183
2023-01-11 14:55:18 -08:00
ノウラ a853f32496 docs: highlight scripts in markdown (#47778)
This PR highlights all lines of code/cmds/error messages by specifying the use language

PR Close #47778
2023-01-11 14:54:45 -08:00
Vladyslav Slipchenko 84f1648053 docs(docs-infra): fix wording inconsistency of the i18n common prepare section references (#47582)
PR Close #47582
2023-01-11 14:54:08 -08:00
Alan Agius c3ce2954a1 ci: set fetch-depth: 0 in update-events and update-cli-help actions (#48698)
This commits changes the fetch depth from 1 to 0 in the update-events` and `update-cli-help` actions. This is required as otherwise the PR creation would fail when the forked (https://github.com/angular-robot/angular) is not in sync with (https://github.com/angular/angular) ie the later has commits which are not in the former.

PR Close #48698
2023-01-11 07:44:00 -08:00
Alan Agius 5ae7ca827f ci: correctly interpolate ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN (#48690)
Previously, a single curly bracket was used to interpolate the `ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN` value which caused the value not to be provided correctly.

PR Close #48690
2023-01-11 06:56:18 -08:00
Alan Agius 1aef7a8848 ci: expose ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN secret as env (#48687)
Encrypted secrets need to be provided explicitly in workflow steps to be used.

See: https://docs.github.com/en/actions/security-guides/encrypted-secrets for more info.

PR Close #48687
2023-01-10 14:30:31 -08:00
Paul Gschwendtner df77bbc70b ci: use readonly github token for querying CLI snapshot repo (#48681)
Currently the Github action-triggered code uses the `GITHUB_TOKEN`
for querying the CLI snapshot builds repository. This does not work
because the Github actions token is scoped to the orginating
repository, even for queries to a read public repository.

We fix this by using a personal access token. The token is
readonly and only exists to avoid potential rate limiting.

PR Close #48681
2023-01-10 11:13:35 -08:00
Alan Agius 65baae803b ci: add Angular CLI help pages action (#48577) (#48682)
This commits adds an action to update the Angular CLI help contents that are used by AIO to generate CLI guides.

This also changes the setup to include the files are source files instead of having to clone the repository each time. This also simplifies the PR review process of the PR opened by the action.

PR Close #48577

(cherry picked from commit 2dc31576ab)

PR Close #48682
2023-01-10 11:11:48 -08:00
Alex Rickabaugh 99723fc64e release: cut the v15.1.0 release 2023-01-10 10:49:33 -08:00
Paul Gschwendtner 6a8ea29a04 fix(language-service): expose package.json for vscode extension resolution (#48678)
The VSCode extension looks for `@angular/language-service/package.json`
using `require`. This currently breaks as of the ESM changes because
we introduced the `exports` field but did not expose the `package.json`.

This commit fixes it.

Co-authored-By: Andrew Scott <atscott@google.com>
Co-authored-By: Dylan Hunn <dylhunn@gmail.com>

PR Close #48678
2023-01-10 09:13:55 -08:00
Kristiyan Kostadinov caf7228f8a fix(compiler): resolve deprecation warning (#48652)
Fixes a deprecation warning that was being logged by compiler when generating aliases, because we weren't going through `ts.factory` to create an AST node.

PR Close #48652
2023-01-10 08:13:31 -08:00
Paul Gschwendtner 896c04fac4 test(docs-infra): increase jasmine default timeout for e2e specs (#48671)
Similar to the Saucelabs job, the jasmine default timeout can be
increased to avoid the common jasmine timeouts. We cannot control
how fast Selenium e.g. loads a page or not.

PR Close #48671
2023-01-10 08:10:24 -08:00
Alan Agius 772ddc1baa fix(docs-infra): correctly read example type (#48665)
Prior to this change the universal example was broken as the example type was not retrieved correctly in bazel which caused the `_renameFile` method to be called with incorrect context.

Closes #48664

PR Close #48665
2023-01-10 08:09:55 -08:00
Alan Agius 9e013d3dd7 docs: update universal example (#48665)
This change updates the universal example to align with latest CLI changes.

PR Close #48665
2023-01-10 08:09:55 -08:00
Angular Robot 9770964acf build: update dependency jsdom to v21 (#48660)
See associated pull request for more information.

PR Close #48660
2023-01-10 08:09:05 -08:00
Virginia Dooley 8d251fc0cf docs: Custom data Pipes doc, fixed live-example link. (#48656)
PR Close #48656
2023-01-10 08:08:08 -08:00
Andrew Kushnir f112f8d211 refactor(platform-browser): prepare the code to use MockPlatformLocation by default (#48651)
This commit prepares the code of the `BrowserTestingModule` to include the `MockPlatformLocation` by deafult in the future. With this change, the set of providers to add the `MockPlatformLocation` would be disabled by a flag, which will be switched in v16.

PR Close #48651
2023-01-10 08:06:37 -08:00
piyush132000 1c1c4555a2 docs: updated docs removed unnecessary imports and empty methods (#48628)
Removed empty methods and unnecessary imports in files

PR Close #48628
2023-01-10 08:06:05 -08:00
Tim Gates 057e495db5 docs: fix simple typo, esnure -> ensure (#48588)
There is a small typo in integration/check-dependencies.js.

Should read `ensure` rather than `esnure`.

Signed-off-by: Tim Gates <tim.gates@iress.com>

PR Close #48588
2023-01-10 08:05:34 -08:00
Matthieu Riegler b86c6a8909 docs(compiler-cli): fix commands to run compliance unit test (#48559)
PR Close #48559
2023-01-10 07:59:53 -08:00
Andrew Scott 783d21431f refactor(router): move internal router properties to transition handler where appropriate (#48475)
Working towards removing the backwards dependency on router from the
navigation transition handler, this change moves `rootComponentType` and
`afterPreactivation` to the transition handler since that is the only
location those properties are used.

PR Close #48475
2023-01-10 07:59:16 -08:00
Doug Parker 2ffa34eebc refactor(bazel): disables the Tsickle decorator transform (#47934)
This is no longer needed in google3 and actively impedes prodmode tests. See http://b/254054103#comment7 for deeper analysis.

This just turns off the transform for now, if it lands successfully I'll follow up with deleting the flag and dead code altogether.

PR Close #47934
2023-01-10 07:58:40 -08:00
Paul Gschwendtner e615b598ba fix(language-service): ship /api entry-point (#48670)
The `/api` entry-point was accidentally dropped when we switched the
compilation in the repo to full ESM- thinking the entry-point is not
needed externally.

We re-add it because the VSCode repo extension relies on it for checking
whether `ts.LanguageService` is an Angular one.

PR Close #48670
2023-01-09 10:13:35 -08:00
Greg Magolan 6ce7d76a0e fix(language-service): update packages/language-service/build.sh script to work with vscode-ng-language-service's new Bazel build (#48663)
2nd half of https://github.com/angular/vscode-ng-language-service/pull/1846. `npm_traslate_lock` in vscode-ng-language-service now has a data attribute so sed should only add another item to the list instead of adding a duplicate data attribute.

PR Close #48663
2023-01-09 10:13:07 -08:00
Matthieu Riegler 8aa8b4b77c fix(forms): Form provider FormsModule.withConfig return a FormsModule (#48526)
Because of a transitive dependency, FormsModule.withConfig wasn't providing FormModule.

fixes: #48519

PR Close #48526
2023-01-05 16:26:22 -08:00
Matthieu Riegler 61fc47475d refactor(forms): cleanup type any in forms tests (#48624)
Removing every type any in forms with a reference to #9100

PR Close #48624
2023-01-05 14:52:04 -08:00
Andrew Scott 3fe75710d9 fix(router): page refresh should not destroy history state (#48540)
The router's `initialNavigation` causes an imperative navigation using
the `navigateByUrl` method. This, however, results in the history state
being removed on a page refresh. This change calls `scheduleNavigation`
directly from `initialNavigation` to ensure the history state is correctly
retained.

PR Close #48540
2023-01-05 14:50:53 -08:00
Matthieu Riegler b09a716e80 docs: remove empty constructors & ngOnInit() (#48576)
PR Close #48576
2023-01-05 14:49:39 -08:00
Matthieu Riegler b3d0a2717e docs: remove onInit from Tour Of Heroes. (#48576)
Following #24008, the schematics don't produce ngOnInit and the constructor. Let's reflect that in the Tour of Heroes tutorial.

Fixes #48575

PR Close #48576
2023-01-05 14:49:39 -08:00
Matthieu Riegler f672d8fa46 refactor(common): remove non-null assertions (#48476)
As part of angular#24571, removing all non-null assertions from common/test/directives

PR Close #48476
2023-01-05 14:46:22 -08:00
Matthieu Riegler a8ba26561b refactor(common): code cleaning (#48476)
* removing guard as console.warn is now widely supported
* Couldn't remove non-null assertion, waiting for TS support of getters with different types (microsoft/typescript#43662)

PR Close #48476
2023-01-05 14:46:22 -08:00
Matthieu Riegler d832cb2e23 refactor(common): remove non-null assertions (#48476)
As part of angular#24571, removing all non-null assertions from common/directives

PR Close #48476
2023-01-05 14:46:21 -08:00
Matthieu Riegler 23b465e5ed refactor(common): remove non-null assertions (#48476)
As part of angular#24571, removing all non-null assertions from common/directives

PR Close #48476
2023-01-05 14:46:21 -08:00
Andrew Scott d7d23b0320 refactor(router): Remove files no longer in use (#48500)
These files exist to support internal patches that are no longer needed

PR Close #48500
2023-01-05 14:42:28 -08:00
Alex Rickabaugh 28ea114d54 release: cut the v15.1.0-rc.0 release 2023-01-05 13:18:34 -08:00
544 changed files with 15816 additions and 6302 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# Image metadata and config.
# Ideally, the Node.js version should match what we use on CI.
# See `executors > default-executor` in `.circleci/config.yml`.
FROM cimg/node:14-browsers
FROM cimg/node:16.13-browsers
LABEL name="Angular dev environment" \
+1 -1
View File
@@ -4,7 +4,7 @@ description: 'Installs the dependencies using Yarn'
runs:
using: 'composite'
steps:
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 # v3
with:
path: |
./node_modules/
+3 -3
View File
@@ -22,10 +22,10 @@ jobs:
(github.event.action == 'labeled' && github.event.label.name == 'aio: preview') ||
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'aio: preview'))
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3.2.0
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- uses: ./.github/actions/yarn-install
- uses: angular/dev-infra/github-actions/setup-bazel-remote-exec@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: angular/dev-infra/github-actions/setup-bazel-remote-exec@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
bazelrc: ./.bazelrc.user
@@ -34,7 +34,7 @@ jobs:
# the number of concurrent actions is determined based on the host resources.
- run: bazel build //aio:build --jobs=32 --announce_rc --verbose_failures
- uses: angular/dev-infra/github-actions/deploy-previews/pack-and-upload-artifact@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: angular/dev-infra/github-actions/deploy-previews/pack-and-upload-artifact@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
workflow-artifact-name: 'aio'
pull-number: '${{github.event.pull_request.number}}'
+2 -2
View File
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # tag=v3
- name: Configure Firebase deploy target
working-directory: aio/
@@ -34,7 +34,7 @@ jobs:
npx -y firebase-tools@latest target:clear --project ${{env.PREVIEW_PROJECT}} hosting aio
npx -y firebase-tools@latest target:apply --project ${{env.PREVIEW_PROJECT}} hosting aio ${{env.PREVIEW_SITE}}
- uses: angular/dev-infra/github-actions/deploy-previews/upload-artifacts-to-firebase@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: angular/dev-infra/github-actions/deploy-previews/upload-artifacts-to-firebase@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
github-token: '${{secrets.GITHUB_TOKEN}}'
workflow-artifact-name: 'aio'
@@ -13,9 +13,9 @@ jobs:
assistant_to_the_branch_manager:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3.2.0
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
persist-credentials: false
- uses: angular/dev-infra/github-actions/branch-manager@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: angular/dev-infra/github-actions/branch-manager@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
+4 -4
View File
@@ -12,14 +12,14 @@ jobs:
labels:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3.2.0
- uses: angular/dev-infra/github-actions/commit-message-based-labels@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- uses: angular/dev-infra/github-actions/commit-message-based-labels@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
post_approval_changes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3.2.0
- uses: angular/dev-infra/github-actions/post-approval-changes@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- uses: angular/dev-infra/github-actions/post-approval-changes@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
+1 -1
View File
@@ -14,6 +14,6 @@ jobs:
if: github.repository == 'angular/angular'
runs-on: ubuntu-latest
steps:
- uses: angular/dev-infra/github-actions/feature-request@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: angular/dev-infra/github-actions/feature-request@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
+2 -2
View File
@@ -12,8 +12,8 @@ jobs:
trigger:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3.2.0
- uses: angular/dev-infra/github-actions/google-internal-tests@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- uses: angular/dev-infra/github-actions/google-internal-tests@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
run-tests-guide-url: http://go/angular/g3sync
github-token: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -14,6 +14,6 @@ jobs:
if: github.repository == 'angular/angular'
runs-on: ubuntu-latest
steps:
- uses: angular/dev-infra/github-actions/lock-closed@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
- uses: angular/dev-infra/github-actions/lock-closed@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
lock-bot-key: ${{ secrets.LOCK_BOT_PRIVATE_KEY }}
+1 -1
View File
@@ -9,6 +9,6 @@ jobs:
status:
runs-on: ubuntu-latest
steps:
- uses: angular/dev-infra/github-actions/unified-status-check@f1e8862e5034f046cc0bc66641d37f5b36d3e9b5
- uses: angular/dev-infra/github-actions/unified-status-check@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
+4 -4
View File
@@ -25,12 +25,12 @@ jobs:
steps:
- name: 'Checkout code'
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3.1.0
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
persist-credentials: false
- name: 'Run analysis'
uses: ossf/scorecard-action@99c53751e09b9529366343771cc321ec74e9bd3d # tag=v2.0.6
uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2
with:
results_file: results.sarif
results_format: sarif
@@ -39,7 +39,7 @@ jobs:
# Upload the results as artifacts.
- name: 'Upload artifact'
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # tag=v3.1.1
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
with:
name: SARIF file
path: results.sarif
@@ -47,6 +47,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: 'Upload to code-scanning'
uses: github/codeql-action/upload-sarif@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # tag=v2.1.35
uses: github/codeql-action/upload-sarif@a34ca99b4610d924e04c68db79e503e1f79f9f02 # v2.1.39
with:
sarif_file: results.sarif
+44
View File
@@ -0,0 +1,44 @@
name: Update AIO Angular CLI help
on:
workflow_dispatch:
inputs: {}
push:
branches:
- 'main'
- '[0-9]+.[0-9]+.x'
# Declare default permissions as read only.
permissions:
contents: read
jobs:
update_cli_help:
name: Update Angular CLI help (if necessary)
if: github.repository == 'angular/angular'
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
# Setting `persist-credentials: false` prevents the github-action account from being the
# account that is attempted to be used for authentication, instead the remote is set to
# an authenticated URL.
persist-credentials: false
# This is needed as otherwise the PR creation will fail with `shallow update not allowed` when the forked branch is not in sync.
fetch-depth: 0
- name: Generate CLI help
run: node aio/scripts/update-cli-help/index.mjs
env:
ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN: ${{ secrets.ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN }}
- name: Create a PR (if necessary)
uses: angular/dev-infra/github-actions/create-pr-for-changes@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
branch-prefix: update-cli-help
pr-title: 'docs: update Angular CLI help [${{github.ref_name}}]'
pr-description: |
Updated Angular CLI help contents.
pr-labels: |
action: review
area: docs
angular-robot-token: ${{ secrets.ANGULAR_ROBOT_ACCESS_TOKEN }}
+4 -2
View File
@@ -24,16 +24,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3.2.0
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
# Setting `persist-credentials: false` prevents the github-action account from being the
# account that is attempted to be used for authentication, instead the remote is set to
# an authenticated URL.
persist-credentials: false
# This is needed as otherwise the PR creation will fail with `shallow update not allowed` when the forked branch is not in sync.
fetch-depth: 0
- name: Generate `events.json`
run: node aio/scripts/generate-events/index.mjs --ignore-invalid-dates
- name: Create a PR (if necessary)
uses: angular/dev-infra/github-actions/create-pr-for-changes@96fdaaa056f1cfa7ffbc4c69b7e9007279f76c94
uses: angular/dev-infra/github-actions/create-pr-for-changes@fa428ee0accc999f051008f0daa5651ba2728c2b
with:
branch-prefix: docs-update-events
pr-title: 'docs: update events'
+18
View File
@@ -127,8 +127,10 @@ groups:
'packages/animations/**/{*,.*}',
'packages/platform-browser/animations/**/{*,.*}',
'aio/content/guide/animations.md',
'aio/content/guide/add-an-animation.md',
'aio/content/guide/animate-state-style.md',
'aio/content/guide/animation-api-summary.md',
'aio/content/guide/understanding-angular-animation.md',
'aio/content/examples/animations/**/{*,.*}',
'aio/content/images/guide/animations/**/{*,.*}',
'aio/content/guide/complex-animation-sequences.md',
@@ -144,6 +146,7 @@ groups:
- crisbeto
- ~jelbourn
- jessicajaniuk
- treladyone
# =========================================================
# Framework: Compiler
@@ -408,6 +411,20 @@ groups:
'packages/common/http/**/{*,.*}',
'packages/examples/http/**/{*,.*}',
'aio/content/guide/http.md',
'aio/content/guide/understanding-communicating-with-http.md',
'aio/content/guide/http-configure-http-url-parameters.md',
'aio/content/guide/http-handle-request-errors.md',
'aio/content/guide/http-intercept-requests-and-responses.md',
'aio/content/guide/http-interceptor-use-cases.md',
'aio/content/guide/http-make-jsonp-request.md',
'aio/content/guide/http-optimize-server-interaction.md',
'aio/content/guide/http-pass-metadata-to-interceptors.md',
'aio/content/guide/http-request-data-from-server.md',
'aio/content/guide/http-security-xsrf-protection.md',
'aio/content/guide/http-send-data-to-server.md',
'aio/content/guide/http-setup-server-communication.md',
'aio/content/guide/http-test-requests.md',
'aio/content/guide/http-track-show-request-progress.md',
'aio/content/examples/http/**/{*,.*}',
'aio/content/images/guide/http/**/{*,.*}'
])
@@ -848,6 +865,7 @@ groups:
'aio/content/tutorial/**/{*,.*}',
'aio/content/images/guide/toh/**/{*,.*}',
'aio/content/demos/first-app/**/{*,.*}',
'aio/content/examples/first-app-*/**/{*,.*}',
'aio/content/examples/toh-pt0/**/{*,.*}',
'aio/content/examples/toh-pt1/**/{*,.*}',
'aio/content/examples/toh-pt2/**/{*,.*}',
+127 -112
View File
@@ -1,24 +1,144 @@
<a name="15.1.0-next.3"></a>
# 15.1.0-next.3 (2022-12-14)
<a name="15.1.3"></a>
# 15.1.3 (2023-02-02)
### animations
| Commit | Type | Description |
| -- | -- | -- |
| [c86484507f](https://github.com/angular/angular/commit/c86484507fdc0a44b3d20ea8b988b23f25ad9ac2) | fix | fix incorrect handling of camel-case css properties ([#48436](https://github.com/angular/angular/pull/48436)) |
| [d36dfd4b62](https://github.com/angular/angular/commit/d36dfd4b626ff4c5894ca67136f71dd1f7f56e3e) | fix | fix non-animatable warnings for easing ([#48583](https://github.com/angular/angular/pull/48583)) |
### common
| Commit | Type | Description |
| -- | -- | -- |
| [a334e4efbe](https://github.com/angular/angular/commit/a334e4efbe9380776e574f745390901552df771e) | fix | warn if using ngSrcset without a configured image loader ([#48804](https://github.com/angular/angular/pull/48804)) |
### compiler
| Commit | Type | Description |
| -- | -- | -- |
| [171b4d4640](https://github.com/angular/angular/commit/171b4d46407e7c2860fdce4a5196fd6a34b455f0) | fix | incorrect code when non-null assertion is used after a safe access ([#48801](https://github.com/angular/angular/pull/48801)) |
### migrations
| Commit | Type | Description |
| -- | -- | -- |
| [9e86dd231b](https://github.com/angular/angular/commit/9e86dd231bd0fb818da537191bbe197f15efc44d) | fix | Fixed file format issue with lint ([#48859](https://github.com/angular/angular/pull/48859)) |
| [af31f98b00](https://github.com/angular/angular/commit/af31f98b00a5d3decbb39df1f998346b3002b89e) | fix | migration host incorrectly reading empty files ([#48849](https://github.com/angular/angular/pull/48849)) |
### platform-server
| Commit | Type | Description |
| -- | -- | -- |
| [73972c684e](https://github.com/angular/angular/commit/73972c684e214bc0e7c88338e001ff99a14dbcdc) | fix | insert transfer state `script` before other `script` tags ([#48868](https://github.com/angular/angular/pull/48868)) |
### router
| Commit | Type | Description |
| -- | -- | -- |
| [d5b2c249a3](https://github.com/angular/angular/commit/d5b2c249a3b220d0a47413c6e1054fd49d9d8cd8) | fix | Handle routerLink directive on svg anchors. ([#48857](https://github.com/angular/angular/pull/48857)) |
## Special Thanks
Alan Agius, Besim Gürbüz, Brecht Billiet, Dario Piotrowicz, Dylan Hunn, Iván Navarro, Jessica Janiuk, Kristiyan Kostadinov, Matthieu Riegler, Onkar Ruikar, Payam Valadkhan, Santosh Yadav, Virginia Dooley and Walid Bouguima
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.1.2"></a>
# 15.1.2 (2023-01-25)
### compiler
| Commit | Type | Description |
| -- | -- | -- |
| [98ccb57117](https://github.com/angular/angular/commit/98ccb571176632cf4d434e9e54b086bb63601148) | fix | handle css selectors with space after an escaped character. ([#48558](https://github.com/angular/angular/pull/48558)) |
### compiler-cli
| Commit | Type | Description |
| -- | -- | -- |
| [145f848a10](https://github.com/angular/angular/commit/145f848a10b4dc791cbf42b803983357735d5f86) | fix | resolve deprecation warning ([#48812](https://github.com/angular/angular/pull/48812)) |
### router
| Commit | Type | Description |
| -- | -- | -- |
| [a6b10f6e59](https://github.com/angular/angular/commit/a6b10f6e597e666a55ef1cd2aecdf3a309cebad8) | fix | 'createUrlTreeFromSnapshot' with empty paths and named outlets ([#48734](https://github.com/angular/angular/pull/48734)) |
## Special Thanks
Alan Agius, AleksanderBodurri, Andrew Kushnir, Andrew Scott, Charles Lyding, Dylan Hunn, JoostK, Matthieu Riegler, Paul Gschwendtner, Payam Valadkhan, Virginia Dooley, Yann Thomas LE MOIGNE and dario-piotrowicz
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.1.1"></a>
# 15.1.1 (2023-01-18)
### common
| Commit | Type | Description |
| -- | -- | -- |
| [68ce4f6ab4](https://github.com/angular/angular/commit/68ce4f6ab495f78858281b902e6433fe90ed6dbf) | fix | Update `Location` to get a normalized URL valid in case a represented URL starts with the substring equals `APP_BASE_HREF` ([#48489](https://github.com/angular/angular/pull/48489)) |
| [032b2bd689](https://github.com/angular/angular/commit/032b2bd689e24ece61e23bfe9a39a11676958b8d) | perf | avoid excessive DOM mutation in NgClass ([#48433](https://github.com/angular/angular/pull/48433)) |
### core
| Commit | Type | Description |
| -- | -- | -- |
| [dd54f6bd96](https://github.com/angular/angular/commit/dd54f6bd963f859d18af90d5b3834c443ec073f9) | fix | makeEnvironmentProviders should accept EnvironmentProviders ([#48720](https://github.com/angular/angular/pull/48720)) |
## Special Thanks
Alan Agius, Alex Rickabaugh, Andrew Scott, Aristeidis Bampakos, Bob Watson, Jens, Konstantin Kharitonov, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Vladyslav Slipchenko, ced, dario-piotrowicz, mgechev and ノウラ
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.1.0"></a>
# 15.1.0 (2023-01-10)
## Deprecations
### router
* `CanLoad` guards in the Router are deprecated. Use `CanMatch`
instead.
* None of the public properties of the Router are meant to be writeable. They should all be configured using other methods, all of which have been documented:
The following strategies are meant to be configured by registering the
application strategy in DI via the `providers` in the root `NgModule` or
`bootstrapApplication`:
* `routeReuseStrategy`
* `titleStrategy`
* `urlHandlingStrategy`
The following options are meant to be configured using the options
available in `RouterModule.forRoot` or `provideRouter`.
* `onSameUrlNavigation`
* `paramsInheritanceStrategy`
* `urlUpdateStrategy`
* `canceledNavigationResolution`
The following options are available in `RouterModule.forRoot` but not
available in `provideRouter`:
* `malformedUriErrorHandler` - This was found to not be used anywhere
internally.
* `errorHandler` - Developers can instead subscribe to `Router.events`
and filter for `NavigationError`.
### common
| Commit | Type | Description |
| -- | -- | -- |
| [fe50813664](https://github.com/angular/angular/commit/fe50813664809a1177132a77bd2a316ad0858b9e) | feat | Add BrowserPlatformLocation to the public API ([#48488](https://github.com/angular/angular/pull/48488)) |
| [e362214924](https://github.com/angular/angular/commit/e362214924dbb784e5bd0efd96530134f8c91d32) | fix | Fix TestBed.overrideProvider type to include multi ([#48424](https://github.com/angular/angular/pull/48424)) |
### compiler-cli
| [2f4f0638c7](https://github.com/angular/angular/commit/2f4f0638c74dccfc2d0522f67ab226d3227c0566) | fix | Add data attribtue to NgOptimizedImage ([#48497](https://github.com/angular/angular/pull/48497)) |
### compiler
| Commit | Type | Description |
| -- | -- | -- |
| [a6849f27af](https://github.com/angular/angular/commit/a6849f27af129588091f635c6ae7a326241344fc) | fix | evaluate const tuple types statically ([#48091](https://github.com/angular/angular/pull/48091)) |
| [a532d71975](https://github.com/angular/angular/commit/a532d71975bef463223fd5d8322e3140760c9134) | feat | allow self-closing tags on custom elements ([#48535](https://github.com/angular/angular/pull/48535)) |
| [33f35b04ef](https://github.com/angular/angular/commit/33f35b04ef0f32f25624a6be59f8635675e3e131) | fix | type-only symbols incorrectly retained when downlevelling custom decorators ([#48638](https://github.com/angular/angular/pull/48638)) |
### core
| Commit | Type | Description |
| -- | -- | -- |
| [6acae1477a](https://github.com/angular/angular/commit/6acae1477a212bbd85d0670913c2925fa3bc0c24) | feat | Add `TestBed.runInInjectionContext` to help test functions which use `inject` ([#47955](https://github.com/angular/angular/pull/47955)) |
| [38421578a2](https://github.com/angular/angular/commit/38421578a2573bcbc86c927ed4015e20fc39f04a) | feat | Make the `isStandalone()` function available in public API ([#48114](https://github.com/angular/angular/pull/48114)) |
| [dd42974b07](https://github.com/angular/angular/commit/dd42974b070b068135c1bc34072486ae440e45e0) | feat | support TypeScript 4.9 ([#48005](https://github.com/angular/angular/pull/48005)) |
### forms
| Commit | Type | Description |
| -- | -- | -- |
| [8aa8b4b77c](https://github.com/angular/angular/commit/8aa8b4b77cefcdd400ec9767b946b295ef42a066) | fix | Form provider FormsModule.withConfig return a FormsModule ([#48526](https://github.com/angular/angular/pull/48526)) |
### language-service
| Commit | Type | Description |
| -- | -- | -- |
| [5f0b53c735](https://github.com/angular/angular/commit/5f0b53c7352f19480185c6b5c769e5012a2d2faa) | feat | Allow auto-imports to suggest multiple possible imports. ([#47787](https://github.com/angular/angular/pull/47787)) |
| [ce8160ecb2](https://github.com/angular/angular/commit/ce8160ecb28d6765d438eb65035835984eb956ec) | fix | Prevent crashes on unemitable references ([#47938](https://github.com/angular/angular/pull/47938)) |
### localize
| Commit | Type | Description |
| -- | -- | -- |
| [a1a8e91eca](https://github.com/angular/angular/commit/a1a8e91ecaded6a2e4d700109a26d3117ad77c9c) | fix | add triple slash type reference on `@angular/localize` on `ng add ([#48502](https://github.com/angular/angular/pull/48502)) |
### migrations
| Commit | Type | Description |
| -- | -- | -- |
| [cc284afbbc](https://github.com/angular/angular/commit/cc284afbbc33b91884882204c5958a44a5d11392) | fix | combine newly-added imports in import manager ([#48620](https://github.com/angular/angular/pull/48620)) |
### router
| Commit | Type | Description |
| -- | -- | -- |
| [228e992db7](https://github.com/angular/angular/commit/228e992db75bd7a2213b4596e6e2a8696578aa19) | docs | Deprecate canLoad guards in favor of canMatch ([#48180](https://github.com/angular/angular/pull/48180)) |
| [0a8b8a66cd](https://github.com/angular/angular/commit/0a8b8a66cdfb86586811c79bec938b3ab7215e8f) | docs | Deprecate public members of Router that are meant to be configured elsewhere ([#48006](https://github.com/angular/angular/pull/48006)) |
| [332461bd0c](https://github.com/angular/angular/commit/332461bd0c5f5734a9d7f051f0f4c6c173dd87c9) | feat | Add ability to override `onSameUrlNavigation` default per-navigation ([#48050](https://github.com/angular/angular/pull/48050)) |
| [f58ad86e51](https://github.com/angular/angular/commit/f58ad86e51817f83ff18db790a347528262b850b) | feat | Add feature provider for enabling hash navigation ([#48301](https://github.com/angular/angular/pull/48301)) |
| [73f03ad2d2](https://github.com/angular/angular/commit/73f03ad2d29811dda2ee03c5f18c79ebc9519c0b) | feat | Add new NavigationSkipped event for ignored navigations ([#48024](https://github.com/angular/angular/pull/48024)) |
| [3fe75710d9](https://github.com/angular/angular/commit/3fe75710d97a0f3224b2b09c45d9b8a9ad6efe91) | fix | page refresh should not destroy history state ([#48540](https://github.com/angular/angular/pull/48540)) |
## Special Thanks
Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, BrowserPerson, Jens, Jessica Janiuk, Joey Perrott, JoostK, Konstantin Kharitonov, Lukas Matta, Matthieu Riegler, Piotr Kowalski, Virginia Dooley, Yannick Baron, dario-piotrowicz, lsst25, piyush132000 and why520crazy
Alan Agius, Alex Castle, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Bob Watson, Charles Lyding, Derek Cormier, Doug Parker, Dylan Hunn, George Kalpakas, Greg Magolan, Jessica Janiuk, JiaLiPassion, Joey Perrott, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Renan Ferro, Tim Gates, Vadim, Virginia Dooley, ced, mgechev, piyush132000, robertIsaac and sr5434
<!-- CHANGELOG SPLIT MARKER -->
@@ -41,32 +161,6 @@ Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Brows
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.1.0-next.2"></a>
# 15.1.0-next.2 (2022-12-07)
### common
| Commit | Type | Description |
| -- | -- | -- |
| [8e52ca2714](https://github.com/angular/angular/commit/8e52ca271496b0feebf66b2dc7c8f396b73d61a0) | fix | Don't generate srcsets with very large sources ([#47997](https://github.com/angular/angular/pull/47997)) |
| [f8ecc194e9](https://github.com/angular/angular/commit/f8ecc194e93bf9f80af0cb0e77032341bf2f9886) | fix | Update `Location` to support base href containing `origin` ([#48327](https://github.com/angular/angular/pull/48327)) |
### compiler
| Commit | Type | Description |
| -- | -- | -- |
| [4c023956d8](https://github.com/angular/angular/commit/4c023956d8dd05d8455612dff185a7e7918c9fed) | fix | make sure selectors inside container queries are correctly scoped ([#48353](https://github.com/angular/angular/pull/48353)) |
### compiler-cli
| Commit | Type | Description |
| -- | -- | -- |
| [27eaded62d](https://github.com/angular/angular/commit/27eaded62dbe059fc9ac02cfa7f53ccf8aebccbf) | fix | Produce diagnostic rather than crash when using invalid hostDirective ([#48314](https://github.com/angular/angular/pull/48314)) |
### core
| Commit | Type | Description |
| -- | -- | -- |
| [38421578a2](https://github.com/angular/angular/commit/38421578a2573bcbc86c927ed4015e20fc39f04a) | feat | Make the `isStandalone()` function available in public API ([#48114](https://github.com/angular/angular/pull/48114)) |
| [dd42974b07](https://github.com/angular/angular/commit/dd42974b070b068135c1bc34072486ae440e45e0) | feat | support TypeScript 4.9 ([#48005](https://github.com/angular/angular/pull/48005)) |
| [5f9c7ceb90](https://github.com/angular/angular/commit/5f9c7ceb907be47dff3e203dd837fd6ee9133fcb) | fix | unable to inject ChangeDetectorRef inside host directives ([#48355](https://github.com/angular/angular/pull/48355)) |
## Special Thanks
Alan Agius, Alex Castle, Andrew Kushnir, Andrew Scott, Bob Watson, Charles Lyding, Derek Cormier, Joey Perrott, Konstantin Kharitonov, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, dario-piotrowicz, piyush132000 and sr5434
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.0.3"></a>
# 15.0.3 (2022-12-07)
### common
@@ -91,26 +185,6 @@ Alan Agius, Alex Castle, Andrew Kushnir, Andrew Scott, Bob Watson, Derek Cormier
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.1.0-next.1"></a>
# 15.1.0-next.1 (2022-11-30)
## Deprecations
### router
- CanLoad guards in the Router are deprecated. Use CanMatch
instead.
### compiler-cli
| Commit | Type | Description |
| -- | -- | -- |
| [7d88700933](https://github.com/angular/angular/commit/7d8870093313575d89c8abe584c43d6fa8105fc8) | fix | accept inheriting the constructor from a class in a library ([#48156](https://github.com/angular/angular/pull/48156)) |
### router
| Commit | Type | Description |
| -- | -- | -- |
| [228e992db7](https://github.com/angular/angular/commit/228e992db75bd7a2213b4596e6e2a8696578aa19) | docs | Deprecate canLoad guards in favor of canMatch ([#48180](https://github.com/angular/angular/pull/48180)) |
| [332461bd0c](https://github.com/angular/angular/commit/332461bd0c5f5734a9d7f051f0f4c6c173dd87c9) | feat | Add ability to override `onSameUrlNavigation` default per-navigation ([#48050](https://github.com/angular/angular/pull/48050)) |
## Special Thanks
Alan Agius, Andrew Scott, Aristeidis Bampakos, Bob Watson, Derek Cormier, Dylan Hunn, JoostK, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Rokas Brazdžionis and piyush132000
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.0.2"></a>
# 15.0.2 (2022-11-30)
### compiler-cli
@@ -149,65 +223,6 @@ Alan Agius, Andrew Scott, Bjarki, Bob Watson, Brooke, Derek Cormier, Dylan Hunn,
<!-- CHANGELOG SPLIT MARKER -->
<a name="15.1.0-next.0"></a>
# 15.1.0-next.0 (2022-11-22)
## Deprecations
### router
- router writable properties
The following strategies are meant to be configured by registering the
application strategy in DI via the `providers` in the root `NgModule` or
`bootstrapApplication`:
* `routeReuseStrategy`
* `titleStrategy`
* `urlHandlingStrategy`
The following options are meant to be configured using the options
available in `RouterModule.forRoot` or `provideRouter`.
* `onSameUrlNavigation`
* `paramsInheritanceStrategy`
* `urlUpdateStrategy`
* `canceledNavigationResolution`
The following options are available in `RouterModule.forRoot` but not
available in `provideRouter`:
* `malformedUriErrorHandler` - This was found to not be used anywhere
internally.
* `errorHandler` - Developers can instead subscribe to `Router.events`
and filter for `NavigationError`.
### common
| Commit | Type | Description |
| -- | -- | -- |
| [b0a62bea47](https://github.com/angular/angular/commit/b0a62bea475480768f2cffeb134960dc1165181c) | fix | Fix MockPlatformLocation events and missing onPopState implementation ([#48113](https://github.com/angular/angular/pull/48113)) |
### core
| Commit | Type | Description |
| -- | -- | -- |
| [6acae1477a](https://github.com/angular/angular/commit/6acae1477a212bbd85d0670913c2925fa3bc0c24) | feat | Add `TestBed.runInInjectionContext` to help test functions which use `inject` ([#47955](https://github.com/angular/angular/pull/47955)) |
### forms
| Commit | Type | Description |
| -- | -- | -- |
| [0329c13e95](https://github.com/angular/angular/commit/0329c13e95127fd6f0044b6809b9bccb27f3cb91) | fix | don't mutate validators array ([#47830](https://github.com/angular/angular/pull/47830)) |
| [d321880440](https://github.com/angular/angular/commit/d3218804401fb35d8da1de91960bbdf9ab0aa823) | fix | FormBuilder.group return right type with shorthand parameters. ([#48084](https://github.com/angular/angular/pull/48084)) |
### language-service
| Commit | Type | Description |
| -- | -- | -- |
| [5f0b53c735](https://github.com/angular/angular/commit/5f0b53c7352f19480185c6b5c769e5012a2d2faa) | feat | Allow auto-imports to suggest multiple possible imports. ([#47787](https://github.com/angular/angular/pull/47787)) |
| [fd2eea5961](https://github.com/angular/angular/commit/fd2eea59613ab3cdde871046b6086216d77a386e) | fix | correctly handle host directive inputs/outputs ([#48147](https://github.com/angular/angular/pull/48147)) |
| [ce8160ecb2](https://github.com/angular/angular/commit/ce8160ecb28d6765d438eb65035835984eb956ec) | fix | Prevent crashes on unemitable references ([#47938](https://github.com/angular/angular/pull/47938)) |
| [764fa3d9c3](https://github.com/angular/angular/commit/764fa3d9c37eb70acd21879296ec039de07173ea) | fix | update packages/language-service/build.sh script to work with vscode-ng-language-service's new Bazel build ([#48120](https://github.com/angular/angular/pull/48120)) |
### router
| Commit | Type | Description |
| -- | -- | -- |
| [0a8b8a66cd](https://github.com/angular/angular/commit/0a8b8a66cdfb86586811c79bec938b3ab7215e8f) | docs | Deprecate public members of Router that are meant to be configured elsewhere ([#48006](https://github.com/angular/angular/pull/48006)) |
| [73f03ad2d2](https://github.com/angular/angular/commit/73f03ad2d29811dda2ee03c5f18c79ebc9519c0b) | feat | Add new NavigationSkipped event for ignored navigations ([#48024](https://github.com/angular/angular/pull/48024)) |
| [b51929a394](https://github.com/angular/angular/commit/b51929a394acaa129699bc72e34882b7e577dd7f) | fix | correct type of nextState parameter in canDeactivate ([#48038](https://github.com/angular/angular/pull/48038)) |
| [1df0ed7d6e](https://github.com/angular/angular/commit/1df0ed7d6e636d921ad617465c3956dc1b6292eb) | fix | Ensure renavigating in component init works with enabledBlocking ([#48063](https://github.com/angular/angular/pull/48063)) |
| [1976e37475](https://github.com/angular/angular/commit/1976e37475e144d4df27b1558b2acd929bd439be) | fix | restore 'history.state' on popstate even if navigationId missing ([#48033](https://github.com/angular/angular/pull/48033)) |
## Special Thanks
Alan Agius, Andrew Kushnir, Andrew Scott, Bjarki, Bob Watson, Brooke, Derek Cormier, Dylan Hunn, George Kalpakas, Greg Magolan, Ikko Ashimine, Ivan Rodriguez, Jessica Janiuk, JiaLiPassion, Joe Roxbury, Joey Perrott, Kristiyan Kostadinov, Matthieu Riegler, Mikhail Savchuk, Nebojsa Cvetkovic, Pawel Kozlowski, Volodymyr, Wooshaah and mgechev
<!-- CHANGELOG SPLIT MARKER -->
<a name="12.2.17"></a>
# 12.2.17 (2022-11-22)
## Breaking Changes
+6 -32
View File
@@ -52,35 +52,9 @@ http_archive(
# Fetch Aspect lib for utilities like write_source_files
http_archive(
name = "aspect_bazel_lib",
sha256 = "a7bfc7aed7b86a4caaba382116e0214ebbaa623f393a9e716d87a3e1bab29d78",
strip_prefix = "bazel-lib-1.19.0",
url = "https://github.com/aspect-build/bazel-lib/archive/refs/tags/v1.19.0.tar.gz",
)
# Download cli source from angular/cli-builds for doc generation at a specific tag or commit.
# If the ref is a commit sha, use the full sha instead of the abbreviated form. Tags, which
# hold an abbreviated sha by convention in cli-builds, can continue to use the short form.
CLI_SRC_REF = "f0163d17d581f7ea59ada47420599264060db77a"
http_archive(
name = "angular_cli_src",
build_file_content = """
# Include files used in doc generation
filegroup(
name = "files_for_docgen",
srcs = glob([
"help/**/*.json",
"package.json",
]),
visibility = ["//visibility:public"],
)
""",
# Run the following command to calculate the sha256, substituting the CLI_SRC_REF
# wget -O- -q https://github.com/angular/cli-builds/archive/{CLI_SRC_REF}.tar.gz | sha256sum
# Alternatively, just remove the parameter and bazel debug will output the sha as a suggestion.
sha256 = "952a62ce2b040af74fe3ae4d0bef5eaca505b7986df3bcf776e4ce84628cd3ed",
strip_prefix = "cli-builds-%s" % CLI_SRC_REF,
url = "https://github.com/angular/cli-builds/archive/%s.tar.gz" % CLI_SRC_REF,
sha256 = "4b2e774387bae6242879820086b7b738d49bf3d0659522ea5d9363be01a27582",
strip_prefix = "bazel-lib-1.23.2",
url = "https://github.com/aspect-build/bazel-lib/archive/refs/tags/v1.23.2.tar.gz",
)
# Setup the Node.js toolchain.
@@ -220,10 +194,10 @@ cldr_xml_data_repository(
# sass rules
http_archive(
name = "io_bazel_rules_sass",
sha256 = "618f0b7aae019c149ac2ff4142a66c110de116fb5c173dbeccedbaee06fc5f6d",
strip_prefix = "rules_sass-a2fce75bcf103750f7accbf7f966ad48bcbca2d4",
sha256 = "425d93db6667060db581aaaace7b77b3d7e114b41f36a0c5b86e5e9497832174",
strip_prefix = "rules_sass-901d22c63864aa781b902b14c55c423117469286",
urls = [
"https://github.com/bazelbuild/rules_sass/archive/a2fce75bcf103750f7accbf7f966ad48bcbca2d4.zip",
"https://github.com/bazelbuild/rules_sass/archive/901d22c63864aa781b902b14c55c423117469286.zip",
],
)
+3 -1
View File
@@ -4,6 +4,8 @@ filegroup(
name = "content",
srcs = glob(
["**"],
exclude = ["BUILD.bazel"],
exclude = [
"BUILD.bazel",
],
),
)
+11
View File
@@ -0,0 +1,11 @@
package(default_visibility = ["//visibility:public"])
filegroup(
name = "cli",
srcs = glob(
["**"],
exclude = [
"BUILD.bazel",
],
),
)
+63
View File
@@ -0,0 +1,63 @@
{
"name": "add",
"command": "ng add <collection>",
"shortDescription": "Adds support for an external library to your project.",
"longDescriptionRelativePath": "@angular/cli/src/commands/add/long-description.md",
"longDescription": "Adds the npm package for a published library to your workspace, and configures\nthe project in the current working directory to use that library, as specified by the library's schematic.\nFor example, adding `@angular/pwa` configures your project for PWA support:\n\n```bash\nng add @angular/pwa\n```\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "collection",
"type": "string",
"description": "The package to be added.",
"positional": 0
},
{
"name": "defaults",
"type": "boolean",
"default": false,
"description": "Disable interactive input prompts for options with a default."
},
{
"name": "dry-run",
"type": "boolean",
"default": false,
"description": "Run through and reports activity without writing out results."
},
{
"name": "force",
"type": "boolean",
"default": false,
"description": "Force overwriting of existing files."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "interactive",
"type": "boolean",
"default": true,
"description": "Enable interactive input prompts."
},
{
"name": "registry",
"type": "string",
"description": "The NPM registry to use."
},
{
"name": "skip-confirmation",
"type": "boolean",
"default": false,
"description": "Skip asking a confirmation prompt before installing and executing the package. Ensure package name is correct prior to using this option."
},
{
"name": "verbose",
"type": "boolean",
"default": false,
"description": "Display additional details about internal operations during execution."
}
]
}
+84
View File
@@ -0,0 +1,84 @@
{
"name": "analytics",
"command": "ng analytics",
"shortDescription": "Configures the gathering of Angular CLI usage metrics.",
"longDescriptionRelativePath": "@angular/cli/src/commands/analytics/long-description.md",
"longDescription": "You can help the Angular Team to prioritize features and improvements by permitting the Angular team to send command-line command usage statistics to Google.\nThe Angular Team does not collect usage statistics unless you explicitly opt in. When installing the Angular CLI you are prompted to allow global collection of usage statistics.\nIf you say no or skip the prompt, no data is collected.\n\n### What is collected?\n\nUsage analytics include the commands and selected flags for each execution.\nUsage analytics may include the following information:\n\n- Your operating system \\(macOS, Linux distribution, Windows\\) and its version.\n- Package manager name and version \\(local version only\\).\n- Node.js version \\(local version only\\).\n- Angular CLI version \\(local version only\\).\n- Command name that was run.\n- Workspace information, the number of application and library projects.\n- For schematics commands \\(add, generate and new\\), the schematic collection and name and a list of selected flags.\n- For build commands \\(build, serve\\), the builder name, the number and size of bundles \\(initial and lazy\\), compilation units, the time it took to build and rebuild, and basic Angular-specific API usage.\n\nOnly Angular owned and developed schematics and builders are reported.\nThird-party schematics and builders do not send data to the Angular Team.\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
}
],
"subcommands": [
{
"name": "disable",
"command": "disable",
"shortDescription": "Disables analytics gathering and reporting for the user.",
"options": [
{
"name": "global",
"type": "boolean",
"aliases": [
"g"
],
"default": false,
"description": "Configure analytics gathering and reporting globally in the caller's home directory."
}
],
"aliases": [
"off"
],
"deprecated": false
},
{
"name": "enable",
"command": "enable",
"shortDescription": "Enables analytics gathering and reporting for the user.",
"options": [
{
"name": "global",
"type": "boolean",
"aliases": [
"g"
],
"default": false,
"description": "Configure analytics gathering and reporting globally in the caller's home directory."
}
],
"aliases": [
"on"
],
"deprecated": false
},
{
"name": "info",
"command": "info",
"shortDescription": "Prints analytics gathering and reporting configuration in the console.",
"options": [],
"aliases": [],
"deprecated": false
},
{
"name": "prompt",
"command": "prompt",
"shortDescription": "Prompts the user to set the analytics gathering status interactively.",
"options": [
{
"name": "global",
"type": "boolean",
"aliases": [
"g"
],
"default": false,
"description": "Configure analytics gathering and reporting globally in the caller's home directory."
}
],
"aliases": [],
"deprecated": false
}
]
}
+4
View File
@@ -0,0 +1,4 @@
{
"branchName": "refs/heads/15.1.x",
"sha": "1754242e3fcd7dd4a099a9e2c3633f630256d9b0"
}
+250
View File
@@ -0,0 +1,250 @@
{
"name": "build",
"command": "ng build [project]",
"shortDescription": "Compiles an Angular application or library into an output directory named dist/ at the given output path.",
"longDescriptionRelativePath": "@angular/cli/src/commands/build/long-description.md",
"longDescription": "The command can be used to build a project of type \"application\" or \"library\".\nWhen used to build a library, a different builder is invoked, and only the `ts-config`, `configuration`, and `watch` options are applied.\nAll other options apply only to building applications.\n\nThe application builder uses the [webpack](https://webpack.js.org/) build tool, with default configuration options specified in the workspace configuration file (`angular.json`) or with a named alternative configuration.\nA \"development\" configuration is created by default when you use the CLI to create the project, and you can use that configuration by specifying the `--configuration development`.\n\nThe configuration options generally correspond to the command options.\nYou can override individual configuration defaults by specifying the corresponding options on the command line.\nThe command can accept option names given in either dash-case or camelCase.\nNote that in the configuration file, you must specify names in camelCase.\n\nSome additional options can only be set through the configuration file,\neither by direct editing or with the `ng config` command.\nThese include `assets`, `styles`, and `scripts` objects that provide runtime-global resources to include in the project.\nResources in CSS, such as images and fonts, are automatically written and fingerprinted at the root of the output folder.\n\nFor further details, see [Workspace Configuration](guide/workspace-config).\n",
"aliases": [
"b"
],
"deprecated": false,
"options": [
{
"name": "allowed-common-js-dependencies",
"type": "array",
"description": "A list of CommonJS packages that are allowed to be used without a build time warning."
},
{
"name": "aot",
"type": "boolean",
"default": true,
"description": "Build using Ahead of Time compilation."
},
{
"name": "base-href",
"type": "string",
"description": "Base url for the application being built."
},
{
"name": "build-optimizer",
"type": "boolean",
"default": true,
"description": "Enables advanced build optimizations when using the 'aot' option."
},
{
"name": "common-chunk",
"type": "boolean",
"default": true,
"description": "Generate a seperate bundle containing code used across multiple bundles."
},
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "cross-origin",
"type": "string",
"default": "none",
"enum": [
"none",
"anonymous",
"use-credentials"
],
"description": "Define the crossorigin attribute setting of elements that provide CORS support."
},
{
"name": "delete-output-path",
"type": "boolean",
"default": true,
"description": "Delete the output path before building."
},
{
"name": "deploy-url",
"type": "string",
"deprecated": "Use \"baseHref\" option, \"APP_BASE_HREF\" DI token or a combination of both instead. For more information, see https://angular.io/guide/deployment#the-deploy-url.",
"description": "URL where files will be deployed."
},
{
"name": "extract-licenses",
"type": "boolean",
"default": true,
"description": "Extract all licenses in a separate file."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "i18n-duplicate-translation",
"type": "string",
"default": "warning",
"enum": [
"warning",
"error",
"ignore"
],
"description": "How to handle duplicate translations for i18n."
},
{
"name": "i18n-missing-translation",
"type": "string",
"default": "warning",
"enum": [
"warning",
"error",
"ignore"
],
"description": "How to handle missing translations for i18n."
},
{
"name": "index",
"type": "string",
"description": "Configures the generation of the application's HTML index."
},
{
"name": "inline-style-language",
"type": "string",
"default": "css",
"enum": [
"css",
"less",
"sass",
"scss"
],
"description": "The stylesheet language to use for the application's inline component styles."
},
{
"name": "localize",
"type": "boolean",
"description": "Translate the bundles in one or more locales."
},
{
"name": "main",
"type": "string",
"description": "The full path for the main entry point to the app, relative to the current workspace."
},
{
"name": "named-chunks",
"type": "boolean",
"default": false,
"description": "Use file name for lazy loaded chunks."
},
{
"name": "ngsw-config-path",
"type": "string",
"description": "Path to ngsw-config.json."
},
{
"name": "optimization",
"type": "boolean",
"default": true,
"description": "Enables optimization of the build output. Including minification of scripts and styles, tree-shaking, dead-code elimination, inlining of critical CSS and fonts inlining. For more information, see https://angular.io/guide/workspace-config#optimization-configuration."
},
{
"name": "output-hashing",
"type": "string",
"default": "none",
"enum": [
"none",
"all",
"media",
"bundles"
],
"description": "Define the output filename cache-busting hashing mode."
},
{
"name": "output-path",
"type": "string",
"description": "The full path for the new output directory, relative to the current workspace.\nBy default, writes output to a folder named dist/ in the current project."
},
{
"name": "poll",
"type": "number",
"description": "Enable and define the file watching poll time period in milliseconds."
},
{
"name": "polyfills",
"type": "string",
"description": "Polyfills to be included in the build."
},
{
"name": "preserve-symlinks",
"type": "boolean",
"description": "Do not use the real path when resolving modules. If unset then will default to `true` if NodeJS option --preserve-symlinks is set."
},
{
"name": "progress",
"type": "boolean",
"default": true,
"description": "Log progress to the console while building."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
},
{
"name": "resources-output-path",
"type": "string",
"description": "The path where style resources will be placed, relative to outputPath."
},
{
"name": "service-worker",
"type": "boolean",
"default": false,
"description": "Generates a service worker config for production builds."
},
{
"name": "source-map",
"type": "boolean",
"default": false,
"description": "Output source maps for scripts and styles. For more information, see https://angular.io/guide/workspace-config#source-map-configuration."
},
{
"name": "stats-json",
"type": "boolean",
"default": false,
"description": "Generates a 'stats.json' file which can be analyzed using tools such as 'webpack-bundle-analyzer'."
},
{
"name": "subresource-integrity",
"type": "boolean",
"default": false,
"description": "Enables the use of subresource integrity validation."
},
{
"name": "ts-config",
"type": "string",
"description": "The full path for the TypeScript configuration file, relative to the current workspace."
},
{
"name": "vendor-chunk",
"type": "boolean",
"default": false,
"description": "Generate a seperate bundle containing only vendor libraries. This option should only be used for development to reduce the incremental compilation time."
},
{
"name": "verbose",
"type": "boolean",
"default": false,
"description": "Adds more details to output logging."
},
{
"name": "watch",
"type": "boolean",
"default": false,
"description": "Run build when files change."
},
{
"name": "web-worker-ts-config",
"type": "string",
"description": "TypeScript configuration for Web Worker modules."
}
]
}
+54
View File
@@ -0,0 +1,54 @@
{
"name": "cache",
"command": "ng cache",
"shortDescription": "Configure persistent disk cache and retrieve cache statistics.",
"longDescriptionRelativePath": "@angular/cli/src/commands/cache/long-description.md",
"longDescription": "Angular CLI saves a number of cachable operations on disk by default.\n\nWhen you re-run the same build, the build system restores the state of the previous build and re-uses previously performed operations, which decreases the time taken to build and test your applications and libraries.\n\nTo amend the default cache settings, add the `cli.cache` object to your [Workspace Configuration](guide/workspace-config).\nThe object goes under `cli.cache` at the top level of the file, outside the `projects` sections.\n\n```jsonc\n{\n \"$schema\": \"./node_modules/@angular/cli/lib/config/schema.json\",\n \"version\": 1,\n \"cli\": {\n \"cache\": {\n // ...\n }\n },\n \"projects\": {}\n}\n```\n\nFor more information, see [cache options](guide/workspace-config#cache-options).\n\n### Cache environments\n\nBy default, disk cache is only enabled for local environments. The value of environment can be one of the following:\n\n- `all` - allows disk cache on all machines.\n- `local` - allows disk cache only on development machines.\n- `ci` - allows disk cache only on continuous integration (CI) systems.\n\nTo change the environment setting to `all`, run the following command:\n\n```bash\nng config cli.cache.environment all\n```\n\nFor more information, see `environment` in [cache options](guide/workspace-config#cache-options).\n\n<div class=\"alert is-helpful\">\n\nThe Angular CLI checks for the presence and value of the `CI` environment variable to determine in which environment it is running.\n\n</div>\n\n### Cache path\n\nBy default, `.angular/cache` is used as a base directory to store cache results.\n\nTo change this path to `.cache/ng`, run the following command:\n\n```bash\nng config cli.cache.path \".cache/ng\"\n```\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
}
],
"subcommands": [
{
"name": "clean",
"command": "clean",
"shortDescription": "Deletes persistent disk cache from disk.",
"options": [],
"aliases": [],
"deprecated": false
},
{
"name": "disable",
"command": "disable",
"shortDescription": "Disables persistent disk cache for all projects in the workspace.",
"options": [],
"aliases": [
"off"
],
"deprecated": false
},
{
"name": "enable",
"command": "enable",
"shortDescription": "Enables disk cache for all projects in the workspace.",
"options": [],
"aliases": [
"on"
],
"deprecated": false
},
{
"name": "info",
"command": "info",
"shortDescription": "Prints persistent disk cache configuration and statistics in the console.",
"options": [],
"aliases": [],
"deprecated": false
}
]
}
+26
View File
@@ -0,0 +1,26 @@
{
"name": "completion",
"command": "ng completion",
"shortDescription": "Set up Angular CLI autocompletion for your terminal.",
"longDescriptionRelativePath": "@angular/cli/src/commands/completion/long-description.md",
"longDescription": "Setting up autocompletion configures your terminal, so pressing the `<TAB>` key while in the middle\nof typing will display various commands and options available to you. This makes it very easy to\ndiscover and use CLI commands without lots of memorization.\n\n![A demo of Angular CLI autocompletion in a terminal. The user types several partial `ng` commands,\nusing autocompletion to finish several arguments and list contextual options.\n](generated/images/guide/cli/completion.gif)\n\n## Automated setup\n\nThe CLI should prompt and ask to set up autocompletion for you the first time you use it (v14+).\nSimply answer \"Yes\" and the CLI will take care of the rest.\n\n```\n$ ng serve\n? Would you like to enable autocompletion? This will set up your terminal so pressing TAB while typing Angular CLI commands will show possible options and autocomplete arguments. (Enabling autocompletion will modify configuration files in your home directory.) Yes\nAppended `source <(ng completion script)` to `/home/my-username/.bashrc`. Restart your terminal or run:\n\nsource <(ng completion script)\n\nto autocomplete `ng` commands.\n\n# Serve output...\n```\n\nIf you already refused the prompt, it won't ask again. But you can run `ng completion` to\ndo the same thing automatically.\n\nThis modifies your terminal environment to load Angular CLI autocompletion, but can't update your\ncurrent terminal session. Either restart it or run `source <(ng completion script)` directly to\nenable autocompletion in your current session.\n\nTest it out by typing `ng ser<TAB>` and it should autocomplete to `ng serve`. Ambiguous arguments\nwill show all possible options and their documentation, such as `ng generate <TAB>`.\n\n## Manual setup\n\nSome users may have highly customized terminal setups, possibly with configuration files checked\ninto source control with an opinionated structure. `ng completion` only ever appends Angular's setup\nto an existing configuration file for your current shell, or creates one if none exists. If you want\nmore control over exactly where this configuration lives, you can manually set it up by having your\nshell run at startup:\n\n```bash\nsource <(ng completion script)\n```\n\nThis is equivalent to what `ng completion` will automatically set up, and gives power users more\nflexibility in their environments when desired.\n\n## Platform support\n\nAngular CLI supports autocompletion for the Bash and Zsh shells on MacOS and Linux operating\nsystems. On Windows, Git Bash and [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/)\nusing Bash or Zsh are supported.\n\n## Global install\n\nAutocompletion works by configuring your terminal to invoke the Angular CLI on startup to load the\nsetup script. This means the terminal must be able to find and execute the Angular CLI, typically\nthrough a global install that places the binary on the user's `$PATH`. If you get\n`command not found: ng`, make sure the CLI is installed globally which you can do with the `-g`\nflag:\n\n```bash\nnpm install -g @angular/cli\n```\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
}
],
"subcommands": [
{
"name": "script",
"command": "script",
"shortDescription": "Generate a bash and zsh real-time type-ahead autocompletion script.",
"options": [],
"aliases": [],
"deprecated": false
}
]
}
+37
View File
@@ -0,0 +1,37 @@
{
"name": "config",
"command": "ng config [json-path] [value]",
"shortDescription": "Retrieves or sets Angular configuration values in the angular.json file for the workspace.",
"longDescriptionRelativePath": "@angular/cli/src/commands/config/long-description.md",
"longDescription": "A workspace has a single CLI configuration file, `angular.json`, at the top level.\nThe `projects` object contains a configuration object for each project in the workspace.\n\nYou can edit the configuration directly in a code editor,\nor indirectly on the command line using this command.\n\nThe configurable property names match command option names,\nexcept that in the configuration file, all names must use camelCase,\nwhile on the command line options can be given dash-case.\n\nFor further details, see [Workspace Configuration](guide/workspace-config).\n\nFor configuration of CLI usage analytics, see [ng analytics](cli/analytics).\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "global",
"type": "boolean",
"aliases": [
"g"
],
"default": false,
"description": "Access the global configuration in the caller's home directory."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "json-path",
"type": "string",
"description": "The configuration key to set or query, in JSON path format. For example: \"a[3].foo.bar[2]\". If no new value is provided, returns the current value of this key.",
"positional": 0
},
{
"name": "value",
"type": "string",
"description": "If provided, a new value for the given configuration key.",
"positional": 1
}
]
}
+30
View File
@@ -0,0 +1,30 @@
{
"name": "deploy",
"command": "ng deploy [project]",
"shortDescription": "Invokes the deploy builder for a specified project or for the default project in the workspace.",
"longDescriptionRelativePath": "@angular/cli/src/commands/deploy/long-description.md",
"longDescription": "The command takes an optional project name, as specified in the `projects` section of the `angular.json` workspace configuration file.\nWhen a project name is not supplied, executes the `deploy` builder for the default project.\n\nTo use the `ng deploy` command, use `ng add` to add a package that implements deployment capabilities to your favorite platform.\nAdding the package automatically updates your workspace configuration, adding a deployment\n[CLI builder](guide/cli-builder).\nFor example:\n\n```json\n\"projects\": {\n \"my-project\": {\n ...\n \"architect\": {\n ...\n \"deploy\": {\n \"builder\": \"@angular/fire:deploy\",\n \"options\": {}\n }\n }\n }\n}\n```\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
}
]
}
+36
View File
@@ -0,0 +1,36 @@
{
"name": "doc",
"command": "ng doc <keyword>",
"shortDescription": "Opens the official Angular documentation (angular.io) in a browser, and searches for a given keyword.",
"aliases": [
"d"
],
"deprecated": false,
"options": [
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "keyword",
"type": "string",
"description": "The keyword to search for, as provided in the search bar in angular.io.",
"positional": 0
},
{
"name": "search",
"type": "boolean",
"aliases": [
"s"
],
"default": false,
"description": "Search all of angular.io. Otherwise, searches only API reference documentation."
},
{
"name": "version",
"type": "string",
"description": "Contains the version of Angular to use for the documentation. If not provided, the command uses your current Angular core version."
}
]
}
+30
View File
@@ -0,0 +1,30 @@
{
"name": "e2e",
"command": "ng e2e [project]",
"shortDescription": "Builds and serves an Angular application, then runs end-to-end tests.",
"aliases": [
"e"
],
"deprecated": false,
"options": [
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
}
]
}
+66
View File
@@ -0,0 +1,66 @@
{
"name": "extract-i18n",
"command": "ng extract-i18n [project]",
"shortDescription": "Extracts i18n messages from source code.",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "browser-target",
"type": "string",
"description": "A browser builder target to extract i18n messages in the format of `project:target[:configuration]`. You can also pass in more than one configuration name as a comma-separated list. Example: `project:target:production,staging`."
},
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "format",
"type": "string",
"default": "xlf",
"enum": [
"xmb",
"xlf",
"xlif",
"xliff",
"xlf2",
"xliff2",
"json",
"arb",
"legacy-migrate"
],
"description": "Output format for the generated file."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "out-file",
"type": "string",
"description": "Name of the file to output."
},
{
"name": "output-path",
"type": "string",
"description": "Path where output will be placed."
},
{
"name": "progress",
"type": "boolean",
"default": true,
"description": "Log progress to the console."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
}
]
}
+933
View File
@@ -0,0 +1,933 @@
{
"name": "generate",
"command": "ng generate <schematic>",
"shortDescription": "Generates and/or modifies files based on a schematic.",
"aliases": [
"g"
],
"deprecated": false,
"options": [
{
"name": "defaults",
"type": "boolean",
"default": false,
"description": "Disable interactive input prompts for options with a default."
},
{
"name": "dry-run",
"type": "boolean",
"default": false,
"description": "Run through and reports activity without writing out results."
},
{
"name": "force",
"type": "boolean",
"default": false,
"description": "Force overwriting of existing files."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "interactive",
"type": "boolean",
"default": true,
"description": "Enable interactive input prompts."
},
{
"name": "schematic",
"type": "string",
"description": "The [collection:schematic] to run.",
"positional": 0
}
],
"subcommands": [
{
"name": "app-shell",
"command": "app-shell",
"shortDescription": "Generates an application shell for running a server-side version of an app.",
"options": [
{
"name": "app-id",
"type": "string",
"default": "serverApp",
"description": "The application ID to use in withServerTransition()."
},
{
"name": "main",
"type": "string",
"default": "main.server.ts",
"description": "The name of the main entry-point file."
},
{
"name": "project",
"type": "string",
"description": "The name of the related client app."
},
{
"name": "root-module-class-name",
"type": "string",
"default": "AppServerModule",
"description": "The name of the root module class."
},
{
"name": "root-module-file-name",
"type": "string",
"default": "app.server.module.ts",
"description": "The name of the root module file"
},
{
"name": "route",
"type": "string",
"default": "shell",
"description": "Route path used to produce the application shell."
}
],
"aliases": [],
"deprecated": false
},
{
"name": "application",
"command": "application [name]",
"shortDescription": "Generates a new basic application definition in the \"projects\" subfolder of the workspace.",
"options": [
{
"name": "inline-style",
"type": "boolean",
"aliases": [
"s"
],
"description": "Include styles inline in the root component.ts file. Only CSS styles can be included inline. Default is false, meaning that an external styles file is created and referenced in the root component.ts file."
},
{
"name": "inline-template",
"type": "boolean",
"aliases": [
"t"
],
"description": "Include template inline in the root component.ts file. Default is false, meaning that an external template file is created and referenced in the root component.ts file. "
},
{
"name": "minimal",
"type": "boolean",
"default": false,
"description": "Create a bare-bones project without any testing frameworks. (Use for learning purposes only.)"
},
{
"name": "name",
"type": "string",
"description": "The name of the new application.",
"positional": 0
},
{
"name": "prefix",
"type": "string",
"aliases": [
"p"
],
"default": "app",
"description": "A prefix to apply to generated selectors."
},
{
"name": "project-root",
"type": "string",
"description": "The root directory of the new application."
},
{
"name": "routing",
"type": "boolean",
"default": false,
"description": "Create a routing NgModule."
},
{
"name": "skip-install",
"type": "boolean",
"default": false,
"description": "Skip installing dependency packages."
},
{
"name": "skip-package-json",
"type": "boolean",
"default": false,
"description": "Do not add dependencies to the \"package.json\" file."
},
{
"name": "skip-tests",
"type": "boolean",
"aliases": [
"S"
],
"default": false,
"description": "Do not create \"spec.ts\" test files for the application."
},
{
"name": "strict",
"type": "boolean",
"default": true,
"description": "Creates an application with stricter bundle budgets settings."
},
{
"name": "style",
"type": "string",
"default": "css",
"enum": [
"css",
"scss",
"sass",
"less"
],
"description": "The file extension or preprocessor to use for style files."
},
{
"name": "view-encapsulation",
"type": "string",
"enum": [
"Emulated",
"None",
"ShadowDom"
],
"description": "The view encapsulation strategy to use in the new application."
}
],
"aliases": [
"app"
],
"deprecated": false
},
{
"name": "class",
"command": "class [name]",
"shortDescription": "Creates a new, generic class definition in the given project.",
"options": [
{
"name": "name",
"type": "string",
"description": "The name of the new class.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new class."
},
{
"name": "type",
"type": "string",
"description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\"."
}
],
"aliases": [
"cl"
],
"deprecated": false
},
{
"name": "component",
"command": "component [name]",
"shortDescription": "Creates a new, generic component definition in the given project.",
"options": [
{
"name": "change-detection",
"type": "string",
"aliases": [
"c"
],
"default": "Default",
"enum": [
"Default",
"OnPush"
],
"description": "The change detection strategy to use in the new component."
},
{
"name": "display-block",
"type": "boolean",
"aliases": [
"b"
],
"default": false,
"description": "Specifies if the style will contain `:host { display: block; }`."
},
{
"name": "export",
"type": "boolean",
"default": false,
"description": "The declaring NgModule exports this component."
},
{
"name": "flat",
"type": "boolean",
"default": false,
"description": "Create the new files at the top level of the current project."
},
{
"name": "inline-style",
"type": "boolean",
"aliases": [
"s"
],
"default": false,
"description": "Include styles inline in the component.ts file. Only CSS styles can be included inline. By default, an external styles file is created and referenced in the component.ts file."
},
{
"name": "inline-template",
"type": "boolean",
"aliases": [
"t"
],
"default": false,
"description": "Include template inline in the component.ts file. By default, an external template file is created and referenced in the component.ts file."
},
{
"name": "module",
"type": "string",
"aliases": [
"m"
],
"description": "The declaring NgModule."
},
{
"name": "name",
"type": "string",
"description": "The name of the component.",
"positional": 0
},
{
"name": "prefix",
"type": "string",
"aliases": [
"p"
],
"description": "The prefix to apply to the generated component selector."
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "selector",
"type": "string",
"description": "The HTML selector to use for this component."
},
{
"name": "skip-import",
"type": "boolean",
"default": false,
"description": "Do not import this component into the owning NgModule."
},
{
"name": "skip-selector",
"type": "boolean",
"default": false,
"description": "Specifies if the component should have a selector or not."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new component."
},
{
"name": "standalone",
"type": "boolean",
"default": false,
"description": "Whether the generated component is standalone."
},
{
"name": "style",
"type": "string",
"default": "css",
"enum": [
"css",
"scss",
"sass",
"less",
"none"
],
"description": "The file extension or preprocessor to use for style files, or 'none' to skip generating the style file."
},
{
"name": "type",
"type": "string",
"default": "Component",
"description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\"."
},
{
"name": "view-encapsulation",
"type": "string",
"aliases": [
"v"
],
"enum": [
"Emulated",
"None",
"ShadowDom"
],
"description": "The view encapsulation strategy to use in the new component."
}
],
"aliases": [
"c"
],
"deprecated": false
},
{
"name": "config",
"command": "config [type]",
"shortDescription": "Generates a configuration file in the given project.",
"options": [
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "type",
"type": "string",
"enum": [
"karma",
"browserslist"
],
"description": "Specifies which type of configuration file to create.",
"positional": 0
}
],
"aliases": [],
"deprecated": false
},
{
"name": "directive",
"command": "directive [name]",
"shortDescription": "Creates a new, generic directive definition in the given project.",
"options": [
{
"name": "export",
"type": "boolean",
"default": false,
"description": "The declaring NgModule exports this directive."
},
{
"name": "flat",
"type": "boolean",
"default": true,
"description": "When true (the default), creates the new files at the top level of the current project."
},
{
"name": "module",
"type": "string",
"aliases": [
"m"
],
"description": "The declaring NgModule."
},
{
"name": "name",
"type": "string",
"description": "The name of the new directive.",
"positional": 0
},
{
"name": "prefix",
"type": "string",
"aliases": [
"p"
],
"description": "A prefix to apply to generated selectors."
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "selector",
"type": "string",
"description": "The HTML selector to use for this directive."
},
{
"name": "skip-import",
"type": "boolean",
"default": false,
"description": "Do not import this directive into the owning NgModule."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new class."
},
{
"name": "standalone",
"type": "boolean",
"default": false,
"description": "Whether the generated directive is standalone."
}
],
"aliases": [
"d"
],
"deprecated": false
},
{
"name": "enum",
"command": "enum [name]",
"shortDescription": "Generates a new, generic enum definition in the given project.",
"options": [
{
"name": "name",
"type": "string",
"description": "The name of the enum.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project in which to create the enum. Default is the configured default project for the workspace."
},
{
"name": "type",
"type": "string",
"description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\"."
}
],
"aliases": [
"e"
],
"deprecated": false
},
{
"name": "environments",
"command": "environments",
"shortDescription": "Generates and configures environment files for a project.",
"options": [
{
"name": "project",
"type": "string",
"description": "The name of the project."
}
],
"aliases": [],
"deprecated": false
},
{
"name": "guard",
"command": "guard [name]",
"shortDescription": "Generates a new, generic route guard definition in the given project.",
"options": [
{
"name": "flat",
"type": "boolean",
"default": true,
"description": "When true (the default), creates the new files at the top level of the current project."
},
{
"name": "functional",
"type": "boolean",
"default": false,
"description": "Specifies whether to generate a guard as a function."
},
{
"name": "implements",
"type": "array",
"aliases": [
"guardType"
],
"description": "Specifies which type of guard to create."
},
{
"name": "name",
"type": "string",
"description": "The name of the new route guard.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new guard."
}
],
"aliases": [
"g"
],
"deprecated": false
},
{
"name": "interceptor",
"command": "interceptor [name]",
"shortDescription": "Creates a new, generic interceptor definition in the given project.",
"options": [
{
"name": "flat",
"type": "boolean",
"default": true,
"description": "When true (the default), creates files at the top level of the project."
},
{
"name": "functional",
"type": "boolean",
"default": false,
"description": "Creates the interceptor as a `HttpInterceptorFn`."
},
{
"name": "name",
"type": "string",
"description": "The name of the interceptor.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new interceptor."
}
],
"aliases": [],
"deprecated": false
},
{
"name": "interface",
"command": "interface [name] [type]",
"shortDescription": "Creates a new, generic interface definition in the given project.",
"options": [
{
"name": "name",
"type": "string",
"description": "The name of the interface.",
"positional": 0
},
{
"name": "prefix",
"type": "string",
"description": "A prefix to apply to generated selectors."
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "type",
"type": "string",
"description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\".",
"positional": 1
}
],
"aliases": [
"i"
],
"deprecated": false
},
{
"name": "library",
"command": "library [name]",
"shortDescription": "Creates a new, generic library project in the current workspace.",
"options": [
{
"name": "entry-file",
"type": "string",
"default": "public-api",
"description": "The path at which to create the library's public API file, relative to the workspace root."
},
{
"name": "name",
"type": "string",
"description": "The name of the library.",
"positional": 0
},
{
"name": "prefix",
"type": "string",
"aliases": [
"p"
],
"default": "lib",
"description": "A prefix to apply to generated selectors."
},
{
"name": "project-root",
"type": "string",
"description": "The root directory of the new library."
},
{
"name": "skip-install",
"type": "boolean",
"default": false,
"description": "Do not install dependency packages."
},
{
"name": "skip-package-json",
"type": "boolean",
"default": false,
"description": "Do not add dependencies to the \"package.json\" file. "
},
{
"name": "skip-ts-config",
"type": "boolean",
"default": false,
"description": "Do not update \"tsconfig.json\" to add a path mapping for the new library. The path mapping is needed to use the library in an app, but can be disabled here to simplify development."
}
],
"aliases": [
"lib"
],
"deprecated": false
},
{
"name": "module",
"command": "module [name]",
"shortDescription": "Creates a new, generic NgModule definition in the given project.",
"options": [
{
"name": "flat",
"type": "boolean",
"default": false,
"description": "Create the new files at the top level of the current project root. "
},
{
"name": "module",
"type": "string",
"aliases": [
"m"
],
"description": "The declaring NgModule."
},
{
"name": "name",
"type": "string",
"description": "The name of the NgModule.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "route",
"type": "string",
"description": "The route path for a lazy-loaded module. When supplied, creates a component in the new module, and adds the route to that component in the `Routes` array declared in the module provided in the `--module` option."
},
{
"name": "routing",
"type": "boolean",
"default": false,
"description": "Create a routing module."
},
{
"name": "routing-scope",
"type": "string",
"default": "Child",
"enum": [
"Child",
"Root"
],
"description": "The scope for the new routing module."
}
],
"aliases": [
"m"
],
"deprecated": false
},
{
"name": "pipe",
"command": "pipe [name]",
"shortDescription": "Creates a new, generic pipe definition in the given project.",
"options": [
{
"name": "export",
"type": "boolean",
"default": false,
"description": "The declaring NgModule exports this pipe."
},
{
"name": "flat",
"type": "boolean",
"default": true,
"description": "When true (the default) creates files at the top level of the project."
},
{
"name": "module",
"type": "string",
"aliases": [
"m"
],
"description": "The declaring NgModule."
},
{
"name": "name",
"type": "string",
"description": "The name of the pipe.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "skip-import",
"type": "boolean",
"default": false,
"description": "Do not import this pipe into the owning NgModule."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new pipe."
},
{
"name": "standalone",
"type": "boolean",
"default": false,
"description": "Whether the generated pipe is standalone."
}
],
"aliases": [
"p"
],
"deprecated": false
},
{
"name": "resolver",
"command": "resolver [name]",
"shortDescription": "Generates a new, generic resolver definition in the given project.",
"options": [
{
"name": "flat",
"type": "boolean",
"default": true,
"description": "When true (the default), creates the new files at the top level of the current project."
},
{
"name": "functional",
"type": "boolean",
"default": false,
"description": "Creates the resolver as a `ResolveFn`."
},
{
"name": "name",
"type": "string",
"description": "The name of the new resolver.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new resolver."
}
],
"aliases": [
"r"
],
"deprecated": false
},
{
"name": "service",
"command": "service [name]",
"shortDescription": "Creates a new, generic service definition in the given project.",
"options": [
{
"name": "flat",
"type": "boolean",
"default": true,
"description": "When true (the default), creates files at the top level of the project."
},
{
"name": "name",
"type": "string",
"description": "The name of the service.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "skip-tests",
"type": "boolean",
"default": false,
"description": "Do not create \"spec.ts\" test files for the new service."
}
],
"aliases": [
"s"
],
"deprecated": false
},
{
"name": "service-worker",
"command": "service-worker",
"shortDescription": "Pass this schematic to the \"run\" command to create a service worker",
"options": [
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "target",
"type": "string",
"default": "build",
"description": "The target to apply service worker to."
}
],
"aliases": [],
"deprecated": false
},
{
"name": "web-worker",
"command": "web-worker [name]",
"shortDescription": "Creates a new, generic web worker definition in the given project.",
"options": [
{
"name": "name",
"type": "string",
"description": "The name of the worker.",
"positional": 0
},
{
"name": "project",
"type": "string",
"description": "The name of the project."
},
{
"name": "snippet",
"type": "boolean",
"default": true,
"description": "Add a worker creation snippet in a sibling file of the same name."
}
],
"aliases": [],
"deprecated": false
}
]
}
+30
View File
@@ -0,0 +1,30 @@
{
"name": "lint",
"command": "ng lint [project]",
"shortDescription": "Runs linting tools on Angular application code in a given project folder.",
"longDescriptionRelativePath": "@angular/cli/src/commands/lint/long-description.md",
"longDescription": "The command takes an optional project name, as specified in the `projects` section of the `angular.json` workspace configuration file.\nWhen a project name is not supplied, executes the `lint` builder for all projects.\n\nTo use the `ng lint` command, use `ng add` to add a package that implements linting capabilities. Adding the package automatically updates your workspace configuration, adding a lint [CLI builder](guide/cli-builder).\nFor example:\n\n```json\n\"projects\": {\n \"my-project\": {\n ...\n \"architect\": {\n ...\n \"lint\": {\n \"builder\": \"@angular-eslint/builder:lint\",\n \"options\": {}\n }\n }\n }\n}\n```\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
}
]
}
+177
View File
@@ -0,0 +1,177 @@
{
"name": "new",
"command": "ng new [name]",
"shortDescription": "Creates a new Angular workspace.",
"longDescriptionRelativePath": "@angular/cli/src/commands/new/long-description.md",
"longDescription": "Creates and initializes a new Angular application that is the default project for a new workspace.\n\nProvides interactive prompts for optional configuration, such as adding routing support.\nAll prompts can safely be allowed to default.\n\n- The new workspace folder is given the specified project name, and contains configuration files at the top level.\n\n- By default, the files for a new initial application (with the same name as the workspace) are placed in the `src/` subfolder.\n- The new application's configuration appears in the `projects` section of the `angular.json` workspace configuration file, under its project name.\n\n- Subsequent applications that you generate in the workspace reside in the `projects/` subfolder.\n\nIf you plan to have multiple applications in the workspace, you can create an empty workspace by using the `--no-create-application` option.\nYou can then use `ng generate application` to create an initial application.\nThis allows a workspace name different from the initial app name, and ensures that all applications reside in the `/projects` subfolder, matching the structure of the configuration file.\n",
"aliases": [
"n"
],
"deprecated": false,
"options": [
{
"name": "collection",
"type": "string",
"aliases": [
"c"
],
"description": "A collection of schematics to use in generating the initial application."
},
{
"name": "commit",
"type": "boolean",
"default": true,
"description": "Initial git repository commit information."
},
{
"name": "create-application",
"type": "boolean",
"default": true,
"description": "Create a new initial application project in the 'src' folder of the new workspace. When false, creates an empty workspace with no initial application. You can then use the generate application command so that all applications are created in the projects folder."
},
{
"name": "defaults",
"type": "boolean",
"default": false,
"description": "Disable interactive input prompts for options with a default."
},
{
"name": "directory",
"type": "string",
"description": "The directory name to create the workspace in."
},
{
"name": "dry-run",
"type": "boolean",
"default": false,
"description": "Run through and reports activity without writing out results."
},
{
"name": "force",
"type": "boolean",
"default": false,
"description": "Force overwriting of existing files."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "inline-style",
"type": "boolean",
"aliases": [
"s"
],
"description": "Include styles inline in the component TS file. By default, an external styles file is created and referenced in the component TypeScript file."
},
{
"name": "inline-template",
"type": "boolean",
"aliases": [
"t"
],
"description": "Include template inline in the component TS file. By default, an external template file is created and referenced in the component TypeScript file."
},
{
"name": "interactive",
"type": "boolean",
"default": true,
"description": "Enable interactive input prompts."
},
{
"name": "minimal",
"type": "boolean",
"default": false,
"description": "Create a workspace without any testing frameworks. (Use for learning purposes only.)"
},
{
"name": "name",
"type": "string",
"description": "The name of the new workspace and initial project.",
"positional": 0
},
{
"name": "new-project-root",
"type": "string",
"default": "projects",
"description": "The path where new projects will be created, relative to the new workspace root."
},
{
"name": "package-manager",
"type": "string",
"enum": [
"npm",
"yarn",
"pnpm",
"cnpm"
],
"description": "The package manager used to install dependencies."
},
{
"name": "prefix",
"type": "string",
"aliases": [
"p"
],
"default": "app",
"description": "The prefix to apply to generated selectors for the initial project."
},
{
"name": "routing",
"type": "boolean",
"description": "Generate a routing module for the initial project."
},
{
"name": "skip-git",
"type": "boolean",
"aliases": [
"g"
],
"default": false,
"description": "Do not initialize a git repository."
},
{
"name": "skip-install",
"type": "boolean",
"default": false,
"description": "Do not install dependency packages."
},
{
"name": "skip-tests",
"type": "boolean",
"aliases": [
"S"
],
"default": false,
"description": "Do not generate \"spec.ts\" test files for the new project."
},
{
"name": "strict",
"type": "boolean",
"default": true,
"description": "Creates a workspace with stricter type checking and stricter bundle budgets settings. This setting helps improve maintainability and catch bugs ahead of time. For more information, see https://angular.io/guide/strict-mode"
},
{
"name": "style",
"type": "string",
"enum": [
"css",
"scss",
"sass",
"less"
],
"description": "The file extension or preprocessor to use for style files."
},
{
"name": "view-encapsulation",
"type": "string",
"enum": [
"Emulated",
"None",
"ShadowDom"
],
"description": "The view encapsulation strategy to use in the initial project."
}
]
}
+22
View File
@@ -0,0 +1,22 @@
{
"name": "run",
"command": "ng run <target>",
"shortDescription": "Runs an Architect target with an optional custom builder configuration defined in your project.",
"longDescriptionRelativePath": "@angular/cli/src/commands/run/long-description.md",
"longDescription": "Architect is the tool that the CLI uses to perform complex tasks such as compilation, according to provided configurations.\nThe CLI commands run Architect targets such as `build`, `serve`, `test`, and `lint`.\nEach named target has a default configuration, specified by an `options` object,\nand an optional set of named alternate configurations in the `configurations` object.\n\nFor example, the `serve` target for a newly generated app has a predefined\nalternate configuration named `production`.\n\nYou can define new targets and their configuration options in the `architect` section\nof the `angular.json` file which you can run them from the command line using the `ng run` command.\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "target",
"type": "string",
"description": "The Architect target to run provided in the the following format `project:target[:configuration]`.",
"positional": 0
}
]
}
+126
View File
@@ -0,0 +1,126 @@
{
"name": "serve",
"command": "ng serve [project]",
"shortDescription": "Builds and serves your application, rebuilding on file changes.",
"aliases": [
"s"
],
"deprecated": false,
"options": [
{
"name": "allowed-hosts",
"type": "array",
"description": "List of hosts that are allowed to access the dev server."
},
{
"name": "browser-target",
"type": "string",
"description": "A browser builder target to serve in the format of `project:target[:configuration]`. You can also pass in more than one configuration name as a comma-separated list. Example: `project:target:production,staging`."
},
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "disable-host-check",
"type": "boolean",
"default": false,
"description": "Don't verify connected clients are part of allowed hosts."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "hmr",
"type": "boolean",
"default": false,
"description": "Enable hot module replacement."
},
{
"name": "host",
"type": "string",
"default": "localhost",
"description": "Host to listen on."
},
{
"name": "live-reload",
"type": "boolean",
"default": true,
"description": "Whether to reload the page on change, using live-reload."
},
{
"name": "open",
"type": "boolean",
"aliases": [
"o"
],
"default": false,
"description": "Opens the url in default browser."
},
{
"name": "poll",
"type": "number",
"description": "Enable and define the file watching poll time period in milliseconds."
},
{
"name": "port",
"type": "number",
"default": 4200,
"description": "Port to listen on."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
},
{
"name": "proxy-config",
"type": "string",
"description": "Proxy configuration file. For more information, see https://angular.io/guide/build#proxying-to-a-backend-server."
},
{
"name": "public-host",
"type": "string",
"description": "The URL that the browser client (or live-reload client, if enabled) should use to connect to the development server. Use for a complex dev server setup, such as one with reverse proxies."
},
{
"name": "serve-path",
"type": "string",
"description": "The pathname where the application will be served."
},
{
"name": "ssl",
"type": "boolean",
"default": false,
"description": "Serve using HTTPS."
},
{
"name": "ssl-cert",
"type": "string",
"description": "SSL certificate to use for serving HTTPS."
},
{
"name": "ssl-key",
"type": "string",
"description": "SSL key to use for serving HTTPS."
},
{
"name": "verbose",
"type": "boolean",
"description": "Adds more details to output logging."
},
{
"name": "watch",
"type": "boolean",
"default": true,
"description": "Rebuild on change."
}
]
}
+127
View File
@@ -0,0 +1,127 @@
{
"name": "test",
"command": "ng test [project]",
"shortDescription": "Runs unit tests in a project.",
"longDescriptionRelativePath": "@angular/cli/src/commands/test/long-description.md",
"longDescription": "Takes the name of the project, as specified in the `projects` section of the `angular.json` workspace configuration file.\nWhen a project name is not supplied, it will execute for all projects.\n",
"aliases": [
"t"
],
"deprecated": false,
"options": [
{
"name": "browsers",
"type": "string",
"description": "Override which browsers tests are run against."
},
{
"name": "code-coverage",
"type": "boolean",
"default": false,
"description": "Output a code coverage report."
},
{
"name": "code-coverage-exclude",
"type": "array",
"description": "Globs to exclude from code coverage."
},
{
"name": "configuration",
"type": "string",
"aliases": [
"c"
],
"description": "One or more named builder configurations as a comma-separated list as specified in the \"configurations\" section in angular.json.\nThe builder uses the named configurations to run the given target.\nFor more information, see https://angular.io/guide/workspace-config#alternate-build-configurations."
},
{
"name": "exclude",
"type": "array",
"description": "Globs of files to exclude, relative to the project root."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "include",
"type": "array",
"description": "Globs of files to include, relative to project root. \nThere are 2 special cases:\n - when a path to directory is provided, all spec files ending \".spec.@(ts|tsx)\" will be included\n - when a path to a file is provided, and a matching spec file exists it will be included instead."
},
{
"name": "inline-style-language",
"type": "string",
"default": "css",
"enum": [
"css",
"less",
"sass",
"scss"
],
"description": "The stylesheet language to use for the application's inline component styles."
},
{
"name": "karma-config",
"type": "string",
"description": "The name of the Karma configuration file."
},
{
"name": "main",
"type": "string",
"description": "The name of the main entry-point file."
},
{
"name": "poll",
"type": "number",
"description": "Enable and define the file watching poll time period in milliseconds."
},
{
"name": "polyfills",
"type": "string",
"description": "Polyfills to be included in the build."
},
{
"name": "preserve-symlinks",
"type": "boolean",
"description": "Do not use the real path when resolving modules. If unset then will default to `true` if NodeJS option --preserve-symlinks is set."
},
{
"name": "progress",
"type": "boolean",
"default": true,
"description": "Log progress to the console while building."
},
{
"name": "project",
"type": "string",
"description": "The name of the project to build. Can be an application or a library.",
"positional": 0
},
{
"name": "reporters",
"type": "array",
"description": "Karma reporters to use. Directly passed to the karma runner."
},
{
"name": "source-map",
"type": "boolean",
"default": true,
"description": "Output source maps for scripts and styles. For more information, see https://angular.io/guide/workspace-config#source-map-configuration."
},
{
"name": "ts-config",
"type": "string",
"description": "The name of the TypeScript configuration file."
},
{
"name": "watch",
"type": "boolean",
"description": "Run build when files change."
},
{
"name": "web-worker-ts-config",
"type": "string",
"description": "TypeScript configuration for Web Worker modules."
}
]
}
+83
View File
@@ -0,0 +1,83 @@
{
"name": "update",
"command": "ng update [packages..]",
"shortDescription": "Updates your workspace and its dependencies. See https://update.angular.io/.",
"longDescriptionRelativePath": "@angular/cli/src/commands/update/long-description.md",
"longDescription": "Perform a basic update to the current stable release of the core framework and CLI by running the following command.\n\n```\nng update @angular/cli @angular/core\n```\n\nTo update to the next beta or pre-release version, use the `--next` option.\n\nTo update from one major version to another, use the format\n\n```\nng update @angular/cli@^<major_version> @angular/core@^<major_version>\n```\n\nWe recommend that you always update to the latest patch version, as it contains fixes we released since the initial major release.\nFor example, use the following command to take the latest 10.x.x version and use that to update.\n\n```\nng update @angular/cli@^10 @angular/core@^10\n```\n\nFor detailed information and guidance on updating your application, see the interactive [Angular Update Guide](https://update.angular.io/).\n",
"aliases": [],
"deprecated": false,
"options": [
{
"name": "allow-dirty",
"type": "boolean",
"default": false,
"description": "Whether to allow updating when the repository contains modified or untracked files."
},
{
"name": "create-commits",
"type": "boolean",
"aliases": [
"C"
],
"default": false,
"description": "Create source control commits for updates and migrations."
},
{
"name": "force",
"type": "boolean",
"default": false,
"description": "Ignore peer dependency version mismatches."
},
{
"name": "from",
"type": "string",
"description": "Version from which to migrate from. Only available with a single package being updated, and only with 'migrate-only'."
},
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
},
{
"name": "migrate-only",
"type": "boolean",
"description": "Only perform a migration, do not update the installed version."
},
{
"name": "name",
"type": "string",
"description": "The name of the migration to run. Only available with a single package being updated, and only with 'migrate-only' option."
},
{
"name": "next",
"type": "boolean",
"default": false,
"description": "Use the prerelease version, including beta and RCs."
},
{
"name": "packages",
"type": "array",
"default": [],
"description": "The names of package(s) to update.",
"positional": 0
},
{
"name": "packages",
"type": "string",
"default": [],
"description": "The names of package(s) to update.",
"positional": 0
},
{
"name": "to",
"type": "string",
"description": "Version up to which to apply migrations. Only available with a single package being updated, and only with 'migrate-only' option. Requires 'from' to be specified. Default to the installed version detected."
},
{
"name": "verbose",
"type": "boolean",
"default": false,
"description": "Display additional details about internal operations during execution."
}
]
}
+16
View File
@@ -0,0 +1,16 @@
{
"name": "version",
"command": "ng version",
"shortDescription": "Outputs Angular CLI version.",
"aliases": [
"v"
],
"deprecated": false,
"options": [
{
"name": "help",
"type": "boolean",
"description": "Shows a help message for this command in the console."
}
]
}
@@ -11,13 +11,13 @@ describe('AngularJS to Angular Quick Reference Tests', () => {
it('should display proper movie data', async () => {
// We check only a few samples
const expectedSamples: any[] = [
{row: 0, column: 0, element: 'img', attr: 'src', value: 'images/hero.png', contains: true},
{row: 0, column: 0, element: 'img', attr: 'src', value: 'images/hero.svg', contains: true},
{row: 0, column: 2, value: 'Celeritas'},
{row: 1, column: 3, matches: /Dec 1[678], 2015/}, // absorb timezone dif; we care about date format
{row: 1, column: 5, value: '$14.95'},
{row: 2, column: 4, value: 'PG-13'},
{row: 2, column: 7, value: '100%'},
{row: 2, column: 0, element: 'img', attr: 'src', value: 'images/ng-logo.png', contains: true},
{row: 2, column: 0, element: 'img', attr: 'src', value: 'images/ng-logo.svg', contains: true},
];
// Go through the samples
@@ -8,7 +8,7 @@ export class MovieService {
return [
{
hero: 'Celeritas',
imageurl: 'assets/images/hero.png',
imageurl: 'assets/images/hero.svg',
movieId: 1,
mpaa: 'pg-13',
releaseDate: '2015-12-19T00:00:00',
@@ -19,7 +19,7 @@ export class MovieService {
},
{
hero: 'Dr Nice',
imageurl: 'assets/images/villain.png',
imageurl: 'assets/images/villain.svg',
movieId: 2,
mpaa: 'pg-13',
releaseDate: '2015-12-18T00:00:00',
@@ -30,7 +30,7 @@ export class MovieService {
},
{
hero: 'Angular',
imageurl: 'assets/images/ng-logo.png',
imageurl: 'assets/images/ng-logo.svg',
movieId: 3,
mpaa: 'pg-13',
releaseDate: '2015-12-17T00:00:00',
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 267.64 295.96" xmlns="http://www.w3.org/2000/svg"
xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<filter id="g" x="-.6875" y="-.36871" width="2.375" height="1.7374"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="9.821428" />
</filter>
<filter id="a" x="-.32323" y="-.20911" width="1.6465" height="1.4182"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="6.113183" />
</filter>
<filter id="i" x="-.60711" y="-.3192" width="2.2142" height="1.6384"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="2.235874" />
</filter>
<filter id="h" x="-.20228" y="-.6072" width="1.4046" height="2.2144"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="2.235874" />
</filter>
<filter id="b" x="-.16212" y="-.3564" width="1.3242" height="1.7128"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="6.351255" />
</filter>
<filter id="c" x="-.26311" y="-.22062" width="1.5262" height="1.4412"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="1.868782" />
</filter>
<filter id="j" x="-.29184" y="-.46969" width="1.5837" height="1.9394"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="6.32608" />
</filter>
<filter id="e" x="-.57354" y="-1.4081" width="2.1471" height="3.8162"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="6.182556" />
</filter>
<filter id="f" x="-.2876" y="-1.4502" width="1.5752" height="3.9004"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="2.586588" />
</filter>
<filter id="d" x="-.16498" y="-.36227" width="1.33" height="1.7245"
color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="2.252435" />
</filter>
</defs>
<metadata>image/svg+xml <rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(11.042 -9.5012)">
<title>Layer 1</title>
<g>
<path
d="m91.945 72.496c27.138 0.30258 57.949 34.887 81.317 0 29.92-34.193 62.363-13.391 82.833 0v80.812c-27.915-2.8567-46.364-29.419-82.507-11.859-42.127 20.468-87.981-29.714-123.56-66.428 24.504 2.919 36.216 1.2694 41.921-2.5254z"
stroke="#000" />
<path d="m74.518 172.69-23.218-7.317-13.861 51.109 21.254 6.4241 15.825-50.216h3.1e-5z"
stroke-width="0" />
<path d="m59.709 215.32-22.38 1.2045-7.4787 74.929 30.058-0.31159-0.19983-75.822-3.1e-5 3e-5z"
stroke-width="0" />
<path
d="m62.226 194.75c-4.3262 13.599-11.065 24.104-15.052 23.464-3.9867-0.64052-3.7114-12.184 0.6148-25.783 4.3262-13.599 11.065-24.104 15.052-23.464 3.9867 0.64052 3.7114 12.184-0.61482 25.783l-4e-6 2e-5z"
filter="url(#a)" opacity=".54808" stroke="#000" />
<path d="m69.99 173.14 22.807-8.5128 16.391 49.832-20.787 8.0076-18.411-49.327v3e-5z"
stroke-width="0" />
<path
d="m41.241 77.574 11.859 10.31-39.133 45.01s-10.562-4.4301-11.24-9.8059c-0.67784-5.3758 38.514-45.515 38.514-45.515h-1.5e-5 -3.1e-5z"
stroke="#000" />
<path
d="m64.067 47.483s4.2083 25.538-11.28 27.021 10.552 23.843 10.552 23.843l19.782 8.2676 33.094-14.913s-7.5285-12.225-10.031-12.562c-2.5028-0.33676-13.448-2.319-16.173-12.369-2.7249-10.05-0.41495-15.854-0.41495-15.854l-25.529-3.4349h-6.1e-5z"
stroke="#000" />
<path
d="m61.325 52.192c5.8849 10.744 25.445 15.003 35.243 5.1137 3.7641-4.1141 2.9136-11.869 2.1797-16.998s-4.1074-5.8897-4.1006-8.0152c7e-3 -2.1255 1.1313-1.8719 0.51407-4.3746-6.2657-27.818-53.688-12.607-40.426 12.625-3.7319 7.1826 0.1217 11.174 6.5897 11.649v3.1e-5z"
stroke="#000" />
<path
d="m62.096 52.409c5.7656 10.526 24.929 14.699 34.529 5.01 3.6878-4.0308 2.8546-11.628 2.1356-16.653s-4.0241-5.7703-4.0175-7.8528c7e-3 -2.0825 1.1083-1.834 0.50366-4.2859-6.1387-27.254-52.6-12.351-39.607 12.369-3.6562 7.037 0.11923 10.948 6.4561 11.413v-3.1e-5z"
stroke="#000" />
<path
d="m63.507 54.818c12.538 13.071 26.191 9.2315 34.417 1.4728-14.553 10.143-25.788 6.1748-34.417-1.4728z"
stroke="#000" />
<path
d="m84.621 30.575s2.7779 14.9 5.8084 14.647c-0.44134 0.17191-6.3155 3.8076-8.8388 1.2627 0.69727-1.2367 3.1921 1.681 5.3688-1.3929 0.81992-1.7809-1.1302-6.0501-2.3384-14.517z"
stroke="#000" />
<path
d="m84.621 30.575s2.7779 14.9 5.8084 14.647c-0.44134 0.17191-6.3155 3.8076-8.8388 1.2627 0.69727-1.2367 3.1921 1.681 5.3688-1.3929 0.81992-1.7809-1.1302-6.0501-2.3384-14.517z"
filter="url(#i)" stroke="#000" />
<path
d="m69.03 37.466c0.14066 1.798 12.691-0.98444 14.467-3.9984 4.3018 0.6434 10.735-0.22946 11.178-1.4225 1.7027-4.5798-4.6747-2.635-11.629-1.0497-6.9547 1.5854-16.541-0.92746-14.284 6.4706l0.26788-3.1e-5h-3.1e-5z"
stroke="#000" />
<path
d="m69.03 37.466c0.14066 1.798 12.691-0.98444 14.467-3.9984 4.3018 0.6434 10.735-0.22946 11.178-1.4225 1.7027-4.5798-4.6747-2.635-11.629-1.0497-6.9547 1.5854-16.541-0.92746-14.284 6.4706l0.26788-3.1e-5h-3.1e-5z"
filter="url(#h)" stroke="#000" />
<path
d="m81.522 32.928c0.84876 1.8448-2.5194 2.5192-5.6442 3.5081-3.1248 0.98904-5.5627 1.8298-5.7602 0.63113-0.53281-3.234 1.5685-3.0128 4.6933-4.0019 3.1248-0.98901 6.4079-1.0954 6.7111-0.13742z"
stroke="#000" />
<path
d="m84.818 32.076c-0.05411 1.7074 2.7767 1.1278 5.5219 0.87174 2.7452-0.2561 4.9095-0.40228 4.6703-1.3958-0.64536-2.6805-2.2014-1.8215-4.9466-1.5654-2.7452 0.2561-5.3242 1.248-5.2457 2.0895l3.1e-5 -6.1e-5z"
stroke="#000" />
<path d="m68.05 34.513s9.1964-4.2857 12.768-3.4821" stroke="#000" stroke-width="1px" />
<path d="m84.568 30.674s8.4821-0.625 9.1964-2.7679" stroke="#000" stroke-width="1px" />
<path
d="m93.883 48.197c1.6163 2.5565-0.35864 6.4995-5.2404 6.2187-4.8401-0.27841-9.5687 0.93256-9.655 0.28659-0.09891-0.741 4.0474-1.0987 8.7613-2.3987 4.7139-1.3 5.2702-4.6136 6.1341-4.1066z"
stroke="#000" />
<path
d="m110.66 80.232-12.591 9.4031 35.689 47.787s10.861-3.6351 11.936-8.9458c1.0744-5.3107-35.034-48.244-35.034-48.244h3e-5z"
stroke="#000" />
<path
d="m2.4678 124.59c1.517-10.859 11.535-8.3905 11.535-8.3905l23.973 43.264-3.7433 5.6921s-33.281-29.707-31.764-40.566z"
stroke="#000" />
<path
d="m22.743 116.29c-8.5536 7.5969-16.55 12.56-17.859 11.085-1.3098-1.4748 4.5625-8.8288 13.116-16.426 8.5536-7.5969 16.55-12.56 17.859-11.085 1.3098 1.4748-4.5625 8.8288-13.116 16.426z"
filter="url(#b)" opacity=".54808" stroke="#000" />
<path
d="m146.55 130.82c-0.70239-10.942-10.876-9.2279-10.876-9.2279l-27.135 41.354 3.3081 5.9555s35.405-27.14 34.703-38.082v3e-5z"
stroke="#000" />
<path
d="m125.14 117c8.5536 7.5969 16.55 12.56 17.859 11.085 1.3098-1.4748-4.5625-8.8288-13.116-16.426-8.5536-7.5969-16.55-12.56-17.859-11.085-1.3098 1.4748 4.5625 8.8288 13.116 16.426z"
filter="url(#b)" opacity=".54808" stroke="#000" />
<path
d="m51.988 74.692s14.415 17.143 24.394 16.071c9.9796-1.0714 20.329-8.5714 19.589-13.929-0.73923-5.3571 16.866 2.8571 16.866 2.8571s6.4495 11.429 11.105 15.357c2.4727 2.0867-8.0362 18.214-8.0362 18.214s-4.5227-7.0144-5.1931-5.3497c-7.2437 17.984-22.657 50.095-17.154 57.998 4.7157 6.7723-42.977 1.7603-42.977 1.7603 9.8284-22.663-12.917-54.815-14.158-59.888 0 0 1.5326-1.1295-5.3796 5.8368-1.4805 1.4921-11.031-15.357-11.031-15.357s9.9751-4.2857 16.828-20.357l15.146-3.2143v-6.1e-5z"
stroke="#000" />
<path
d="m50.258 166.49c-0.5813-1.1995 48.173-2.4055 45.637 0-5.6648 5.3748-9.9369 13.418-15.812 21.568-4.4765 2.3502-8.9531 1.5652-13.43 0.38849-7.2687-17.08-14.251-17.531-16.396-21.957z"
stroke="#000" />
<path
d="m81.464 177.49c0 5.6138-3.8159 10.165-8.5232 10.165-4.7072 0-8.5232-4.5509-8.5232-10.165s3.816-10.165 8.5232-10.165c4.7072 0 8.5232 4.5509 8.5232 10.165z"
filter="url(#c)" stroke="#000" />
<path
d="m67.644 181.15c-0.12726 1.2675-0.58893 7.3753 7.556 6.4745 2.901-0.32086 5.0615-2.6568 5.0615-6.2899 0-9.8345-0.20319-14.736-0.20319-14.736"
stroke="#000" stroke-dasharray="4.18484951, 1.04621238" stroke-width="1.0462" />
<path d="m79.991 186.04c3.9193-7.455 7.1667-13.986 14.038-18.663" stroke="#000"
stroke-dasharray="4.18484951, 1.04621238" stroke-width="1.0462" />
<path d="m66.662 185.88c-1.7544-10.631-9.8827-13.64-15.159-18.663" stroke="#000"
stroke-dasharray="4.18484951, 1.04621238" stroke-width="1.0462" />
<path d="m85.887 213.73 23.271 0.7644 5.1592 75.19-28.63-0.13312 0.19983-75.822v3e-5z"
stroke-width="0" />
<path
d="m127.66 150.32c5.5904-7.0652 9.0979-13.555 7.8342-14.495-1.2637-0.94047-6.82 4.0246-12.41 11.09-5.5904 7.0652-9.0978 13.555-7.8341 14.496 1.2637 0.94047 6.82-4.0246 12.41-11.09z"
filter="url(#b)" opacity=".54808" stroke="#000" />
<path
d="m98.34 177.58c-3.5569-3.6226-6.0251-8.294-4.6952-11.345 1.1842-2.7169 4.5644-4.3068 8.2529-5.5964 7.4352-2.5995 10.578-0.1094 13.177 7.3258 0.90197 4.619-12.495 12.423-16.735 9.6159z"
stroke="#000" />
<path
d="m47.058 174.81c3.8174-3.347 6.6273-7.8212 5.5287-10.963-0.97815-2.7977-4.2303-4.6354-7.8123-6.1967-7.2205-3.1471-10.54-0.89846-13.687 6.3221-1.2442 4.5388 11.533 13.321 15.971 10.838z"
stroke="#000" />
<path
d="m101.02 113.41c-1.4005 8.0312-10.098 11.211-17.308 7.3128-5.7908-3.1309-10.8-13.875-8.9424-7.3128 1.5825 5.5888-2.3873 6.6157-3.5214 6.712-15.173 1.2892-23.275 10.274-25.759-6.712-1.1159-7.6288-16.491-24.668-4.7454-27.457 4.396-1.0436 23.015 12.939 32.511 11.294 13.012-2.2532 27.316-12.292 32.892-12.088 13.339 0.48917 2.9559 16.665-5.1263 28.25h1e-5z"
filter="url(#j)" stroke-width="0" />
<path
d="m52.928 74.769s8.8478 14.348 21.62 13.89c4.8502-0.17236-11.688 9.8029-10.751 10.607 1.1307 0.9697 14.023-9.5964 14.023-9.5964s11.682 10.669 12.621 9.5964c0.87979-1.005-13.938-10.352-9.349-11.238 6.9099-1.3343 12.621-15.026 12.621-15.026s-9.7724 12.814-16.711 13.637c-8.7678 1.0404-24.074-11.869-24.074-11.869v3.1e-5z"
stroke="#000" />
<path
d="m80.371 88.218c0 1.0602-1.0593 1.9196-2.3661 1.9196-1.3067 0-2.3661-0.85945-2.3661-1.9196 0-1.0602 1.0593-1.9196 2.3661-1.9196 1.3067 0 2.3661 0.85945 2.3661 1.9196z"
stroke="#000" />
<path
d="m227.51 98.084c3e-5 17.653-7.6751 31.964-17.143 31.964-9.4677 0-17.143-14.311-17.143-31.964-3e-5 -17.653 7.6751-31.964 17.143-31.964 9.4678 0 17.143 14.311 17.143 31.964h3e-5z"
filter="url(#g)" stroke="#000" />
<path
d="m81.464 177.49c0 5.6138-3.8159 10.165-8.5232 10.165-4.7072 0-8.5232-4.5509-8.5232-10.165s3.816-10.165 8.5232-10.165c4.7072 0 8.5232 4.5509 8.5232 10.165z"
filter="url(#c)" opacity=".54808" stroke="#000" />
<path
d="m20.226 149.61c-5.5904-7.0652-9.0979-13.555-7.8342-14.495 1.2637-0.94048 6.82 4.0246 12.41 11.09 5.5904 7.0651 9.0978 13.555 7.8341 14.495-1.2637 0.94048-6.82-4.0246-12.41-11.09h4e-6z"
filter="url(#b)" opacity=".54808" stroke="#000" />
<path
d="m53.645 252.36c0.0925 15.459-3.0668 28.588-7.0565 29.325-3.9897 0.73627-7.2989-11.199-7.3914-26.658-0.0925-15.459 3.0668-28.588 7.0564-29.325 3.9897-0.73628 7.2989 11.199 7.3914 26.658v1e-5z"
filter="url(#a)" opacity=".54808" stroke="#000" />
<path
d="m86.032 197.78c4.3262 13.599 11.065 24.104 15.052 23.464 3.9867-0.64052 3.7114-12.184-0.61481-25.783-4.3262-13.599-11.065-24.104-15.052-23.464-3.9867 0.6405-3.7114 12.184 0.61481 25.783z"
filter="url(#a)" opacity=".54808" stroke="#000" />
<path
d="m94.613 255.39c-0.0925 15.459 3.0668 28.588 7.0565 29.325 3.9897 0.7363 7.2989-11.199 7.3914-26.658 0.0925-15.459-3.0668-28.588-7.0564-29.325-3.9897-0.73628-7.2989 11.199-7.3914 26.658v1e-5z"
filter="url(#a)" opacity=".54808" stroke="#000" />
<path
d="m115.33 288.38c0 6.1368-7.3851 4.326-15.614 4.326-8.2289 0-14.185 1.8108-14.185-4.326s0.24228-10.04 17.043-5.7545c7.9735 2.034 12.757-0.38232 12.757 5.7545h-3e-5z"
stroke="#000" />
<path
d="m60.328 288.52c0 6.1368-7.5622 4.326-15.988 4.326-8.4261 0-14.525 1.8108-14.525-4.326s0.24809-10.04 17.451-5.7546c8.1647 2.0341 13.063-0.38221 13.063 5.7546z"
stroke="#000" />
<path
d="m111.7 288.42c0 2.2871-5.2513 1.6123-11.103 1.6123-5.8513 0-10.087 0.67487-10.087-1.6123s0.17226-3.7419 12.118-2.1447c5.6697 0.75808 9.071-0.14246 9.071 2.1447h2e-5z"
filter="url(#e)" stroke="#000" />
<path
d="m54.971 288.27c0 2.1643-5.3494 1.5256-11.31 1.5256-5.9606 0-10.275 0.63867-10.275-1.5256 0-2.1643 0.17549-3.5409 12.345-2.0295 5.7756 0.71741 9.2404-0.13482 9.2404 2.0295z"
filter="url(#f)" stroke="#000" />
<path
d="m54.864 42.292 6.1149 8.6494 7.5525-2.3529s-6.2699-3.0363-8.6098-5.8115c-1.0703-1.2694-0.48761-3.4601-0.67963-5.0671-0.62283-5.2123-0.13116-10.121 6.7356-13.896l11.909-0.61054s3.2668-0.35864 4.1671 1.0819c0.90036 1.4406-4.11 2.58-4.11 2.58 0.06 0 4.6575 0.29971 6.016-1.6668 0.87598-1.2681-0.1138-5.0548-0.86157-5.0548 7.6948 2.0927 1.2081-7.2626 8.4904 0.90784 1.8007 1.6206 1.6252 3.4243 1.6252 3.4243l1.8007 2.521s-2.1609-19.448-24.13-14.046c-21.969 5.4022-18.726 20.908-18.726 20.908l2.7056 8.4334 3.1e-5 6.1e-5z"
stroke="#000" />
<path
d="m85.482 20.196c-0.21223 0.71253-3.3723-0.51432-3.9431 0.64492-0.41602 0.845 0.45606 2.1323-0.20563 2.611-0.53284 0.38547-2.1553-3.7216-2.7381-3.346-2.905 1.8722-6.0592 2.0577-7.897 2.0577-2.462 0-3.6555 2.1072-5.3396 1.1138-0.44664-0.26346-3.661 1.9328-5.2406 2.9736-0.60786 0.40049-4.8062 8.2142-5.9874 8.8461-1.6078 0.86008-0.10704-4.8796-0.133-5.1018-0.32276-2.7612 8.8307-11.236 9.4887-11.48 1.939-0.71674 5.4451-1.0058 7.3904-1.8905 2.7168-1.2356 9.6646-2.1329 12.725 0.40945 1.2978 1.0781 1.8801 2.338 1.8801 3.1615z"
filter="url(#d)" opacity=".87019" stroke="#000" />
<path
d="m78.43 34.347c0 0.74966-0.60773 1.3574-1.3574 1.3574-0.74967 0-1.3574-0.60774-1.3574-1.3574 0-0.74966 0.60772-1.3574 1.3574-1.3574 0.74966 0 1.3574 0.60773 1.3574 1.3574z"
opacity=".87019" stroke="#000" />
<path
d="m93.341 31.311c0 0.74966-0.60773 1.3574-1.3574 1.3574-0.74967 0-1.3574-0.60774-1.3574-1.3574 0-0.74966 0.60772-1.3574 1.3574-1.3574 0.74966 0 1.3574 0.60773 1.3574 1.3574z"
opacity=".87019" stroke="#000" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 250" style="enable-background:new 0 0 250 250;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DD0031;}
.st1{fill:#C3002F;}
.st2{fill:#FFFFFF;}
</style>
<g>
<polygon class="st0" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "/>
<polygon class="st1" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "/>
<path class="st2" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1
L125,52.1z M142,135.4H108l17-40.9L142,135.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

+13
View File
@@ -43,6 +43,19 @@ EXAMPLES = {
"elements": {"stackblitz": True, "zip": True},
"event-binding": {"stackblitz": True, "zip": True},
"feature-modules": {"stackblitz": True, "zip": True},
"first-app-lesson-01": {"stackblitz": True, "zip": True},
"first-app-lesson-02": {"stackblitz": True, "zip": True},
"first-app-lesson-03": {"stackblitz": True, "zip": True},
"first-app-lesson-04": {"stackblitz": True, "zip": True},
"first-app-lesson-05": {"stackblitz": True, "zip": True},
"first-app-lesson-06": {"stackblitz": True, "zip": True},
"first-app-lesson-07": {"stackblitz": True, "zip": True},
"first-app-lesson-08": {"stackblitz": True, "zip": True},
"first-app-lesson-09": {"stackblitz": True, "zip": True},
"first-app-lesson-10": {"stackblitz": True, "zip": True},
"first-app-lesson-11": {"stackblitz": True, "zip": True},
"first-app-lesson-12": {"stackblitz": True, "zip": True},
"first-app-lesson-13": {"stackblitz": True, "zip": True},
"form-validation": {"stackblitz": True, "zip": True},
"forms": {"stackblitz": True, "zip": True},
"forms-overview": {"stackblitz": True, "zip": True},
@@ -0,0 +1,11 @@
load("//aio/content/examples:examples.bzl", "docs_example")
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
package(default_visibility = ["//visibility:public"])
docs_example(
name = "first-app-lesson-01",
# This example downloads fonts and images from googleapis.com
test_exec_properties = ENABLE_NETWORK,
test_tags = ["requires-network"],
)
@@ -0,0 +1,18 @@
import { browser, element, by, logging } from 'protractor';
describe('first-app-lesson-01 app', () => {
beforeEach(() => browser.get(''));
it('should display correct title', async () => {
expect(await element.all(by.css('h1')).get(0).getText()).toEqual('Hello world!');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});
@@ -0,0 +1,6 @@
{
"useCommonBoilerplate": false,
"overrideBoilerplate": [
"src/styles.css"
]
}
@@ -0,0 +1,12 @@
:host {
--content-padding: 10px;
}
header {
display: block;
height: 60px;
padding: var(--content-padding);
box-shadow: 0px 5px 25px var(--shadow-color);
}
.content {
padding: var(--content-padding);
}
@@ -0,0 +1,12 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
imports: [],
template: `<h1>Hello world!</h1>`,
styleUrls: ['./app.component.css'],
})
export class AppComponent {
title = 'homes';
}
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20pt" height="20pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 11.602c-15.398 0-27.898 12.5-27.898 27.898 0 5 1.3008 9.6992 3.6016 13.801l2.8984 4.1992 21.398 30.898 21.801-31.398 2.1992-3.1992c2.5-4.1992 3.8984-9 3.8984-14.199 0-15.5-12.5-28-27.898-28zm0 35.598c-4.1992 0-7.6992-3.3984-7.6992-7.6992s3.3984-7.6992 7.6992-7.6992 7.6992 3.3984 7.6992 7.6992-3.5 7.6992-7.6992 7.6992z" fill="#605cc8"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

@@ -0,0 +1,7 @@
<svg width="151" height="44" viewBox="0 0 151 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.15532 33.2946C5.25369 33.2946 4.58006 32.5707 4.58006 31.6701V24.0152C4.58006 19.5469 4.35206 20.6276 7.59585 17.4236C21.7317 4.06732 16.2425 4.24744 29.6149 18.054C32.0434 20.7627 31.9985 19.4534 31.9985 23.8316V31.6667C31.9985 32.5707 31.28 33.2912 30.3749 33.2912H6.15532V33.2946Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.896 35.1547L5.73676 35.2586C4.80059 35.2621 3.75042 35.8232 3.37388 36.5229L2.90061 37.4027L0.537726 41.7878L0.140457 42.529C-0.236085 43.2253 0.164639 43.7829 1.10081 43.7795L26.26 43.6756C27.1962 43.6721 28.2464 43.111 28.6229 42.4113L29.0962 41.5315L31.4591 37.1463L31.8563 36.4051C32.2329 35.7089 31.8321 35.1512 30.896 35.1547Z" fill="#605DC8"/>
<path d="M2.54861 18.7156C2.23079 18.7156 1.90952 18.629 1.6228 18.4454C0.821352 17.9363 0.5899 16.859 1.09771 16.0554C1.46389 15.4701 2.70061 14.2231 5.50912 11.4659L6.39693 10.5931C8.73218 8.38318 10.5147 6.56817 11.9449 5.10646C15.1679 1.81587 16.7985 0.153263 18.9023 0.222538C20.9888 0.277958 22.4362 1.92325 25.3138 5.19651C26.7267 6.8037 28.4816 8.8023 30.8514 11.2477C30.8652 11.265 30.8825 11.2789 30.8963 11.2962C31.228 11.6634 31.715 12.2003 32.2401 12.7752C33.9743 14.6734 34.8206 15.6086 35.0763 15.9688C35.629 16.7413 35.4494 17.8185 34.679 18.3727C33.9087 18.9234 32.8343 18.7468 32.2816 17.9744C32.0639 17.6869 30.5889 16.0693 29.708 15.1064C29.1863 14.5348 28.6993 14.0014 28.3642 13.6308C25.9495 11.1369 24.1704 9.11057 22.7368 7.4826C21.0233 5.5325 19.4032 3.68977 18.809 3.67245H18.8021C18.1699 3.67245 16.3356 5.54289 14.3976 7.52417C12.9467 9.00666 11.14 10.8494 8.78054 13.0766L7.91001 13.9321C6.74929 15.0717 4.33804 17.4375 3.97877 17.9293C3.65405 18.4454 3.10824 18.7225 2.54515 18.7225L2.54861 18.7156Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.0976 33.2115V26.0588C22.0976 25.4665 21.6174 24.985 21.0267 24.985H15.1955C14.6047 24.985 14.1246 25.4665 14.1246 26.0588V33.2115C14.1246 33.2704 14.1142 33.3293 14.0969 33.3847H22.1252C22.1079 33.3293 22.0976 33.2739 22.0976 33.2115Z" fill="white"/>
<path d="M58.9784 10.0512V32.2205H54.5319V22.7874H45.0353V32.2205H40.5887V10.0512H45.0353V19.1666H54.5319V10.0512H58.9784ZM70.8506 32.5063C69.1567 32.5063 67.6322 32.1358 66.277 31.3947C64.9219 30.6324 63.8526 29.5631 63.0692 28.1868C62.3069 26.8105 61.9258 25.2224 61.9258 23.4226C61.9258 21.6228 62.3175 20.0348 63.1009 18.6585C63.9055 17.2821 64.996 16.2234 66.3723 15.4823C67.7486 14.7201 69.2838 14.3389 70.9777 14.3389C72.6716 14.3389 74.2067 14.7201 75.5831 15.4823C76.9594 16.2234 78.0393 17.2821 78.8227 18.6585C79.6273 20.0348 80.0296 21.6228 80.0296 23.4226C80.0296 25.2224 79.6167 26.8105 78.7909 28.1868C77.9863 29.5631 76.8853 30.6324 75.4878 31.3947C74.1115 32.1358 72.5657 32.5063 70.8506 32.5063ZM70.8506 28.6315C71.6553 28.6315 72.4069 28.4409 73.1057 28.0597C73.8256 27.6574 74.3973 27.0646 74.8208 26.2811C75.2443 25.4977 75.456 24.5449 75.456 23.4226C75.456 21.7499 75.0114 20.4688 74.122 19.5795C73.2539 18.669 72.1846 18.2138 70.9142 18.2138C69.6437 18.2138 68.5744 18.669 67.7063 19.5795C66.8593 20.4688 66.4358 21.7499 66.4358 23.4226C66.4358 25.0954 66.8487 26.387 67.6745 27.2975C68.5215 28.1868 69.5802 28.6315 70.8506 28.6315ZM104.825 14.3707C106.985 14.3707 108.721 15.0377 110.034 16.3717C111.368 17.6844 112.035 19.5266 112.035 21.8981V32.2205H107.589V22.5016C107.589 21.1252 107.239 20.0771 106.54 19.3572C105.842 18.6161 104.889 18.2456 103.682 18.2456C102.475 18.2456 101.512 18.6161 100.792 19.3572C100.093 20.0771 99.7436 21.1252 99.7436 22.5016V32.2205H95.297V22.5016C95.297 21.1252 94.9477 20.0771 94.2489 19.3572C93.5502 18.6161 92.5974 18.2456 91.3904 18.2456C90.1623 18.2456 89.1883 18.6161 88.4684 19.3572C87.7697 20.0771 87.4203 21.1252 87.4203 22.5016V32.2205H82.9737V14.6248H87.4203V16.7528C87.992 16.0117 88.7225 15.4294 89.6118 15.0059C90.5223 14.5824 91.5175 14.3707 92.5974 14.3707C93.9737 14.3707 95.2018 14.6671 96.2816 15.26C97.3615 15.8317 98.1979 16.6575 98.7908 17.7374C99.3625 16.721 100.188 15.9058 101.268 15.2918C102.369 14.6777 103.555 14.3707 104.825 14.3707ZM132.294 23.0415C132.294 23.6767 132.252 24.2484 132.167 24.7566H119.304C119.41 26.027 119.854 27.0222 120.638 27.7421C121.421 28.4621 122.385 28.822 123.528 28.822C125.18 28.822 126.355 28.1127 127.053 26.694H131.849C131.341 28.3879 130.367 29.7854 128.927 30.8865C127.488 31.9664 125.72 32.5063 123.623 32.5063C121.929 32.5063 120.405 32.1358 119.05 31.3947C117.716 30.6324 116.668 29.5631 115.905 28.1868C115.164 26.8105 114.794 25.2224 114.794 23.4226C114.794 21.6017 115.164 20.003 115.905 18.6267C116.646 17.2504 117.684 16.1917 119.018 15.4506C120.352 14.7095 121.887 14.3389 123.623 14.3389C125.296 14.3389 126.789 14.6989 128.102 15.4188C129.436 16.1387 130.462 17.1657 131.182 18.4996C131.924 19.8124 132.294 21.3264 132.294 23.0415ZM127.689 21.771C127.668 20.6276 127.255 19.7172 126.45 19.0396C125.645 18.3408 124.661 17.9915 123.496 17.9915C122.395 17.9915 121.464 18.3303 120.701 19.0078C119.96 19.6642 119.505 20.5853 119.336 21.771H127.689ZM141.955 32.5063C140.516 32.5063 139.224 32.2522 138.081 31.744C136.937 31.2147 136.027 30.5054 135.349 29.616C134.693 28.7267 134.333 27.7421 134.269 26.6623H138.748C138.832 27.3398 139.16 27.9009 139.732 28.3456C140.325 28.7903 141.055 29.0126 141.924 29.0126C142.771 29.0126 143.427 28.8432 143.893 28.5044C144.38 28.1656 144.623 27.7316 144.623 27.2022C144.623 26.6305 144.327 26.207 143.734 25.9318C143.162 25.6353 142.241 25.3177 140.971 24.9789C139.658 24.6613 138.578 24.3331 137.731 23.9943C136.905 23.6555 136.185 23.1368 135.571 22.438C134.979 21.7393 134.682 20.797 134.682 19.6113C134.682 18.6373 134.957 17.748 135.508 16.9434C136.08 16.1387 136.884 15.5035 137.922 15.0377C138.98 14.5719 140.219 14.3389 141.638 14.3389C143.734 14.3389 145.407 14.8683 146.656 15.927C147.905 16.9645 148.593 18.3726 148.721 20.1512H144.465C144.401 19.4525 144.105 18.902 143.575 18.4996C143.067 18.0762 142.379 17.8644 141.511 17.8644C140.706 17.8644 140.081 18.0126 139.637 18.3091C139.213 18.6055 139.002 19.0184 139.002 19.5478C139.002 20.1406 139.298 20.5959 139.891 20.9135C140.484 21.2099 141.405 21.517 142.654 21.8346C143.925 22.1522 144.973 22.4804 145.798 22.8192C146.624 23.1579 147.334 23.6873 147.926 24.4072C148.541 25.106 148.858 26.0376 148.879 27.2022C148.879 28.2186 148.593 29.129 148.022 29.9337C147.471 30.7383 146.667 31.3735 145.608 31.8393C144.57 32.284 143.353 32.5063 141.955 32.5063Z" fill="#605DC8"/>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

@@ -0,0 +1,16 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Homes</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
</head>
<body>
<app-root></app-root>
</body>
</html>
@@ -0,0 +1,10 @@
/*
* Protractor support is deprecated in Angular.
* Protractor is used in this example for compatibility with Angular documentation tools.
*/
import { bootstrapApplication,provideProtractorTestingSupport } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent,
{providers: [provideProtractorTestingSupport()]})
.catch(err => console.error(err));
@@ -0,0 +1,23 @@
/* You can add global styles to this file, and also import other style files */
* {
margin: 0;
padding: 0;
}
body {
font-family: 'Be Vietnam Pro', sans-serif;
}
:root {
--primary-color: #605DC8;
--secondary-color: #8B89E6;
--accent-color: #e8e7fa;
--shadow-color: #E8E8E8;
}
button.primary {
padding: 10px;
border: solid 1px var(--primary-color);
background: var(--primary-color);
color: white;
border-radius: 8px;
}
@@ -0,0 +1,17 @@
{
"description": "Angular - First App - Lesson 01",
"files": [
"!**/*.d.ts",
"!**/*.js",
"!**/*.[1,2].*"
],
"tags": [
[
"first",
"angular",
"app",
"lesson",
"01"
]
]
}
@@ -0,0 +1,11 @@
load("//aio/content/examples:examples.bzl", "docs_example")
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
package(default_visibility = ["//visibility:public"])
docs_example(
name = "first-app-lesson-02",
# This example downloads fonts and images from googleapis.com
test_exec_properties = ENABLE_NETWORK,
test_tags = ["requires-network"],
)
@@ -0,0 +1,27 @@
import { browser, element, by, logging } from 'protractor';
describe('first-app-lesson-02 app', () => {
beforeEach(() => browser.get(''));
it('should display correct title', async () => {
expect(await element.all(by.css('.brand-logo')).get(0).getAttribute('src')).toContain('/assets/logo.svg');
});
it('should have a filter string input', async () => {
expect(await element.all(by.css('input')).get(0).getAttribute('placeholder')).toEqual('Filter by city');
expect(await element.all(by.css('input')).get(0).getAttribute('type')).toEqual('text');
});
it('should have a search button', async () => {
expect(await element.all(by.css('button')).get(0).getText()).toEqual('Search');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});
@@ -0,0 +1,6 @@
{
"useCommonBoilerplate": false,
"overrideBoilerplate": [
"src/styles.css"
]
}
@@ -0,0 +1,12 @@
:host {
--content-padding: 10px;
}
header {
display: block;
height: 60px;
padding: var(--content-padding);
box-shadow: 0px 5px 25px var(--shadow-color);
}
.content {
padding: var(--content-padding);
}
@@ -0,0 +1,24 @@
import { Component } from '@angular/core';
import { HomeComponent } from './home/home.component';
@Component({
selector: 'app-root',
standalone: true,
imports: [
HomeComponent,
],
template: `
<main>
<header class="brand-name">
<img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true">
</header>
<section class="content">
<app-home></app-home>
</section>
</main>
`,
styleUrls: ['./app.component.css'],
})
export class AppComponent {
title = 'homes';
}
@@ -0,0 +1,39 @@
.results {
display: grid;
column-gap: 14px;
row-gap: 14px;
grid-template-columns: repeat(3, 1fr);
margin-top: 50px;
}
input[type='text'] {
border: solid 1px var(--primary-color);
padding: 10px;
border-radius: 8px;
margin-right: 4px;
display: inline-block;
width: 30%;
}
button {
padding: 10px;
border: solid 1px var(--primary-color);
background: var(--primary-color);
color: white;
border-radius: 8px;
}
@media (min-width: 500px) and (max-width: 768px) {
.results {
grid-template-columns: repeat(2, 1fr);
}
input[type='text'] {
width: 70%;
}
}
@media (max-width: 499px) {
.results {
grid-template-columns: 1fr;
}
}
@@ -0,0 +1,23 @@
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-home',
standalone: true,
imports: [
CommonModule,
],
template: `
<section>
<form>
<input type="text" placeholder="Filter by city">
<button class="primary" type="button">Search</button>
</form>
</section>
`,
styleUrls: ['./home.component.css'],
})
export class HomeComponent {
}
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20pt" height="20pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 11.602c-15.398 0-27.898 12.5-27.898 27.898 0 5 1.3008 9.6992 3.6016 13.801l2.8984 4.1992 21.398 30.898 21.801-31.398 2.1992-3.1992c2.5-4.1992 3.8984-9 3.8984-14.199 0-15.5-12.5-28-27.898-28zm0 35.598c-4.1992 0-7.6992-3.3984-7.6992-7.6992s3.3984-7.6992 7.6992-7.6992 7.6992 3.3984 7.6992 7.6992-3.5 7.6992-7.6992 7.6992z" fill="#605cc8"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

@@ -0,0 +1,7 @@
<svg width="151" height="44" viewBox="0 0 151 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.15532 33.2946C5.25369 33.2946 4.58006 32.5707 4.58006 31.6701V24.0152C4.58006 19.5469 4.35206 20.6276 7.59585 17.4236C21.7317 4.06732 16.2425 4.24744 29.6149 18.054C32.0434 20.7627 31.9985 19.4534 31.9985 23.8316V31.6667C31.9985 32.5707 31.28 33.2912 30.3749 33.2912H6.15532V33.2946Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.896 35.1547L5.73676 35.2586C4.80059 35.2621 3.75042 35.8232 3.37388 36.5229L2.90061 37.4027L0.537726 41.7878L0.140457 42.529C-0.236085 43.2253 0.164639 43.7829 1.10081 43.7795L26.26 43.6756C27.1962 43.6721 28.2464 43.111 28.6229 42.4113L29.0962 41.5315L31.4591 37.1463L31.8563 36.4051C32.2329 35.7089 31.8321 35.1512 30.896 35.1547Z" fill="#605DC8"/>
<path d="M2.54861 18.7156C2.23079 18.7156 1.90952 18.629 1.6228 18.4454C0.821352 17.9363 0.5899 16.859 1.09771 16.0554C1.46389 15.4701 2.70061 14.2231 5.50912 11.4659L6.39693 10.5931C8.73218 8.38318 10.5147 6.56817 11.9449 5.10646C15.1679 1.81587 16.7985 0.153263 18.9023 0.222538C20.9888 0.277958 22.4362 1.92325 25.3138 5.19651C26.7267 6.8037 28.4816 8.8023 30.8514 11.2477C30.8652 11.265 30.8825 11.2789 30.8963 11.2962C31.228 11.6634 31.715 12.2003 32.2401 12.7752C33.9743 14.6734 34.8206 15.6086 35.0763 15.9688C35.629 16.7413 35.4494 17.8185 34.679 18.3727C33.9087 18.9234 32.8343 18.7468 32.2816 17.9744C32.0639 17.6869 30.5889 16.0693 29.708 15.1064C29.1863 14.5348 28.6993 14.0014 28.3642 13.6308C25.9495 11.1369 24.1704 9.11057 22.7368 7.4826C21.0233 5.5325 19.4032 3.68977 18.809 3.67245H18.8021C18.1699 3.67245 16.3356 5.54289 14.3976 7.52417C12.9467 9.00666 11.14 10.8494 8.78054 13.0766L7.91001 13.9321C6.74929 15.0717 4.33804 17.4375 3.97877 17.9293C3.65405 18.4454 3.10824 18.7225 2.54515 18.7225L2.54861 18.7156Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.0976 33.2115V26.0588C22.0976 25.4665 21.6174 24.985 21.0267 24.985H15.1955C14.6047 24.985 14.1246 25.4665 14.1246 26.0588V33.2115C14.1246 33.2704 14.1142 33.3293 14.0969 33.3847H22.1252C22.1079 33.3293 22.0976 33.2739 22.0976 33.2115Z" fill="white"/>
<path d="M58.9784 10.0512V32.2205H54.5319V22.7874H45.0353V32.2205H40.5887V10.0512H45.0353V19.1666H54.5319V10.0512H58.9784ZM70.8506 32.5063C69.1567 32.5063 67.6322 32.1358 66.277 31.3947C64.9219 30.6324 63.8526 29.5631 63.0692 28.1868C62.3069 26.8105 61.9258 25.2224 61.9258 23.4226C61.9258 21.6228 62.3175 20.0348 63.1009 18.6585C63.9055 17.2821 64.996 16.2234 66.3723 15.4823C67.7486 14.7201 69.2838 14.3389 70.9777 14.3389C72.6716 14.3389 74.2067 14.7201 75.5831 15.4823C76.9594 16.2234 78.0393 17.2821 78.8227 18.6585C79.6273 20.0348 80.0296 21.6228 80.0296 23.4226C80.0296 25.2224 79.6167 26.8105 78.7909 28.1868C77.9863 29.5631 76.8853 30.6324 75.4878 31.3947C74.1115 32.1358 72.5657 32.5063 70.8506 32.5063ZM70.8506 28.6315C71.6553 28.6315 72.4069 28.4409 73.1057 28.0597C73.8256 27.6574 74.3973 27.0646 74.8208 26.2811C75.2443 25.4977 75.456 24.5449 75.456 23.4226C75.456 21.7499 75.0114 20.4688 74.122 19.5795C73.2539 18.669 72.1846 18.2138 70.9142 18.2138C69.6437 18.2138 68.5744 18.669 67.7063 19.5795C66.8593 20.4688 66.4358 21.7499 66.4358 23.4226C66.4358 25.0954 66.8487 26.387 67.6745 27.2975C68.5215 28.1868 69.5802 28.6315 70.8506 28.6315ZM104.825 14.3707C106.985 14.3707 108.721 15.0377 110.034 16.3717C111.368 17.6844 112.035 19.5266 112.035 21.8981V32.2205H107.589V22.5016C107.589 21.1252 107.239 20.0771 106.54 19.3572C105.842 18.6161 104.889 18.2456 103.682 18.2456C102.475 18.2456 101.512 18.6161 100.792 19.3572C100.093 20.0771 99.7436 21.1252 99.7436 22.5016V32.2205H95.297V22.5016C95.297 21.1252 94.9477 20.0771 94.2489 19.3572C93.5502 18.6161 92.5974 18.2456 91.3904 18.2456C90.1623 18.2456 89.1883 18.6161 88.4684 19.3572C87.7697 20.0771 87.4203 21.1252 87.4203 22.5016V32.2205H82.9737V14.6248H87.4203V16.7528C87.992 16.0117 88.7225 15.4294 89.6118 15.0059C90.5223 14.5824 91.5175 14.3707 92.5974 14.3707C93.9737 14.3707 95.2018 14.6671 96.2816 15.26C97.3615 15.8317 98.1979 16.6575 98.7908 17.7374C99.3625 16.721 100.188 15.9058 101.268 15.2918C102.369 14.6777 103.555 14.3707 104.825 14.3707ZM132.294 23.0415C132.294 23.6767 132.252 24.2484 132.167 24.7566H119.304C119.41 26.027 119.854 27.0222 120.638 27.7421C121.421 28.4621 122.385 28.822 123.528 28.822C125.18 28.822 126.355 28.1127 127.053 26.694H131.849C131.341 28.3879 130.367 29.7854 128.927 30.8865C127.488 31.9664 125.72 32.5063 123.623 32.5063C121.929 32.5063 120.405 32.1358 119.05 31.3947C117.716 30.6324 116.668 29.5631 115.905 28.1868C115.164 26.8105 114.794 25.2224 114.794 23.4226C114.794 21.6017 115.164 20.003 115.905 18.6267C116.646 17.2504 117.684 16.1917 119.018 15.4506C120.352 14.7095 121.887 14.3389 123.623 14.3389C125.296 14.3389 126.789 14.6989 128.102 15.4188C129.436 16.1387 130.462 17.1657 131.182 18.4996C131.924 19.8124 132.294 21.3264 132.294 23.0415ZM127.689 21.771C127.668 20.6276 127.255 19.7172 126.45 19.0396C125.645 18.3408 124.661 17.9915 123.496 17.9915C122.395 17.9915 121.464 18.3303 120.701 19.0078C119.96 19.6642 119.505 20.5853 119.336 21.771H127.689ZM141.955 32.5063C140.516 32.5063 139.224 32.2522 138.081 31.744C136.937 31.2147 136.027 30.5054 135.349 29.616C134.693 28.7267 134.333 27.7421 134.269 26.6623H138.748C138.832 27.3398 139.16 27.9009 139.732 28.3456C140.325 28.7903 141.055 29.0126 141.924 29.0126C142.771 29.0126 143.427 28.8432 143.893 28.5044C144.38 28.1656 144.623 27.7316 144.623 27.2022C144.623 26.6305 144.327 26.207 143.734 25.9318C143.162 25.6353 142.241 25.3177 140.971 24.9789C139.658 24.6613 138.578 24.3331 137.731 23.9943C136.905 23.6555 136.185 23.1368 135.571 22.438C134.979 21.7393 134.682 20.797 134.682 19.6113C134.682 18.6373 134.957 17.748 135.508 16.9434C136.08 16.1387 136.884 15.5035 137.922 15.0377C138.98 14.5719 140.219 14.3389 141.638 14.3389C143.734 14.3389 145.407 14.8683 146.656 15.927C147.905 16.9645 148.593 18.3726 148.721 20.1512H144.465C144.401 19.4525 144.105 18.902 143.575 18.4996C143.067 18.0762 142.379 17.8644 141.511 17.8644C140.706 17.8644 140.081 18.0126 139.637 18.3091C139.213 18.6055 139.002 19.0184 139.002 19.5478C139.002 20.1406 139.298 20.5959 139.891 20.9135C140.484 21.2099 141.405 21.517 142.654 21.8346C143.925 22.1522 144.973 22.4804 145.798 22.8192C146.624 23.1579 147.334 23.6873 147.926 24.4072C148.541 25.106 148.858 26.0376 148.879 27.2022C148.879 28.2186 148.593 29.129 148.022 29.9337C147.471 30.7383 146.667 31.3735 145.608 31.8393C144.57 32.284 143.353 32.5063 141.955 32.5063Z" fill="#605DC8"/>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

@@ -0,0 +1,16 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Homes</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
</head>
<body>
<app-root></app-root>
</body>
</html>
@@ -0,0 +1,10 @@
/*
* Protractor support is deprecated in Angular.
* Protractor is used in this example for compatibility with Angular documentation tools.
*/
import { bootstrapApplication,provideProtractorTestingSupport } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent,
{providers: [provideProtractorTestingSupport()]})
.catch(err => console.error(err));
@@ -0,0 +1,23 @@
/* You can add global styles to this file, and also import other style files */
* {
margin: 0;
padding: 0;
}
body {
font-family: 'Be Vietnam Pro', sans-serif;
}
:root {
--primary-color: #605DC8;
--secondary-color: #8B89E6;
--accent-color: #e8e7fa;
--shadow-color: #E8E8E8;
}
button.primary {
padding: 10px;
border: solid 1px var(--primary-color);
background: var(--primary-color);
color: white;
border-radius: 8px;
}
@@ -0,0 +1,17 @@
{
"description": "Angular - First App - Lesson 02",
"files": [
"!**/*.d.ts",
"!**/*.js",
"!**/*.[1,2].*"
],
"tags": [
[
"first",
"angular",
"app",
"lesson",
"02"
]
]
}
@@ -0,0 +1,11 @@
load("//aio/content/examples:examples.bzl", "docs_example")
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
package(default_visibility = ["//visibility:public"])
docs_example(
name = "first-app-lesson-03",
# This example downloads fonts and images from googleapis.com
test_exec_properties = ENABLE_NETWORK,
test_tags = ["requires-network"],
)
@@ -0,0 +1,31 @@
import { browser, element, by, logging } from 'protractor';
describe('first-app-lesson-03 app', () => {
beforeEach(() => browser.get(''));
it('should display correct title', async () => {
expect(await element.all(by.css('.brand-logo')).get(0).getAttribute('src')).toContain('/assets/logo.svg');
});
it('should have a filter string input', async () => {
expect(await element.all(by.css('input')).get(0).getAttribute('placeholder')).toEqual('Filter by city');
expect(await element.all(by.css('input')).get(0).getAttribute('type')).toEqual('text');
});
it('should have a search button', async () => {
expect(await element.all(by.css('button')).get(0).getText()).toEqual('Search');
});
it('should have a template housing-location component', async () => {
expect(await element.all(by.css('app-housing-location > p')).get(0).getText()).toEqual('housing-location works!');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});
@@ -0,0 +1,6 @@
{
"useCommonBoilerplate": false,
"overrideBoilerplate": [
"src/styles.css"
]
}
@@ -0,0 +1,12 @@
:host {
--content-padding: 10px;
}
header {
display: block;
height: 60px;
padding: var(--content-padding);
box-shadow: 0px 5px 25px var(--shadow-color);
}
.content {
padding: var(--content-padding);
}
@@ -0,0 +1,24 @@
import { Component } from '@angular/core';
import { HomeComponent } from './home/home.component';
@Component({
selector: 'app-root',
standalone: true,
imports: [
HomeComponent,
],
template: `
<main>
<header class="brand-name">
<img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true">
</header>
<section class="content">
<app-home></app-home>
</section>
</main>
`,
styleUrls: ['./app.component.css'],
})
export class AppComponent {
title = 'homes';
}
@@ -0,0 +1,39 @@
.results {
display: grid;
column-gap: 14px;
row-gap: 14px;
grid-template-columns: repeat(3, 1fr);
margin-top: 50px;
}
input[type='text'] {
border: solid 1px var(--primary-color);
padding: 10px;
border-radius: 8px;
margin-right: 4px;
display: inline-block;
width: 30%;
}
button {
padding: 10px;
border: solid 1px var(--primary-color);
background: var(--primary-color);
color: white;
border-radius: 8px;
}
@media (min-width: 500px) and (max-width: 768px) {
.results {
grid-template-columns: repeat(2, 1fr);
}
input[type='text'] {
width: 70%;
}
}
@media (max-width: 499px) {
.results {
grid-template-columns: 1fr;
}
}
@@ -0,0 +1,28 @@
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HousingLocationComponent } from '../housing-location/housing-location.component';
@Component({
selector: 'app-home',
standalone: true,
imports: [
CommonModule,
HousingLocationComponent
],
template: `
<section>
<form>
<input type="text" placeholder="Filter by city">
<button class="primary" type="button">Search</button>
</form>
</section>
<section class="results">
<app-housing-location></app-housing-location>
</section>
`,
styleUrls: ['./home.component.css'],
})
export class HomeComponent {
}
@@ -0,0 +1,31 @@
.listing {
background: var(--accent-color);
border-radius: 30px;
padding-bottom: 30px;
}
.listing-heading {
color: var(--primary-color);
padding: 10px 10px 0 10px;
}
.listing-photo {
height: 250px;
width: 100%;
object-fit: cover;
border-radius: 30px 30px 0 0;
}
.listing-location {
padding: 10px 10px 20px 10px;
}
.listing-location::before {
content: url('/assets/location-pin.svg') / '';
}
section.listing a {
padding-left: 10px;
text-decoration: none;
color: var(--primary-color);
}
section.listing a::after {
content: '\203A';
margin-left: 5px;
}
@@ -0,0 +1,18 @@
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-housing-location',
standalone: true,
imports: [CommonModule],
template: `
<p>
housing-location works!
</p>
`,
styleUrls: ['./housing-location.component.css'],
})
export class HousingLocationComponent {
}
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20pt" height="20pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 11.602c-15.398 0-27.898 12.5-27.898 27.898 0 5 1.3008 9.6992 3.6016 13.801l2.8984 4.1992 21.398 30.898 21.801-31.398 2.1992-3.1992c2.5-4.1992 3.8984-9 3.8984-14.199 0-15.5-12.5-28-27.898-28zm0 35.598c-4.1992 0-7.6992-3.3984-7.6992-7.6992s3.3984-7.6992 7.6992-7.6992 7.6992 3.3984 7.6992 7.6992-3.5 7.6992-7.6992 7.6992z" fill="#605cc8"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

@@ -0,0 +1,7 @@
<svg width="151" height="44" viewBox="0 0 151 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.15532 33.2946C5.25369 33.2946 4.58006 32.5707 4.58006 31.6701V24.0152C4.58006 19.5469 4.35206 20.6276 7.59585 17.4236C21.7317 4.06732 16.2425 4.24744 29.6149 18.054C32.0434 20.7627 31.9985 19.4534 31.9985 23.8316V31.6667C31.9985 32.5707 31.28 33.2912 30.3749 33.2912H6.15532V33.2946Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.896 35.1547L5.73676 35.2586C4.80059 35.2621 3.75042 35.8232 3.37388 36.5229L2.90061 37.4027L0.537726 41.7878L0.140457 42.529C-0.236085 43.2253 0.164639 43.7829 1.10081 43.7795L26.26 43.6756C27.1962 43.6721 28.2464 43.111 28.6229 42.4113L29.0962 41.5315L31.4591 37.1463L31.8563 36.4051C32.2329 35.7089 31.8321 35.1512 30.896 35.1547Z" fill="#605DC8"/>
<path d="M2.54861 18.7156C2.23079 18.7156 1.90952 18.629 1.6228 18.4454C0.821352 17.9363 0.5899 16.859 1.09771 16.0554C1.46389 15.4701 2.70061 14.2231 5.50912 11.4659L6.39693 10.5931C8.73218 8.38318 10.5147 6.56817 11.9449 5.10646C15.1679 1.81587 16.7985 0.153263 18.9023 0.222538C20.9888 0.277958 22.4362 1.92325 25.3138 5.19651C26.7267 6.8037 28.4816 8.8023 30.8514 11.2477C30.8652 11.265 30.8825 11.2789 30.8963 11.2962C31.228 11.6634 31.715 12.2003 32.2401 12.7752C33.9743 14.6734 34.8206 15.6086 35.0763 15.9688C35.629 16.7413 35.4494 17.8185 34.679 18.3727C33.9087 18.9234 32.8343 18.7468 32.2816 17.9744C32.0639 17.6869 30.5889 16.0693 29.708 15.1064C29.1863 14.5348 28.6993 14.0014 28.3642 13.6308C25.9495 11.1369 24.1704 9.11057 22.7368 7.4826C21.0233 5.5325 19.4032 3.68977 18.809 3.67245H18.8021C18.1699 3.67245 16.3356 5.54289 14.3976 7.52417C12.9467 9.00666 11.14 10.8494 8.78054 13.0766L7.91001 13.9321C6.74929 15.0717 4.33804 17.4375 3.97877 17.9293C3.65405 18.4454 3.10824 18.7225 2.54515 18.7225L2.54861 18.7156Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.0976 33.2115V26.0588C22.0976 25.4665 21.6174 24.985 21.0267 24.985H15.1955C14.6047 24.985 14.1246 25.4665 14.1246 26.0588V33.2115C14.1246 33.2704 14.1142 33.3293 14.0969 33.3847H22.1252C22.1079 33.3293 22.0976 33.2739 22.0976 33.2115Z" fill="white"/>
<path d="M58.9784 10.0512V32.2205H54.5319V22.7874H45.0353V32.2205H40.5887V10.0512H45.0353V19.1666H54.5319V10.0512H58.9784ZM70.8506 32.5063C69.1567 32.5063 67.6322 32.1358 66.277 31.3947C64.9219 30.6324 63.8526 29.5631 63.0692 28.1868C62.3069 26.8105 61.9258 25.2224 61.9258 23.4226C61.9258 21.6228 62.3175 20.0348 63.1009 18.6585C63.9055 17.2821 64.996 16.2234 66.3723 15.4823C67.7486 14.7201 69.2838 14.3389 70.9777 14.3389C72.6716 14.3389 74.2067 14.7201 75.5831 15.4823C76.9594 16.2234 78.0393 17.2821 78.8227 18.6585C79.6273 20.0348 80.0296 21.6228 80.0296 23.4226C80.0296 25.2224 79.6167 26.8105 78.7909 28.1868C77.9863 29.5631 76.8853 30.6324 75.4878 31.3947C74.1115 32.1358 72.5657 32.5063 70.8506 32.5063ZM70.8506 28.6315C71.6553 28.6315 72.4069 28.4409 73.1057 28.0597C73.8256 27.6574 74.3973 27.0646 74.8208 26.2811C75.2443 25.4977 75.456 24.5449 75.456 23.4226C75.456 21.7499 75.0114 20.4688 74.122 19.5795C73.2539 18.669 72.1846 18.2138 70.9142 18.2138C69.6437 18.2138 68.5744 18.669 67.7063 19.5795C66.8593 20.4688 66.4358 21.7499 66.4358 23.4226C66.4358 25.0954 66.8487 26.387 67.6745 27.2975C68.5215 28.1868 69.5802 28.6315 70.8506 28.6315ZM104.825 14.3707C106.985 14.3707 108.721 15.0377 110.034 16.3717C111.368 17.6844 112.035 19.5266 112.035 21.8981V32.2205H107.589V22.5016C107.589 21.1252 107.239 20.0771 106.54 19.3572C105.842 18.6161 104.889 18.2456 103.682 18.2456C102.475 18.2456 101.512 18.6161 100.792 19.3572C100.093 20.0771 99.7436 21.1252 99.7436 22.5016V32.2205H95.297V22.5016C95.297 21.1252 94.9477 20.0771 94.2489 19.3572C93.5502 18.6161 92.5974 18.2456 91.3904 18.2456C90.1623 18.2456 89.1883 18.6161 88.4684 19.3572C87.7697 20.0771 87.4203 21.1252 87.4203 22.5016V32.2205H82.9737V14.6248H87.4203V16.7528C87.992 16.0117 88.7225 15.4294 89.6118 15.0059C90.5223 14.5824 91.5175 14.3707 92.5974 14.3707C93.9737 14.3707 95.2018 14.6671 96.2816 15.26C97.3615 15.8317 98.1979 16.6575 98.7908 17.7374C99.3625 16.721 100.188 15.9058 101.268 15.2918C102.369 14.6777 103.555 14.3707 104.825 14.3707ZM132.294 23.0415C132.294 23.6767 132.252 24.2484 132.167 24.7566H119.304C119.41 26.027 119.854 27.0222 120.638 27.7421C121.421 28.4621 122.385 28.822 123.528 28.822C125.18 28.822 126.355 28.1127 127.053 26.694H131.849C131.341 28.3879 130.367 29.7854 128.927 30.8865C127.488 31.9664 125.72 32.5063 123.623 32.5063C121.929 32.5063 120.405 32.1358 119.05 31.3947C117.716 30.6324 116.668 29.5631 115.905 28.1868C115.164 26.8105 114.794 25.2224 114.794 23.4226C114.794 21.6017 115.164 20.003 115.905 18.6267C116.646 17.2504 117.684 16.1917 119.018 15.4506C120.352 14.7095 121.887 14.3389 123.623 14.3389C125.296 14.3389 126.789 14.6989 128.102 15.4188C129.436 16.1387 130.462 17.1657 131.182 18.4996C131.924 19.8124 132.294 21.3264 132.294 23.0415ZM127.689 21.771C127.668 20.6276 127.255 19.7172 126.45 19.0396C125.645 18.3408 124.661 17.9915 123.496 17.9915C122.395 17.9915 121.464 18.3303 120.701 19.0078C119.96 19.6642 119.505 20.5853 119.336 21.771H127.689ZM141.955 32.5063C140.516 32.5063 139.224 32.2522 138.081 31.744C136.937 31.2147 136.027 30.5054 135.349 29.616C134.693 28.7267 134.333 27.7421 134.269 26.6623H138.748C138.832 27.3398 139.16 27.9009 139.732 28.3456C140.325 28.7903 141.055 29.0126 141.924 29.0126C142.771 29.0126 143.427 28.8432 143.893 28.5044C144.38 28.1656 144.623 27.7316 144.623 27.2022C144.623 26.6305 144.327 26.207 143.734 25.9318C143.162 25.6353 142.241 25.3177 140.971 24.9789C139.658 24.6613 138.578 24.3331 137.731 23.9943C136.905 23.6555 136.185 23.1368 135.571 22.438C134.979 21.7393 134.682 20.797 134.682 19.6113C134.682 18.6373 134.957 17.748 135.508 16.9434C136.08 16.1387 136.884 15.5035 137.922 15.0377C138.98 14.5719 140.219 14.3389 141.638 14.3389C143.734 14.3389 145.407 14.8683 146.656 15.927C147.905 16.9645 148.593 18.3726 148.721 20.1512H144.465C144.401 19.4525 144.105 18.902 143.575 18.4996C143.067 18.0762 142.379 17.8644 141.511 17.8644C140.706 17.8644 140.081 18.0126 139.637 18.3091C139.213 18.6055 139.002 19.0184 139.002 19.5478C139.002 20.1406 139.298 20.5959 139.891 20.9135C140.484 21.2099 141.405 21.517 142.654 21.8346C143.925 22.1522 144.973 22.4804 145.798 22.8192C146.624 23.1579 147.334 23.6873 147.926 24.4072C148.541 25.106 148.858 26.0376 148.879 27.2022C148.879 28.2186 148.593 29.129 148.022 29.9337C147.471 30.7383 146.667 31.3735 145.608 31.8393C144.57 32.284 143.353 32.5063 141.955 32.5063Z" fill="#605DC8"/>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

@@ -0,0 +1,16 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Homes</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
</head>
<body>
<app-root></app-root>
</body>
</html>
@@ -0,0 +1,10 @@
/*
* Protractor support is deprecated in Angular.
* Protractor is used in this example for compatibility with Angular documentation tools.
*/
import { bootstrapApplication,provideProtractorTestingSupport } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent,
{providers: [provideProtractorTestingSupport()]})
.catch(err => console.error(err));
@@ -0,0 +1,23 @@
/* You can add global styles to this file, and also import other style files */
* {
margin: 0;
padding: 0;
}
body {
font-family: 'Be Vietnam Pro', sans-serif;
}
:root {
--primary-color: #605DC8;
--secondary-color: #8B89E6;
--accent-color: #e8e7fa;
--shadow-color: #E8E8E8;
}
button.primary {
padding: 10px;
border: solid 1px var(--primary-color);
background: var(--primary-color);
color: white;
border-radius: 8px;
}
@@ -0,0 +1,17 @@
{
"description": "Angular - First App - Lesson 03",
"files": [
"!**/*.d.ts",
"!**/*.js",
"!**/*.[1,2].*"
],
"tags": [
[
"first",
"angular",
"app",
"lesson",
"03"
]
]
}
@@ -0,0 +1,11 @@
load("//aio/content/examples:examples.bzl", "docs_example")
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
package(default_visibility = ["//visibility:public"])
docs_example(
name = "first-app-lesson-04",
# This example downloads fonts and images from googleapis.com
test_exec_properties = ENABLE_NETWORK,
test_tags = ["requires-network"],
)
@@ -0,0 +1,31 @@
import { browser, element, by, logging } from 'protractor';
describe('first-app-lesson-04 app', () => {
beforeEach(() => browser.get(''));
it('should display correct title', async () => {
expect(await element.all(by.css('.brand-logo')).get(0).getAttribute('src')).toContain('/assets/logo.svg');
});
it('should have a filter string input', async () => {
expect(await element.all(by.css('input')).get(0).getAttribute('placeholder')).toEqual('Filter by city');
expect(await element.all(by.css('input')).get(0).getAttribute('type')).toEqual('text');
});
it('should have a search button', async () => {
expect(await element.all(by.css('button')).get(0).getText()).toEqual('Search');
});
it('should have a template housing-location component', async () => {
expect(await element.all(by.css('app-housing-location > p')).get(0).getText()).toEqual('housing-location works!');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});
@@ -0,0 +1,6 @@
{
"useCommonBoilerplate": false,
"overrideBoilerplate": [
"src/styles.css"
]
}
@@ -0,0 +1,12 @@
:host {
--content-padding: 10px;
}
header {
display: block;
height: 60px;
padding: var(--content-padding);
box-shadow: 0px 5px 25px var(--shadow-color);
}
.content {
padding: var(--content-padding);
}
@@ -0,0 +1,24 @@
import { Component } from '@angular/core';
import { HomeComponent } from './home/home.component';
@Component({
selector: 'app-root',
standalone: true,
imports: [
HomeComponent,
],
template: `
<main>
<header class="brand-name">
<img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true">
</header>
<section class="content">
<app-home></app-home>
</section>
</main>
`,
styleUrls: ['./app.component.css'],
})
export class AppComponent {
title = 'homes';
}
@@ -0,0 +1,39 @@
.results {
display: grid;
column-gap: 14px;
row-gap: 14px;
grid-template-columns: repeat(3, 1fr);
margin-top: 50px;
}
input[type='text'] {
border: solid 1px var(--primary-color);
padding: 10px;
border-radius: 8px;
margin-right: 4px;
display: inline-block;
width: 30%;
}
button {
padding: 10px;
border: solid 1px var(--primary-color);
background: var(--primary-color);
color: white;
border-radius: 8px;
}
@media (min-width: 500px) and (max-width: 768px) {
.results {
grid-template-columns: repeat(2, 1fr);
}
input[type='text'] {
width: 70%;
}
}
@media (max-width: 499px) {
.results {
grid-template-columns: 1fr;
}
}
@@ -0,0 +1,44 @@
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HousingLocationComponent } from '../housing-location/housing-location.component';
import { HousingLocation } from '../housinglocation';
@Component({
selector: 'app-home',
standalone: true,
imports: [
CommonModule,
HousingLocationComponent
],
template: `
<section>
<form>
<input type="text" placeholder="Filter by city">
<button class="primary" type="button">Search</button>
</form>
</section>
<section class="results">
<app-housing-location></app-housing-location>
</section>
`,
styleUrls: ['./home.component.css'],
})
export class HomeComponent {
private img_server = "https://storage.googleapis.com/angular-tutorial-assets/first-app/";
onlyHouse: HousingLocation;
constructor() {
this.onlyHouse = {
id: 9999,
name: 'Test Home',
city: 'Test city',
state: 'ST',
photo: this.img_server + 'house_0.png',
availableUnits: 99,
wifi: true,
laundry: false,
};
}
}
@@ -0,0 +1,31 @@
.listing {
background: var(--accent-color);
border-radius: 30px;
padding-bottom: 30px;
}
.listing-heading {
color: var(--primary-color);
padding: 10px 10px 0 10px;
}
.listing-photo {
height: 250px;
width: 100%;
object-fit: cover;
border-radius: 30px 30px 0 0;
}
.listing-location {
padding: 10px 10px 20px 10px;
}
.listing-location::before {
content: url('/assets/location-pin.svg') / '';
}
section.listing a {
padding-left: 10px;
text-decoration: none;
color: var(--primary-color);
}
section.listing a::after {
content: '\203A';
margin-left: 5px;
}
@@ -0,0 +1,18 @@
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-housing-location',
standalone: true,
imports: [CommonModule],
template: `
<p>
housing-location works!
</p>
`,
styleUrls: ['./housing-location.component.css'],
})
export class HousingLocationComponent {
}
@@ -0,0 +1,10 @@
export interface HousingLocation {
id: number;
name: string;
city: string;
state: string;
photo: string;
availableUnits: number;
wifi: boolean;
laundry: boolean;
}
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20pt" height="20pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 11.602c-15.398 0-27.898 12.5-27.898 27.898 0 5 1.3008 9.6992 3.6016 13.801l2.8984 4.1992 21.398 30.898 21.801-31.398 2.1992-3.1992c2.5-4.1992 3.8984-9 3.8984-14.199 0-15.5-12.5-28-27.898-28zm0 35.598c-4.1992 0-7.6992-3.3984-7.6992-7.6992s3.3984-7.6992 7.6992-7.6992 7.6992 3.3984 7.6992 7.6992-3.5 7.6992-7.6992 7.6992z" fill="#605cc8"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

@@ -0,0 +1,7 @@
<svg width="151" height="44" viewBox="0 0 151 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.15532 33.2946C5.25369 33.2946 4.58006 32.5707 4.58006 31.6701V24.0152C4.58006 19.5469 4.35206 20.6276 7.59585 17.4236C21.7317 4.06732 16.2425 4.24744 29.6149 18.054C32.0434 20.7627 31.9985 19.4534 31.9985 23.8316V31.6667C31.9985 32.5707 31.28 33.2912 30.3749 33.2912H6.15532V33.2946Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.896 35.1547L5.73676 35.2586C4.80059 35.2621 3.75042 35.8232 3.37388 36.5229L2.90061 37.4027L0.537726 41.7878L0.140457 42.529C-0.236085 43.2253 0.164639 43.7829 1.10081 43.7795L26.26 43.6756C27.1962 43.6721 28.2464 43.111 28.6229 42.4113L29.0962 41.5315L31.4591 37.1463L31.8563 36.4051C32.2329 35.7089 31.8321 35.1512 30.896 35.1547Z" fill="#605DC8"/>
<path d="M2.54861 18.7156C2.23079 18.7156 1.90952 18.629 1.6228 18.4454C0.821352 17.9363 0.5899 16.859 1.09771 16.0554C1.46389 15.4701 2.70061 14.2231 5.50912 11.4659L6.39693 10.5931C8.73218 8.38318 10.5147 6.56817 11.9449 5.10646C15.1679 1.81587 16.7985 0.153263 18.9023 0.222538C20.9888 0.277958 22.4362 1.92325 25.3138 5.19651C26.7267 6.8037 28.4816 8.8023 30.8514 11.2477C30.8652 11.265 30.8825 11.2789 30.8963 11.2962C31.228 11.6634 31.715 12.2003 32.2401 12.7752C33.9743 14.6734 34.8206 15.6086 35.0763 15.9688C35.629 16.7413 35.4494 17.8185 34.679 18.3727C33.9087 18.9234 32.8343 18.7468 32.2816 17.9744C32.0639 17.6869 30.5889 16.0693 29.708 15.1064C29.1863 14.5348 28.6993 14.0014 28.3642 13.6308C25.9495 11.1369 24.1704 9.11057 22.7368 7.4826C21.0233 5.5325 19.4032 3.68977 18.809 3.67245H18.8021C18.1699 3.67245 16.3356 5.54289 14.3976 7.52417C12.9467 9.00666 11.14 10.8494 8.78054 13.0766L7.91001 13.9321C6.74929 15.0717 4.33804 17.4375 3.97877 17.9293C3.65405 18.4454 3.10824 18.7225 2.54515 18.7225L2.54861 18.7156Z" fill="#605DC8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.0976 33.2115V26.0588C22.0976 25.4665 21.6174 24.985 21.0267 24.985H15.1955C14.6047 24.985 14.1246 25.4665 14.1246 26.0588V33.2115C14.1246 33.2704 14.1142 33.3293 14.0969 33.3847H22.1252C22.1079 33.3293 22.0976 33.2739 22.0976 33.2115Z" fill="white"/>
<path d="M58.9784 10.0512V32.2205H54.5319V22.7874H45.0353V32.2205H40.5887V10.0512H45.0353V19.1666H54.5319V10.0512H58.9784ZM70.8506 32.5063C69.1567 32.5063 67.6322 32.1358 66.277 31.3947C64.9219 30.6324 63.8526 29.5631 63.0692 28.1868C62.3069 26.8105 61.9258 25.2224 61.9258 23.4226C61.9258 21.6228 62.3175 20.0348 63.1009 18.6585C63.9055 17.2821 64.996 16.2234 66.3723 15.4823C67.7486 14.7201 69.2838 14.3389 70.9777 14.3389C72.6716 14.3389 74.2067 14.7201 75.5831 15.4823C76.9594 16.2234 78.0393 17.2821 78.8227 18.6585C79.6273 20.0348 80.0296 21.6228 80.0296 23.4226C80.0296 25.2224 79.6167 26.8105 78.7909 28.1868C77.9863 29.5631 76.8853 30.6324 75.4878 31.3947C74.1115 32.1358 72.5657 32.5063 70.8506 32.5063ZM70.8506 28.6315C71.6553 28.6315 72.4069 28.4409 73.1057 28.0597C73.8256 27.6574 74.3973 27.0646 74.8208 26.2811C75.2443 25.4977 75.456 24.5449 75.456 23.4226C75.456 21.7499 75.0114 20.4688 74.122 19.5795C73.2539 18.669 72.1846 18.2138 70.9142 18.2138C69.6437 18.2138 68.5744 18.669 67.7063 19.5795C66.8593 20.4688 66.4358 21.7499 66.4358 23.4226C66.4358 25.0954 66.8487 26.387 67.6745 27.2975C68.5215 28.1868 69.5802 28.6315 70.8506 28.6315ZM104.825 14.3707C106.985 14.3707 108.721 15.0377 110.034 16.3717C111.368 17.6844 112.035 19.5266 112.035 21.8981V32.2205H107.589V22.5016C107.589 21.1252 107.239 20.0771 106.54 19.3572C105.842 18.6161 104.889 18.2456 103.682 18.2456C102.475 18.2456 101.512 18.6161 100.792 19.3572C100.093 20.0771 99.7436 21.1252 99.7436 22.5016V32.2205H95.297V22.5016C95.297 21.1252 94.9477 20.0771 94.2489 19.3572C93.5502 18.6161 92.5974 18.2456 91.3904 18.2456C90.1623 18.2456 89.1883 18.6161 88.4684 19.3572C87.7697 20.0771 87.4203 21.1252 87.4203 22.5016V32.2205H82.9737V14.6248H87.4203V16.7528C87.992 16.0117 88.7225 15.4294 89.6118 15.0059C90.5223 14.5824 91.5175 14.3707 92.5974 14.3707C93.9737 14.3707 95.2018 14.6671 96.2816 15.26C97.3615 15.8317 98.1979 16.6575 98.7908 17.7374C99.3625 16.721 100.188 15.9058 101.268 15.2918C102.369 14.6777 103.555 14.3707 104.825 14.3707ZM132.294 23.0415C132.294 23.6767 132.252 24.2484 132.167 24.7566H119.304C119.41 26.027 119.854 27.0222 120.638 27.7421C121.421 28.4621 122.385 28.822 123.528 28.822C125.18 28.822 126.355 28.1127 127.053 26.694H131.849C131.341 28.3879 130.367 29.7854 128.927 30.8865C127.488 31.9664 125.72 32.5063 123.623 32.5063C121.929 32.5063 120.405 32.1358 119.05 31.3947C117.716 30.6324 116.668 29.5631 115.905 28.1868C115.164 26.8105 114.794 25.2224 114.794 23.4226C114.794 21.6017 115.164 20.003 115.905 18.6267C116.646 17.2504 117.684 16.1917 119.018 15.4506C120.352 14.7095 121.887 14.3389 123.623 14.3389C125.296 14.3389 126.789 14.6989 128.102 15.4188C129.436 16.1387 130.462 17.1657 131.182 18.4996C131.924 19.8124 132.294 21.3264 132.294 23.0415ZM127.689 21.771C127.668 20.6276 127.255 19.7172 126.45 19.0396C125.645 18.3408 124.661 17.9915 123.496 17.9915C122.395 17.9915 121.464 18.3303 120.701 19.0078C119.96 19.6642 119.505 20.5853 119.336 21.771H127.689ZM141.955 32.5063C140.516 32.5063 139.224 32.2522 138.081 31.744C136.937 31.2147 136.027 30.5054 135.349 29.616C134.693 28.7267 134.333 27.7421 134.269 26.6623H138.748C138.832 27.3398 139.16 27.9009 139.732 28.3456C140.325 28.7903 141.055 29.0126 141.924 29.0126C142.771 29.0126 143.427 28.8432 143.893 28.5044C144.38 28.1656 144.623 27.7316 144.623 27.2022C144.623 26.6305 144.327 26.207 143.734 25.9318C143.162 25.6353 142.241 25.3177 140.971 24.9789C139.658 24.6613 138.578 24.3331 137.731 23.9943C136.905 23.6555 136.185 23.1368 135.571 22.438C134.979 21.7393 134.682 20.797 134.682 19.6113C134.682 18.6373 134.957 17.748 135.508 16.9434C136.08 16.1387 136.884 15.5035 137.922 15.0377C138.98 14.5719 140.219 14.3389 141.638 14.3389C143.734 14.3389 145.407 14.8683 146.656 15.927C147.905 16.9645 148.593 18.3726 148.721 20.1512H144.465C144.401 19.4525 144.105 18.902 143.575 18.4996C143.067 18.0762 142.379 17.8644 141.511 17.8644C140.706 17.8644 140.081 18.0126 139.637 18.3091C139.213 18.6055 139.002 19.0184 139.002 19.5478C139.002 20.1406 139.298 20.5959 139.891 20.9135C140.484 21.2099 141.405 21.517 142.654 21.8346C143.925 22.1522 144.973 22.4804 145.798 22.8192C146.624 23.1579 147.334 23.6873 147.926 24.4072C148.541 25.106 148.858 26.0376 148.879 27.2022C148.879 28.2186 148.593 29.129 148.022 29.9337C147.471 30.7383 146.667 31.3735 145.608 31.8393C144.57 32.284 143.353 32.5063 141.955 32.5063Z" fill="#605DC8"/>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

Some files were not shown because too many files have changed in this diff Show More