From bd1cdac54d2923c51fc9f0d2df93b4ad03eedd49 Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Thu, 22 Jan 2026 03:31:18 +0100 Subject: [PATCH] docs(docs-infra): new homepage --- adev/BUILD.bazel | 25 + adev/package.json | 20 +- .../search-dialog/search-dialog.component.ts | 3 - .../text-field/text-field.component.ts | 4 +- adev/shared-docs/styles/_colors.scss | 76 +- .../code-highlighting/code-highlighter.ts | 42 + .../home/components/code-block/code-block.ts | 44 + .../control-flow/control-flow-example.html | 27 + .../control-flow/control-flow-example.scss | 80 ++ .../control-flow/control-flow-example.ts | 50 + .../deferrable-views-example.html | 38 + .../deferrable-views-example.scss | 82 ++ .../deferrable-views-example.ts | 44 + .../home/components/home-editor.component.ts | 65 -- .../hydration-example/hydration-example.html | 216 ++++ .../hydration-example/hydration-example.scss | 746 ++++++++++++ .../hydration-example/hydration-example.ts | 243 ++++ .../components/signals-demo/signals-demo.html | 51 + .../components/signals-demo/signals-demo.scss | 125 ++ .../components/signals-demo/signals-demo.ts | 69 ++ .../src/app/features/home/home.component.html | 703 ++++-------- .../src/app/features/home/home.component.scss | 1020 ++++++++++++----- adev/src/app/features/home/home.component.ts | 31 +- .../assets/images/home/angular-logo-dark.svg | 1 + .../assets/images/home/angular-logo-light.svg | 1 + adev/src/assets/images/home/editor-dark.png | Bin 0 -> 99330 bytes adev/src/assets/images/home/editor-light.png | Bin 0 -> 98579 bytes pnpm-lock.yaml | 54 + 28 files changed, 2999 insertions(+), 861 deletions(-) create mode 100644 adev/src/app/features/home/code-highlighting/code-highlighter.ts create mode 100644 adev/src/app/features/home/components/code-block/code-block.ts create mode 100644 adev/src/app/features/home/components/control-flow/control-flow-example.html create mode 100644 adev/src/app/features/home/components/control-flow/control-flow-example.scss create mode 100644 adev/src/app/features/home/components/control-flow/control-flow-example.ts create mode 100644 adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.html create mode 100644 adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.scss create mode 100644 adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.ts delete mode 100644 adev/src/app/features/home/components/home-editor.component.ts create mode 100644 adev/src/app/features/home/components/hydration-example/hydration-example.html create mode 100644 adev/src/app/features/home/components/hydration-example/hydration-example.scss create mode 100644 adev/src/app/features/home/components/hydration-example/hydration-example.ts create mode 100644 adev/src/app/features/home/components/signals-demo/signals-demo.html create mode 100644 adev/src/app/features/home/components/signals-demo/signals-demo.scss create mode 100644 adev/src/app/features/home/components/signals-demo/signals-demo.ts create mode 100644 adev/src/assets/images/home/angular-logo-dark.svg create mode 100644 adev/src/assets/images/home/angular-logo-light.svg create mode 100644 adev/src/assets/images/home/editor-dark.png create mode 100644 adev/src/assets/images/home/editor-light.png diff --git a/adev/BUILD.bazel b/adev/BUILD.bazel index efabb43082b..a0f5864bbd7 100644 --- a/adev/BUILD.bazel +++ b/adev/BUILD.bazel @@ -60,6 +60,7 @@ APPLICATION_DEPS = [ ":node_modules/@lezer/highlight", ":node_modules/@lezer/javascript", ":node_modules/@stackblitz/sdk", + ":node_modules/shiki", ":node_modules/@typescript/vfs", ":node_modules/@webcontainer/api", ":node_modules/@xterm/addon-fit", @@ -91,6 +92,30 @@ APPLICATION_DEPS = [ ":node_modules/crelt", ":node_modules/style-mod", ":node_modules/w3c-keyname", + # + ":node_modules/@shikijs/themes", + ":node_modules/@shikijs/langs", + ":node_modules/@shikijs/engine-oniguruma", + ":node_modules/@shikijs/core", + ":node_modules/@shikijs/engine-javascript", + ":node_modules/@shikijs/types", + ":node_modules/@shikijs/vscode-textmate", + ":node_modules/hast-util-to-html", + # ":node_modules/oniguruma-to-es", + ":node_modules/ccount", + ":node_modules/comma-separated-tokens", + ":node_modules/hast-util-whitespace", + ":node_modules/html-void-elements", + # ":node_modules/oniguruma-parser", + ":node_modules/property-information", + # ":node_modules/regex-recursion", + # ":node_modules/regex", + ":node_modules/space-separated-tokens", + ":node_modules/stringify-entities", + ":node_modules/zwitch", + ":node_modules/character-entities-html4", + ":node_modules/character-entities-legacy", + # ":node_modules/regex-utilities", ] TEST_FILES = APPLICATION_FILES + glob(["src/app/**/*.spec.ts"]) diff --git a/adev/package.json b/adev/package.json index 1e6064aac0d..96d8e15084b 100644 --- a/adev/package.json +++ b/adev/package.json @@ -40,6 +40,13 @@ "@lezer/lr": "1.4.8", "@lezer/sass": "1.1.0", "@marijn/find-cluster-break": "1.0.2", + "@shikijs/core": "^3.21.0", + "@shikijs/engine-javascript": "^3.21.0", + "@shikijs/engine-oniguruma": "^3.21.0", + "@shikijs/langs": "^3.21.0", + "@shikijs/themes": "^3.21.0", + "@shikijs/types": "^3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", "@stackblitz/sdk": "1.11.0", "@types/dom-navigation": "1.0.6", "@types/jasmine": "6.0.0", @@ -51,10 +58,17 @@ "@xterm/xterm": "6.0.0", "algoliasearch": "5.48.0", "angular-split": "20.0.0", + "ccount": "^2.0.1", + "character-entities-html4": "^2.1.0", + "character-entities-legacy": "^3.0.0", + "comma-separated-tokens": "^2.0.3", "crelt": "1.0.6", "diff": "8.0.3", "emoji-regex": "10.6.0", "fflate": "0.8.2", + "hast-util-to-html": "^9.0.5", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", "jsdom": "28.0.0", "jasmine-core": "6.0.0", "karma-chrome-launcher": "3.2.0", @@ -69,13 +83,17 @@ "preact": "10.28.3", "preact-render-to-string": "6.6.5", "prettier": "3.8.1", + "property-information": "^7.1.0", "rxjs": "7.8.2", "shiki": "3.22.0", + "space-separated-tokens": "^2.0.2", + "stringify-entities": "^4.0.4", "style-mod": "4.1.3", "tinyglobby": "0.2.15", "tslib": "2.8.1", "typescript": "6.0.0-beta", - "w3c-keyname": "2.2.8" + "w3c-keyname": "2.2.8", + "zwitch": "^2.0.4" }, "devDependencies": { "autoprefixer": "10.4.24", diff --git a/adev/shared-docs/components/search-dialog/search-dialog.component.ts b/adev/shared-docs/components/search-dialog/search-dialog.component.ts index 688d3fa7e96..dedff0ed2b4 100644 --- a/adev/shared-docs/components/search-dialog/search-dialog.component.ts +++ b/adev/shared-docs/components/search-dialog/search-dialog.component.ts @@ -95,9 +95,6 @@ export class SearchDialog { if (!this.dialog().nativeElement.open) { this.dialog().nativeElement.showModal?.(); } - // We want to select the pre-existing text on opening - // In order to change the search input with minimal user interaction. - this.searchForm().focusBoundControl(); }, }); diff --git a/adev/shared-docs/components/text-field/text-field.component.ts b/adev/shared-docs/components/text-field/text-field.component.ts index 66ae3ea48fc..abffbfc8253 100644 --- a/adev/shared-docs/components/text-field/text-field.component.ts +++ b/adev/shared-docs/components/text-field/text-field.component.ts @@ -28,10 +28,10 @@ import {IconComponent} from '../icon/icon.component'; class: 'docs-form-element', }, }) -export class TextField implements FormValueControl { +export class TextField implements FormValueControl { readonly input = viewChild.required>('inputRef'); readonly name = input(''); - readonly value = model(null); + readonly value = model(''); readonly placeholder = input(null); readonly disabled = model(false); readonly hideIcon = input(false); diff --git a/adev/shared-docs/styles/_colors.scss b/adev/shared-docs/styles/_colors.scss index 74e603e447d..6621806b77a 100644 --- a/adev/shared-docs/styles/_colors.scss +++ b/adev/shared-docs/styles/_colors.scss @@ -5,6 +5,19 @@ // as well as better human-readability // --> https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch +// Grays +$gray-1000: oklch(16.93% 0.004 285.95); // #0f0f11 +$gray-900: oklch(19.37% 0.006 300.98); // #151417 +$gray-800: oklch(25.16% 0.008 308.11); // #232125 +$gray-700: oklch(36.98% 0.014 302.71); // #413e46 +$gray-600: oklch(44% 0.019 306.08); // #55505b +$gray-500: oklch(54.84% 0.023 304.99); // #746e7c +$gray-400: oklch(70.9% 0.015 304.04); // #a39fa9 +$gray-300: oklch(84.01% 0.009 308.34); // #ccc9cf +$gray-200: oklch(91.75% 0.004 301.42); // #e4e3e6 +$gray-100: oklch(97.12% 0.002 325.59); // #f6f5f6 +$gray-50: oklch(98.81% 0 0); // #fbfbfb + @mixin root-definitions() { // PRIMITIVES // Colors @@ -47,19 +60,6 @@ --symbolic-brown: oklch(49.06% 0.128 46.41); // #994411 --symbolic-lime: oklch(70.33% 0.2078857836035299 135.66843631046476); // #5dba00 - // Grays - --gray-1000: oklch(16.93% 0.004 285.95); // #0f0f11 - --gray-900: oklch(19.37% 0.006 300.98); // #151417 - --gray-800: oklch(25.16% 0.008 308.11); // #232125 - --gray-700: oklch(36.98% 0.014 302.71); // #413e46 - --gray-600: oklch(44% 0.019 306.08); // #55505b - --gray-500: oklch(54.84% 0.023 304.99); // #746e7c - --gray-400: oklch(70.9% 0.015 304.04); // #a39fa9 - --gray-300: oklch(84.01% 0.009 308.34); // #ccc9cf - --gray-200: oklch(91.75% 0.004 301.42); // #e4e3e6 - --gray-100: oklch(97.12% 0.002 325.59); // #f6f5f6 - --gray-50: oklch(98.81% 0 0); // #fbfbfb - // GRADIENTS --red-to-pink-horizontal-gradient: linear-gradient( 90deg, @@ -124,7 +124,7 @@ --pink-to-white-horizontal-gradient: linear-gradient( 90deg, var(--vivid-pink) 0%, - var(--gray-200) 60% + #{$gray-200} 60% ); --light-pink-to-light-purple-horizontal-gradient: linear-gradient( @@ -166,7 +166,7 @@ --black-to-gray-vertical-gradient: linear-gradient( 0deg, var(--primary-contrast) 0%, - var(--gray-400) 100% + #{$gray-400} 100% ); --red-to-pink-vertical-gradient: linear-gradient(0deg, var(--hot-red) 0%, var(--vivid-pink) 100%); @@ -217,35 +217,35 @@ // LIGHT MODE is default // contrast - light mode --full-contrast: black; - --primary-contrast: var(--gray-900); - --secondary-contrast: var(--gray-800); - --tertiary-contrast: var(--gray-700); - --quaternary-contrast: var(--gray-500); - --quinary-contrast: var(--gray-300); - --senary-contrast: var(--gray-200); - --septenary-contrast: var(--gray-100); - --octonary-contrast: var(--gray-50); + --primary-contrast: #{$gray-900}; + --secondary-contrast: #{$gray-800}; + --tertiary-contrast: #{$gray-700}; + --quaternary-contrast: #{$gray-500}; + --quinary-contrast: #{$gray-300}; + --senary-contrast: #{$gray-200}; + --septenary-contrast: #{$gray-100}; + --octonary-contrast: #{$gray-50}; --page-background: white; // Home page // for the "unfilled" portion of the word that hasn't // been highlighted by the gradient - --gray-unfilled: var(--gray-400); - --webgl-page-background: var(var(--page-background)) --webgl-gray-unfilled: var(--gray-400); + --gray-unfilled: #{$gray-400}; + --webgl-page-background: var(var(--page-background)) --webgl-gray-unfilled: #{$gray-400}; } @mixin dark-mode-definitions() { // Contrasts --full-contrast: white; - --primary-contrast: var(--gray-50); - --secondary-contrast: var(--gray-300); - --tertiary-contrast: var(--gray-300); - --quaternary-contrast: var(--gray-400); - --quinary-contrast: var(--gray-500); - --senary-contrast: var(--gray-700); - --septenary-contrast: var(--gray-800); - --octonary-contrast: var(--gray-900); - --page-background: var(--gray-1000); + --primary-contrast: #{$gray-50}; + --secondary-contrast: #{$gray-300}; + --tertiary-contrast: #{$gray-300}; + --quaternary-contrast: #{$gray-400}; + --quinary-contrast: #{$gray-500}; + --senary-contrast: #{$gray-700}; + --septenary-contrast: #{$gray-800}; + --octonary-contrast: #{$gray-900}; + --page-background: #{$gray-1000}; --bright-blue: color-mix(in srgb, oklch(51.01% 0.274 263.83), var(--full-contrast) 60%); --indigo-blue: color-mix(in srgb, oklch(51.64% 0.229 281.65), var(--full-contrast) 70%); @@ -260,7 +260,7 @@ --orange-red: color-mix(in srgb, oklch(63.32% 0.24 31.68), var(--full-contrast) 60%); --super-green: color-mix(in srgb, oklch(79.12% 0.257 155.13), var(--full-contrast) 70%); --light-vivid-pink-to-light-electric-violet-horizontal-gradient: - linear-gradient(hsl(from var(--gray-1000) h s l / 0.9), hsl(from var(--gray-1000) h s l / 0.9)), + linear-gradient(hsl(from #{$gray-1000} h s l / 0.9), hsl(from #{$gray-1000} h s l / 0.9)), linear-gradient( hsl(from var(--full-contrast) h s l / 0.2), hsl(from var(--full-contrast) h s l / 0.2) @@ -319,9 +319,9 @@ ); // Home page - dark mode - --gray-unfilled: var(--gray-700); - --webgl-page-background: var(--gray-1000); - --webgl-gray-unfilled: var(--gray-700); + --gray-unfilled: #{$gray-700}; + --webgl-page-background: #{$gray-1000}; + --webgl-gray-unfilled: #{$gray-700}; .docs-toggle { input { diff --git a/adev/src/app/features/home/code-highlighting/code-highlighter.ts b/adev/src/app/features/home/code-highlighting/code-highlighter.ts new file mode 100644 index 00000000000..d2ddbe29210 --- /dev/null +++ b/adev/src/app/features/home/code-highlighting/code-highlighter.ts @@ -0,0 +1,42 @@ +/*! + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {Injectable, OnDestroy} from '@angular/core'; +import angularHtml from '@shikijs/langs/angular-html'; +import angularTs from '@shikijs/langs/angular-ts'; +import githubDark from '@shikijs/themes/github-dark'; +import githubLight from '@shikijs/themes/github-light'; +import {CodeToHastOptions, createHighlighterCoreSync, HighlighterCore} from 'shiki/core'; +import {createOnigurumaEngine} from 'shiki/engine/oniguruma'; + +@Injectable({providedIn: 'root'}) +export class CodeHighligher implements OnDestroy { + private cachedHighligher: HighlighterCore | undefined; + + async codeToHtml(code: string, options: CodeToHastOptions): Promise { + const highlighter = await this.getHighlighter(); + return highlighter.codeToHtml(code, options); + } + + ngOnDestroy(): void { + this.cachedHighligher?.dispose(); + } + + private async getHighlighter() { + if (!this.cachedHighligher) { + const engine = await createOnigurumaEngine(import('shiki/wasm')); + this.cachedHighligher = createHighlighterCoreSync({ + themes: [githubLight, githubDark], + langs: [angularTs, angularHtml], + engine, + }); + } + + return this.cachedHighligher; + } +} diff --git a/adev/src/app/features/home/components/code-block/code-block.ts b/adev/src/app/features/home/components/code-block/code-block.ts new file mode 100644 index 00000000000..0a3f49a3e41 --- /dev/null +++ b/adev/src/app/features/home/components/code-block/code-block.ts @@ -0,0 +1,44 @@ +/*! + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {AsyncPipe} from '@angular/common'; +import {ChangeDetectionStrategy, Component, computed, inject, input} from '@angular/core'; +import {DomSanitizer} from '@angular/platform-browser'; +import {ThemeManager} from '../../../../core/services/theme-manager.service'; +import {CodeHighligher} from '../../code-highlighting/code-highlighter'; + +@Component({ + selector: 'adev-code-block', + template: `
`, + imports: [AsyncPipe], + styles: ` + ::ng-deep pre { + margin: 0; + } + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CodeBlock { + codeHighlighter = inject(CodeHighligher); + code = input.required(); + language = input<'angular-html' | 'angular-ts'>('angular-ts'); + sanitizer = inject(DomSanitizer); + theme = inject(ThemeManager); + + highlightedCode = computed(() => { + return this.codeHighlighter + .codeToHtml(this.code(), { + cssVariablePrefix: '--shiki-', + lang: this.language(), + theme: this.theme.theme() === 'light' ? 'github-light' : 'github-dark', + }) + .then((hightlightedHtml) => { + return this.sanitizer.bypassSecurityTrustHtml(hightlightedHtml); + }); + }); +} diff --git a/adev/src/app/features/home/components/control-flow/control-flow-example.html b/adev/src/app/features/home/components/control-flow/control-flow-example.html new file mode 100644 index 00000000000..0222cc26e28 --- /dev/null +++ b/adev/src/app/features/home/components/control-flow/control-flow-example.html @@ -0,0 +1,27 @@ +
+
+
Control Flow
+
+ Angular's new control flow syntax makes templates easier to write and understand. +
+ + +
+ +
+
+
+ my-template.html + +
+ + +
+
+
diff --git a/adev/src/app/features/home/components/control-flow/control-flow-example.scss b/adev/src/app/features/home/components/control-flow/control-flow-example.scss new file mode 100644 index 00000000000..93d1f488f91 --- /dev/null +++ b/adev/src/app/features/home/components/control-flow/control-flow-example.scss @@ -0,0 +1,80 @@ +@use '@angular/docs/styles/media-queries' as mq; + +.two-column-step { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; + text-align: left; + width: 100%; + max-width: 1200px; + margin: 0 auto; + box-sizing: border-box; + background-color: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + padding: 2rem; + + @include mq.for-tablet-down { + grid-template-columns: 1fr; + gap: 2rem; + padding: 1.5rem; + } +} + +.step-description { + display: flex; + flex-direction: column; + gap: 1.5rem; + + .header { + font-size: 1.5rem; + font-weight: 500; + } + + .description { + font-size: 1.1rem; + line-height: 1.6; + color: var(--secondary-contrast); + } +} + +.step-code { + display: flex; + flex-direction: column; + gap: 1.5rem; + + .code-block { + background: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + font-size: 0.9rem; + + .code-header { + display: flex; + padding: 0.75rem; + background: var(--subtle-purple); + border-radius: 0.25rem 0.25rem 0 0; + transition: background 0.3s ease; + + & > span { + background-image: var(--purple-to-blue-horizontal-gradient); + background-clip: text; + color: transparent; + font-size: 0.875rem; + font-style: normal; + font-weight: 400; + line-height: 1.4rem; + letter-spacing: -0.00875rem; + margin: 0; + word-wrap: break-word; + width: fit-content; + } + } + + pre { + font-family: 'JetBrains Mono', monospace; + margin: 0; + color: #a9b7c6; + } + } +} diff --git a/adev/src/app/features/home/components/control-flow/control-flow-example.ts b/adev/src/app/features/home/components/control-flow/control-flow-example.ts new file mode 100644 index 00000000000..76f517dee4c --- /dev/null +++ b/adev/src/app/features/home/components/control-flow/control-flow-example.ts @@ -0,0 +1,50 @@ +/*! + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {RouterLink} from '@angular/router'; +import {CodeBlock} from '../code-block/code-block'; + +@Component({ + selector: 'adev-control-flow-example', + imports: [RouterLink, CodeBlock], + templateUrl: './control-flow-example.html', + styleUrls: ['./control-flow-example.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ControlFlowExample { + Example = example; +} + +const example = ` +@if(meal() === 'burger') { +

You selected a burger!

+} @else if(lang meal === 'pizza') { +

You selected a pizza!

+} @else { +

Please select a meal.

+} + +@for(item of ShoppingList; track $index) { +

{{ item }}

+} + +@switch(user.role) { + @case('user') { +

Welcome, {{user.name}}

+ } + @case('moderator') + @case('admin') { +

Welcome

+ } + + @default { +

Welcome, guest!

+ } +} +`.trim(); diff --git a/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.html b/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.html new file mode 100644 index 00000000000..819ce423bbe --- /dev/null +++ b/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.html @@ -0,0 +1,38 @@ +
+
+
Deferrable Views
+
+ Deferrable views (also known as @defer blocks) reduce the initial bundle size + of your application by deferring the loading of code that is not strictly necessary for the + initial rendering of a page. +
+ + +
+ +
+
+
+ data-visualization-page.html + +
+ + +
+ +
+
+ data-visualization-page.ts + +
+ + +
+
+
diff --git a/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.scss b/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.scss new file mode 100644 index 00000000000..2a4efe85517 --- /dev/null +++ b/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.scss @@ -0,0 +1,82 @@ +@use '@angular/docs/styles/media-queries' as mq; + +.two-column-step { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; + text-align: left; + width: 100%; + max-width: 1200px; + margin: 0 auto; + box-sizing: border-box; + background-color: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + padding: 2rem; + + @include mq.for-tablet-down { + grid-template-columns: 1fr; + gap: 2rem; + padding: 1.5rem; + } +} + +.step-description { + display: flex; + flex-direction: column; + gap: 1.5rem; + + .header { + font-size: 1.5rem; + font-weight: 500; + } + + .description { + font-size: 1.1rem; + line-height: 1.6; + color: var(--secondary-contrast); + } +} + +.step-code { + display: flex; + flex-direction: column; + gap: 1.5rem; + min-width: 0; + + .code-block { + background: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + font-size: 0.9rem; + overflow: auto; + + .code-header { + display: flex; + padding: 0.75rem; + background: var(--subtle-purple); + border-radius: 0.25rem 0.25rem 0 0; + transition: background 0.3s ease; + + & > span { + background-image: var(--purple-to-blue-horizontal-gradient); + background-clip: text; + color: transparent; + font-size: 0.875rem; + font-style: normal; + font-weight: 400; + line-height: 1.4rem; + letter-spacing: -0.00875rem; + margin: 0; + word-wrap: break-word; + width: fit-content; + } + } + + pre { + font-family: 'JetBrains Mono', monospace; + margin: 0; + color: #a9b7c6; + } + } +} diff --git a/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.ts b/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.ts new file mode 100644 index 00000000000..0a6739d872e --- /dev/null +++ b/adev/src/app/features/home/components/deferrable-views-example/deferrable-views-example.ts @@ -0,0 +1,44 @@ +/*! + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {RouterLink} from '@angular/router'; +import {CodeBlock} from '../code-block/code-block'; + +@Component({ + selector: 'adev-defer-example', + imports: [RouterLink, CodeBlock], + templateUrl: './deferrable-views-example.html', + styleUrls: ['./deferrable-views-example.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DeferrableViewsExample { + exampleHtml = exampleHtml; + exampleTs = exampleTs; +} + +const exampleTs = ` +@Component({ + // importing the component that will be loaded lazily + imports: [DataVisualization], +}) +export class DataVisualizationPage { + dataService = inject(DataService); + dataSet = this.dataService.getData(); +} +`.trim(); + +const exampleHtml = ` +
+

Data visualization

+ @defer { + + + } +
+`.trim(); diff --git a/adev/src/app/features/home/components/home-editor.component.ts b/adev/src/app/features/home/components/home-editor.component.ts deleted file mode 100644 index 889229d2d96..00000000000 --- a/adev/src/app/features/home/components/home-editor.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -/*! - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { - ChangeDetectionStrategy, - ChangeDetectorRef, - Component, - DestroyRef, - EnvironmentInjector, - inject, - input, -} from '@angular/core'; -import {takeUntilDestroyed} from '@angular/core/rxjs-interop'; -import {forkJoin, switchMap} from 'rxjs'; - -import { - EmbeddedEditor, - injectEmbeddedTutorialManager, - injectNodeRuntimeSandbox, -} from '../../../editor'; - -@Component({ - selector: 'adev-code-editor', - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [EmbeddedEditor], - template: ``, -}) -export class CodeEditorComponent { - private readonly cdRef = inject(ChangeDetectorRef); - private readonly environmentInjector = inject(EnvironmentInjector); - private readonly destroyRef = inject(DestroyRef); - - readonly tutorialFiles = input.required(); - - constructor() { - this.loadEmbeddedEditor(); - } - - private loadEmbeddedEditor() { - // If using `async-await`, `this` will be captured until the function is executed - // and completed, which can lead to a memory leak if the user navigates away from - // this component to another page. - forkJoin([ - injectNodeRuntimeSandbox(this.environmentInjector), - injectEmbeddedTutorialManager(this.environmentInjector), - ]) - .pipe( - switchMap(([nodeRuntimeSandbox, embeddedTutorialManager]) => - embeddedTutorialManager - .fetchAndSetTutorialFiles(this.tutorialFiles()) - .then(() => nodeRuntimeSandbox), - ), - takeUntilDestroyed(this.destroyRef), - ) - .subscribe((nodeRuntimeSandbox) => { - this.cdRef.markForCheck(); - nodeRuntimeSandbox.init(); - }); - } -} diff --git a/adev/src/app/features/home/components/hydration-example/hydration-example.html b/adev/src/app/features/home/components/hydration-example/hydration-example.html new file mode 100644 index 00000000000..24af1eda1a1 --- /dev/null +++ b/adev/src/app/features/home/components/hydration-example/hydration-example.html @@ -0,0 +1,216 @@ +
Hydration
+
+ Hydration is the process that restores the server-side rendered application on the client + +

+ This demo showcases Angular's hydration strategies, allowing you to simulate network latency and + observe how different components hydrate based on their configured triggers. +

+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+
+
+
+ lock + angular.dev/hydration-strategies +
+
+ + +
+ @if (currentState() === 'Server-Side Rendering...') { +
+
+
+
+
+

Generating SSR Markup...

+
+ } + +
+
+
+

Component Strategies

+

Mixing eager and deferred hydration triggers.

+
+
+
Main App
+
{{ progress() }}%
+
+
+ +
+ @for (card of [card1(), card2(), card3(), card4()]; track $index) { +
+
+
+ @if (card.isHydrating) { +
+ } @else { + water_drop + } +
+ @if (card.clickCount > 0) { +
+ CLICKS: {{ card.clickCount }} +
+ } +
+ +
+
{{ card.title }}
+

{{ card.description }}

+
+ + + + @if (card.syntax) { +
+ {{ card.syntax }} +
+ } +
+ } +
+
+
+ + +
+
+
+
+
+
+ + +
+
+
Eager Hydration
+

+ Essential components (like navigation or top-fold content) hydrate as soon as the main + application bundle is ready. +

+
+
+
Incremental Hydration
+

+ Use hydration triggers like on interaction or on timer to delay + JS execution for non-critical elements. +

+
+
+
Event Replay
+

+ User clicks are never lost. Angular records events during the "Static" phase and + re-dispatches them once hydrated. +

+
+
+
+ +
diff --git a/adev/src/app/features/home/components/hydration-example/hydration-example.scss b/adev/src/app/features/home/components/hydration-example/hydration-example.scss new file mode 100644 index 00000000000..79c4b6cb77f --- /dev/null +++ b/adev/src/app/features/home/components/hydration-example/hydration-example.scss @@ -0,0 +1,746 @@ +@use '@angular/docs/styles/media-queries' as mq; + +:host { + display: flex; + flex-direction: column; + gap: 1rem; + padding: 2rem 1rem; + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + --angular-gradient: linear-gradient(135deg, var(--orange-red) 0%, var(--electric-violet) 100%); +} + +.header { + font-size: 1.5rem; + font-weight: 500; +} + +.description { + font-size: 1.1rem; + line-height: 1.6; + color: var(--secondary-contrast); +} + +.demo-container { + color: var(--primary-contrast); + font-family: + system-ui, + -apple-system, + sans-serif; +} +.max-width-wrapper { + max-width: 1152px; + margin: 0 auto; +} +.font-mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} +.font-tabular { + font-variant-numeric: tabular-nums; +} +.transition-all { + transition: all 0.3s ease-out; +} + +/* Animations */ +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +@keyframes pulse { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.5; + } +} +@keyframes slide-up { + from { + opacity: 0; + transform: translateY(2rem); + } + to { + opacity: 1; + transform: translateY(0); + } +} +@keyframes zoom-in { + from { + opacity: 0; + transform: scale(0.9); + } + to { + opacity: 1; + transform: scale(1); + } +} +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.animate { + &-spin { + animation: spin 1s linear infinite; + } + &-slide-up { + animation: slide-up 0.4s ease-out forwards; + } + &-zoom { + animation: zoom-in 0.2s ease-out forwards; + } + &-fade { + animation: fade-in 0.5s ease-out forwards; + } +} + +/* Layout */ +.status { + &-header { + display: flex; + justify-content: flex-end; + margin-bottom: 2rem; + } + &-pill { + display: flex; + align-items: center; + gap: 1rem; + background: var(--page-background); + border: 1px solid var(--senary-contrast); + padding: 0.5rem 1rem; + border-radius: 1rem; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + } + &-indicator { + display: flex; + align-items: center; + gap: 0.5rem; + } + &-text { + font-size: 11px; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--tertiary-contrast); + } +} + +.dot { + width: 10px; + height: 10px; + border-radius: 50%; + + &.pulse { + animation: pulse 2s infinite; + } + &.bg-zinc-300 { + background-color: var(--quinary-contrast); + } + &.bg-orange-500 { + background-color: var(--symbolic-yellow); + } + &.bg-blue-500 { + background-color: var(--bright-blue); + } + &.bg-emerald-500 { + background-color: var(--super-green); + } +} +.divider { + height: 1rem; + width: 1px; + background-color: var(--senary-contrast); +} +.progress-percentage { + font-size: 11px; + font-weight: bold; + color: var(--electric-violet); +} + +.main-layout { + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + @media (min-width: 1024px) { + grid-template-columns: repeat(12, 1fr); + } +} +@media (min-width: 1024px) { + .sidebar { + grid-column: span 4; + } + .simulator-stage { + grid-column: span 8; + } +} + +/* Sidebar & Config */ +.sidebar { + display: flex; + flex-direction: column; + gap: 2rem; +} + +.card { + background: var(--page-background); + border: 1px solid var(--senary-contrast); + border-radius: 1.5rem; + padding: 1.5rem; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.sidebar-title { + font-size: 12px; + font-weight: bold; + color: var(--quaternary-contrast); + text-transform: uppercase; + letter-spacing: 0.1em; + margin-bottom: 1.5rem; + margin-top: 0; + display: flex; + align-items: center; + gap: 0.5rem; +} +.config-controls { + display: flex; + flex-direction: column; + gap: 1.5rem; +} +.label-row { + display: flex; + justify-content: space-between; + margin-bottom: 0.75rem; + + label { + font-size: 14px; + font-weight: bold; + } +} +.latency-value { + font-size: 14px; + color: var(--electric-violet); + font-weight: bold; +} +.range-input { + width: 100%; + height: 6px; + background: var(--septenary-contrast); + border-radius: 8px; + appearance: none; + cursor: pointer; + + &::-webkit-slider-thumb { + appearance: none; + width: 18px; + height: 18px; + background: var(--electric-violet); + border: 4px solid var(--page-background); + border-radius: 50%; + box-shadow: 0 4px 6px color-mix(in srgb, var(--electric-violet), transparent 80%); + } +} +.btn-reset { + width: 100%; + padding: 1rem; + background: var(--primary-contrast); + color: var(--page-background); + border: none; + border-radius: 1rem; + font-weight: bold; + font-size: 14px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + transition: transform 0.1s; + + &:hover { + background: var(--secondary-contrast); + } + &:active { + transform: scale(0.98); + } + &[disabled] { + pointer-events: none; + opacity: 0.5; + } +} + +/* Terminal */ +.terminal { + background: var(--primary-contrast); + border-radius: 1.5rem; + padding: 1.5rem; + color: var(--page-background); + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1); + position: relative; + + &-title { + font-size: 10px; + font-weight: bold; + color: var(--quinary-contrast); + text-transform: uppercase; + letter-spacing: 0.2em; + margin-bottom: 1rem; + margin-top: 0; + } + + &-body { + min-height: 160px; + max-height: 220px; + overflow-y: auto; + font-size: 11px; + display: flex; + flex-direction: column; + gap: 0.5rem; + } +} + +.log { + &-entry { + display: flex; + align-items: center; + gap: 0.75rem; + } + &-index { + color: var(--senary-contrast); + } + &-tag { + color: var(--senary-contrast); + } + &-msg { + color: var(--septenary-contrast); + } + &-placeholder { + color: var(--tertiary-contrast); + font-style: italic; + } +} + +/* Browser Mock */ +.browser { + &-window { + background: var(--page-background); + border: 1px solid var(--senary-contrast); + border-radius: 2.5rem; + overflow: hidden; + display: flex; + flex-direction: column; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.05); + min-height: 520px; + } + + &-header { + background: var(--octonary-contrast); + border-bottom: 1px solid var(--senary-contrast); + padding: 1rem 1.5rem; + display: flex; + align-items: center; + gap: 1rem; + } +} +.window-controls { + display: flex; + gap: 6px; +} +.dot-win { + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--quinary-contrast); +} +.address-bar { + flex: 1; + background: var(--page-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.75rem; + padding: 0.375rem 1rem; + font-size: 11px; + color: var(--quaternary-contrast); + display: flex; + align-items: center; + gap: 0.5rem; + + docs-icon { + font-size: 12px; + } +} + +.viewport { + padding: 2rem; + flex: 1; + position: relative; + + &-flex { + display: flex; + flex-direction: column; + height: 100%; + } + &-header { + display: flex; + margin-bottom: 1rem; + width: 100%; + } + &-title { + font-size: 24px; + font-weight: 900; + letter-spacing: -0.025em; + margin-bottom: 0.25rem; + margin-top: 0; + } + &-subtitle { + font-size: 12px; + color: var(--quaternary-contrast); + font-weight: 500; + } + &-stats { + text-align: right; + margin-left: auto; + } +} + +.ssr { + &-overlay { + position: absolute; + inset: 0; + background: color-mix(in srgb, var(--page-background), transparent 5%); + z-index: 50; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + &-spinner { + position: relative; + width: 48px; + height: 48px; + margin-bottom: 1rem; + } + &-title { + font-weight: bold; + color: var(--primary-contrast); + letter-spacing: -0.01em; + } +} + +.spinner { + &-outer { + position: absolute; + inset: 0; + background: var(--angular-gradient); + border-radius: 0.75rem; + opacity: 0.2; + animation: spin 1s linear infinite; + } + &-inner { + position: absolute; + inset: 8px; + background: var(--angular-gradient); + border-radius: 0.5rem; + animation: spin 1.5s linear infinite; + } +} + +.stats { + &-label { + font-size: 9px; + font-weight: bold; + text-transform: uppercase; + color: var(--quaternary-contrast); + letter-spacing: 0.1em; + margin-bottom: 0.25rem; + } + &-value { + font-size: 32px; + font-weight: 900; + letter-spacing: -0.05em; + } +} + +.component-grid { + display: grid; + grid-template-columns: 1fr; + gap: 1rem; + flex: 1; + + @media (min-width: 640px) { + grid-template-columns: 1fr 1fr; + } +} + +/* Card States */ +.component-card { + position: relative; + padding: 1.5rem; + border: 1px solid var(--senary-contrast); + border-radius: 1rem; + display: flex; + flex-direction: column; + justify-content: space-between; + user-select: none; + overflow: hidden; + + &.interactive { + cursor: pointer; + + &:hover { + border-color: var(--electric-violet); + box-shadow: 0 20px 25px -5px color-mix(in srgb, var(--electric-violet), transparent 95%); + } + } + + &.static { + background: color-mix(in srgb, var(--octonary-contrast), transparent 50%); + border-color: transparent; + } + + &.active-card { + box-shadow: inset 0 2px 4px color-mix(in srgb, var(--electric-violet), transparent 95%); + overflow: hidden; + } + + &.dashed-border { + border-style: dashed; + border-color: var(--quinary-contrast); + } +} + +.card { + &-top { + display: flex; + justify-content: space-between; + align-items: flex-start; + } + &-body { + margin-top: 1rem; + } + &-title { + font-size: 18px; + font-weight: 900; + margin-bottom: 0.125rem; + } + &-desc { + font-size: 10px; + color: var(--quaternary-contrast); + font-weight: 500; + line-height: 1.25; + } + &-footer { + margin-top: 1rem; + } +} + +.icon { + &-box { + width: 48px; + height: 48px; + border-radius: 1rem; + display: flex; + align-items: center; + justify-content: center; + } + &-hydrated { + background: var(--septenary-contrast); + + .component-card.interactive:hover & { + background: var(--electric-violet); + color: var(--page-background); + } + } + &-static { + background: var(--octonary-contrast); + color: var(--senary-contrast); + } +} + +.loading-spinner { + width: 24px; + height: 24px; + border: 2px solid var(--senary-contrast); + border-top-color: var(--electric-violet); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +.click { + &-badge { + background: var(--electric-violet); + color: var(--page-background); + padding: 0.25rem 0.625rem; + border-radius: 9999px; + font-size: 10px; + font-weight: 900; + letter-spacing: 0.05em; + display: flex; + align-items: center; + gap: 4px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + } +} + +.badge-label { + opacity: 0.7; +} + +.tag { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 9px; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.1em; + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; + width: fit-content; + + &-dot { + width: 6px; + height: 6px; + border-radius: 50%; + } + + &-deferred { + color: var(--symbolic-yellow); + background: color-mix(in srgb, var(--symbolic-yellow), transparent 90%); + + .tag-dot { + background: var(--symbolic-yellow); + } + } + + &-hydrated { + color: var(--super-green); + background: color-mix(in srgb, var(--super-green), transparent 90%); + + .tag-dot { + background: var(--super-green); + } + } +} + +.syntax { + &-badge { + position: absolute; + top: 0; + right: 0; + padding: 0.25rem 0.75rem; + font-size: 8px; + font-weight: bold; + border-left: 1px solid; + border-bottom: 1px solid; + border-bottom-left-radius: 0.75rem; + } + &-active { + background: color-mix(in srgb, var(--electric-violet), transparent 95%); + color: var(--electric-violet); + border-color: color-mix(in srgb, var(--electric-violet), transparent 90%); + } + &-inactive { + background: var(--septenary-contrast); + color: var(--quaternary-contrast); + border-color: var(--senary-contrast); + } +} + +/* Progress bar */ +.lifecycle-progress-bar { + height: 6px; + background: var(--septenary-contrast); + width: 100%; + position: relative; +} +.progress-fill { + position: absolute; + left: 0; + top: 0; + height: 100%; + background: var(--angular-gradient); + box-shadow: 0 0 10px color-mix(in srgb, var(--electric-violet), transparent 70%); +} + +/* Explainer */ +.explainer { + &-grid { + margin-top: 1rem; + display: grid; + grid-template-columns: 1fr; + gap: 3rem; + border-top: 1px solid var(--senary-contrast); + padding-top: 3rem; + margin-bottom: 1rem; + + @media (min-width: 768px) { + grid-template-columns: repeat(3, 1fr); + } + } + &-item { + display: flex; + flex-direction: column; + gap: 1rem; + } + &-title { + font-weight: bold; + display: flex; + align-items: center; + gap: 0.75rem; + font-size: 16px; + margin: 0; + + span { + width: 8px; + height: 8px; + border-radius: 50%; + } + } + &-text { + font-size: 14px; + color: var(--quaternary-contrast); + line-height: 1.6; + } +} + +.dot { + &-red { + background: var(--orange-red); + } + &-violet { + background: var(--electric-violet); + } + &-green { + background: var(--super-green); + } +} + +code { + background: var(--septenary-contrast); + padding: 0 4px; + border-radius: 4px; + color: var(--electric-violet); + font-family: inherit; +} + +/* Scrollbar */ +.custom-scrollbar { + &::-webkit-scrollbar { + width: 4px; + } + &::-webkit-scrollbar-track { + background: transparent; + } + &::-webkit-scrollbar-thumb { + background: var(--tertiary-contrast); + border-radius: 10px; + } +} diff --git a/adev/src/app/features/home/components/hydration-example/hydration-example.ts b/adev/src/app/features/home/components/hydration-example/hydration-example.ts new file mode 100644 index 00000000000..0398ecb9f85 --- /dev/null +++ b/adev/src/app/features/home/components/hydration-example/hydration-example.ts @@ -0,0 +1,243 @@ +/*! + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {ChangeDetectionStrategy, Component, signal, WritableSignal} from '@angular/core'; +import {IconComponent} from '@angular/docs'; +import {RouterLink} from '@angular/router'; + +interface SimulationCard { + id: number; + clickCount: number; + penddingEvents: number; + isHydrated: boolean; + isHydrating: boolean; + strategy?: 'on-interaction' | 'on-timer'; + syntax?: string; + title: string; + description: string; +} + +@Component({ + selector: 'adev-hydration-example', + imports: [RouterLink, IconComponent], + templateUrl: './hydration-example.html', + styleUrls: ['./hydration-example.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HydrationExample { + latency = signal(500); + progress = signal(0); + currentState = signal< + 'Server-Side Rendering...' | 'Initial Paint' | 'Loading Bundle' | 'Hydrated' + >('Server-Side Rendering...'); + isInteractive = signal(false); + eventQueue = signal([]); + isSimulationRunning = signal(false); + + card1 = signal({ + id: 1, + clickCount: 0, + penddingEvents: 0, + isHydrated: false, + isHydrating: true, + title: 'Eager Module', + description: 'Part of initial bundle.', + }); + card2 = signal({ + id: 2, + clickCount: 0, + penddingEvents: 0, + isHydrated: false, + isHydrating: true, + title: 'Eager Module', + description: 'Part of initial bundle.', + }); + card3 = signal({ + id: 3, + clickCount: 0, + penddingEvents: 0, + isHydrated: false, + isHydrating: false, + strategy: 'on-interaction', + syntax: '@defer (hydrate on interaction)', + title: 'Interaction Module', + description: 'Logic loads on click.', + }); + card4 = signal({ + id: 4, + clickCount: 0, + penddingEvents: 0, + isHydrated: false, + isHydrating: false, + strategy: 'on-timer', + syntax: '@defer (hydrate on timer(2s))', + title: 'Timer Module', + description: 'Hydrates after 2s delay.', + }); + + constructor() { + this.startLifecycle(); + } + + protected async startLifecycle() { + if (this.isSimulationRunning()) return; + this.isSimulationRunning.set(true); + this.currentState.set('Server-Side Rendering...'); + this.progress.set(0); + this.isInteractive.set(false); + this.eventQueue.set([]); + + const resetCard = (card: SimulationCard): SimulationCard => ({ + ...card, + clickCount: 0, + penddingEvents: 0, + isHydrated: false, + isHydrating: card.strategy ? false : true, + }); + + this.card1.update(resetCard); + this.card2.update(resetCard); + this.card3.update(resetCard); + this.card4.update(resetCard); + + await this.wait(1000); + + this.currentState.set('Initial Paint'); + this.progress.set(20); + + await this.wait(300); + + this.currentState.set('Loading Bundle'); + let currentP = 20; + const interval = setInterval( + () => { + currentP += 1; + if (currentP <= 100) this.progress.set(currentP); + if (currentP >= 100) clearInterval(interval); + }, + Math.max(this.latency() / 80, 5), + ); + + await this.wait(this.latency()); + + this.currentState.set('Hydrated'); + this.isInteractive.set(true); + this.progress.set(100); + + const hydrateCard = (card: SimulationCard): SimulationCard => + !card.strategy ? {...card, isHydrated: true, isHydrating: false} : card; + + this.card1.update(hydrateCard); + this.card2.update(hydrateCard); + + const pendingEvents = this.card1().penddingEvents + this.card2().penddingEvents; + await this.wait(800); + if (pendingEvents > 0) { + this.logEvent(`Replaying ${pendingEvents} queued event(s)...`); + this.processPendingEvents(this.card1); + this.processPendingEvents(this.card2); + } + + await this.triggerTimerHydration(4); + this.isSimulationRunning.set(false); + } + + protected async triggerTimerHydration(id: number) { + const cardSignal = this.getCardSignal(id); + await this.wait(2000); + + if (!this.card4().isHydrated) { + this.logEvent(`Timer fired: Hydrating Module#4`); + cardSignal.update((c) => ({...c, isHydrating: true})); + await this.wait(800); + this.card4.update((c) => ({...c, isHydrating: false, isHydrated: true})); + + if (cardSignal().penddingEvents > 0) { + this.logEvent(`Replaying ${cardSignal().penddingEvents} queued event(s)...`); + await this.wait(600); + this.processPendingEvents(cardSignal); + } + } + } + + protected async handleCardClick(id: number) { + const card = this.getCardSignal(id); + if (card().isHydrated) { + this.processAction(card); + return; + } + + if (card().strategy === 'on-interaction' && !card().isHydrated) { + if (!card().isHydrating) { + this.logEvent(`Manual trigger: Hydrating Module#${card().id}`); + this.logEvent(`Queued click for Module#${card().id}`); + card.update((c) => ({...c, isHydrating: true, penddingEvents: 1})); + await this.wait(600); + if (card().penddingEvents > 0) { + this.logEvent(`Replaying ${card().penddingEvents} queued event(s)...`); + } + this.processPendingEvents(card); + card.update((c) => ({...c, isHydrating: false, isHydrated: true})); + return; + } + } + + if (!card().isHydrated) { + this.queueClick(card); + return; + } + } + + protected updateLatency(ev: any) { + this.latency.set(parseInt(ev.target.value)); + } + + protected resetSimulation() { + this.startLifecycle(); + } + + private async queueClick(card: WritableSignal) { + card.update((c) => ({...c, penddingEvents: c.penddingEvents + 1})); + this.logEvent(`Queued click for Module#${card().id}`); + } + + private processAction(card: WritableSignal) { + card.update((c) => ({...c, clickCount: c.clickCount + 1})); + } + + private processPendingEvents(card: WritableSignal) { + const pending = card().penddingEvents; + card.update((c) => ({...c, penddingEvents: 0})); + for (let i = 0; i < pending; i++) { + this.processAction(card); + } + } + + private logEvent(msg: string) { + this.eventQueue.update((q) => [...q, msg]); + } + + private wait(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + + private getCardSignal(id: number): WritableSignal { + switch (id) { + case 1: + return this.card1; + case 2: + return this.card2; + case 3: + return this.card3; + case 4: + return this.card4; + default: + throw new Error('Invalid card id'); + } + } +} diff --git a/adev/src/app/features/home/components/signals-demo/signals-demo.html b/adev/src/app/features/home/components/signals-demo/signals-demo.html new file mode 100644 index 00000000000..1822e94423f --- /dev/null +++ b/adev/src/app/features/home/components/signals-demo/signals-demo.html @@ -0,0 +1,51 @@ +
+
+
Signals: Fine-Grained Reactivity
+
+ Type in the search box to filter the list. A + computed signal automatically recalculates the + filteredItems whenever the searchTerm signal changes. +
+ +
+ +
+ @for (item of filteredItems(); track item) { +
{{ item }}
+ } +
+
+ + +
+ +
+
+
+ component.ts + +
+ + +
+ +
+
+ component.html + +
+ +
+
+
diff --git a/adev/src/app/features/home/components/signals-demo/signals-demo.scss b/adev/src/app/features/home/components/signals-demo/signals-demo.scss new file mode 100644 index 00000000000..75797e807f6 --- /dev/null +++ b/adev/src/app/features/home/components/signals-demo/signals-demo.scss @@ -0,0 +1,125 @@ +@use '@angular/docs/styles/media-queries' as mq; + +.two-column-step { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; + text-align: left; + width: 100%; + max-width: 1200px; + margin: 0 auto; + box-sizing: border-box; + background-color: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + padding: 2rem; + + @include mq.for-tablet-down { + grid-template-columns: 1fr; + gap: 2rem; + padding: 1.5rem; + } +} + +.step-description { + display: flex; + flex-direction: column; + gap: 1.5rem; + + .header { + font-size: 1.5rem; + font-weight: 500; + } + + .description { + font-size: 1.1rem; + line-height: 1.6; + color: var(--secondary-contrast); + } + + .demo-display { + display: flex; + flex-direction: column; + gap: 1rem; + height: 250px; + margin-bottom: 2rem; + + .demo-input { + width: 100%; + padding: 1rem; + border-radius: 0.5rem; + border: 1px solid var(--senary-contrast); + background: var(--septenary-contrast); + color: var(--primary-contrast); + font-size: 1rem; + box-sizing: border-box; + + &:focus { + outline: 2px solid var(--primary-color); + border-color: transparent; + } + } + + .demo-list { + display: flex; + flex: 1; + flex-direction: column; + gap: 0.25rem; + padding-right: 0.5rem; + border-radius: 0.5rem; + overflow-y: auto; + border: 1px solid var(--senary-contrast); + background: var(--septenary-contrast); + color: var(--primary-contrast); + + .demo-item { + padding: 0.25rem 1rem; + color: var(--secondary-contrast); + border-radius: 0.5rem; + transition: background 0.2s; + margin: 0.2rem; + + &:hover { + background: var(--senary-contrast); + } + } + } + } +} + +.step-code { + display: flex; + flex-direction: column; + gap: 1.5rem; + min-width: 0; + + .code-block { + background: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + font-size: 0.9rem; + overflow: auto; + + .code-header { + display: flex; + padding: 0.75rem; + background: var(--subtle-purple); + border-radius: 0.25rem 0.25rem 0 0; + transition: background 0.3s ease; + + & > span { + background-image: var(--purple-to-blue-horizontal-gradient); + background-clip: text; + color: transparent; + font-size: 0.875rem; + font-style: normal; + font-weight: 400; + line-height: 1.4rem; + letter-spacing: -0.00875rem; + margin: 0; + word-wrap: break-word; + width: fit-content; + } + } + } +} diff --git a/adev/src/app/features/home/components/signals-demo/signals-demo.ts b/adev/src/app/features/home/components/signals-demo/signals-demo.ts new file mode 100644 index 00000000000..18f9837991b --- /dev/null +++ b/adev/src/app/features/home/components/signals-demo/signals-demo.ts @@ -0,0 +1,69 @@ +/*! + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {ChangeDetectionStrategy, Component, computed, signal} from '@angular/core'; +import {RouterLink} from '@angular/router'; +import {CodeBlock} from '../code-block/code-block'; + +@Component({ + selector: 'adev-signals-demo', + imports: [RouterLink, CodeBlock], + templateUrl: './signals-demo.html', + styleUrls: ['./signals-demo.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SignalsDemo { + tsExample = tsExample; + htmlExample = htmlExample; + + items = signal([ + 'Apple', + 'Apricot', + 'Avocado', + 'Banana', + 'Blueberry', + 'Cherry', + 'Date', + 'Dragonfruit', + ]); + searchTerm = signal(''); + + // A computed signal that derives the filtered list. + // It automatically re-runs when a dependency changes. + filteredItems = computed(() => + this.items().filter((item) => item.toLowerCase().includes(this.searchTerm().toLowerCase())), + ); + + onSearch(event: Event) { + this.searchTerm.set((event.target as HTMLInputElement).value); + } +} + +const tsExample = ` +// Source signals for state. +items = signal(['Apple', 'Banana', /*...*/ ]); +searchTerm = signal(''); +// A computed signal that derives the filtered list. +// It automatically re-runs when a dependency changes. +filteredItems = computed(() => + this.items.filter(item => + item.toLowerCase().includes ( + this.searchTerm().toLowerCase() + ) + ) +) ; +`.trim(); + +const htmlExample = ` + +
    + @for (item of filteredItems (); track item) { +
  • {{ item }}
  • + } +
+`.trim(); diff --git a/adev/src/app/features/home/home.component.html b/adev/src/app/features/home/home.component.html index f13d163ce06..7504075a8f8 100644 --- a/adev/src/app/features/home/home.component.html +++ b/adev/src/app/features/home/home.component.html @@ -1,489 +1,242 @@
-
- @if (!isUwu) { - -
- - - - - - - - - - - - - - - -

The framework for building scalable web apps with confidence

-
- } @else { - -
- Angular logo -
- } +
+
- -
-

Productivity meets scalability

-
-
- - - - - - - - - - -

AI-forward

-

Resources and integrations to supercharge your development with AI

-
-
- - - -

Opinionated & versatile

-

Organized yet modular thanks to Angular components and dependency injection

-
-
- - - -

Reactive

-

Fast state updates with fine-grained reactivity based on Angular Signals

-
-
- - - -

Fully featured

-

- Everything works together with Angular's first-party modules for forms, routing, and more -

-
-
-
- - - -
-
-
-

When performance matters

-

- Trusted by millions to build fast, reliable applications that scale with the size of your - team -

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @if (!isUwu) { +
+

Productivity
Meets scalability

+

The framework for building scalable web apps with confidence

+
+ } @else { + +
+ Angular logo +
+ } + +
- +
+

Features that actually
help you solve problems

-
-
+ +
+

Enabling you to build
smarter and faster

+ +
+ +
+
+
+
+

Where performance matters

+

+ Trusted by millions to build fast, reliable applications that scale with the size of your + team +

+ +
+
+
+ +
+
+

What to learn more about Angular?

+
+
+ + +
+ +
+
+
+

Want to learn more about Angular ?

+
diff --git a/adev/src/app/features/home/home.component.scss b/adev/src/app/features/home/home.component.scss index 251fb66778c..c3415485b83 100644 --- a/adev/src/app/features/home/home.component.scss +++ b/adev/src/app/features/home/home.component.scss @@ -1,116 +1,216 @@ @use '@angular/docs/styles/media-queries' as mq; +@mixin background-pattern { + pointer-events: none; + position: absolute; + height: 100%; + mask-image: var(--pattern-url); + mask-size: 22px 22px; + mask-repeat: repeat; +} + :host { width: 100%; position: relative; display: block; + + --card-background: var(--page-background); + --pattern-url: url("data:image/svg+xml,"); } -.banners-layer { - z-index: 10; +.adev-banner-container { + margin-top: 3rem; + padding: 0 3rem; + display: flex; + justify-content: space-between; + gap: 0.5rem; + top: var(--layout-padding); + left: calc(var(--layout-padding) + var(--primary-nav-width)); + z-index: 1; - .adev-banner-container { - display: flex; - flex-direction: column; - gap: 0.5rem; - position: absolute; - top: var(--layout-padding); - left: calc(var(--layout-padding) + var(--primary-nav-width)); + @include mq.for-tablet-down { + justify-content: flex-start; + margin-top: 1rem; + } +} - @include mq.for-tablet-landscape-down { - top: 6rem; - left: var(--layout-padding); - /* Assuming the container width is identical to the viewport width (mobile device). */ - max-width: calc(100% - var(--layout-padding) * 2); - } +.adev-banner { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 0.5rem; + border: 1px solid var(--senary-contrast); + background: var(--page-background); + border-radius: 0.25rem; + padding: 10px; + max-width: 100%; + width: fit-content; + box-sizing: border-box; - @include mq.for-phone-only { - & { - top: 5rem; + h1, + p { + display: inline; + font-size: 0.875rem; + margin: 0; + background-image: var(--red-to-pink-to-purple-horizontal-gradient); + background-clip: text; + color: transparent; + width: fit-content; + box-shadow: none; + position: relative; + + &.adev-banner-cta { + color: var(--tertiary-contrast); + + &::after { + content: ''; + position: absolute; + width: 100%; + transform: scaleX(0); + height: 1px; + bottom: -2px; + left: 0; + background: var(--red-to-pink-to-purple-horizontal-gradient); + transform-origin: bottom right; + transition: transform 0.3s ease; } } } - .adev-banner { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 0.5rem; - border: 1px solid var(--senary-contrast); - background: var(--page-background); - border-radius: 0.25rem; - padding: 10px; - max-width: 100%; - width: fit-content; - box-sizing: border-box; - - h1, - p { - display: inline; - font-size: 0.875rem; - margin: 0; - background-image: var(--red-to-pink-to-purple-horizontal-gradient); - background-clip: text; - color: transparent; - width: fit-content; - font-weight: 500; - box-shadow: none; - position: relative; - - &.adev-banner-cta { - color: var(--tertiary-contrast); - - &::after { - content: ''; - position: absolute; - width: 100%; - transform: scaleX(0); - height: 1px; - bottom: -2px; - left: 0; - background: var(--red-to-pink-to-purple-horizontal-gradient); - transform-origin: bottom right; - transition: transform 0.3s ease; - } + &:hover { + .adev-banner-cta { + &::after { + transform: scaleX(1); + transform-origin: bottom left; } } + } +} - &:hover { - .adev-banner-cta { - &::after { - transform: scaleX(1); - transform-origin: bottom left; - } - } - } +section { + @include mq.for-tablet-landscape-up { + padding-left: 7rem; + } + text-align: center; + h2 { + padding: 0 1rem; + font-size: clamp(1rem, 9vw, 38pt); + } +} + +@property --gradient-angle { + syntax: ''; + initial-value: 90deg; + inherits: false; +} + +@keyframes rotateGradient { + from { + --gradient-angle: 0deg; + } + to { + --gradient-angle: 360deg; + } +} + +@property --pulse-inner { + syntax: ''; + initial-value: 20%; + inherits: false; +} + +@property --pulse-outer { + syntax: ''; + initial-value: 75%; + inherits: false; +} + +@keyframes pulse { + 0% { + --pulse-inner: 30%; + --pulse-outer: 75%; + } + 50% { + --pulse-inner: 30%; + --pulse-outer: 60%; + } + 100% { + --pulse-inner: 30%; + --pulse-outer: 75%; } } .logo-section { - text-align: center; - background-image: - linear-gradient( - 63deg, - transparent 66%, - var(--page-background) 69%, - var(--page-background) 70%, - transparent 70% - ), - linear-gradient(162deg, var(--page-background) 50%, #9337f58a 100%); - background-size: - 27px 27px, - auto; - background-repeat: repeat; - background-color: transparent; - padding-bottom: 36px; - padding-top: 7rem; + position: relative; + display: flex; + flex-direction: column; + height: min(700px, 100vh); + @include mq.for-tablet-down { + height: min(700px, calc(100vh - 60px)); + } + + .pattern { + @include background-pattern; + width: calc(100% - 7rem); + @include mq.for-tablet-landscape-down { + width: 100%; + } + animation: rotateGradient 10s linear infinite; + + background: conic-gradient( + from 122deg at 50% 50%, + transparent 17%, + #f627e3 25%, + #6911d2 32%, + transparent 38%, + transparent 61%, + #6911d2 71%, + #f627e3 81%, + transparent 91% + ); + + &:after { + // A fading bottom for the pattern + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(180deg, transparent, var(--page-background)); + bottom: 0; + height: 50px; + top: auto; + } + } + + .search-field { + @include mq.for-tablet-down() { + display: none; + } + } + + .content { + z-index: 1; + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; + + h2 { + font-size: clamp(3rem, 6vw, 5rem); + margin-bottom: 0; + } + + h3 { + font-size: clamp(0.5rem, 4vw, 1rem); + color: var(--quaternary-contrast); + } + } @include mq.for-tablet-landscape-down { - padding-top: 9rem; + margin-top: 4rem; } button { - font-size: 1.2rem; + margin-bottom: 5rem; @include mq.for-tablet-down { font-size: 1rem; @@ -141,47 +241,178 @@ } } } -} -section { - padding-left: 9rem; - padding-right: 2rem; - - h2 { - font-size: 2.5rem; - margin-bottom: 3rem; - } - - svg { - fill: var(--always-pink); - color: var(--always-pink); - } - - .section-content { - max-width: 1200px; - margin: 0 auto; - } - - @include mq.for-tablet-landscape-down { - padding-left: 2rem; + .uwu img { + width: 50vw; } } -.features { - padding-block: 2rem; - text-align: center; - - h2 { - font-size: 2.2rem; +.features-section { + [ngTabs] { + overflow: hidden; + width: 100%; + border-radius: 0.5rem; + display: flex; + flex-direction: column; } - .features-grid { + [ngTabList] { + padding: 4px; display: grid; grid-template-columns: repeat(4, 1fr); - max-width: 1200px; - margin: 0 auto; + gap: 0; + list-style: none; + position: relative; + background: var(--card-background); + border: 1px solid var(--quinary-contrast); + border-radius: 0.5rem; + width: fit-content; + margin: 0 auto 2rem; - @include mq.for-tablet-down { + .tab-background { + position: absolute; + top: 4px; + bottom: 4px; + left: 4px; + width: calc((100% - 8px) / 4); + background-color: var(--septenary-contrast); + border-radius: 0.5rem; + transition: transform 0.2s ease-in-out; + } + + &:has(> :nth-child(2)[aria-selected='true']) .tab-background { + transform: translateX(0%); + } + &:has(> :nth-child(3)[aria-selected='true']) .tab-background { + transform: translateX(100%); + } + &:has(> :nth-child(4)[aria-selected='true']) .tab-background { + transform: translateX(200%); + } + &:has(> :nth-child(5)[aria-selected='true']) .tab-background { + transform: translateX(300%); + } + } + + [ngTab] { + display: flex; + justify-content: center; + align-items: center; + outline: none; + padding: 0.5rem; + cursor: pointer; + color: var(--tertiary-contrast); + font-size: 14px; + border-radius: 0.5rem; + transition: all 0.2s ease-in-out; + position: relative; + z-index: 1; + + &:hover { + color: var(--primary-contrast); + } + } + + [ngTab][aria-selected='true'] { + color: var( + --electric-violet + ); // the gradient would "look" better but fails constrast requirements + } + + .sliding-window { + width: 400%; + display: flex; + transition: all 0.2s ease-in-out; + } + + [ngTabList]:has(> :nth-child(2)[aria-selected='true']) ~ .sliding-window { + transform: translateX(0%); + } + [ngTabList]:has(> :nth-child(3)[aria-selected='true']) ~ .sliding-window { + transform: translateX(-25%); + } + [ngTabList]:has(> :nth-child(4)[aria-selected='true']) ~ .sliding-window { + transform: translateX(-50%); + } + [ngTabList]:has(> :nth-child(5)[aria-selected='true']) ~ .sliding-window { + transform: translateX(-75%); + } + + [ngTabPanel] { + display: grid; + place-items: start center; + padding: 1rem 3rem; + min-height: 100px; + width: 25%; + box-sizing: border-box; + } +} + +.two-column-step { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; + text-align: left; + width: 100%; + max-width: 1200px; + margin: 0 auto; + box-sizing: border-box; + background-color: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; + padding: 2rem; + + @include mq.for-tablet-down { + grid-template-columns: 1fr; + gap: 2rem; + padding: 1.5rem; + } +} + +.step-description { + display: flex; + flex-direction: column; + gap: 1.5rem; + + .header { + font-size: 1.75rem; + } + + .description { + font-size: 1.1rem; + line-height: 1.6; + color: var(--secondary-contrast); + + .code { + font-family: monospace; + background: rgba(128, 128, 128, 0.2); + padding: 0.1rem 0.3rem; + border-radius: 0.5rem; + margin: 0 0.1rem; + } + } +} + +.step-code { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.selling-points { + max-width: 1440px; + margin: 0 auto 6rem; + box-sizing: border-box; + + .cards { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1.5rem; + text-align: left; /* reset center alignment from section */ + overflow-x: auto; + margin: 0 1rem; + + @include mq.for-tablet-landscape-down { grid-template-columns: repeat(2, 1fr); } @@ -190,183 +421,420 @@ section { } } - .feature { + .card { + background-color: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 0.5rem; padding: 2rem; - border-left: 1px solid var(--senary-contrast); - - &:first-child { - border-left: none; - } - - @include mq.for-tablet-down { - border-top: 1px solid var(--senary-contrast); - - &:first { - border-top: none; - } - - &:nth-child(odd) { - border-left: none; - } - } - - @include mq.for-phone-only { - &:nth-child(n) { - border-left: none; - } - - &:nth-child(-n + 1) { - border-top: none; - } - } - - svg { - width: 3rem; - } - - h3 { - font-size: 1.5rem; - margin-bottom: 1rem; - } - - p { - font-size: 1rem; - color: var(--quaternary-contrast); - font-weight: 300; - } - } -} - -.performance { - background-image: - linear-gradient( - 63deg, - transparent 66%, - var(--page-background) 69%, - var(--page-background) 70%, - transparent 70% - ), - linear-gradient(350deg, var(--page-background) 50%, #9337f58a 100%); - background-size: - 27px 27px, - auto; - background-repeat: repeat; - background-color: transparent; - - .section-content { display: flex; - flex-wrap: wrap; + flex-direction: column; gap: 1.5rem; - } + height: 100%; + box-sizing: border-box; + transition: border-color 0.3s ease; - .performance-half { - flex: 1 0 200px; - padding: 3rem 0; - - &:nth-child(2) { - display: flex; - justify-content: center; - align-items: center; - - @include mq.for-desktop-down { - display: none; - } - - svg { - width: 80%; - max-width: 365px; - } + &:hover { + border-color: var(--quinary-contrast); + background: var(--octonary-contrast); + cursor: pointer; } } - p { - &.secondary { - font-size: 1.2rem; + .icon-wrapper { + width: 48px; + height: 48px; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + color: var(--primary-contrast); + position: relative; + background: linear-gradient( + 90deg, + var(--orange-red) 0%, + var(--vivid-pink) 50%, + var(--electric-violet) 100% + ); + + &::after { + content: ''; + position: absolute; + inset: 1px; + background: var(--card-background); + border-radius: calc(0.5rem - 1px); } - } - .docs-card-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 1.5rem; - - @include mq.for-tablet-down { - grid-template-columns: 1fr; - } - } -} - -.learn-more { - background-image: - linear-gradient( - 63deg, - transparent 66%, - var(--page-background) 69%, - var(--page-background) 70%, - transparent 70% - ), - linear-gradient(162deg, var(--page-background) 50%, #9337f58a 100%); - background-size: - 27px 27px, - auto; - background-repeat: repeat; - background-color: transparent; - - padding-block: 5rem; - text-align: left; - - h2 { - font-size: 2.5rem; - margin-bottom: 3rem; - } - - h3 { - margin-top: 0; - } - - svg { - width: 64px; - flex: 0 0 64px; - margin: 0 1rem; - } - - p { - font-size: 1rem; - font-weight: 300; - - &.secondary { - color: var(--quaternary-contrast); + docs-icon { + font-size: 24px; + position: relative; + z-index: 1; } } .card-content { - flex: 1; - display: flex; - flex-direction: column; - justify-content: space-between; - height: 100%; - } + h3 { + font-size: 1rem; + line-height: 1.5; + color: var(--secondary-contrast); + margin: 0; - .docs-card { - display: flex; - flex-direction: row; - align-items: flex-start; - gap: 1.5rem; - - @include mq.for-tablet-down { - & { - flex-direction: column; + strong { + color: var(--primary-contrast); + font-weight: 600; } } } +} - .docs-card-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 1.5rem; +.performance-section { + display: flex; + justify-content: center; + align-items: center; - @include mq.for-tablet-down { - grid-template-columns: 1fr; + .wrapper { + width: 800px; + height: 800px; + position: relative; + display: flex; + justify-content: center; + + @include mq.for-phone-only { + width: 400px; + height: 400px; + } + } + + .pattern { + @include background-pattern; + z-index: -1; + width: 100%; + + background: radial-gradient(transparent 28%, #f627e3 45%, #6911d2 55%, transparent 69%); + @include mq.for-phone-only { + opacity: 0.7; + } + } + + .content { + height: 100%; + max-width: 500px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + h2 { + margin-bottom: 0; + } + h3 { + font-size: 12pt; + color: var(--quaternary-contrast); + max-width: 400px; + margin: 0 1rem; + } + button { + margin-top: 2rem; } } } + +.learn-more-bottom-section { + position: relative; + display: flex; + height: min(500px, 100vh); + + .pattern { + @include background-pattern; + width: calc(100% - 7rem); + + animation: pulse 4s ease-in-out infinite; + background: radial-gradient( + circle at 50% 125%, + transparent 20%, + #f627e3 35%, + #6911d2 55%, + transparent var(--pulse-outer) + ); + + @include mq.for-tablet-landscape-down { + width: 100%; + } + } + + .content { + z-index: 1; + display: flex; + flex-direction: column; + align-items: center; + margin: auto; + max-width: 600px; + + h2 { + margin-bottom: 0rem; + } + + h3 { + font-size: 12pt; + margin-bottom: 3rem; + } + + button { + position: absolute; + bottom: 3rem; + } + } +} + +.explore-section { + max-width: 1440px; + margin: 0 auto; + box-sizing: border-box; + + .title { + position: relative; + height: clamp(150px, 40vw, 400px); + + display: flex; + align-items: center; + justify-content: center; + + h2 { + max-width: 512px; + z-index: 1; + position: relative; + } + + .pattern { + @include background-pattern; + height: 120%; + width: 100%; + animation: rotateGradient 10s linear infinite; + + background: radial-gradient(circle at 50% 150%, #f627e3 50%, #6911d2 66%, transparent 75%); + } + } + + .cards-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-gap: 2rem; + margin: 0 1rem; + + @include mq.for-phone-only { + grid-template-columns: 1fr; + } + } + + .explore-card { + display: flex; + flex-direction: column; + background: var(--card-background); + border: 1px solid var(--senary-contrast); + border-radius: 1rem; + overflow: hidden; + text-decoration: none; + transition: border-color 0.3s ease; + height: 100%; + min-height: 500px; + position: relative; + cursor: pointer; + animation: rotateGradient 6s linear infinite; + + &::after { + content: ''; + position: absolute; + inset: 1px; + background: var(--card-background); + border-radius: calc(1rem - 1px); // looks better + } + + &:hover { + .fake-button { + // we're using a background-position to animate on hover + // because using background-clip with transform causes rendering/flicker issues in some browsers + background-position: 100% 0%; + + docs-icon { + transform: translateX(4px); + color: var(--electric-violet); + } + } + + background: linear-gradient( + var(--gradient-angle), + var(--orange-red) 0%, + var(--electric-violet) 39%, + transparent 81% + ); + } + + .card-content { + display: flex; + flex-direction: column; + text-align: left; + padding: 2.5rem; + z-index: 2; + flex: 1; + + p { + color: var(--quaternary-contrast); + line-height: 1.5; + margin-bottom: 1.5rem; + font-size: 1rem; + .emphasis { + color: var(--secondary-contrast); + } + } + } + + .fake-button { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--tertiary-contrast); + transition: color 0.3s ease; + background: linear-gradient( + 90deg, + var(--tertiary-contrast) 0%, + var(--tertiary-contrast) 47%, + var(--orange-red) 51%, + var(--electric-violet) 100% + ); + background-size: 200% 100%; + background-position: 0% 0%; + background-clip: text; + -webkit-background-clip: text; + color: transparent; + transition: background-position 0.5s ease; + + docs-icon { + font-size: 1.2rem; + color: var(--tertiary-contrast); + transition: + transform 0.3s ease, + color 0.3s ease; + } + } + + .editor-background { + --img: url('../../../assets/images/home/editor-light.png'); + background-image: linear-gradient(135deg, transparent, var(--card-background)), var(--img); + position: absolute; + bottom: 1px; + right: 1px; + width: 50%; + height: clamp(100px, 25vw, 300px); + background-size: cover; + border-bottom-right-radius: 1rem; + + @include mq.for-phone-only { + height: 50vw; + } + + ::ng-deep .docs-dark-mode & { + --img: url('../../../assets/images/home/editor-dark.png') !important; + } + } + + .logo-background { + --logo-svg: url('../../../assets/images/home/angular-logo-light.svg'); + background-image: var(--logo-svg); + position: absolute; + bottom: -100px; + right: -100px; + width: 490px; + height: 453px; + + ::ng-deep .docs-dark-mode & { + --logo-svg: url('../../../assets/images/home/angular-logo-dark.svg') !important; + } + } + } +} + +.angular-mcp-container { + position: relative; + z-index: 1; + max-width: 800px; + margin: auto; + border-radius: 1rem; + + // Glowing gradient background + &::before { + content: ''; + position: absolute; + inset: 0; + z-index: -1; + border-radius: inherit; + background: linear-gradient(90deg, #a800d6 0%, #ff266f 50%, #ff5c39 100%); + filter: blur(40px); + opacity: 0.25; + transform: scale(0.7); + transition: all 0.5s ease; + } + + .explore-card:hover & { + &::before { + transform: scale(0.95); + opacity: 0.45; + } + } + + .mcp-content { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem; + // background-color: var(--card-background); + // border: 1px solid var(--senary-contrast); + border-radius: 1rem; + width: 100%; + box-sizing: border-box; + animation: rotateGradient 10s linear infinite; + + background: conic-gradient( + from var(--gradient-angle) at 50% 50%, + var(--hot-red) 0%, + var(--vivid-pink) 20%, + var(--electric-violet) 40%, + transparent 50%, + transparent 85%, + var(--hot-red) 100% + ); + + &::after { + content: ''; + position: absolute; + inset: 1px; + background: var(--card-background); + border-radius: 1rem; + } + } + + .mcp-label { + color: var(--primary-contrast); + margin-right: 1rem; + white-space: nowrap; + font-size: 0.9rem; + z-index: 1; + } + + .mcp-pills { + font-size: 0.7rem; + display: flex; + justify-content: flex-end; + align-items: center; + gap: 0.75rem; + flex-wrap: wrap; + overflow: hidden; + max-height: 2rem; + z-index: 1; + } + + .mcp-pill { + background-color: var(--septenary-contrast); + color: var(--vivid-pink); + font-family: monospace; + padding: 0.5rem; + border-radius: 8px; + } +} diff --git a/adev/src/app/features/home/home.component.ts b/adev/src/app/features/home/home.component.ts index 5c7c61c0774..cff34b33e5f 100644 --- a/adev/src/app/features/home/home.component.ts +++ b/adev/src/app/features/home/home.component.ts @@ -6,12 +6,34 @@ * found in the LICENSE file at https://angular.dev/license */ +import {Tab, TabContent, TabList, TabPanel, Tabs} from '@angular/aria/tabs'; +import {A11yModule} from '@angular/cdk/a11y'; import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; +import {IS_SEARCH_DIALOG_OPEN, IconComponent, TextField} from '@angular/docs'; import {ActivatedRoute, RouterLink} from '@angular/router'; +import {CodeHighligher} from './code-highlighting/code-highlighter'; +import {ControlFlowExample} from './components/control-flow/control-flow-example'; +import {DeferrableViewsExample} from './components/deferrable-views-example/deferrable-views-example'; +import {HydrationExample} from './components/hydration-example/hydration-example'; +import {SignalsDemo} from './components/signals-demo/signals-demo'; @Component({ selector: 'adev-home', - imports: [RouterLink], + imports: [ + RouterLink, + TextField, + TabList, + Tab, + Tabs, + TabPanel, + TabContent, + IconComponent, + A11yModule, + SignalsDemo, + ControlFlowExample, + DeferrableViewsExample, + HydrationExample, + ], templateUrl: './home.component.html', styleUrls: ['./home.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, @@ -19,4 +41,11 @@ import {ActivatedRoute, RouterLink} from '@angular/router'; export default class Home { private readonly activatedRoute = inject(ActivatedRoute); protected readonly isUwu = 'uwu' in this.activatedRoute.snapshot.queryParams; + private readonly codeHighlighter = inject(CodeHighligher); + + protected readonly displaySearchDialog = inject(IS_SEARCH_DIALOG_OPEN); + + openSearch() { + this.displaySearchDialog.set(true); + } } diff --git a/adev/src/assets/images/home/angular-logo-dark.svg b/adev/src/assets/images/home/angular-logo-dark.svg new file mode 100644 index 00000000000..bfc701d76a1 --- /dev/null +++ b/adev/src/assets/images/home/angular-logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/adev/src/assets/images/home/angular-logo-light.svg b/adev/src/assets/images/home/angular-logo-light.svg new file mode 100644 index 00000000000..9c19178ae27 --- /dev/null +++ b/adev/src/assets/images/home/angular-logo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/adev/src/assets/images/home/editor-dark.png b/adev/src/assets/images/home/editor-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..11c3962477e74af5b27766878514a14538149981 GIT binary patch literal 99330 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

uY>I6#?ew#P-_=7H?uuI_JbpU7ywurKF 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 R6mkXlJd#tDEs{3z`yX#nz{&ss literal 0 HcmV?d00001 diff --git a/adev/src/assets/images/home/editor-light.png b/adev/src/assets/images/home/editor-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4850a6b655996d7178eb9c9e0f1d9c2a559dd5f7 GIT binary patch literal 98579 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 *Smc3F69o~ibbb&h&6f4^)VK9E46#W3{rk& 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 literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 706ba3994b0..60ab4e2106e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -579,6 +579,27 @@ importers: '@marijn/find-cluster-break': specifier: 1.0.2 version: 1.0.2 + '@shikijs/core': + specifier: ^3.21.0 + version: 3.21.0 + '@shikijs/engine-javascript': + specifier: ^3.21.0 + version: 3.21.0 + '@shikijs/engine-oniguruma': + specifier: ^3.21.0 + version: 3.21.0 + '@shikijs/langs': + specifier: ^3.21.0 + version: 3.21.0 + '@shikijs/themes': + specifier: ^3.21.0 + version: 3.21.0 + '@shikijs/types': + specifier: ^3.21.0 + version: 3.21.0 + '@shikijs/vscode-textmate': + specifier: ^10.0.2 + version: 10.0.2 '@stackblitz/sdk': specifier: 1.11.0 version: 1.11.0 @@ -612,6 +633,18 @@ importers: angular-split: specifier: 20.0.0 version: 20.0.0(@angular/common@packages+common)(@angular/core@packages+core)(rxjs@7.8.2) + ccount: + specifier: ^2.0.1 + version: 2.0.1 + character-entities-html4: + specifier: ^2.1.0 + version: 2.1.0 + character-entities-legacy: + specifier: ^3.0.0 + version: 3.0.0 + comma-separated-tokens: + specifier: ^2.0.3 + version: 2.0.3 crelt: specifier: 1.0.6 version: 1.0.6 @@ -624,6 +657,15 @@ importers: fflate: specifier: 0.8.2 version: 0.8.2 + hast-util-to-html: + specifier: ^9.0.5 + version: 9.0.5 + hast-util-whitespace: + specifier: ^3.0.0 + version: 3.0.0 + html-void-elements: + specifier: ^3.0.0 + version: 3.0.0 jasmine-core: specifier: 6.0.0 version: 6.0.0 @@ -666,12 +708,21 @@ importers: prettier: specifier: 3.8.1 version: 3.8.1 + property-information: + specifier: ^7.1.0 + version: 7.1.0 rxjs: specifier: 7.8.2 version: 7.8.2 shiki: specifier: 3.22.0 version: 3.22.0 + space-separated-tokens: + specifier: ^2.0.2 + version: 2.0.2 + stringify-entities: + specifier: ^4.0.4 + version: 4.0.4 style-mod: specifier: 4.1.3 version: 4.1.3 @@ -687,6 +738,9 @@ importers: w3c-keyname: specifier: 2.2.8 version: 2.2.8 + zwitch: + specifier: ^2.0.4 + version: 2.0.4 devDependencies: autoprefixer: specifier: 10.4.24