From d20c52a72763e39e4f199ffedad9b95dc37c1efe Mon Sep 17 00:00:00 2001 From: Suguru Inatomi Date: Wed, 17 Sep 2025 20:50:41 +0900 Subject: [PATCH 1/2] fix: sub-navigation-data.ts has been moved --- .../src/app/routing/sub-navigation-data.en.ts | 1530 +++++++++++++++++ .../src/app/routing/sub-navigation-data.ts | 1530 +++++++++++++++++ tools/update-origin.ts | 37 +- 3 files changed, 3081 insertions(+), 16 deletions(-) create mode 100644 adev-ja/src/app/routing/sub-navigation-data.en.ts create mode 100644 adev-ja/src/app/routing/sub-navigation-data.ts diff --git a/adev-ja/src/app/routing/sub-navigation-data.en.ts b/adev-ja/src/app/routing/sub-navigation-data.en.ts new file mode 100644 index 0000000000..a8c1634fbf --- /dev/null +++ b/adev-ja/src/app/routing/sub-navigation-data.en.ts @@ -0,0 +1,1530 @@ +/*! + * @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 {isDevMode} from '@angular/core'; +import {NavigationItem} from '@angular/docs'; + +// These 2 imports are expected to be red because they are generated a build time +import FIRST_APP_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/first-app/routes.json'; +import LEARN_ANGULAR_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/learn-angular/routes.json'; +import DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/deferrable-views/routes.json'; +import SIGNALS_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/signals/routes.json'; +import ERRORS_NAV_DATA from '../../../src/assets/content/reference/errors/routes.json'; +import EXT_DIAGNOSTICS_NAV_DATA from '../../../src/assets/content/reference/extended-diagnostics/routes.json'; + +import {getApiNavigationItems} from '../features/references/helpers/manifest.helper'; +import {DEFAULT_PAGES} from '../core/constants/pages'; + +interface SubNavigationData { + docs: NavigationItem[]; + reference: NavigationItem[]; + tutorials: NavigationItem[]; + footer: NavigationItem[]; +} + +const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ + { + label: 'Introduction', + children: [ + { + label: 'What is Angular?', + path: 'overview', + contentPath: 'introduction/what-is-angular', + }, + { + label: 'Installation', + path: 'installation', + contentPath: 'introduction/installation', + }, + { + label: 'Essentials', + children: [ + { + label: 'Overview', + path: 'essentials', + contentPath: 'introduction/essentials/overview', + }, + { + label: 'Composition with components', + path: 'essentials/components', + contentPath: 'introduction/essentials/components', + }, + { + label: 'Reactivity with signals', + path: 'essentials/signals', + contentPath: 'introduction/essentials/signals', + }, + { + label: 'Dynamic interfaces with templates', + path: 'essentials/templates', + contentPath: 'introduction/essentials/templates', + }, + { + label: 'Modular design with dependency injection', + path: 'essentials/dependency-injection', + contentPath: 'introduction/essentials/dependency-injection', + }, + { + label: 'Next Steps', + path: 'essentials/next-steps', + contentPath: 'introduction/essentials/next-steps', + }, + ], + }, + { + label: 'Start coding! 🚀', + path: 'tutorials/learn-angular', + }, + ], + }, + { + label: 'In-depth Guides', + children: [ + { + label: 'Signals', + children: [ + { + label: 'Overview', + path: 'guide/signals', + contentPath: 'guide/signals/overview', + }, + { + label: 'Dependent state with linkedSignal', + path: 'guide/signals/linked-signal', + contentPath: 'guide/signals/linked-signal', + }, + { + label: 'Async reactivity with resources', + path: 'guide/signals/resource', + contentPath: 'guide/signals/resource', + }, + ], + }, + { + label: 'Components', + children: [ + { + label: 'Anatomy of components', + path: 'guide/components', + contentPath: 'guide/components/anatomy-of-components', + }, + { + label: 'Selectors', + path: 'guide/components/selectors', + contentPath: 'guide/components/selectors', + }, + { + label: 'Styling', + path: 'guide/components/styling', + contentPath: 'guide/components/styling', + }, + { + label: 'Accepting data with input properties', + path: 'guide/components/inputs', + contentPath: 'guide/components/inputs', + }, + { + label: 'Custom events with outputs', + path: 'guide/components/outputs', + contentPath: 'guide/components/outputs', + }, + { + label: 'Content projection with ng-content', + path: 'guide/components/content-projection', + contentPath: 'guide/components/content-projection', + }, + { + label: 'Host elements', + path: 'guide/components/host-elements', + contentPath: 'guide/components/host-elements', + }, + { + label: 'Lifecycle', + path: 'guide/components/lifecycle', + contentPath: 'guide/components/lifecycle', + }, + { + label: 'Referencing component children with queries', + path: 'guide/components/queries', + contentPath: 'guide/components/queries', + }, + { + label: 'Using DOM APIs', + path: 'guide/components/dom-apis', + contentPath: 'guide/components/dom-apis', + }, + { + label: 'Inheritance', + path: 'guide/components/inheritance', + contentPath: 'guide/components/inheritance', + }, + { + label: 'Programmatically rendering components', + path: 'guide/components/programmatic-rendering', + contentPath: 'guide/components/programmatic-rendering', + }, + { + label: 'Advanced configuration', + path: 'guide/components/advanced-configuration', + contentPath: 'guide/components/advanced-configuration', + }, + { + label: 'Custom Elements', + path: 'guide/elements', + contentPath: 'guide/elements', + }, + ], + }, + { + label: 'Templates', + children: [ + { + label: 'Overview', + path: 'guide/templates', + contentPath: 'guide/templates/overview', + }, + { + label: 'Binding dynamic text, properties and attributes', + path: 'guide/templates/binding', + contentPath: 'guide/templates/binding', + }, + { + label: 'Adding event listeners', + path: 'guide/templates/event-listeners', + contentPath: 'guide/templates/event-listeners', + }, + { + label: 'Two-way binding', + path: 'guide/templates/two-way-binding', + contentPath: 'guide/templates/two-way-binding', + }, + { + label: 'Control flow', + path: 'guide/templates/control-flow', + contentPath: 'guide/templates/control-flow', + }, + { + label: 'Pipes', + path: 'guide/templates/pipes', + contentPath: 'guide/templates/pipes', + }, + { + label: 'Slotting child content with ng-content', + path: 'guide/templates/ng-content', + contentPath: 'guide/templates/ng-content', + }, + { + label: 'Create template fragments with ng-template', + path: 'guide/templates/ng-template', + contentPath: 'guide/templates/ng-template', + }, + { + label: 'Grouping elements with ng-container', + path: 'guide/templates/ng-container', + contentPath: 'guide/templates/ng-container', + }, + { + label: 'Variables in templates', + path: 'guide/templates/variables', + contentPath: 'guide/templates/variables', + }, + { + label: 'Deferred loading with @defer', + path: 'guide/templates/defer', + contentPath: 'guide/templates/defer', + }, + { + label: 'Expression syntax', + path: 'guide/templates/expression-syntax', + contentPath: 'guide/templates/expression-syntax', + }, + { + label: 'Whitespace in templates', + path: 'guide/templates/whitespace', + contentPath: 'guide/templates/whitespace', + }, + ], + }, + { + label: 'Directives', + children: [ + { + label: 'Overview', + path: 'guide/directives', + contentPath: 'guide/directives/overview', + }, + { + label: 'Attribute directives', + path: 'guide/directives/attribute-directives', + contentPath: 'guide/directives/attribute-directives', + }, + { + label: 'Structural directives', + path: 'guide/directives/structural-directives', + contentPath: 'guide/directives/structural-directives', + }, + { + label: 'Directive composition API', + path: 'guide/directives/directive-composition-api', + contentPath: 'guide/directives/directive-composition-api', + }, + { + label: 'Optimizing images with NgOptimizedImage', + path: 'guide/image-optimization', + contentPath: 'guide/image-optimization', + }, + ], + }, + { + label: 'Dependency Injection', + children: [ + { + label: 'Overview', + path: 'guide/di', + contentPath: 'guide/di/overview', + }, + { + label: 'Understanding dependency injection', + path: 'guide/di/dependency-injection', + contentPath: 'guide/di/dependency-injection', + }, + { + label: 'Creating an injectable service', + path: 'guide/di/creating-injectable-service', + contentPath: 'guide/di/creating-injectable-service', + }, + { + label: 'Defining dependency providers', + path: 'guide/di/dependency-injection-providers', + contentPath: 'guide/di/dependency-injection-providers', + }, + { + label: 'Injection context', + path: 'guide/di/dependency-injection-context', + contentPath: 'guide/di/dependency-injection-context', + }, + { + label: 'Hierarchical injectors', + path: 'guide/di/hierarchical-dependency-injection', + contentPath: 'guide/di/hierarchical-dependency-injection', + }, + { + label: 'Optimizing injection tokens', + path: 'guide/di/lightweight-injection-tokens', + contentPath: 'guide/di/lightweight-injection-tokens', + }, + { + label: 'DI in action', + path: 'guide/di/di-in-action', + contentPath: 'guide/di/di-in-action', + }, + ], + }, + { + label: 'Routing', + status: 'updated', + children: [ + { + label: 'Overview', + path: 'guide/routing', + contentPath: 'guide/routing/overview', + }, + { + label: 'Define routes', + path: 'guide/routing/define-routes', + contentPath: 'guide/routing/define-routes', + }, + { + label: 'Show routes with Outlets', + path: 'guide/routing/show-routes-with-outlets', + contentPath: 'guide/routing/show-routes-with-outlets', + }, + { + label: 'Navigate to routes', + path: 'guide/routing/navigate-to-routes', + contentPath: 'guide/routing/navigate-to-routes', + }, + { + label: 'Read route state', + path: 'guide/routing/read-route-state', + contentPath: 'guide/routing/read-route-state', + }, + { + label: 'Redirecting routes', + path: 'guide/routing/redirecting-routes', + contentPath: 'guide/routing/redirecting-routes', + }, + { + label: 'Control route access with guards', + path: 'guide/routing/route-guards', + contentPath: 'guide/routing/route-guards', + }, + { + label: 'Route data resolvers', + path: 'guide/routing/data-resolvers', + contentPath: 'guide/routing/data-resolvers', + }, + { + label: 'Lifecycle and events', + path: 'guide/routing/lifecycle-and-events', + contentPath: 'guide/routing/lifecycle-and-events', + }, + { + label: 'Testing routing and navigation', + path: 'guide/routing/testing', + contentPath: 'guide/routing/testing', + status: 'new', + }, + { + label: 'Other routing tasks', + path: 'guide/routing/common-router-tasks', + contentPath: 'guide/routing/common-router-tasks', + }, + { + label: 'Creating custom route matches', + path: 'guide/routing/routing-with-urlmatcher', + contentPath: 'guide/routing/routing-with-urlmatcher', + }, + { + label: 'Rendering strategies', + path: 'guide/routing/rendering-strategies', + contentPath: 'guide/routing/rendering-strategies', + status: 'new', + }, + { + label: 'Customizing route behavior', + path: 'guide/routing/customizing-route-behavior', + contentPath: 'guide/routing/customizing-route-behavior', + status: 'new', + }, + { + label: 'Router reference', + path: 'guide/routing/router-reference', + contentPath: 'guide/routing/router-reference', + }, + { + label: 'Route transition animations', + path: 'guide/routing/route-transition-animations', + contentPath: 'guide/routing/route-transition-animations', + }, + ], + }, + { + label: 'Forms', + children: [ + { + label: 'Overview', + path: 'guide/forms', + contentPath: 'guide/forms/overview', + }, + { + label: 'Reactive forms', + path: 'guide/forms/reactive-forms', + contentPath: 'guide/forms/reactive-forms', + }, + { + label: 'Strictly typed reactive forms', + path: 'guide/forms/typed-forms', + contentPath: 'guide/forms/typed-forms', + }, + { + label: 'Template-driven forms', + path: 'guide/forms/template-driven-forms', + contentPath: 'guide/forms/template-driven-forms', + }, + { + label: 'Validate form input', + path: 'guide/forms/form-validation', + contentPath: 'guide/forms/form-validation', + }, + { + label: 'Building dynamic forms', + path: 'guide/forms/dynamic-forms', + contentPath: 'guide/forms/dynamic-forms', + }, + ], + }, + { + label: 'HTTP Client', + children: [ + { + label: 'Overview', + path: 'guide/http', + contentPath: 'guide/http/overview', + }, + { + label: 'Setting up HttpClient', + path: 'guide/http/setup', + contentPath: 'guide/http/setup', + }, + { + label: 'Making requests', + path: 'guide/http/making-requests', + contentPath: 'guide/http/making-requests', + }, + { + label: 'Reactive data fetching with httpResource', + path: 'guide/http/http-resource', + contentPath: 'guide/http/http-resource', + }, + { + label: 'Intercepting requests and responses', + path: 'guide/http/interceptors', + contentPath: 'guide/http/interceptors', + }, + { + label: 'Testing', + path: 'guide/http/testing', + contentPath: 'guide/http/testing', + }, + ], + }, + { + label: 'Server-side & hybrid-rendering', + children: [ + { + label: 'Overview', + path: 'guide/performance', + contentPath: 'guide/performance/overview', + }, + { + label: 'Server-side and hybrid-rendering', + path: 'guide/ssr', + contentPath: 'guide/ssr', + }, + { + label: 'Hydration', + path: 'guide/hydration', + contentPath: 'guide/hydration', + }, + { + label: 'Incremental Hydration', + path: 'guide/incremental-hydration', + contentPath: 'guide/incremental-hydration', + }, + ], + }, + { + label: 'Testing', + children: [ + { + label: 'Overview', + path: 'guide/testing', + contentPath: 'guide/testing/overview', + }, + { + label: 'Code coverage', + path: 'guide/testing/code-coverage', + contentPath: 'guide/testing/code-coverage', + }, + { + label: 'Testing services', + path: 'guide/testing/services', + contentPath: 'guide/testing/services', + }, + { + label: 'Basics of testing components', + path: 'guide/testing/components-basics', + contentPath: 'guide/testing/components-basics', + }, + { + label: 'Component testing scenarios', + path: 'guide/testing/components-scenarios', + contentPath: 'guide/testing/components-scenarios', + }, + { + label: 'Testing attribute directives', + path: 'guide/testing/attribute-directives', + contentPath: 'guide/testing/attribute-directives', + }, + { + label: 'Testing pipes', + path: 'guide/testing/pipes', + contentPath: 'guide/testing/pipes', + }, + { + label: 'Testing routing and navigation', + path: 'guide/routing/testing', + contentPath: 'guide/routing/testing', + status: 'new', + }, + { + label: 'Debugging tests', + path: 'guide/testing/debugging', + contentPath: 'guide/testing/debugging', + }, + { + label: 'Testing utility APIs', + path: 'guide/testing/utility-apis', + contentPath: 'guide/testing/utility-apis', + }, + { + label: 'Experimental unit testing integration', + path: 'guide/testing/unit-tests', + contentPath: 'guide/testing/experimental-unit-test', + }, + { + label: 'Component harnesses overview', + path: 'guide/testing/component-harnesses-overview', + contentPath: 'guide/testing/component-harnesses-overview', + }, + { + label: 'Using component harnesses in tests', + path: 'guide/testing/using-component-harnesses', + contentPath: 'guide/testing/using-component-harnesses', + }, + { + label: 'Creating harnesses for your components', + path: 'guide/testing/creating-component-harnesses', + contentPath: 'guide/testing/creating-component-harnesses', + }, + { + label: 'Adding harness support for additional testing environments', + path: 'guide/testing/component-harnesses-testing-environments', + contentPath: 'guide/testing/component-harnesses-testing-environments', + }, + ], + }, + { + label: 'Internationalization', + children: [ + { + label: 'Overview', + path: 'guide/i18n', + contentPath: 'guide/i18n/overview', + }, + { + label: 'Add the localize package', + path: 'guide/i18n/add-package', + contentPath: 'guide/i18n/add-package', + }, + { + label: 'Refer to locales by ID', + path: 'guide/i18n/locale-id', + contentPath: 'guide/i18n/locale-id', + }, + { + label: 'Format data based on locale', + path: 'guide/i18n/format-data-locale', + contentPath: 'guide/i18n/format-data-locale', + }, + { + label: 'Prepare component for translation', + path: 'guide/i18n/prepare', + contentPath: 'guide/i18n/prepare', + }, + { + label: 'Work with translation files', + path: 'guide/i18n/translation-files', + contentPath: 'guide/i18n/translation-files', + }, + { + label: 'Merge translations into the app', + path: 'guide/i18n/merge', + contentPath: 'guide/i18n/merge', + }, + { + label: 'Deploy multiple locales', + path: 'guide/i18n/deploy', + contentPath: 'guide/i18n/deploy', + }, + { + label: 'Import global variants of the locale data', + path: 'guide/i18n/import-global-variants', + contentPath: 'guide/i18n/import-global-variants', + }, + { + label: 'Manage marked text with custom IDs', + path: 'guide/i18n/manage-marked-text', + contentPath: 'guide/i18n/manage-marked-text', + }, + { + label: 'Example Angular application', + path: 'guide/i18n/example', + contentPath: 'guide/i18n/example', + }, + ], + }, + { + label: 'Animations', + status: 'updated', + children: [ + { + label: 'Enter and Leave animations', + path: 'guide/animations', + contentPath: 'guide/animations/enter-and-leave', + status: 'new', + }, + { + label: 'Complex Animations with CSS', + path: 'guide/animations/css', + contentPath: 'guide/animations/css', + }, + { + label: 'Route transition animations', + path: 'guide/routing/route-transition-animations', + contentPath: 'guide/routing/route-transition-animations', + }, + ], + }, + { + label: 'Drag and drop', + path: 'guide/drag-drop', + contentPath: 'guide/drag-drop', + }, + // TODO: unwrap to release Angular Aria docs. + ...(isDevMode() + ? [ + { + label: 'Angular Aria', + children: [ + { + label: 'Overview', + path: 'guide/aria/overview', + contentPath: 'guide/aria/overview', + }, + { + label: 'Accordion', + path: 'guide/aria/accordion', + contentPath: 'guide/aria/accordion', + }, + { + label: 'Combobox', + path: 'guide/aria/combobox', + contentPath: 'guide/aria/combobox', + }, + { + label: 'Grid', + path: 'guide/aria/grid', + contentPath: 'guide/aria/grid', + }, + { + label: 'Listbox', + path: 'guide/aria/listbox', + contentPath: 'guide/aria/listbox', + }, + { + label: 'Menu', + path: 'guide/aria/menu', + contentPath: 'guide/aria/menu', + }, + { + label: 'Radio Group', + path: 'guide/aria/radio', + contentPath: 'guide/aria/radio', + }, + { + label: 'Tabs', + path: 'guide/aria/tabs', + contentPath: 'guide/aria/tabs', + }, + { + label: 'Toolbar', + path: 'guide/aria/toolbar', + contentPath: 'guide/aria/toolbar', + }, + { + label: 'Tree', + path: 'guide/aria/tree', + contentPath: 'guide/aria/tree', + }, + ], + }, + ] + : []), + ], + }, + { + label: 'Build with AI', + status: 'new', + children: [ + { + label: 'Get Started', + path: 'ai', + contentPath: 'ai/overview', + }, + { + label: 'LLM prompts and AI IDE setup', + path: 'ai/develop-with-ai', + contentPath: 'ai/develop-with-ai', + }, + { + label: 'Design Patterns', + path: 'ai/design-patterns', + contentPath: 'ai/design-patterns', + }, + { + label: 'Angular CLI MCP Server setup', + path: 'ai/mcp', + contentPath: 'ai/mcp-server-setup', + }, + ], + }, + { + label: 'Developer Tools', + children: [ + { + label: 'Angular CLI', + children: [ + { + label: 'Overview', + path: 'tools/cli', + contentPath: 'tools/cli/overview', + }, + { + label: 'Local set-up', + path: 'tools/cli/setup-local', + contentPath: 'tools/cli/setup-local', + }, + { + label: 'Building Angular apps', + path: 'tools/cli/build', + contentPath: 'tools/cli/build', + }, + { + label: 'Serving Angular apps for development', + path: 'tools/cli/serve', + contentPath: 'tools/cli/serve', + }, + { + label: 'Deployment', + path: 'tools/cli/deployment', + contentPath: 'tools/cli/deployment', + }, + { + label: 'End-to-End Testing', + path: 'tools/cli/end-to-end', + contentPath: 'tools/cli/end-to-end', + }, + { + label: 'Migrating to new build system', + path: 'tools/cli/build-system-migration', + contentPath: 'tools/cli/build-system-migration', + }, + { + label: 'Build environments', + path: 'tools/cli/environments', + contentPath: 'tools/cli/environments', + }, + { + label: 'Angular CLI builders', + path: 'tools/cli/cli-builder', + contentPath: 'tools/cli/cli-builder', + }, + { + label: 'Generating code using schematics', + path: 'tools/cli/schematics', + contentPath: 'tools/cli/schematics', + }, + { + label: 'Authoring schematics', + path: 'tools/cli/schematics-authoring', + contentPath: 'tools/cli/schematics-authoring', + }, + { + label: 'Schematics for libraries', + path: 'tools/cli/schematics-for-libraries', + contentPath: 'tools/cli/schematics-for-libraries', + }, + { + label: 'Template type checking', + path: 'tools/cli/template-typecheck', + contentPath: 'tools/cli/template-typecheck', + }, + { + label: 'Ahead-of-time (AOT) compilation', + path: 'tools/cli/aot-compiler', + contentPath: 'tools/cli/aot-compiler', + }, + { + label: 'AOT metadata errors', + path: 'tools/cli/aot-metadata-errors', + contentPath: 'tools/cli/aot-metadata-errors', + }, + ], + }, + { + label: 'Libraries', + children: [ + { + label: 'Overview', + path: 'tools/libraries', + contentPath: 'tools/libraries/overview', + }, + { + label: 'Creating Libraries', + path: 'tools/libraries/creating-libraries', + contentPath: 'tools/libraries/creating-libraries', + }, + { + label: 'Using Libraries', + path: 'tools/libraries/using-libraries', + contentPath: 'tools/libraries/using-libraries', + }, + { + label: 'Angular Package Format', + path: 'tools/libraries/angular-package-format', + contentPath: 'tools/libraries/angular-package-format', + }, + ], + }, + { + label: 'DevTools', + children: [ + { + label: 'Overview', + path: 'tools/devtools', + contentPath: 'tools/devtools/overview', + }, + { + label: 'Components', + path: 'tools/devtools/component', + contentPath: 'tools/devtools/component', + }, + { + label: 'Profiler', + path: 'tools/devtools/profiler', + contentPath: 'tools/devtools/profiler', + }, + // TODO: create those guides + // The signal debugging docs should also be added to the signal section + // { + // label: 'Signals', + // path: 'tools/devtools/signals', + // contentPath: 'tools/devtools/signals', + // }, + // { + // label: 'Router', + // path: 'tools/devtools/router', + // contentPath: 'tools/devtools/router', + // } + ], + }, + { + label: 'Language Service', + path: 'tools/language-service', + contentPath: 'tools/language-service', + }, + ], + }, + { + label: 'Best Practices', + children: [ + { + label: 'Style Guide', + path: 'style-guide', + contentPath: 'best-practices/style-guide', + status: 'updated', + }, + { + label: 'Security', + path: 'best-practices/security', + contentPath: 'guide/security', // Have not refactored due to build issues + }, + { + label: 'Accessibility', + path: 'best-practices/a11y', + contentPath: 'best-practices/a11y', + }, + { + label: 'Unhandled errors in Angular', + path: 'best-practices/error-handling', + contentPath: 'best-practices/error-handling', + }, + { + label: 'Performance', + children: [ + { + label: 'Overview', + path: 'best-practices/runtime-performance', + contentPath: 'best-practices/runtime-performance/overview', + }, + { + label: 'Zone pollution', + path: 'best-practices/zone-pollution', + contentPath: 'best-practices/runtime-performance/zone-pollution', + }, + { + label: 'Slow computations', + path: 'best-practices/slow-computations', + contentPath: 'best-practices/runtime-performance/slow-computations', + }, + { + label: 'Skipping component subtrees', + path: 'best-practices/skipping-subtrees', + contentPath: 'best-practices/runtime-performance/skipping-subtrees', + }, + { + label: 'Profiling with the Chrome DevTools', + path: 'best-practices/profiling-with-chrome-devtools', + contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools', + }, + {label: 'Zoneless', path: 'guide/zoneless', contentPath: 'guide/zoneless'}, + ], + }, + { + label: 'Keeping up-to-date', + path: 'update', + contentPath: 'best-practices/update', + }, + ], + }, + { + label: 'Extended Ecosystem', + children: [ + { + label: 'NgModules', + path: 'guide/ngmodules/overview', + contentPath: 'guide/ngmodules/overview', + }, + { + label: 'Legacy Animations', + children: [ + { + label: 'Overview', + path: 'guide/legacy-animations', + contentPath: 'guide/animations/overview', + }, + { + label: 'Transition and Triggers', + path: 'guide/legacy-animations/transition-and-triggers', + contentPath: 'guide/animations/transition-and-triggers', + }, + { + label: 'Complex Sequences', + path: 'guide/legacy-animations/complex-sequences', + contentPath: 'guide/animations/complex-sequences', + }, + { + label: 'Reusable Animations', + path: 'guide/legacy-animations/reusable-animations', + contentPath: 'guide/animations/reusable-animations', + }, + { + label: 'Migrating to Native CSS Animations', + path: 'guide/animations/migration', + contentPath: 'guide/animations/migration', + }, + ], + }, + { + label: 'Using RxJS with Angular', + children: [ + { + label: 'Signals interop', + path: 'ecosystem/rxjs-interop', + contentPath: 'ecosystem/rxjs-interop/signals-interop', + }, + { + label: 'Component output interop', + path: 'ecosystem/rxjs-interop/output-interop', + contentPath: 'ecosystem/rxjs-interop/output-interop', + }, + { + label: 'Unsubscribing with takeUntilDestroyed', + path: 'ecosystem/rxjs-interop/take-until-destroyed', + contentPath: 'ecosystem/rxjs-interop/take-until-destroyed', + }, + ], + }, + { + label: 'Service Workers & PWAs', + children: [ + { + label: 'Overview', + path: 'ecosystem/service-workers', + contentPath: 'ecosystem/service-workers/overview', + }, + { + label: 'Getting started', + path: 'ecosystem/service-workers/getting-started', + contentPath: 'ecosystem/service-workers/getting-started', + }, + { + label: 'Custom service worker scripts', + path: 'ecosystem/service-workers/custom-service-worker-scripts', + contentPath: 'ecosystem/service-workers/custom-service-worker-scripts', + }, + { + label: 'Configuration file', + path: 'ecosystem/service-workers/config', + contentPath: 'ecosystem/service-workers/config', + }, + { + label: 'Communicating with the service worker', + path: 'ecosystem/service-workers/communications', + contentPath: 'ecosystem/service-workers/communications', + }, + { + label: 'Push notifications', + path: 'ecosystem/service-workers/push-notifications', + contentPath: 'ecosystem/service-workers/push-notifications', + }, + { + label: 'Service worker devops', + path: 'ecosystem/service-workers/devops', + contentPath: 'ecosystem/service-workers/devops', + }, + { + label: 'App shell pattern', + path: 'ecosystem/service-workers/app-shell', + contentPath: 'ecosystem/service-workers/app-shell', + }, + ], + }, + { + label: 'Web workers', + path: 'ecosystem/web-workers', + contentPath: 'ecosystem/web-workers', + }, + { + label: 'Custom build pipeline', + path: 'ecosystem/custom-build-pipeline', + contentPath: 'ecosystem/custom-build-pipeline', + }, + { + label: 'Tailwind', + path: 'guide/tailwind', + contentPath: 'guide/tailwind', + status: 'new', + }, + { + label: 'Angular Fire', + path: 'https://github.com/angular/angularfire#readme', + }, + { + label: 'Google Maps', + path: 'https://github.com/angular/components/tree/main/src/google-maps#readme', + }, + { + label: 'Google Pay', + path: 'https://github.com/google-pay/google-pay-button#angular', + }, + { + label: 'YouTube player', + path: 'https://github.com/angular/components/blob/main/src/youtube-player/README.md', + }, + { + label: 'Angular CDK', + path: 'https://material.angular.dev/cdk/categories', + }, + { + label: 'Angular Material', + path: 'https://material.angular.dev/', + }, + ], + }, + ...(isDevMode() + ? [ + { + label: 'Adev Dev Guide', + children: [ + { + label: 'Kitchen Sink', + path: 'kitchen-sink', + contentPath: 'kitchen-sink', + }, + ], + }, + ] + : []), +]; + +export const TUTORIALS_SUB_NAVIGATION_DATA: NavigationItem[] = [ + FIRST_APP_TUTORIAL_NAV_DATA, + LEARN_ANGULAR_TUTORIAL_NAV_DATA, + DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA, + SIGNALS_TUTORIAL_NAV_DATA, + { + path: DEFAULT_PAGES.TUTORIALS, + contentPath: 'tutorials/home', + label: 'Tutorials', + }, +]; + +const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ + { + label: 'Roadmap', + path: 'roadmap', + contentPath: 'reference/roadmap', + }, + { + label: 'Get involved', + path: 'https://github.com/angular/angular/blob/main/CONTRIBUTING.md', + }, + { + label: 'API Reference', + children: [ + { + label: 'Overview', + path: 'api', + }, + ...getApiNavigationItems(), + ], + }, + { + label: 'CLI Reference', + children: [ + { + label: 'Overview', + path: 'cli', + contentPath: 'reference/cli', + }, + { + label: 'ng add', + path: 'cli/add', + }, + { + label: 'ng analytics', + children: [ + { + label: 'Overview', + path: 'cli/analytics', + }, + { + label: 'disable', + path: 'cli/analytics/disable', + }, + { + label: 'enable', + path: 'cli/analytics/enable', + }, + { + label: 'info', + path: 'cli/analytics/info', + }, + { + label: 'prompt', + path: 'cli/analytics/prompt', + }, + ], + }, + { + label: 'ng build', + path: 'cli/build', + }, + { + label: 'ng cache', + children: [ + { + label: 'Overview', + path: 'cli/cache', + }, + { + label: 'clean', + path: 'cli/cache/clean', + }, + { + label: 'disable', + path: 'cli/cache/disable', + }, + { + label: 'enable', + path: 'cli/cache/enable', + }, + { + label: 'info', + path: 'cli/cache/info', + }, + ], + }, + { + label: 'ng completion', + children: [ + { + label: 'Overview', + path: 'cli/completion', + }, + { + label: 'script', + path: 'cli/completion/script', + }, + ], + }, + { + label: 'ng config', + path: 'cli/config', + }, + { + label: 'ng deploy', + path: 'cli/deploy', + }, + { + label: 'ng e2e', + path: 'cli/e2e', + }, + { + label: 'ng extract-i18n', + path: 'cli/extract-i18n', + }, + { + label: 'ng generate', + children: [ + { + label: 'Overview', + path: 'cli/generate', + }, + { + label: 'ai-config', + path: 'cli/generate/ai-config', + }, + { + label: 'app-shell', + path: 'cli/generate/app-shell', + }, + { + label: 'application', + path: 'cli/generate/application', + }, + { + label: 'class', + path: 'cli/generate/class', + }, + { + label: 'component', + path: 'cli/generate/component', + }, + { + label: 'config', + path: 'cli/generate/config', + }, + { + label: 'directive', + path: 'cli/generate/directive', + }, + { + label: 'enum', + path: 'cli/generate/enum', + }, + { + label: 'environments', + path: 'cli/generate/environments', + }, + { + label: 'guard', + path: 'cli/generate/guard', + }, + { + label: 'interceptor', + path: 'cli/generate/interceptor', + }, + { + label: 'interface', + path: 'cli/generate/interface', + }, + { + label: 'library', + path: 'cli/generate/library', + }, + { + label: 'module', + path: 'cli/generate/module', + }, + { + label: 'pipe', + path: 'cli/generate/pipe', + }, + { + label: 'resolver', + path: 'cli/generate/resolver', + }, + { + label: 'service-worker', + path: 'cli/generate/service-worker', + }, + { + label: 'service', + path: 'cli/generate/service', + }, + { + label: 'web-worker', + path: 'cli/generate/web-worker', + }, + ], + }, + { + label: 'ng lint', + path: 'cli/lint', + }, + { + label: 'ng new', + path: 'cli/new', + }, + { + label: 'ng run', + path: 'cli/run', + }, + { + label: 'ng serve', + path: 'cli/serve', + }, + { + label: 'ng test', + path: 'cli/test', + }, + { + label: 'ng update', + path: 'cli/update', + }, + { + label: 'ng version', + path: 'cli/version', + }, + ], + }, + { + label: 'Error Encyclopedia', + children: [ + { + label: 'Overview', + path: 'errors', + contentPath: 'reference/errors/overview', + }, + ...ERRORS_NAV_DATA, + ], + }, + { + label: 'Extended Diagnostics', + children: [ + { + label: 'Overview', + path: 'extended-diagnostics', + contentPath: 'reference/extended-diagnostics/overview', + }, + ...EXT_DIAGNOSTICS_NAV_DATA, + ], + }, + { + label: 'Versioning and releases', + path: 'reference/releases', + contentPath: 'reference/releases', + }, + { + label: 'Version compatibility', + path: 'reference/versions', + contentPath: 'reference/versions', + }, + { + label: 'Update guide', + path: 'update-guide', + }, + { + label: 'Configurations', + children: [ + { + label: 'File structure', + path: 'reference/configs/file-structure', + contentPath: 'reference/configs/file-structure', + }, + { + label: 'Workspace configuration', + path: 'reference/configs/workspace-config', + contentPath: 'reference/configs/workspace-config', + }, + { + label: 'Angular compiler options', + path: 'reference/configs/angular-compiler-options', + contentPath: 'reference/configs/angular-compiler-options', + }, + { + label: 'npm dependencies', + path: 'reference/configs/npm-packages', + contentPath: 'reference/configs/npm-packages', + }, + ], + }, + { + label: 'Migrations', + children: [ + { + label: 'Overview', + path: 'reference/migrations', + contentPath: 'reference/migrations/overview', + }, + { + label: 'Standalone', + path: 'reference/migrations/standalone', + contentPath: 'reference/migrations/standalone', + }, + { + label: 'Control Flow Syntax', + path: 'reference/migrations/control-flow', + contentPath: 'reference/migrations/control-flow', + }, + { + label: 'inject() Function', + path: 'reference/migrations/inject-function', + contentPath: 'reference/migrations/inject-function', + }, + { + label: 'Lazy-loaded routes', + path: 'reference/migrations/route-lazy-loading', + contentPath: 'reference/migrations/route-lazy-loading', + }, + { + label: 'Signal inputs', + path: 'reference/migrations/signal-inputs', + contentPath: 'reference/migrations/signal-inputs', + }, + { + label: 'Outputs', + path: 'reference/migrations/outputs', + contentPath: 'reference/migrations/outputs', + }, + { + label: 'Signal queries', + path: 'reference/migrations/signal-queries', + contentPath: 'reference/migrations/signal-queries', + }, + { + label: 'Clean up unused imports', + path: 'reference/migrations/cleanup-unused-imports', + contentPath: 'reference/migrations/cleanup-unused-imports', + }, + { + label: 'Self-closing tags', + path: 'reference/migrations/self-closing-tags', + contentPath: 'reference/migrations/self-closing-tags', + }, + { + label: 'NgClass to Class', + path: 'reference/migrations/ngclass-to-class', + contentPath: 'reference/migrations/ngclass-to-class', + status: 'new', + }, + { + label: 'NgStyle to Style', + path: 'reference/migrations/ngstyle-to-style', + contentPath: 'reference/migrations/ngstyle-to-style', + status: 'new', + }, + ], + }, +]; + +const FOOTER_NAVIGATION_DATA: NavigationItem[] = [ + { + label: 'Press Kit', + path: 'press-kit', + contentPath: 'reference/press-kit', + }, + { + label: 'License', + path: 'license', + contentPath: 'reference/license', + }, +]; + +// Docs navigation data structure, it's used to display structure in +// navigation-list component And build the routing table for content pages. +export const SUB_NAVIGATION_DATA: SubNavigationData = { + docs: DOCS_SUB_NAVIGATION_DATA, + reference: REFERENCE_SUB_NAVIGATION_DATA, + tutorials: TUTORIALS_SUB_NAVIGATION_DATA, + footer: FOOTER_NAVIGATION_DATA, +}; diff --git a/adev-ja/src/app/routing/sub-navigation-data.ts b/adev-ja/src/app/routing/sub-navigation-data.ts new file mode 100644 index 0000000000..a8c1634fbf --- /dev/null +++ b/adev-ja/src/app/routing/sub-navigation-data.ts @@ -0,0 +1,1530 @@ +/*! + * @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 {isDevMode} from '@angular/core'; +import {NavigationItem} from '@angular/docs'; + +// These 2 imports are expected to be red because they are generated a build time +import FIRST_APP_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/first-app/routes.json'; +import LEARN_ANGULAR_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/learn-angular/routes.json'; +import DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/deferrable-views/routes.json'; +import SIGNALS_TUTORIAL_NAV_DATA from '../../../src/assets/tutorials/signals/routes.json'; +import ERRORS_NAV_DATA from '../../../src/assets/content/reference/errors/routes.json'; +import EXT_DIAGNOSTICS_NAV_DATA from '../../../src/assets/content/reference/extended-diagnostics/routes.json'; + +import {getApiNavigationItems} from '../features/references/helpers/manifest.helper'; +import {DEFAULT_PAGES} from '../core/constants/pages'; + +interface SubNavigationData { + docs: NavigationItem[]; + reference: NavigationItem[]; + tutorials: NavigationItem[]; + footer: NavigationItem[]; +} + +const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ + { + label: 'Introduction', + children: [ + { + label: 'What is Angular?', + path: 'overview', + contentPath: 'introduction/what-is-angular', + }, + { + label: 'Installation', + path: 'installation', + contentPath: 'introduction/installation', + }, + { + label: 'Essentials', + children: [ + { + label: 'Overview', + path: 'essentials', + contentPath: 'introduction/essentials/overview', + }, + { + label: 'Composition with components', + path: 'essentials/components', + contentPath: 'introduction/essentials/components', + }, + { + label: 'Reactivity with signals', + path: 'essentials/signals', + contentPath: 'introduction/essentials/signals', + }, + { + label: 'Dynamic interfaces with templates', + path: 'essentials/templates', + contentPath: 'introduction/essentials/templates', + }, + { + label: 'Modular design with dependency injection', + path: 'essentials/dependency-injection', + contentPath: 'introduction/essentials/dependency-injection', + }, + { + label: 'Next Steps', + path: 'essentials/next-steps', + contentPath: 'introduction/essentials/next-steps', + }, + ], + }, + { + label: 'Start coding! 🚀', + path: 'tutorials/learn-angular', + }, + ], + }, + { + label: 'In-depth Guides', + children: [ + { + label: 'Signals', + children: [ + { + label: 'Overview', + path: 'guide/signals', + contentPath: 'guide/signals/overview', + }, + { + label: 'Dependent state with linkedSignal', + path: 'guide/signals/linked-signal', + contentPath: 'guide/signals/linked-signal', + }, + { + label: 'Async reactivity with resources', + path: 'guide/signals/resource', + contentPath: 'guide/signals/resource', + }, + ], + }, + { + label: 'Components', + children: [ + { + label: 'Anatomy of components', + path: 'guide/components', + contentPath: 'guide/components/anatomy-of-components', + }, + { + label: 'Selectors', + path: 'guide/components/selectors', + contentPath: 'guide/components/selectors', + }, + { + label: 'Styling', + path: 'guide/components/styling', + contentPath: 'guide/components/styling', + }, + { + label: 'Accepting data with input properties', + path: 'guide/components/inputs', + contentPath: 'guide/components/inputs', + }, + { + label: 'Custom events with outputs', + path: 'guide/components/outputs', + contentPath: 'guide/components/outputs', + }, + { + label: 'Content projection with ng-content', + path: 'guide/components/content-projection', + contentPath: 'guide/components/content-projection', + }, + { + label: 'Host elements', + path: 'guide/components/host-elements', + contentPath: 'guide/components/host-elements', + }, + { + label: 'Lifecycle', + path: 'guide/components/lifecycle', + contentPath: 'guide/components/lifecycle', + }, + { + label: 'Referencing component children with queries', + path: 'guide/components/queries', + contentPath: 'guide/components/queries', + }, + { + label: 'Using DOM APIs', + path: 'guide/components/dom-apis', + contentPath: 'guide/components/dom-apis', + }, + { + label: 'Inheritance', + path: 'guide/components/inheritance', + contentPath: 'guide/components/inheritance', + }, + { + label: 'Programmatically rendering components', + path: 'guide/components/programmatic-rendering', + contentPath: 'guide/components/programmatic-rendering', + }, + { + label: 'Advanced configuration', + path: 'guide/components/advanced-configuration', + contentPath: 'guide/components/advanced-configuration', + }, + { + label: 'Custom Elements', + path: 'guide/elements', + contentPath: 'guide/elements', + }, + ], + }, + { + label: 'Templates', + children: [ + { + label: 'Overview', + path: 'guide/templates', + contentPath: 'guide/templates/overview', + }, + { + label: 'Binding dynamic text, properties and attributes', + path: 'guide/templates/binding', + contentPath: 'guide/templates/binding', + }, + { + label: 'Adding event listeners', + path: 'guide/templates/event-listeners', + contentPath: 'guide/templates/event-listeners', + }, + { + label: 'Two-way binding', + path: 'guide/templates/two-way-binding', + contentPath: 'guide/templates/two-way-binding', + }, + { + label: 'Control flow', + path: 'guide/templates/control-flow', + contentPath: 'guide/templates/control-flow', + }, + { + label: 'Pipes', + path: 'guide/templates/pipes', + contentPath: 'guide/templates/pipes', + }, + { + label: 'Slotting child content with ng-content', + path: 'guide/templates/ng-content', + contentPath: 'guide/templates/ng-content', + }, + { + label: 'Create template fragments with ng-template', + path: 'guide/templates/ng-template', + contentPath: 'guide/templates/ng-template', + }, + { + label: 'Grouping elements with ng-container', + path: 'guide/templates/ng-container', + contentPath: 'guide/templates/ng-container', + }, + { + label: 'Variables in templates', + path: 'guide/templates/variables', + contentPath: 'guide/templates/variables', + }, + { + label: 'Deferred loading with @defer', + path: 'guide/templates/defer', + contentPath: 'guide/templates/defer', + }, + { + label: 'Expression syntax', + path: 'guide/templates/expression-syntax', + contentPath: 'guide/templates/expression-syntax', + }, + { + label: 'Whitespace in templates', + path: 'guide/templates/whitespace', + contentPath: 'guide/templates/whitespace', + }, + ], + }, + { + label: 'Directives', + children: [ + { + label: 'Overview', + path: 'guide/directives', + contentPath: 'guide/directives/overview', + }, + { + label: 'Attribute directives', + path: 'guide/directives/attribute-directives', + contentPath: 'guide/directives/attribute-directives', + }, + { + label: 'Structural directives', + path: 'guide/directives/structural-directives', + contentPath: 'guide/directives/structural-directives', + }, + { + label: 'Directive composition API', + path: 'guide/directives/directive-composition-api', + contentPath: 'guide/directives/directive-composition-api', + }, + { + label: 'Optimizing images with NgOptimizedImage', + path: 'guide/image-optimization', + contentPath: 'guide/image-optimization', + }, + ], + }, + { + label: 'Dependency Injection', + children: [ + { + label: 'Overview', + path: 'guide/di', + contentPath: 'guide/di/overview', + }, + { + label: 'Understanding dependency injection', + path: 'guide/di/dependency-injection', + contentPath: 'guide/di/dependency-injection', + }, + { + label: 'Creating an injectable service', + path: 'guide/di/creating-injectable-service', + contentPath: 'guide/di/creating-injectable-service', + }, + { + label: 'Defining dependency providers', + path: 'guide/di/dependency-injection-providers', + contentPath: 'guide/di/dependency-injection-providers', + }, + { + label: 'Injection context', + path: 'guide/di/dependency-injection-context', + contentPath: 'guide/di/dependency-injection-context', + }, + { + label: 'Hierarchical injectors', + path: 'guide/di/hierarchical-dependency-injection', + contentPath: 'guide/di/hierarchical-dependency-injection', + }, + { + label: 'Optimizing injection tokens', + path: 'guide/di/lightweight-injection-tokens', + contentPath: 'guide/di/lightweight-injection-tokens', + }, + { + label: 'DI in action', + path: 'guide/di/di-in-action', + contentPath: 'guide/di/di-in-action', + }, + ], + }, + { + label: 'Routing', + status: 'updated', + children: [ + { + label: 'Overview', + path: 'guide/routing', + contentPath: 'guide/routing/overview', + }, + { + label: 'Define routes', + path: 'guide/routing/define-routes', + contentPath: 'guide/routing/define-routes', + }, + { + label: 'Show routes with Outlets', + path: 'guide/routing/show-routes-with-outlets', + contentPath: 'guide/routing/show-routes-with-outlets', + }, + { + label: 'Navigate to routes', + path: 'guide/routing/navigate-to-routes', + contentPath: 'guide/routing/navigate-to-routes', + }, + { + label: 'Read route state', + path: 'guide/routing/read-route-state', + contentPath: 'guide/routing/read-route-state', + }, + { + label: 'Redirecting routes', + path: 'guide/routing/redirecting-routes', + contentPath: 'guide/routing/redirecting-routes', + }, + { + label: 'Control route access with guards', + path: 'guide/routing/route-guards', + contentPath: 'guide/routing/route-guards', + }, + { + label: 'Route data resolvers', + path: 'guide/routing/data-resolvers', + contentPath: 'guide/routing/data-resolvers', + }, + { + label: 'Lifecycle and events', + path: 'guide/routing/lifecycle-and-events', + contentPath: 'guide/routing/lifecycle-and-events', + }, + { + label: 'Testing routing and navigation', + path: 'guide/routing/testing', + contentPath: 'guide/routing/testing', + status: 'new', + }, + { + label: 'Other routing tasks', + path: 'guide/routing/common-router-tasks', + contentPath: 'guide/routing/common-router-tasks', + }, + { + label: 'Creating custom route matches', + path: 'guide/routing/routing-with-urlmatcher', + contentPath: 'guide/routing/routing-with-urlmatcher', + }, + { + label: 'Rendering strategies', + path: 'guide/routing/rendering-strategies', + contentPath: 'guide/routing/rendering-strategies', + status: 'new', + }, + { + label: 'Customizing route behavior', + path: 'guide/routing/customizing-route-behavior', + contentPath: 'guide/routing/customizing-route-behavior', + status: 'new', + }, + { + label: 'Router reference', + path: 'guide/routing/router-reference', + contentPath: 'guide/routing/router-reference', + }, + { + label: 'Route transition animations', + path: 'guide/routing/route-transition-animations', + contentPath: 'guide/routing/route-transition-animations', + }, + ], + }, + { + label: 'Forms', + children: [ + { + label: 'Overview', + path: 'guide/forms', + contentPath: 'guide/forms/overview', + }, + { + label: 'Reactive forms', + path: 'guide/forms/reactive-forms', + contentPath: 'guide/forms/reactive-forms', + }, + { + label: 'Strictly typed reactive forms', + path: 'guide/forms/typed-forms', + contentPath: 'guide/forms/typed-forms', + }, + { + label: 'Template-driven forms', + path: 'guide/forms/template-driven-forms', + contentPath: 'guide/forms/template-driven-forms', + }, + { + label: 'Validate form input', + path: 'guide/forms/form-validation', + contentPath: 'guide/forms/form-validation', + }, + { + label: 'Building dynamic forms', + path: 'guide/forms/dynamic-forms', + contentPath: 'guide/forms/dynamic-forms', + }, + ], + }, + { + label: 'HTTP Client', + children: [ + { + label: 'Overview', + path: 'guide/http', + contentPath: 'guide/http/overview', + }, + { + label: 'Setting up HttpClient', + path: 'guide/http/setup', + contentPath: 'guide/http/setup', + }, + { + label: 'Making requests', + path: 'guide/http/making-requests', + contentPath: 'guide/http/making-requests', + }, + { + label: 'Reactive data fetching with httpResource', + path: 'guide/http/http-resource', + contentPath: 'guide/http/http-resource', + }, + { + label: 'Intercepting requests and responses', + path: 'guide/http/interceptors', + contentPath: 'guide/http/interceptors', + }, + { + label: 'Testing', + path: 'guide/http/testing', + contentPath: 'guide/http/testing', + }, + ], + }, + { + label: 'Server-side & hybrid-rendering', + children: [ + { + label: 'Overview', + path: 'guide/performance', + contentPath: 'guide/performance/overview', + }, + { + label: 'Server-side and hybrid-rendering', + path: 'guide/ssr', + contentPath: 'guide/ssr', + }, + { + label: 'Hydration', + path: 'guide/hydration', + contentPath: 'guide/hydration', + }, + { + label: 'Incremental Hydration', + path: 'guide/incremental-hydration', + contentPath: 'guide/incremental-hydration', + }, + ], + }, + { + label: 'Testing', + children: [ + { + label: 'Overview', + path: 'guide/testing', + contentPath: 'guide/testing/overview', + }, + { + label: 'Code coverage', + path: 'guide/testing/code-coverage', + contentPath: 'guide/testing/code-coverage', + }, + { + label: 'Testing services', + path: 'guide/testing/services', + contentPath: 'guide/testing/services', + }, + { + label: 'Basics of testing components', + path: 'guide/testing/components-basics', + contentPath: 'guide/testing/components-basics', + }, + { + label: 'Component testing scenarios', + path: 'guide/testing/components-scenarios', + contentPath: 'guide/testing/components-scenarios', + }, + { + label: 'Testing attribute directives', + path: 'guide/testing/attribute-directives', + contentPath: 'guide/testing/attribute-directives', + }, + { + label: 'Testing pipes', + path: 'guide/testing/pipes', + contentPath: 'guide/testing/pipes', + }, + { + label: 'Testing routing and navigation', + path: 'guide/routing/testing', + contentPath: 'guide/routing/testing', + status: 'new', + }, + { + label: 'Debugging tests', + path: 'guide/testing/debugging', + contentPath: 'guide/testing/debugging', + }, + { + label: 'Testing utility APIs', + path: 'guide/testing/utility-apis', + contentPath: 'guide/testing/utility-apis', + }, + { + label: 'Experimental unit testing integration', + path: 'guide/testing/unit-tests', + contentPath: 'guide/testing/experimental-unit-test', + }, + { + label: 'Component harnesses overview', + path: 'guide/testing/component-harnesses-overview', + contentPath: 'guide/testing/component-harnesses-overview', + }, + { + label: 'Using component harnesses in tests', + path: 'guide/testing/using-component-harnesses', + contentPath: 'guide/testing/using-component-harnesses', + }, + { + label: 'Creating harnesses for your components', + path: 'guide/testing/creating-component-harnesses', + contentPath: 'guide/testing/creating-component-harnesses', + }, + { + label: 'Adding harness support for additional testing environments', + path: 'guide/testing/component-harnesses-testing-environments', + contentPath: 'guide/testing/component-harnesses-testing-environments', + }, + ], + }, + { + label: 'Internationalization', + children: [ + { + label: 'Overview', + path: 'guide/i18n', + contentPath: 'guide/i18n/overview', + }, + { + label: 'Add the localize package', + path: 'guide/i18n/add-package', + contentPath: 'guide/i18n/add-package', + }, + { + label: 'Refer to locales by ID', + path: 'guide/i18n/locale-id', + contentPath: 'guide/i18n/locale-id', + }, + { + label: 'Format data based on locale', + path: 'guide/i18n/format-data-locale', + contentPath: 'guide/i18n/format-data-locale', + }, + { + label: 'Prepare component for translation', + path: 'guide/i18n/prepare', + contentPath: 'guide/i18n/prepare', + }, + { + label: 'Work with translation files', + path: 'guide/i18n/translation-files', + contentPath: 'guide/i18n/translation-files', + }, + { + label: 'Merge translations into the app', + path: 'guide/i18n/merge', + contentPath: 'guide/i18n/merge', + }, + { + label: 'Deploy multiple locales', + path: 'guide/i18n/deploy', + contentPath: 'guide/i18n/deploy', + }, + { + label: 'Import global variants of the locale data', + path: 'guide/i18n/import-global-variants', + contentPath: 'guide/i18n/import-global-variants', + }, + { + label: 'Manage marked text with custom IDs', + path: 'guide/i18n/manage-marked-text', + contentPath: 'guide/i18n/manage-marked-text', + }, + { + label: 'Example Angular application', + path: 'guide/i18n/example', + contentPath: 'guide/i18n/example', + }, + ], + }, + { + label: 'Animations', + status: 'updated', + children: [ + { + label: 'Enter and Leave animations', + path: 'guide/animations', + contentPath: 'guide/animations/enter-and-leave', + status: 'new', + }, + { + label: 'Complex Animations with CSS', + path: 'guide/animations/css', + contentPath: 'guide/animations/css', + }, + { + label: 'Route transition animations', + path: 'guide/routing/route-transition-animations', + contentPath: 'guide/routing/route-transition-animations', + }, + ], + }, + { + label: 'Drag and drop', + path: 'guide/drag-drop', + contentPath: 'guide/drag-drop', + }, + // TODO: unwrap to release Angular Aria docs. + ...(isDevMode() + ? [ + { + label: 'Angular Aria', + children: [ + { + label: 'Overview', + path: 'guide/aria/overview', + contentPath: 'guide/aria/overview', + }, + { + label: 'Accordion', + path: 'guide/aria/accordion', + contentPath: 'guide/aria/accordion', + }, + { + label: 'Combobox', + path: 'guide/aria/combobox', + contentPath: 'guide/aria/combobox', + }, + { + label: 'Grid', + path: 'guide/aria/grid', + contentPath: 'guide/aria/grid', + }, + { + label: 'Listbox', + path: 'guide/aria/listbox', + contentPath: 'guide/aria/listbox', + }, + { + label: 'Menu', + path: 'guide/aria/menu', + contentPath: 'guide/aria/menu', + }, + { + label: 'Radio Group', + path: 'guide/aria/radio', + contentPath: 'guide/aria/radio', + }, + { + label: 'Tabs', + path: 'guide/aria/tabs', + contentPath: 'guide/aria/tabs', + }, + { + label: 'Toolbar', + path: 'guide/aria/toolbar', + contentPath: 'guide/aria/toolbar', + }, + { + label: 'Tree', + path: 'guide/aria/tree', + contentPath: 'guide/aria/tree', + }, + ], + }, + ] + : []), + ], + }, + { + label: 'Build with AI', + status: 'new', + children: [ + { + label: 'Get Started', + path: 'ai', + contentPath: 'ai/overview', + }, + { + label: 'LLM prompts and AI IDE setup', + path: 'ai/develop-with-ai', + contentPath: 'ai/develop-with-ai', + }, + { + label: 'Design Patterns', + path: 'ai/design-patterns', + contentPath: 'ai/design-patterns', + }, + { + label: 'Angular CLI MCP Server setup', + path: 'ai/mcp', + contentPath: 'ai/mcp-server-setup', + }, + ], + }, + { + label: 'Developer Tools', + children: [ + { + label: 'Angular CLI', + children: [ + { + label: 'Overview', + path: 'tools/cli', + contentPath: 'tools/cli/overview', + }, + { + label: 'Local set-up', + path: 'tools/cli/setup-local', + contentPath: 'tools/cli/setup-local', + }, + { + label: 'Building Angular apps', + path: 'tools/cli/build', + contentPath: 'tools/cli/build', + }, + { + label: 'Serving Angular apps for development', + path: 'tools/cli/serve', + contentPath: 'tools/cli/serve', + }, + { + label: 'Deployment', + path: 'tools/cli/deployment', + contentPath: 'tools/cli/deployment', + }, + { + label: 'End-to-End Testing', + path: 'tools/cli/end-to-end', + contentPath: 'tools/cli/end-to-end', + }, + { + label: 'Migrating to new build system', + path: 'tools/cli/build-system-migration', + contentPath: 'tools/cli/build-system-migration', + }, + { + label: 'Build environments', + path: 'tools/cli/environments', + contentPath: 'tools/cli/environments', + }, + { + label: 'Angular CLI builders', + path: 'tools/cli/cli-builder', + contentPath: 'tools/cli/cli-builder', + }, + { + label: 'Generating code using schematics', + path: 'tools/cli/schematics', + contentPath: 'tools/cli/schematics', + }, + { + label: 'Authoring schematics', + path: 'tools/cli/schematics-authoring', + contentPath: 'tools/cli/schematics-authoring', + }, + { + label: 'Schematics for libraries', + path: 'tools/cli/schematics-for-libraries', + contentPath: 'tools/cli/schematics-for-libraries', + }, + { + label: 'Template type checking', + path: 'tools/cli/template-typecheck', + contentPath: 'tools/cli/template-typecheck', + }, + { + label: 'Ahead-of-time (AOT) compilation', + path: 'tools/cli/aot-compiler', + contentPath: 'tools/cli/aot-compiler', + }, + { + label: 'AOT metadata errors', + path: 'tools/cli/aot-metadata-errors', + contentPath: 'tools/cli/aot-metadata-errors', + }, + ], + }, + { + label: 'Libraries', + children: [ + { + label: 'Overview', + path: 'tools/libraries', + contentPath: 'tools/libraries/overview', + }, + { + label: 'Creating Libraries', + path: 'tools/libraries/creating-libraries', + contentPath: 'tools/libraries/creating-libraries', + }, + { + label: 'Using Libraries', + path: 'tools/libraries/using-libraries', + contentPath: 'tools/libraries/using-libraries', + }, + { + label: 'Angular Package Format', + path: 'tools/libraries/angular-package-format', + contentPath: 'tools/libraries/angular-package-format', + }, + ], + }, + { + label: 'DevTools', + children: [ + { + label: 'Overview', + path: 'tools/devtools', + contentPath: 'tools/devtools/overview', + }, + { + label: 'Components', + path: 'tools/devtools/component', + contentPath: 'tools/devtools/component', + }, + { + label: 'Profiler', + path: 'tools/devtools/profiler', + contentPath: 'tools/devtools/profiler', + }, + // TODO: create those guides + // The signal debugging docs should also be added to the signal section + // { + // label: 'Signals', + // path: 'tools/devtools/signals', + // contentPath: 'tools/devtools/signals', + // }, + // { + // label: 'Router', + // path: 'tools/devtools/router', + // contentPath: 'tools/devtools/router', + // } + ], + }, + { + label: 'Language Service', + path: 'tools/language-service', + contentPath: 'tools/language-service', + }, + ], + }, + { + label: 'Best Practices', + children: [ + { + label: 'Style Guide', + path: 'style-guide', + contentPath: 'best-practices/style-guide', + status: 'updated', + }, + { + label: 'Security', + path: 'best-practices/security', + contentPath: 'guide/security', // Have not refactored due to build issues + }, + { + label: 'Accessibility', + path: 'best-practices/a11y', + contentPath: 'best-practices/a11y', + }, + { + label: 'Unhandled errors in Angular', + path: 'best-practices/error-handling', + contentPath: 'best-practices/error-handling', + }, + { + label: 'Performance', + children: [ + { + label: 'Overview', + path: 'best-practices/runtime-performance', + contentPath: 'best-practices/runtime-performance/overview', + }, + { + label: 'Zone pollution', + path: 'best-practices/zone-pollution', + contentPath: 'best-practices/runtime-performance/zone-pollution', + }, + { + label: 'Slow computations', + path: 'best-practices/slow-computations', + contentPath: 'best-practices/runtime-performance/slow-computations', + }, + { + label: 'Skipping component subtrees', + path: 'best-practices/skipping-subtrees', + contentPath: 'best-practices/runtime-performance/skipping-subtrees', + }, + { + label: 'Profiling with the Chrome DevTools', + path: 'best-practices/profiling-with-chrome-devtools', + contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools', + }, + {label: 'Zoneless', path: 'guide/zoneless', contentPath: 'guide/zoneless'}, + ], + }, + { + label: 'Keeping up-to-date', + path: 'update', + contentPath: 'best-practices/update', + }, + ], + }, + { + label: 'Extended Ecosystem', + children: [ + { + label: 'NgModules', + path: 'guide/ngmodules/overview', + contentPath: 'guide/ngmodules/overview', + }, + { + label: 'Legacy Animations', + children: [ + { + label: 'Overview', + path: 'guide/legacy-animations', + contentPath: 'guide/animations/overview', + }, + { + label: 'Transition and Triggers', + path: 'guide/legacy-animations/transition-and-triggers', + contentPath: 'guide/animations/transition-and-triggers', + }, + { + label: 'Complex Sequences', + path: 'guide/legacy-animations/complex-sequences', + contentPath: 'guide/animations/complex-sequences', + }, + { + label: 'Reusable Animations', + path: 'guide/legacy-animations/reusable-animations', + contentPath: 'guide/animations/reusable-animations', + }, + { + label: 'Migrating to Native CSS Animations', + path: 'guide/animations/migration', + contentPath: 'guide/animations/migration', + }, + ], + }, + { + label: 'Using RxJS with Angular', + children: [ + { + label: 'Signals interop', + path: 'ecosystem/rxjs-interop', + contentPath: 'ecosystem/rxjs-interop/signals-interop', + }, + { + label: 'Component output interop', + path: 'ecosystem/rxjs-interop/output-interop', + contentPath: 'ecosystem/rxjs-interop/output-interop', + }, + { + label: 'Unsubscribing with takeUntilDestroyed', + path: 'ecosystem/rxjs-interop/take-until-destroyed', + contentPath: 'ecosystem/rxjs-interop/take-until-destroyed', + }, + ], + }, + { + label: 'Service Workers & PWAs', + children: [ + { + label: 'Overview', + path: 'ecosystem/service-workers', + contentPath: 'ecosystem/service-workers/overview', + }, + { + label: 'Getting started', + path: 'ecosystem/service-workers/getting-started', + contentPath: 'ecosystem/service-workers/getting-started', + }, + { + label: 'Custom service worker scripts', + path: 'ecosystem/service-workers/custom-service-worker-scripts', + contentPath: 'ecosystem/service-workers/custom-service-worker-scripts', + }, + { + label: 'Configuration file', + path: 'ecosystem/service-workers/config', + contentPath: 'ecosystem/service-workers/config', + }, + { + label: 'Communicating with the service worker', + path: 'ecosystem/service-workers/communications', + contentPath: 'ecosystem/service-workers/communications', + }, + { + label: 'Push notifications', + path: 'ecosystem/service-workers/push-notifications', + contentPath: 'ecosystem/service-workers/push-notifications', + }, + { + label: 'Service worker devops', + path: 'ecosystem/service-workers/devops', + contentPath: 'ecosystem/service-workers/devops', + }, + { + label: 'App shell pattern', + path: 'ecosystem/service-workers/app-shell', + contentPath: 'ecosystem/service-workers/app-shell', + }, + ], + }, + { + label: 'Web workers', + path: 'ecosystem/web-workers', + contentPath: 'ecosystem/web-workers', + }, + { + label: 'Custom build pipeline', + path: 'ecosystem/custom-build-pipeline', + contentPath: 'ecosystem/custom-build-pipeline', + }, + { + label: 'Tailwind', + path: 'guide/tailwind', + contentPath: 'guide/tailwind', + status: 'new', + }, + { + label: 'Angular Fire', + path: 'https://github.com/angular/angularfire#readme', + }, + { + label: 'Google Maps', + path: 'https://github.com/angular/components/tree/main/src/google-maps#readme', + }, + { + label: 'Google Pay', + path: 'https://github.com/google-pay/google-pay-button#angular', + }, + { + label: 'YouTube player', + path: 'https://github.com/angular/components/blob/main/src/youtube-player/README.md', + }, + { + label: 'Angular CDK', + path: 'https://material.angular.dev/cdk/categories', + }, + { + label: 'Angular Material', + path: 'https://material.angular.dev/', + }, + ], + }, + ...(isDevMode() + ? [ + { + label: 'Adev Dev Guide', + children: [ + { + label: 'Kitchen Sink', + path: 'kitchen-sink', + contentPath: 'kitchen-sink', + }, + ], + }, + ] + : []), +]; + +export const TUTORIALS_SUB_NAVIGATION_DATA: NavigationItem[] = [ + FIRST_APP_TUTORIAL_NAV_DATA, + LEARN_ANGULAR_TUTORIAL_NAV_DATA, + DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA, + SIGNALS_TUTORIAL_NAV_DATA, + { + path: DEFAULT_PAGES.TUTORIALS, + contentPath: 'tutorials/home', + label: 'Tutorials', + }, +]; + +const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ + { + label: 'Roadmap', + path: 'roadmap', + contentPath: 'reference/roadmap', + }, + { + label: 'Get involved', + path: 'https://github.com/angular/angular/blob/main/CONTRIBUTING.md', + }, + { + label: 'API Reference', + children: [ + { + label: 'Overview', + path: 'api', + }, + ...getApiNavigationItems(), + ], + }, + { + label: 'CLI Reference', + children: [ + { + label: 'Overview', + path: 'cli', + contentPath: 'reference/cli', + }, + { + label: 'ng add', + path: 'cli/add', + }, + { + label: 'ng analytics', + children: [ + { + label: 'Overview', + path: 'cli/analytics', + }, + { + label: 'disable', + path: 'cli/analytics/disable', + }, + { + label: 'enable', + path: 'cli/analytics/enable', + }, + { + label: 'info', + path: 'cli/analytics/info', + }, + { + label: 'prompt', + path: 'cli/analytics/prompt', + }, + ], + }, + { + label: 'ng build', + path: 'cli/build', + }, + { + label: 'ng cache', + children: [ + { + label: 'Overview', + path: 'cli/cache', + }, + { + label: 'clean', + path: 'cli/cache/clean', + }, + { + label: 'disable', + path: 'cli/cache/disable', + }, + { + label: 'enable', + path: 'cli/cache/enable', + }, + { + label: 'info', + path: 'cli/cache/info', + }, + ], + }, + { + label: 'ng completion', + children: [ + { + label: 'Overview', + path: 'cli/completion', + }, + { + label: 'script', + path: 'cli/completion/script', + }, + ], + }, + { + label: 'ng config', + path: 'cli/config', + }, + { + label: 'ng deploy', + path: 'cli/deploy', + }, + { + label: 'ng e2e', + path: 'cli/e2e', + }, + { + label: 'ng extract-i18n', + path: 'cli/extract-i18n', + }, + { + label: 'ng generate', + children: [ + { + label: 'Overview', + path: 'cli/generate', + }, + { + label: 'ai-config', + path: 'cli/generate/ai-config', + }, + { + label: 'app-shell', + path: 'cli/generate/app-shell', + }, + { + label: 'application', + path: 'cli/generate/application', + }, + { + label: 'class', + path: 'cli/generate/class', + }, + { + label: 'component', + path: 'cli/generate/component', + }, + { + label: 'config', + path: 'cli/generate/config', + }, + { + label: 'directive', + path: 'cli/generate/directive', + }, + { + label: 'enum', + path: 'cli/generate/enum', + }, + { + label: 'environments', + path: 'cli/generate/environments', + }, + { + label: 'guard', + path: 'cli/generate/guard', + }, + { + label: 'interceptor', + path: 'cli/generate/interceptor', + }, + { + label: 'interface', + path: 'cli/generate/interface', + }, + { + label: 'library', + path: 'cli/generate/library', + }, + { + label: 'module', + path: 'cli/generate/module', + }, + { + label: 'pipe', + path: 'cli/generate/pipe', + }, + { + label: 'resolver', + path: 'cli/generate/resolver', + }, + { + label: 'service-worker', + path: 'cli/generate/service-worker', + }, + { + label: 'service', + path: 'cli/generate/service', + }, + { + label: 'web-worker', + path: 'cli/generate/web-worker', + }, + ], + }, + { + label: 'ng lint', + path: 'cli/lint', + }, + { + label: 'ng new', + path: 'cli/new', + }, + { + label: 'ng run', + path: 'cli/run', + }, + { + label: 'ng serve', + path: 'cli/serve', + }, + { + label: 'ng test', + path: 'cli/test', + }, + { + label: 'ng update', + path: 'cli/update', + }, + { + label: 'ng version', + path: 'cli/version', + }, + ], + }, + { + label: 'Error Encyclopedia', + children: [ + { + label: 'Overview', + path: 'errors', + contentPath: 'reference/errors/overview', + }, + ...ERRORS_NAV_DATA, + ], + }, + { + label: 'Extended Diagnostics', + children: [ + { + label: 'Overview', + path: 'extended-diagnostics', + contentPath: 'reference/extended-diagnostics/overview', + }, + ...EXT_DIAGNOSTICS_NAV_DATA, + ], + }, + { + label: 'Versioning and releases', + path: 'reference/releases', + contentPath: 'reference/releases', + }, + { + label: 'Version compatibility', + path: 'reference/versions', + contentPath: 'reference/versions', + }, + { + label: 'Update guide', + path: 'update-guide', + }, + { + label: 'Configurations', + children: [ + { + label: 'File structure', + path: 'reference/configs/file-structure', + contentPath: 'reference/configs/file-structure', + }, + { + label: 'Workspace configuration', + path: 'reference/configs/workspace-config', + contentPath: 'reference/configs/workspace-config', + }, + { + label: 'Angular compiler options', + path: 'reference/configs/angular-compiler-options', + contentPath: 'reference/configs/angular-compiler-options', + }, + { + label: 'npm dependencies', + path: 'reference/configs/npm-packages', + contentPath: 'reference/configs/npm-packages', + }, + ], + }, + { + label: 'Migrations', + children: [ + { + label: 'Overview', + path: 'reference/migrations', + contentPath: 'reference/migrations/overview', + }, + { + label: 'Standalone', + path: 'reference/migrations/standalone', + contentPath: 'reference/migrations/standalone', + }, + { + label: 'Control Flow Syntax', + path: 'reference/migrations/control-flow', + contentPath: 'reference/migrations/control-flow', + }, + { + label: 'inject() Function', + path: 'reference/migrations/inject-function', + contentPath: 'reference/migrations/inject-function', + }, + { + label: 'Lazy-loaded routes', + path: 'reference/migrations/route-lazy-loading', + contentPath: 'reference/migrations/route-lazy-loading', + }, + { + label: 'Signal inputs', + path: 'reference/migrations/signal-inputs', + contentPath: 'reference/migrations/signal-inputs', + }, + { + label: 'Outputs', + path: 'reference/migrations/outputs', + contentPath: 'reference/migrations/outputs', + }, + { + label: 'Signal queries', + path: 'reference/migrations/signal-queries', + contentPath: 'reference/migrations/signal-queries', + }, + { + label: 'Clean up unused imports', + path: 'reference/migrations/cleanup-unused-imports', + contentPath: 'reference/migrations/cleanup-unused-imports', + }, + { + label: 'Self-closing tags', + path: 'reference/migrations/self-closing-tags', + contentPath: 'reference/migrations/self-closing-tags', + }, + { + label: 'NgClass to Class', + path: 'reference/migrations/ngclass-to-class', + contentPath: 'reference/migrations/ngclass-to-class', + status: 'new', + }, + { + label: 'NgStyle to Style', + path: 'reference/migrations/ngstyle-to-style', + contentPath: 'reference/migrations/ngstyle-to-style', + status: 'new', + }, + ], + }, +]; + +const FOOTER_NAVIGATION_DATA: NavigationItem[] = [ + { + label: 'Press Kit', + path: 'press-kit', + contentPath: 'reference/press-kit', + }, + { + label: 'License', + path: 'license', + contentPath: 'reference/license', + }, +]; + +// Docs navigation data structure, it's used to display structure in +// navigation-list component And build the routing table for content pages. +export const SUB_NAVIGATION_DATA: SubNavigationData = { + docs: DOCS_SUB_NAVIGATION_DATA, + reference: REFERENCE_SUB_NAVIGATION_DATA, + tutorials: TUTORIALS_SUB_NAVIGATION_DATA, + footer: FOOTER_NAVIGATION_DATA, +}; diff --git a/tools/update-origin.ts b/tools/update-origin.ts index bad01406f8..ad8caa2130 100644 --- a/tools/update-origin.ts +++ b/tools/update-origin.ts @@ -6,10 +6,9 @@ import { parseArgs } from 'node:util'; import { cpRf, exists } from './lib/fsutils'; import { adevJaDir, rootDir } from './lib/workspace'; -const localizedFilePatterns = [ +const localizedFilePatterns: Array = [ // Text contents - 'src/content/**/*.md', - '!src/content/**/license.md', + ['src/content/**/*.md', '!src/content/**/license.md'], // Tutorial config files 'src/content/tutorials/**/config.json', // Update home files @@ -19,10 +18,10 @@ const localizedFilePatterns = [ 'src/app/features/update/update.component.ts', 'src/app/features/update/update.component.html', // Application files - 'src/app/sub-navigation-data.ts', + 'src/app/routing/sub-navigation-data.ts', 'src/app/core/layout/navigation/navigation.component.html', 'shared-docs/components/table-of-contents/table-of-contents.component.html', - 'shared-docs/components/cookie-popup/cookie-popup.component.html' + 'shared-docs/components/cookie-popup/cookie-popup.component.html', ]; async function main() { @@ -50,20 +49,26 @@ async function resetOrigin(hash: string) { async function copyOriginFiles() { const adevDir = resolve(rootDir, 'origin/adev'); - const adevFiles = await glob(localizedFilePatterns, { - cwd: adevDir, - caseSensitiveMatch: true, - }); // adev-ja 内に同名ファイルの .en.xxx がある場合はそちらを上書きする // .en.xxx がない場合はそのままコピーする - for (const file of adevFiles) { - const src = resolve(adevDir, file); - const ext = extname(file); - const enFilePath = file.replace(`${ext}`, `.en${ext}`); - const isTranslated = await exists(resolve(adevJaDir, enFilePath)); - const dest = resolve(adevJaDir, isTranslated ? enFilePath : file); - await cpRf(src, dest); + for (const pattern of localizedFilePatterns) { + const files = await glob(pattern, { + cwd: adevDir, + caseSensitiveMatch: true, + }); + // 否定パターンではなくパターンに合致するファイルがまったくない場合はエラーとする。 + if (files.length === 0) { + throw new Error(`No files matched: ${JSON.stringify(pattern)}`); + } + for (const file of files) { + const src = resolve(adevDir, file); + const ext = extname(file); + const enFilePath = file.replace(`${ext}`, `.en${ext}`); + const isTranslated = await exists(resolve(adevJaDir, enFilePath)); + const dest = resolve(adevJaDir, isTranslated ? enFilePath : file); + await cpRf(src, dest); + } } } From 4ac27e530bb30f7000b535db3a9ef438d0b89319 Mon Sep 17 00:00:00 2001 From: Suguru Inatomi Date: Wed, 17 Sep 2025 20:55:09 +0900 Subject: [PATCH 2/2] fix: migrate localization --- .../src/app/routing/sub-navigation-data.ts | 452 ++--- adev-ja/src/app/sub-navigation-data.en.ts | 1453 ---------------- adev-ja/src/app/sub-navigation-data.ts | 1461 ----------------- 3 files changed, 230 insertions(+), 3136 deletions(-) delete mode 100644 adev-ja/src/app/sub-navigation-data.en.ts delete mode 100644 adev-ja/src/app/sub-navigation-data.ts diff --git a/adev-ja/src/app/routing/sub-navigation-data.ts b/adev-ja/src/app/routing/sub-navigation-data.ts index a8c1634fbf..548ccde587 100644 --- a/adev-ja/src/app/routing/sub-navigation-data.ts +++ b/adev-ja/src/app/routing/sub-navigation-data.ts @@ -29,644 +29,644 @@ interface SubNavigationData { const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ { - label: 'Introduction', + label: '入門', children: [ { - label: 'What is Angular?', + label: 'Angularとは?', path: 'overview', contentPath: 'introduction/what-is-angular', }, { - label: 'Installation', + label: 'インストール', path: 'installation', contentPath: 'introduction/installation', }, { - label: 'Essentials', + label: '基本概念', children: [ { - label: 'Overview', + label: '概要', path: 'essentials', contentPath: 'introduction/essentials/overview', }, { - label: 'Composition with components', + label: 'コンポーネントによる構築', path: 'essentials/components', contentPath: 'introduction/essentials/components', }, { - label: 'Reactivity with signals', + label: 'リアクティビティとシグナル', path: 'essentials/signals', contentPath: 'introduction/essentials/signals', }, { - label: 'Dynamic interfaces with templates', + label: 'テンプレートによる動的なインターフェース', path: 'essentials/templates', contentPath: 'introduction/essentials/templates', }, { - label: 'Modular design with dependency injection', + label: '依存性の注入によるモジュール設計', path: 'essentials/dependency-injection', contentPath: 'introduction/essentials/dependency-injection', }, { - label: 'Next Steps', + label: '次のステップ', path: 'essentials/next-steps', contentPath: 'introduction/essentials/next-steps', }, ], }, { - label: 'Start coding! 🚀', + label: '作ってみよう! 🚀', path: 'tutorials/learn-angular', }, ], }, { - label: 'In-depth Guides', + label: '詳細ガイド', children: [ { - label: 'Signals', + label: 'シグナル', children: [ { - label: 'Overview', + label: '概要', path: 'guide/signals', contentPath: 'guide/signals/overview', }, { - label: 'Dependent state with linkedSignal', + label: 'linkedSignalによる派生状態', path: 'guide/signals/linked-signal', contentPath: 'guide/signals/linked-signal', }, { - label: 'Async reactivity with resources', + label: 'resourceによる非同期リアクティビティ', path: 'guide/signals/resource', contentPath: 'guide/signals/resource', }, ], }, { - label: 'Components', + label: 'コンポーネント', children: [ { - label: 'Anatomy of components', + label: 'コンポーネントの構造', path: 'guide/components', contentPath: 'guide/components/anatomy-of-components', }, { - label: 'Selectors', + label: 'セレクター', path: 'guide/components/selectors', contentPath: 'guide/components/selectors', }, { - label: 'Styling', + label: 'スタイリング', path: 'guide/components/styling', contentPath: 'guide/components/styling', }, { - label: 'Accepting data with input properties', + label: '入力プロパティによるデータ受け入れ', path: 'guide/components/inputs', contentPath: 'guide/components/inputs', }, { - label: 'Custom events with outputs', + label: '出力によるカスタムイベント', path: 'guide/components/outputs', contentPath: 'guide/components/outputs', }, { - label: 'Content projection with ng-content', + label: 'ng-contentによるコンテンツ投影', path: 'guide/components/content-projection', contentPath: 'guide/components/content-projection', }, { - label: 'Host elements', + label: 'ホスト要素', path: 'guide/components/host-elements', contentPath: 'guide/components/host-elements', }, { - label: 'Lifecycle', + label: 'ライフサイクル', path: 'guide/components/lifecycle', contentPath: 'guide/components/lifecycle', }, { - label: 'Referencing component children with queries', + label: 'クエリによるコンポーネントの子への参照', path: 'guide/components/queries', contentPath: 'guide/components/queries', }, { - label: 'Using DOM APIs', + label: 'DOM APIの使用', path: 'guide/components/dom-apis', contentPath: 'guide/components/dom-apis', }, { - label: 'Inheritance', + label: '継承', path: 'guide/components/inheritance', contentPath: 'guide/components/inheritance', }, { - label: 'Programmatically rendering components', + label: 'プログラムによるコンポーネントレンダリング', path: 'guide/components/programmatic-rendering', contentPath: 'guide/components/programmatic-rendering', }, { - label: 'Advanced configuration', + label: '高度な設定', path: 'guide/components/advanced-configuration', contentPath: 'guide/components/advanced-configuration', }, { - label: 'Custom Elements', + label: 'カスタム要素', path: 'guide/elements', contentPath: 'guide/elements', }, ], }, { - label: 'Templates', + label: 'テンプレート', children: [ { - label: 'Overview', + label: '概要', path: 'guide/templates', contentPath: 'guide/templates/overview', }, { - label: 'Binding dynamic text, properties and attributes', + label: '動的テキスト、プロパティ、属性のバインディング', path: 'guide/templates/binding', contentPath: 'guide/templates/binding', }, { - label: 'Adding event listeners', + label: 'イベントリスナーの追加', path: 'guide/templates/event-listeners', contentPath: 'guide/templates/event-listeners', }, { - label: 'Two-way binding', + label: '双方向バインディング', path: 'guide/templates/two-way-binding', contentPath: 'guide/templates/two-way-binding', }, { - label: 'Control flow', + label: '制御フロー', path: 'guide/templates/control-flow', contentPath: 'guide/templates/control-flow', }, { - label: 'Pipes', + label: 'パイプ', path: 'guide/templates/pipes', contentPath: 'guide/templates/pipes', }, { - label: 'Slotting child content with ng-content', + label: 'ng-contentによる子コンテンツのスロット化', path: 'guide/templates/ng-content', contentPath: 'guide/templates/ng-content', }, { - label: 'Create template fragments with ng-template', + label: 'ng-templateによるテンプレートフラグメントの作成', path: 'guide/templates/ng-template', contentPath: 'guide/templates/ng-template', }, { - label: 'Grouping elements with ng-container', + label: 'ng-containerによる要素のグループ化', path: 'guide/templates/ng-container', contentPath: 'guide/templates/ng-container', }, { - label: 'Variables in templates', + label: 'テンプレート内の変数', path: 'guide/templates/variables', contentPath: 'guide/templates/variables', }, { - label: 'Deferred loading with @defer', + label: '@deferによる遅延読み込み', path: 'guide/templates/defer', contentPath: 'guide/templates/defer', }, { - label: 'Expression syntax', + label: '式の構文', path: 'guide/templates/expression-syntax', contentPath: 'guide/templates/expression-syntax', }, { - label: 'Whitespace in templates', + label: 'テンプレート内の空白', path: 'guide/templates/whitespace', contentPath: 'guide/templates/whitespace', }, ], }, { - label: 'Directives', + label: 'ディレクティブ', children: [ { - label: 'Overview', + label: '概要', path: 'guide/directives', contentPath: 'guide/directives/overview', }, { - label: 'Attribute directives', + label: '属性ディレクティブ', path: 'guide/directives/attribute-directives', contentPath: 'guide/directives/attribute-directives', }, { - label: 'Structural directives', + label: '構造ディレクティブ', path: 'guide/directives/structural-directives', contentPath: 'guide/directives/structural-directives', }, { - label: 'Directive composition API', + label: 'ディレクティブコンポジションAPI', path: 'guide/directives/directive-composition-api', contentPath: 'guide/directives/directive-composition-api', }, { - label: 'Optimizing images with NgOptimizedImage', + label: 'NgOptimizedImageによる画像の最適化', path: 'guide/image-optimization', contentPath: 'guide/image-optimization', }, ], }, { - label: 'Dependency Injection', + label: '依存性の注入', children: [ { - label: 'Overview', + label: '概要', path: 'guide/di', contentPath: 'guide/di/overview', }, { - label: 'Understanding dependency injection', + label: '依存性の注入を理解する', path: 'guide/di/dependency-injection', contentPath: 'guide/di/dependency-injection', }, { - label: 'Creating an injectable service', + label: '注入可能なサービスの作成', path: 'guide/di/creating-injectable-service', contentPath: 'guide/di/creating-injectable-service', }, { - label: 'Defining dependency providers', + label: '依存性プロバイダーの定義', path: 'guide/di/dependency-injection-providers', contentPath: 'guide/di/dependency-injection-providers', }, { - label: 'Injection context', + label: '注入コンテキスト', path: 'guide/di/dependency-injection-context', contentPath: 'guide/di/dependency-injection-context', }, { - label: 'Hierarchical injectors', + label: '階層的なインジェクター', path: 'guide/di/hierarchical-dependency-injection', contentPath: 'guide/di/hierarchical-dependency-injection', }, { - label: 'Optimizing injection tokens', + label: 'インジェクショントークンの最適化', path: 'guide/di/lightweight-injection-tokens', contentPath: 'guide/di/lightweight-injection-tokens', }, { - label: 'DI in action', + label: 'DIの実践', path: 'guide/di/di-in-action', contentPath: 'guide/di/di-in-action', }, ], }, { - label: 'Routing', + label: 'ルーティング', status: 'updated', children: [ { - label: 'Overview', + label: '概要', path: 'guide/routing', contentPath: 'guide/routing/overview', }, { - label: 'Define routes', + label: 'ルートを定義する', path: 'guide/routing/define-routes', contentPath: 'guide/routing/define-routes', }, { - label: 'Show routes with Outlets', + label: 'アウトレットにルートを表示する', path: 'guide/routing/show-routes-with-outlets', contentPath: 'guide/routing/show-routes-with-outlets', }, { - label: 'Navigate to routes', + label: 'ルートへのナビゲーション', path: 'guide/routing/navigate-to-routes', contentPath: 'guide/routing/navigate-to-routes', }, { - label: 'Read route state', + label: 'ルートの状態を読み取る', path: 'guide/routing/read-route-state', contentPath: 'guide/routing/read-route-state', }, { - label: 'Redirecting routes', + label: 'ルートのリダイレクト', path: 'guide/routing/redirecting-routes', contentPath: 'guide/routing/redirecting-routes', }, { - label: 'Control route access with guards', + label: 'ガードによるルートアクセスの制御', path: 'guide/routing/route-guards', contentPath: 'guide/routing/route-guards', }, { - label: 'Route data resolvers', + label: 'ルートデータリゾルバー', path: 'guide/routing/data-resolvers', contentPath: 'guide/routing/data-resolvers', }, { - label: 'Lifecycle and events', + label: 'ライフサイクルとイベント', path: 'guide/routing/lifecycle-and-events', contentPath: 'guide/routing/lifecycle-and-events', }, { - label: 'Testing routing and navigation', + label: 'ルーティングとナビゲーションのテスト', path: 'guide/routing/testing', contentPath: 'guide/routing/testing', status: 'new', }, { - label: 'Other routing tasks', + label: 'その他のルーティングタスク', path: 'guide/routing/common-router-tasks', contentPath: 'guide/routing/common-router-tasks', }, { - label: 'Creating custom route matches', + label: 'カスタムルートマッチの作成', path: 'guide/routing/routing-with-urlmatcher', contentPath: 'guide/routing/routing-with-urlmatcher', }, { - label: 'Rendering strategies', + label: 'レンダリング戦略', path: 'guide/routing/rendering-strategies', contentPath: 'guide/routing/rendering-strategies', status: 'new', }, { - label: 'Customizing route behavior', + label: 'ルートの動作のカスタマイズ', path: 'guide/routing/customizing-route-behavior', contentPath: 'guide/routing/customizing-route-behavior', status: 'new', }, { - label: 'Router reference', + label: 'ルーターリファレンス', path: 'guide/routing/router-reference', contentPath: 'guide/routing/router-reference', }, { - label: 'Route transition animations', + label: 'ルート遷移アニメーション', path: 'guide/routing/route-transition-animations', contentPath: 'guide/routing/route-transition-animations', }, ], }, { - label: 'Forms', + label: 'フォーム', children: [ { - label: 'Overview', + label: '概要', path: 'guide/forms', contentPath: 'guide/forms/overview', }, { - label: 'Reactive forms', + label: 'リアクティブフォーム', path: 'guide/forms/reactive-forms', contentPath: 'guide/forms/reactive-forms', }, { - label: 'Strictly typed reactive forms', + label: '厳密に型付けされたリアクティブフォーム', path: 'guide/forms/typed-forms', contentPath: 'guide/forms/typed-forms', }, { - label: 'Template-driven forms', + label: 'テンプレート駆動型フォーム', path: 'guide/forms/template-driven-forms', contentPath: 'guide/forms/template-driven-forms', }, { - label: 'Validate form input', + label: 'フォーム入力の検証', path: 'guide/forms/form-validation', contentPath: 'guide/forms/form-validation', }, { - label: 'Building dynamic forms', + label: '動的フォームの構築', path: 'guide/forms/dynamic-forms', contentPath: 'guide/forms/dynamic-forms', }, ], }, { - label: 'HTTP Client', + label: 'HTTPクライアント', children: [ { - label: 'Overview', + label: '概要', path: 'guide/http', contentPath: 'guide/http/overview', }, { - label: 'Setting up HttpClient', + label: 'HttpClientの設定', path: 'guide/http/setup', contentPath: 'guide/http/setup', }, { - label: 'Making requests', + label: 'リクエストの実行', path: 'guide/http/making-requests', contentPath: 'guide/http/making-requests', }, { - label: 'Reactive data fetching with httpResource', + label: 'httpResourceを使ったリアクティブなデータ取得', path: 'guide/http/http-resource', contentPath: 'guide/http/http-resource', }, { - label: 'Intercepting requests and responses', + label: 'リクエストとレスポンスへの介入', path: 'guide/http/interceptors', contentPath: 'guide/http/interceptors', }, { - label: 'Testing', + label: 'テスト', path: 'guide/http/testing', contentPath: 'guide/http/testing', }, ], }, { - label: 'Server-side & hybrid-rendering', + label: 'サーバーサイド・ハイブリッドレンダリング', children: [ { - label: 'Overview', + label: '概要', path: 'guide/performance', contentPath: 'guide/performance/overview', }, { - label: 'Server-side and hybrid-rendering', + label: 'サーバーサイド・ハイブリッドレンダリング', path: 'guide/ssr', contentPath: 'guide/ssr', }, { - label: 'Hydration', + label: 'ハイドレーション', path: 'guide/hydration', contentPath: 'guide/hydration', }, { - label: 'Incremental Hydration', + label: 'インクリメンタルハイドレーション', path: 'guide/incremental-hydration', contentPath: 'guide/incremental-hydration', }, ], }, { - label: 'Testing', + label: 'テスト', children: [ { - label: 'Overview', + label: '概要', path: 'guide/testing', contentPath: 'guide/testing/overview', }, { - label: 'Code coverage', + label: 'コードカバレッジ', path: 'guide/testing/code-coverage', contentPath: 'guide/testing/code-coverage', }, { - label: 'Testing services', + label: 'サービスのテスト', path: 'guide/testing/services', contentPath: 'guide/testing/services', }, { - label: 'Basics of testing components', + label: 'コンポーネントのテストの基本', path: 'guide/testing/components-basics', contentPath: 'guide/testing/components-basics', }, { - label: 'Component testing scenarios', + label: 'コンポーネントのテストシナリオ', path: 'guide/testing/components-scenarios', contentPath: 'guide/testing/components-scenarios', }, { - label: 'Testing attribute directives', + label: '属性ディレクティブのテスト', path: 'guide/testing/attribute-directives', contentPath: 'guide/testing/attribute-directives', }, { - label: 'Testing pipes', + label: 'パイプのテスト', path: 'guide/testing/pipes', contentPath: 'guide/testing/pipes', }, { - label: 'Testing routing and navigation', + label: 'ルーティングとナビゲーションのテスト', path: 'guide/routing/testing', contentPath: 'guide/routing/testing', status: 'new', }, { - label: 'Debugging tests', + label: 'テストのデバッグ', path: 'guide/testing/debugging', contentPath: 'guide/testing/debugging', }, { - label: 'Testing utility APIs', + label: 'テストユーティリティAPI', path: 'guide/testing/utility-apis', contentPath: 'guide/testing/utility-apis', }, { - label: 'Experimental unit testing integration', + label: '実験的なユニットテストシステム', path: 'guide/testing/unit-tests', contentPath: 'guide/testing/experimental-unit-test', }, { - label: 'Component harnesses overview', + label: 'コンポーネントハーネスの概要', path: 'guide/testing/component-harnesses-overview', contentPath: 'guide/testing/component-harnesses-overview', }, { - label: 'Using component harnesses in tests', + label: 'テストでコンポーネントハーネスを使う', path: 'guide/testing/using-component-harnesses', contentPath: 'guide/testing/using-component-harnesses', }, { - label: 'Creating harnesses for your components', + label: 'コンポーネントハーネスを作成する', path: 'guide/testing/creating-component-harnesses', contentPath: 'guide/testing/creating-component-harnesses', }, { - label: 'Adding harness support for additional testing environments', + label: 'テスト環境にハーネスサポートを追加する', path: 'guide/testing/component-harnesses-testing-environments', contentPath: 'guide/testing/component-harnesses-testing-environments', }, ], }, { - label: 'Internationalization', + label: '国際化', children: [ { - label: 'Overview', + label: '概要', path: 'guide/i18n', contentPath: 'guide/i18n/overview', }, { - label: 'Add the localize package', + label: 'localizeパッケージの追加', path: 'guide/i18n/add-package', contentPath: 'guide/i18n/add-package', }, { - label: 'Refer to locales by ID', + label: 'IDによるロケールの参照', path: 'guide/i18n/locale-id', contentPath: 'guide/i18n/locale-id', }, { - label: 'Format data based on locale', + label: 'ロケールに基づいたデータのフォーマット', path: 'guide/i18n/format-data-locale', contentPath: 'guide/i18n/format-data-locale', }, { - label: 'Prepare component for translation', + label: '翻訳のためのコンポーネントの準備', path: 'guide/i18n/prepare', contentPath: 'guide/i18n/prepare', }, { - label: 'Work with translation files', + label: '翻訳ファイルの操作', path: 'guide/i18n/translation-files', contentPath: 'guide/i18n/translation-files', }, { - label: 'Merge translations into the app', + label: 'アプリへの翻訳の統合', path: 'guide/i18n/merge', contentPath: 'guide/i18n/merge', }, { - label: 'Deploy multiple locales', + label: '複数のロケールのデプロイ', path: 'guide/i18n/deploy', contentPath: 'guide/i18n/deploy', }, { - label: 'Import global variants of the locale data', + label: 'ロケールデータのグローバルバリアントのインポート', path: 'guide/i18n/import-global-variants', contentPath: 'guide/i18n/import-global-variants', }, { - label: 'Manage marked text with custom IDs', + label: 'カスタムIDによるマークされたテキストの管理', path: 'guide/i18n/manage-marked-text', contentPath: 'guide/i18n/manage-marked-text', }, { - label: 'Example Angular application', + label: 'Angularアプリケーションの例', path: 'guide/i18n/example', contentPath: 'guide/i18n/example', }, ], }, { - label: 'Animations', + label: 'アニメーション', status: 'updated', children: [ { - label: 'Enter and Leave animations', - path: 'guide/animations', + label: 'Enter and Leave アニメーション', + path: 'guide/animations/enter-and-leave', contentPath: 'guide/animations/enter-and-leave', status: 'new', }, { - label: 'Complex Animations with CSS', + label: '複雑なCSSアニメーション', path: 'guide/animations/css', contentPath: 'guide/animations/css', }, { - label: 'Route transition animations', + label: 'ルート遷移アニメーション', path: 'guide/routing/route-transition-animations', contentPath: 'guide/routing/route-transition-animations', }, @@ -744,130 +744,130 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ status: 'new', children: [ { - label: 'Get Started', + label: 'はじめよう', path: 'ai', contentPath: 'ai/overview', }, { - label: 'LLM prompts and AI IDE setup', + label: 'LLMプロンプトとAI IDEセットアップ', path: 'ai/develop-with-ai', contentPath: 'ai/develop-with-ai', }, { - label: 'Design Patterns', + label: '設計パターン', path: 'ai/design-patterns', contentPath: 'ai/design-patterns', }, { - label: 'Angular CLI MCP Server setup', + label: 'Angular CLI MCPサーバーセットアップ', path: 'ai/mcp', contentPath: 'ai/mcp-server-setup', }, ], }, { - label: 'Developer Tools', + label: '開発者ツール', children: [ { label: 'Angular CLI', children: [ { - label: 'Overview', + label: '概要', path: 'tools/cli', contentPath: 'tools/cli/overview', }, { - label: 'Local set-up', + label: 'ローカル設定', path: 'tools/cli/setup-local', contentPath: 'tools/cli/setup-local', }, { - label: 'Building Angular apps', + label: 'Angularアプリのビルド', path: 'tools/cli/build', contentPath: 'tools/cli/build', }, { - label: 'Serving Angular apps for development', + label: '開発用ローカルサーバー', path: 'tools/cli/serve', contentPath: 'tools/cli/serve', }, { - label: 'Deployment', + label: 'デプロイメント', path: 'tools/cli/deployment', contentPath: 'tools/cli/deployment', }, { - label: 'End-to-End Testing', + label: 'エンドツーエンドテスト', path: 'tools/cli/end-to-end', contentPath: 'tools/cli/end-to-end', }, { - label: 'Migrating to new build system', + label: '新しいビルドシステムへの移行', path: 'tools/cli/build-system-migration', contentPath: 'tools/cli/build-system-migration', }, { - label: 'Build environments', + label: 'ビルド環境', path: 'tools/cli/environments', contentPath: 'tools/cli/environments', }, { - label: 'Angular CLI builders', + label: 'Angular CLIビルダー', path: 'tools/cli/cli-builder', contentPath: 'tools/cli/cli-builder', }, { - label: 'Generating code using schematics', + label: 'Schematicsによるコードの生成', path: 'tools/cli/schematics', contentPath: 'tools/cli/schematics', }, { - label: 'Authoring schematics', + label: 'Schematicsの作成', path: 'tools/cli/schematics-authoring', contentPath: 'tools/cli/schematics-authoring', }, { - label: 'Schematics for libraries', + label: 'ライブラリのSchematics', path: 'tools/cli/schematics-for-libraries', contentPath: 'tools/cli/schematics-for-libraries', }, { - label: 'Template type checking', + label: 'テンプレート型チェック', path: 'tools/cli/template-typecheck', contentPath: 'tools/cli/template-typecheck', }, { - label: 'Ahead-of-time (AOT) compilation', + label: '事前コンパイル (AOT) コンパイル', path: 'tools/cli/aot-compiler', contentPath: 'tools/cli/aot-compiler', }, { - label: 'AOT metadata errors', + label: 'AOTメタデータエラー', path: 'tools/cli/aot-metadata-errors', contentPath: 'tools/cli/aot-metadata-errors', }, ], }, { - label: 'Libraries', + label: 'ライブラリ', children: [ { - label: 'Overview', + label: '概要', path: 'tools/libraries', contentPath: 'tools/libraries/overview', }, { - label: 'Creating Libraries', + label: 'ライブラリの作成', path: 'tools/libraries/creating-libraries', contentPath: 'tools/libraries/creating-libraries', }, { - label: 'Using Libraries', + label: 'ライブラリの使用', path: 'tools/libraries/using-libraries', contentPath: 'tools/libraries/using-libraries', }, { - label: 'Angular Package Format', + label: 'Angularパッケージフォーマット', path: 'tools/libraries/angular-package-format', contentPath: 'tools/libraries/angular-package-format', }, @@ -877,17 +877,17 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ label: 'DevTools', children: [ { - label: 'Overview', + label: '概要', path: 'tools/devtools', contentPath: 'tools/devtools/overview', }, { - label: 'Components', + label: 'コンポーネント', path: 'tools/devtools/component', contentPath: 'tools/devtools/component', }, { - label: 'Profiler', + label: 'プロファイラー', path: 'tools/devtools/profiler', contentPath: 'tools/devtools/profiler', }, @@ -906,61 +906,61 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ ], }, { - label: 'Language Service', + label: '言語サービス', path: 'tools/language-service', contentPath: 'tools/language-service', }, ], }, { - label: 'Best Practices', + label: 'ベストプラクティス', children: [ { - label: 'Style Guide', + label: 'スタイルガイド', path: 'style-guide', contentPath: 'best-practices/style-guide', status: 'updated', }, { - label: 'Security', + label: 'セキュリティ', path: 'best-practices/security', contentPath: 'guide/security', // Have not refactored due to build issues }, { - label: 'Accessibility', + label: 'アクセシビリティ', path: 'best-practices/a11y', contentPath: 'best-practices/a11y', }, { - label: 'Unhandled errors in Angular', + label: 'Angularでの未処理のエラー', path: 'best-practices/error-handling', contentPath: 'best-practices/error-handling', }, { - label: 'Performance', + label: 'パフォーマンス', children: [ { - label: 'Overview', + label: '概要', path: 'best-practices/runtime-performance', contentPath: 'best-practices/runtime-performance/overview', }, { - label: 'Zone pollution', + label: 'ゾーンの汚染', path: 'best-practices/zone-pollution', contentPath: 'best-practices/runtime-performance/zone-pollution', }, { - label: 'Slow computations', + label: '遅い計算', path: 'best-practices/slow-computations', contentPath: 'best-practices/runtime-performance/slow-computations', }, { - label: 'Skipping component subtrees', + label: 'コンポーネントサブツリーのスキップ', path: 'best-practices/skipping-subtrees', contentPath: 'best-practices/runtime-performance/skipping-subtrees', }, { - label: 'Profiling with the Chrome DevTools', + label: 'Chrome DevToolsでのプロファイリング', path: 'best-practices/profiling-with-chrome-devtools', contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools', }, @@ -968,40 +968,40 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ ], }, { - label: 'Keeping up-to-date', + label: 'アップデートに追従する', path: 'update', contentPath: 'best-practices/update', }, ], }, { - label: 'Extended Ecosystem', + label: '拡張エコシステム', children: [ { - label: 'NgModules', + label: 'NgModule', path: 'guide/ngmodules/overview', contentPath: 'guide/ngmodules/overview', }, { - label: 'Legacy Animations', + label: 'レガシーアニメーション', children: [ { - label: 'Overview', + label: '概要', path: 'guide/legacy-animations', contentPath: 'guide/animations/overview', }, { - label: 'Transition and Triggers', + label: 'トランジションとトリガー', path: 'guide/legacy-animations/transition-and-triggers', contentPath: 'guide/animations/transition-and-triggers', }, { - label: 'Complex Sequences', + label: '複雑なシーケンス', path: 'guide/legacy-animations/complex-sequences', contentPath: 'guide/animations/complex-sequences', }, { - label: 'Reusable Animations', + label: '再利用可能なアニメーション', path: 'guide/legacy-animations/reusable-animations', contentPath: 'guide/animations/reusable-animations', }, @@ -1013,77 +1013,77 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ ], }, { - label: 'Using RxJS with Angular', + label: 'RxJSとの併用', children: [ { - label: 'Signals interop', + label: 'Signalとの相互運用', path: 'ecosystem/rxjs-interop', contentPath: 'ecosystem/rxjs-interop/signals-interop', }, { - label: 'Component output interop', + label: 'コンポーネント出力との相互接続', path: 'ecosystem/rxjs-interop/output-interop', contentPath: 'ecosystem/rxjs-interop/output-interop', }, { - label: 'Unsubscribing with takeUntilDestroyed', + label: 'takeUntilDestroyedでの購読解除', path: 'ecosystem/rxjs-interop/take-until-destroyed', contentPath: 'ecosystem/rxjs-interop/take-until-destroyed', }, ], }, { - label: 'Service Workers & PWAs', + label: 'Service WorkerとPWA', children: [ { - label: 'Overview', + label: '概要', path: 'ecosystem/service-workers', contentPath: 'ecosystem/service-workers/overview', }, { - label: 'Getting started', + label: 'はじめに', path: 'ecosystem/service-workers/getting-started', contentPath: 'ecosystem/service-workers/getting-started', }, { - label: 'Custom service worker scripts', + label: '独自のService Workerスクリプト', path: 'ecosystem/service-workers/custom-service-worker-scripts', contentPath: 'ecosystem/service-workers/custom-service-worker-scripts', }, { - label: 'Configuration file', + label: '設定ファイル', path: 'ecosystem/service-workers/config', contentPath: 'ecosystem/service-workers/config', }, { - label: 'Communicating with the service worker', + label: 'Service Workerとの通信', path: 'ecosystem/service-workers/communications', contentPath: 'ecosystem/service-workers/communications', }, { - label: 'Push notifications', + label: 'プッシュ通知', path: 'ecosystem/service-workers/push-notifications', contentPath: 'ecosystem/service-workers/push-notifications', }, { - label: 'Service worker devops', + label: 'Service WorkerのDevOps', path: 'ecosystem/service-workers/devops', contentPath: 'ecosystem/service-workers/devops', }, { - label: 'App shell pattern', + label: 'App Shellパターン', path: 'ecosystem/service-workers/app-shell', contentPath: 'ecosystem/service-workers/app-shell', }, ], }, { - label: 'Web workers', + label: 'Web Worker', path: 'ecosystem/web-workers', contentPath: 'ecosystem/web-workers', }, { - label: 'Custom build pipeline', + label: 'カスタムビルドパイプライン', path: 'ecosystem/custom-build-pipeline', contentPath: 'ecosystem/custom-build-pipeline', }, @@ -1106,7 +1106,7 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ path: 'https://github.com/google-pay/google-pay-button#angular', }, { - label: 'YouTube player', + label: 'YouTubeプレーヤー', path: 'https://github.com/angular/components/blob/main/src/youtube-player/README.md', }, { @@ -1143,35 +1143,43 @@ export const TUTORIALS_SUB_NAVIGATION_DATA: NavigationItem[] = [ { path: DEFAULT_PAGES.TUTORIALS, contentPath: 'tutorials/home', - label: 'Tutorials', + label: 'チュートリアル', }, ]; const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ { - label: 'Roadmap', + label: 'ロードマップ', path: 'roadmap', contentPath: 'reference/roadmap', }, { - label: 'Get involved', + label: '開発に参加する', path: 'https://github.com/angular/angular/blob/main/CONTRIBUTING.md', }, { - label: 'API Reference', + label: 'コミュニティに参加する', + path: 'https://community.angular.jp/', + }, + { + label: '日本語化プロジェクト', + path: 'https://github.com/angular/angular-ja', + }, + { + label: 'APIリファレンス', children: [ { - label: 'Overview', + label: '概要', path: 'api', }, ...getApiNavigationItems(), ], }, { - label: 'CLI Reference', + label: 'CLIリファレンス', children: [ { - label: 'Overview', + label: '概要', path: 'cli', contentPath: 'reference/cli', }, @@ -1183,7 +1191,7 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ label: 'ng analytics', children: [ { - label: 'Overview', + label: '概要', path: 'cli/analytics', }, { @@ -1212,11 +1220,11 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ label: 'ng cache', children: [ { - label: 'Overview', + label: '概要', path: 'cli/cache', }, { - label: 'clean', + label: 'clear', path: 'cli/cache/clean', }, { @@ -1237,7 +1245,7 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ label: 'ng completion', children: [ { - label: 'Overview', + label: '概要', path: 'cli/completion', }, { @@ -1266,7 +1274,7 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ label: 'ng generate', children: [ { - label: 'Overview', + label: '概要', path: 'cli/generate', }, { @@ -1378,10 +1386,10 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ ], }, { - label: 'Error Encyclopedia', + label: 'エラー百科辞典', children: [ { - label: 'Overview', + label: '概要', path: 'errors', contentPath: 'reference/errors/overview', }, @@ -1400,64 +1408,64 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ ], }, { - label: 'Versioning and releases', + label: 'バージョニングとリリース', path: 'reference/releases', contentPath: 'reference/releases', }, { - label: 'Version compatibility', + label: 'バージョン互換性', path: 'reference/versions', contentPath: 'reference/versions', }, { - label: 'Update guide', + label: 'アップデートガイド', path: 'update-guide', }, { - label: 'Configurations', + label: '設定', children: [ { - label: 'File structure', + label: 'ファイル構造', path: 'reference/configs/file-structure', contentPath: 'reference/configs/file-structure', }, { - label: 'Workspace configuration', + label: 'ワークスペース設定', path: 'reference/configs/workspace-config', contentPath: 'reference/configs/workspace-config', }, { - label: 'Angular compiler options', + label: 'Angularコンパイラオプション', path: 'reference/configs/angular-compiler-options', contentPath: 'reference/configs/angular-compiler-options', }, { - label: 'npm dependencies', + label: 'npmの依存関係', path: 'reference/configs/npm-packages', contentPath: 'reference/configs/npm-packages', }, ], }, { - label: 'Migrations', + label: 'マイグレーション', children: [ { - label: 'Overview', + label: '概要', path: 'reference/migrations', contentPath: 'reference/migrations/overview', }, { - label: 'Standalone', + label: 'スタンドアロン', path: 'reference/migrations/standalone', contentPath: 'reference/migrations/standalone', }, { - label: 'Control Flow Syntax', + label: '制御フロー構文', path: 'reference/migrations/control-flow', contentPath: 'reference/migrations/control-flow', }, { - label: 'inject() Function', + label: 'inject() 関数', path: 'reference/migrations/inject-function', contentPath: 'reference/migrations/inject-function', }, @@ -1509,12 +1517,12 @@ const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ const FOOTER_NAVIGATION_DATA: NavigationItem[] = [ { - label: 'Press Kit', + label: 'プレスキット', path: 'press-kit', contentPath: 'reference/press-kit', }, { - label: 'License', + label: 'ライセンス', path: 'license', contentPath: 'reference/license', }, diff --git a/adev-ja/src/app/sub-navigation-data.en.ts b/adev-ja/src/app/sub-navigation-data.en.ts deleted file mode 100644 index 0306e21208..0000000000 --- a/adev-ja/src/app/sub-navigation-data.en.ts +++ /dev/null @@ -1,1453 +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 {isDevMode} from '@angular/core'; -import {NavigationItem} from '@angular/docs'; - -// These 2 imports are expected to be red because they are generated a build time -import FIRST_APP_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/first-app/routes.json'; -import LEARN_ANGULAR_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/learn-angular/routes.json'; -import DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/deferrable-views/routes.json'; -import SIGNALS_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/signals/routes.json'; -import ERRORS_NAV_DATA from '../../src/assets/content/reference/errors/routes.json'; -import EXT_DIAGNOSTICS_NAV_DATA from '../../src/assets/content/reference/extended-diagnostics/routes.json'; - -import {getApiNavigationItems} from './features/references/helpers/manifest.helper'; -import {DEFAULT_PAGES} from './core/constants/pages'; - -interface SubNavigationData { - docs: NavigationItem[]; - reference: NavigationItem[]; - tutorials: NavigationItem[]; - footer: NavigationItem[]; -} - -const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ - { - label: 'Introduction', - children: [ - { - label: 'What is Angular?', - path: 'overview', - contentPath: 'introduction/what-is-angular', - }, - { - label: 'Installation', - path: 'installation', - contentPath: 'introduction/installation', - }, - { - label: 'Essentials', - children: [ - { - label: 'Overview', - path: 'essentials', - contentPath: 'introduction/essentials/overview', - }, - { - label: 'Composition with components', - path: 'essentials/components', - contentPath: 'introduction/essentials/components', - }, - { - label: 'Reactivity with signals', - path: 'essentials/signals', - contentPath: 'introduction/essentials/signals', - }, - { - label: 'Dynamic interfaces with templates', - path: 'essentials/templates', - contentPath: 'introduction/essentials/templates', - }, - { - label: 'Modular design with dependency injection', - path: 'essentials/dependency-injection', - contentPath: 'introduction/essentials/dependency-injection', - }, - { - label: 'Next Steps', - path: 'essentials/next-steps', - contentPath: 'introduction/essentials/next-steps', - }, - ], - }, - { - label: 'Start coding! 🚀', - path: 'tutorials/learn-angular', - }, - ], - }, - { - label: 'In-depth Guides', - children: [ - { - label: 'Signals', - children: [ - { - label: 'Overview', - path: 'guide/signals', - contentPath: 'guide/signals/overview', - }, - { - label: 'Dependent state with linkedSignal', - path: 'guide/signals/linked-signal', - contentPath: 'guide/signals/linked-signal', - }, - { - label: 'Async reactivity with resources', - path: 'guide/signals/resource', - contentPath: 'guide/signals/resource', - }, - ], - }, - { - label: 'Components', - children: [ - { - label: 'Anatomy of components', - path: 'guide/components', - contentPath: 'guide/components/anatomy-of-components', - }, - { - label: 'Selectors', - path: 'guide/components/selectors', - contentPath: 'guide/components/selectors', - }, - { - label: 'Styling', - path: 'guide/components/styling', - contentPath: 'guide/components/styling', - }, - { - label: 'Accepting data with input properties', - path: 'guide/components/inputs', - contentPath: 'guide/components/inputs', - }, - { - label: 'Custom events with outputs', - path: 'guide/components/outputs', - contentPath: 'guide/components/outputs', - }, - { - label: 'Content projection with ng-content', - path: 'guide/components/content-projection', - contentPath: 'guide/components/content-projection', - }, - { - label: 'Host elements', - path: 'guide/components/host-elements', - contentPath: 'guide/components/host-elements', - }, - { - label: 'Lifecycle', - path: 'guide/components/lifecycle', - contentPath: 'guide/components/lifecycle', - }, - { - label: 'Referencing component children with queries', - path: 'guide/components/queries', - contentPath: 'guide/components/queries', - }, - { - label: 'Using DOM APIs', - path: 'guide/components/dom-apis', - contentPath: 'guide/components/dom-apis', - }, - { - label: 'Inheritance', - path: 'guide/components/inheritance', - contentPath: 'guide/components/inheritance', - }, - { - label: 'Programmatically rendering components', - path: 'guide/components/programmatic-rendering', - contentPath: 'guide/components/programmatic-rendering', - }, - { - label: 'Advanced configuration', - path: 'guide/components/advanced-configuration', - contentPath: 'guide/components/advanced-configuration', - }, - { - label: 'Custom Elements', - path: 'guide/elements', - contentPath: 'guide/elements', - }, - ], - }, - { - label: 'Templates', - children: [ - { - label: 'Overview', - path: 'guide/templates', - contentPath: 'guide/templates/overview', - }, - { - label: 'Binding dynamic text, properties and attributes', - path: 'guide/templates/binding', - contentPath: 'guide/templates/binding', - }, - { - label: 'Adding event listeners', - path: 'guide/templates/event-listeners', - contentPath: 'guide/templates/event-listeners', - }, - { - label: 'Two-way binding', - path: 'guide/templates/two-way-binding', - contentPath: 'guide/templates/two-way-binding', - }, - { - label: 'Control flow', - path: 'guide/templates/control-flow', - contentPath: 'guide/templates/control-flow', - }, - { - label: 'Pipes', - path: 'guide/templates/pipes', - contentPath: 'guide/templates/pipes', - }, - { - label: 'Slotting child content with ng-content', - path: 'guide/templates/ng-content', - contentPath: 'guide/templates/ng-content', - }, - { - label: 'Create template fragments with ng-template', - path: 'guide/templates/ng-template', - contentPath: 'guide/templates/ng-template', - }, - { - label: 'Grouping elements with ng-container', - path: 'guide/templates/ng-container', - contentPath: 'guide/templates/ng-container', - }, - { - label: 'Variables in templates', - path: 'guide/templates/variables', - contentPath: 'guide/templates/variables', - }, - { - label: 'Deferred loading with @defer', - path: 'guide/templates/defer', - contentPath: 'guide/templates/defer', - }, - { - label: 'Expression syntax', - path: 'guide/templates/expression-syntax', - contentPath: 'guide/templates/expression-syntax', - }, - { - label: 'Whitespace in templates', - path: 'guide/templates/whitespace', - contentPath: 'guide/templates/whitespace', - }, - ], - }, - { - label: 'Directives', - children: [ - { - label: 'Overview', - path: 'guide/directives', - contentPath: 'guide/directives/overview', - }, - { - label: 'Attribute directives', - path: 'guide/directives/attribute-directives', - contentPath: 'guide/directives/attribute-directives', - }, - { - label: 'Structural directives', - path: 'guide/directives/structural-directives', - contentPath: 'guide/directives/structural-directives', - }, - { - label: 'Directive composition API', - path: 'guide/directives/directive-composition-api', - contentPath: 'guide/directives/directive-composition-api', - }, - { - label: 'Optimizing images with NgOptimizedImage', - path: 'guide/image-optimization', - contentPath: 'guide/image-optimization', - }, - ], - }, - { - label: 'Dependency Injection', - children: [ - { - label: 'Overview', - path: 'guide/di', - contentPath: 'guide/di/overview', - }, - { - label: 'Understanding dependency injection', - path: 'guide/di/dependency-injection', - contentPath: 'guide/di/dependency-injection', - }, - { - label: 'Creating an injectable service', - path: 'guide/di/creating-injectable-service', - contentPath: 'guide/di/creating-injectable-service', - }, - { - label: 'Defining dependency providers', - path: 'guide/di/dependency-injection-providers', - contentPath: 'guide/di/dependency-injection-providers', - }, - { - label: 'Injection context', - path: 'guide/di/dependency-injection-context', - contentPath: 'guide/di/dependency-injection-context', - }, - { - label: 'Hierarchical injectors', - path: 'guide/di/hierarchical-dependency-injection', - contentPath: 'guide/di/hierarchical-dependency-injection', - }, - { - label: 'Optimizing injection tokens', - path: 'guide/di/lightweight-injection-tokens', - contentPath: 'guide/di/lightweight-injection-tokens', - }, - { - label: 'DI in action', - path: 'guide/di/di-in-action', - contentPath: 'guide/di/di-in-action', - }, - ], - }, - { - label: 'Routing', - status: 'updated', - children: [ - { - label: 'Overview', - path: 'guide/routing', - contentPath: 'guide/routing/overview', - }, - { - label: 'Define routes', - path: 'guide/routing/define-routes', - contentPath: 'guide/routing/define-routes', - }, - { - label: 'Show routes with Outlets', - path: 'guide/routing/show-routes-with-outlets', - contentPath: 'guide/routing/show-routes-with-outlets', - }, - { - label: 'Navigate to routes', - path: 'guide/routing/navigate-to-routes', - contentPath: 'guide/routing/navigate-to-routes', - }, - { - label: 'Read route state', - path: 'guide/routing/read-route-state', - contentPath: 'guide/routing/read-route-state', - }, - { - label: 'Redirecting routes', - path: 'guide/routing/redirecting-routes', - contentPath: 'guide/routing/redirecting-routes', - }, - { - label: 'Control route access with guards', - path: 'guide/routing/route-guards', - contentPath: 'guide/routing/route-guards', - }, - { - label: 'Route data resolvers', - path: 'guide/routing/data-resolvers', - contentPath: 'guide/routing/data-resolvers', - }, - { - label: 'Lifecycle and events', - path: 'guide/routing/lifecycle-and-events', - contentPath: 'guide/routing/lifecycle-and-events', - }, - { - label: 'Testing routing and navigation', - path: 'guide/routing/testing', - contentPath: 'guide/routing/testing', - status: 'new', - }, - { - label: 'Other routing tasks', - path: 'guide/routing/common-router-tasks', - contentPath: 'guide/routing/common-router-tasks', - }, - { - label: 'Creating custom route matches', - path: 'guide/routing/routing-with-urlmatcher', - contentPath: 'guide/routing/routing-with-urlmatcher', - }, - { - label: 'Rendering strategies', - path: 'guide/routing/rendering-strategies', - contentPath: 'guide/routing/rendering-strategies', - status: 'new', - }, - { - label: 'Customizing route behavior', - path: 'guide/routing/customizing-route-behavior', - contentPath: 'guide/routing/customizing-route-behavior', - status: 'new', - }, - { - label: 'Router reference', - path: 'guide/routing/router-reference', - contentPath: 'guide/routing/router-reference', - }, - { - label: 'Route transition animations', - path: 'guide/routing/route-transition-animations', - contentPath: 'guide/routing/route-transition-animations', - }, - ], - }, - { - label: 'Forms', - children: [ - { - label: 'Overview', - path: 'guide/forms', - contentPath: 'guide/forms/overview', - }, - { - label: 'Reactive forms', - path: 'guide/forms/reactive-forms', - contentPath: 'guide/forms/reactive-forms', - }, - { - label: 'Strictly typed reactive forms', - path: 'guide/forms/typed-forms', - contentPath: 'guide/forms/typed-forms', - }, - { - label: 'Template-driven forms', - path: 'guide/forms/template-driven-forms', - contentPath: 'guide/forms/template-driven-forms', - }, - { - label: 'Validate form input', - path: 'guide/forms/form-validation', - contentPath: 'guide/forms/form-validation', - }, - { - label: 'Building dynamic forms', - path: 'guide/forms/dynamic-forms', - contentPath: 'guide/forms/dynamic-forms', - }, - ], - }, - { - label: 'HTTP Client', - children: [ - { - label: 'Overview', - path: 'guide/http', - contentPath: 'guide/http/overview', - }, - { - label: 'Setting up HttpClient', - path: 'guide/http/setup', - contentPath: 'guide/http/setup', - }, - { - label: 'Making requests', - path: 'guide/http/making-requests', - contentPath: 'guide/http/making-requests', - }, - { - label: 'Reactive data fetching with httpResource', - path: 'guide/http/http-resource', - contentPath: 'guide/http/http-resource', - }, - { - label: 'Intercepting requests and responses', - path: 'guide/http/interceptors', - contentPath: 'guide/http/interceptors', - }, - { - label: 'Testing', - path: 'guide/http/testing', - contentPath: 'guide/http/testing', - }, - ], - }, - { - label: 'Server-side & hybrid-rendering', - children: [ - { - label: 'Overview', - path: 'guide/performance', - contentPath: 'guide/performance/overview', - }, - { - label: 'Server-side and hybrid-rendering', - path: 'guide/ssr', - contentPath: 'guide/ssr', - }, - { - label: 'Hydration', - path: 'guide/hydration', - contentPath: 'guide/hydration', - }, - { - label: 'Incremental Hydration', - path: 'guide/incremental-hydration', - contentPath: 'guide/incremental-hydration', - }, - ], - }, - { - label: 'Testing', - children: [ - { - label: 'Overview', - path: 'guide/testing', - contentPath: 'guide/testing/overview', - }, - { - label: 'Code coverage', - path: 'guide/testing/code-coverage', - contentPath: 'guide/testing/code-coverage', - }, - { - label: 'Testing services', - path: 'guide/testing/services', - contentPath: 'guide/testing/services', - }, - { - label: 'Basics of testing components', - path: 'guide/testing/components-basics', - contentPath: 'guide/testing/components-basics', - }, - { - label: 'Component testing scenarios', - path: 'guide/testing/components-scenarios', - contentPath: 'guide/testing/components-scenarios', - }, - { - label: 'Testing attribute directives', - path: 'guide/testing/attribute-directives', - contentPath: 'guide/testing/attribute-directives', - }, - { - label: 'Testing pipes', - path: 'guide/testing/pipes', - contentPath: 'guide/testing/pipes', - }, - { - label: 'Testing routing and navigation', - path: 'guide/routing/testing', - contentPath: 'guide/routing/testing', - status: 'new', - }, - { - label: 'Debugging tests', - path: 'guide/testing/debugging', - contentPath: 'guide/testing/debugging', - }, - { - label: 'Testing utility APIs', - path: 'guide/testing/utility-apis', - contentPath: 'guide/testing/utility-apis', - }, - { - label: 'Experimental unit testing integration', - path: 'guide/testing/unit-tests', - contentPath: 'guide/testing/experimental-unit-test', - }, - { - label: 'Component harnesses overview', - path: 'guide/testing/component-harnesses-overview', - contentPath: 'guide/testing/component-harnesses-overview', - }, - { - label: 'Using component harnesses in tests', - path: 'guide/testing/using-component-harnesses', - contentPath: 'guide/testing/using-component-harnesses', - }, - { - label: 'Creating harnesses for your components', - path: 'guide/testing/creating-component-harnesses', - contentPath: 'guide/testing/creating-component-harnesses', - }, - { - label: 'Adding harness support for additional testing environments', - path: 'guide/testing/component-harnesses-testing-environments', - contentPath: 'guide/testing/component-harnesses-testing-environments', - }, - ], - }, - { - label: 'Internationalization', - children: [ - { - label: 'Overview', - path: 'guide/i18n', - contentPath: 'guide/i18n/overview', - }, - { - label: 'Add the localize package', - path: 'guide/i18n/add-package', - contentPath: 'guide/i18n/add-package', - }, - { - label: 'Refer to locales by ID', - path: 'guide/i18n/locale-id', - contentPath: 'guide/i18n/locale-id', - }, - { - label: 'Format data based on locale', - path: 'guide/i18n/format-data-locale', - contentPath: 'guide/i18n/format-data-locale', - }, - { - label: 'Prepare component for translation', - path: 'guide/i18n/prepare', - contentPath: 'guide/i18n/prepare', - }, - { - label: 'Work with translation files', - path: 'guide/i18n/translation-files', - contentPath: 'guide/i18n/translation-files', - }, - { - label: 'Merge translations into the app', - path: 'guide/i18n/merge', - contentPath: 'guide/i18n/merge', - }, - { - label: 'Deploy multiple locales', - path: 'guide/i18n/deploy', - contentPath: 'guide/i18n/deploy', - }, - { - label: 'Import global variants of the locale data', - path: 'guide/i18n/import-global-variants', - contentPath: 'guide/i18n/import-global-variants', - }, - { - label: 'Manage marked text with custom IDs', - path: 'guide/i18n/manage-marked-text', - contentPath: 'guide/i18n/manage-marked-text', - }, - { - label: 'Example Angular application', - path: 'guide/i18n/example', - contentPath: 'guide/i18n/example', - }, - ], - }, - { - label: 'Animations', - status: 'updated', - children: [ - { - label: 'Enter and Leave animations', - path: 'guide/animations', - contentPath: 'guide/animations/enter-and-leave', - status: 'new', - }, - { - label: 'Complex Animations with CSS', - path: 'guide/animations/css', - contentPath: 'guide/animations/css', - }, - { - label: 'Route transition animations', - path: 'guide/routing/route-transition-animations', - contentPath: 'guide/routing/route-transition-animations', - }, - ], - }, - { - label: 'Drag and drop', - path: 'guide/drag-drop', - contentPath: 'guide/drag-drop', - }, - ], - }, - { - label: 'Build with AI', - status: 'new', - children: [ - { - label: 'Get Started', - path: 'ai', - contentPath: 'ai/overview', - }, - { - label: 'LLM prompts and AI IDE setup', - path: 'ai/develop-with-ai', - contentPath: 'ai/develop-with-ai', - }, - { - label: 'Design Patterns', - path: 'ai/design-patterns', - contentPath: 'ai/design-patterns', - }, - { - label: 'Angular CLI MCP Server setup', - path: 'ai/mcp', - contentPath: 'ai/mcp-server-setup', - }, - ], - }, - { - label: 'Developer Tools', - children: [ - { - label: 'Angular CLI', - children: [ - { - label: 'Overview', - path: 'tools/cli', - contentPath: 'tools/cli/overview', - }, - { - label: 'Local set-up', - path: 'tools/cli/setup-local', - contentPath: 'tools/cli/setup-local', - }, - { - label: 'Building Angular apps', - path: 'tools/cli/build', - contentPath: 'tools/cli/build', - }, - { - label: 'Serving Angular apps for development', - path: 'tools/cli/serve', - contentPath: 'tools/cli/serve', - }, - { - label: 'Deployment', - path: 'tools/cli/deployment', - contentPath: 'tools/cli/deployment', - }, - { - label: 'End-to-End Testing', - path: 'tools/cli/end-to-end', - contentPath: 'tools/cli/end-to-end', - }, - { - label: 'Migrating to new build system', - path: 'tools/cli/build-system-migration', - contentPath: 'tools/cli/build-system-migration', - }, - { - label: 'Build environments', - path: 'tools/cli/environments', - contentPath: 'tools/cli/environments', - }, - { - label: 'Angular CLI builders', - path: 'tools/cli/cli-builder', - contentPath: 'tools/cli/cli-builder', - }, - { - label: 'Generating code using schematics', - path: 'tools/cli/schematics', - contentPath: 'tools/cli/schematics', - }, - { - label: 'Authoring schematics', - path: 'tools/cli/schematics-authoring', - contentPath: 'tools/cli/schematics-authoring', - }, - { - label: 'Schematics for libraries', - path: 'tools/cli/schematics-for-libraries', - contentPath: 'tools/cli/schematics-for-libraries', - }, - { - label: 'Template type checking', - path: 'tools/cli/template-typecheck', - contentPath: 'tools/cli/template-typecheck', - }, - { - label: 'Ahead-of-time (AOT) compilation', - path: 'tools/cli/aot-compiler', - contentPath: 'tools/cli/aot-compiler', - }, - { - label: 'AOT metadata errors', - path: 'tools/cli/aot-metadata-errors', - contentPath: 'tools/cli/aot-metadata-errors', - }, - ], - }, - { - label: 'Libraries', - children: [ - { - label: 'Overview', - path: 'tools/libraries', - contentPath: 'tools/libraries/overview', - }, - { - label: 'Creating Libraries', - path: 'tools/libraries/creating-libraries', - contentPath: 'tools/libraries/creating-libraries', - }, - { - label: 'Using Libraries', - path: 'tools/libraries/using-libraries', - contentPath: 'tools/libraries/using-libraries', - }, - { - label: 'Angular Package Format', - path: 'tools/libraries/angular-package-format', - contentPath: 'tools/libraries/angular-package-format', - }, - ], - }, - { - label: 'DevTools', - children: [ - { - label: 'Overview', - path: 'tools/devtools', - contentPath: 'tools/devtools/overview', - }, - { - label: 'Components', - path: 'tools/devtools/component', - contentPath: 'tools/devtools/component', - }, - { - label: 'Profiler', - path: 'tools/devtools/profiler', - contentPath: 'tools/devtools/profiler', - }, - // TODO: create those guides - // The signal debugging docs should also be added to the signal section - // { - // label: 'Signals', - // path: 'tools/devtools/signals', - // contentPath: 'tools/devtools/signals', - // }, - // { - // label: 'Router', - // path: 'tools/devtools/router', - // contentPath: 'tools/devtools/router', - // } - ], - }, - { - label: 'Language Service', - path: 'tools/language-service', - contentPath: 'tools/language-service', - }, - ], - }, - { - label: 'Best Practices', - children: [ - { - label: 'Style Guide', - path: 'style-guide', - contentPath: 'best-practices/style-guide', - status: 'updated', - }, - { - label: 'Security', - path: 'best-practices/security', - contentPath: 'guide/security', // Have not refactored due to build issues - }, - { - label: 'Accessibility', - path: 'best-practices/a11y', - contentPath: 'best-practices/a11y', - }, - { - label: 'Unhandled errors in Angular', - path: 'best-practices/error-handling', - contentPath: 'best-practices/error-handling', - }, - { - label: 'Performance', - children: [ - { - label: 'Overview', - path: 'best-practices/runtime-performance', - contentPath: 'best-practices/runtime-performance/overview', - }, - { - label: 'Zone pollution', - path: 'best-practices/zone-pollution', - contentPath: 'best-practices/runtime-performance/zone-pollution', - }, - { - label: 'Slow computations', - path: 'best-practices/slow-computations', - contentPath: 'best-practices/runtime-performance/slow-computations', - }, - { - label: 'Skipping component subtrees', - path: 'best-practices/skipping-subtrees', - contentPath: 'best-practices/runtime-performance/skipping-subtrees', - }, - { - label: 'Profiling with the Chrome DevTools', - path: 'best-practices/profiling-with-chrome-devtools', - contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools', - }, - {label: 'Zoneless', path: 'guide/zoneless', contentPath: 'guide/zoneless'}, - ], - }, - { - label: 'Keeping up-to-date', - path: 'update', - contentPath: 'best-practices/update', - }, - ], - }, - { - label: 'Extended Ecosystem', - children: [ - { - label: 'NgModules', - path: 'guide/ngmodules/overview', - contentPath: 'guide/ngmodules/overview', - }, - { - label: 'Legacy Animations', - children: [ - { - label: 'Overview', - path: 'guide/legacy-animations', - contentPath: 'guide/animations/overview', - }, - { - label: 'Transition and Triggers', - path: 'guide/legacy-animations/transition-and-triggers', - contentPath: 'guide/animations/transition-and-triggers', - }, - { - label: 'Complex Sequences', - path: 'guide/legacy-animations/complex-sequences', - contentPath: 'guide/animations/complex-sequences', - }, - { - label: 'Reusable Animations', - path: 'guide/legacy-animations/reusable-animations', - contentPath: 'guide/animations/reusable-animations', - }, - { - label: 'Migrating to Native CSS Animations', - path: 'guide/animations/migration', - contentPath: 'guide/animations/migration', - }, - ], - }, - { - label: 'Using RxJS with Angular', - children: [ - { - label: 'Signals interop', - path: 'ecosystem/rxjs-interop', - contentPath: 'ecosystem/rxjs-interop/signals-interop', - }, - { - label: 'Component output interop', - path: 'ecosystem/rxjs-interop/output-interop', - contentPath: 'ecosystem/rxjs-interop/output-interop', - }, - { - label: 'Unsubscribing with takeUntilDestroyed', - path: 'ecosystem/rxjs-interop/take-until-destroyed', - contentPath: 'ecosystem/rxjs-interop/take-until-destroyed', - }, - ], - }, - { - label: 'Service Workers & PWAs', - children: [ - { - label: 'Overview', - path: 'ecosystem/service-workers', - contentPath: 'ecosystem/service-workers/overview', - }, - { - label: 'Getting started', - path: 'ecosystem/service-workers/getting-started', - contentPath: 'ecosystem/service-workers/getting-started', - }, - { - label: 'Configuration file', - path: 'ecosystem/service-workers/config', - contentPath: 'ecosystem/service-workers/config', - }, - { - label: 'Communicating with the service worker', - path: 'ecosystem/service-workers/communications', - contentPath: 'ecosystem/service-workers/communications', - }, - { - label: 'Push notifications', - path: 'ecosystem/service-workers/push-notifications', - contentPath: 'ecosystem/service-workers/push-notifications', - }, - { - label: 'Service worker devops', - path: 'ecosystem/service-workers/devops', - contentPath: 'ecosystem/service-workers/devops', - }, - { - label: 'App shell pattern', - path: 'ecosystem/service-workers/app-shell', - contentPath: 'ecosystem/service-workers/app-shell', - }, - ], - }, - { - label: 'Web workers', - path: 'ecosystem/web-workers', - contentPath: 'ecosystem/web-workers', - }, - { - label: 'Custom build pipeline', - path: 'ecosystem/custom-build-pipeline', - contentPath: 'ecosystem/custom-build-pipeline', - }, - { - label: 'Tailwind', - path: 'guide/tailwind', - contentPath: 'guide/tailwind', - status: 'new', - }, - { - label: 'Angular Fire', - path: 'https://github.com/angular/angularfire#readme', - }, - { - label: 'Google Maps', - path: 'https://github.com/angular/components/tree/main/src/google-maps#readme', - }, - { - label: 'Google Pay', - path: 'https://github.com/google-pay/google-pay-button#angular', - }, - { - label: 'YouTube player', - path: 'https://github.com/angular/components/blob/main/src/youtube-player/README.md', - }, - { - label: 'Angular CDK', - path: 'https://material.angular.dev/cdk/categories', - }, - { - label: 'Angular Material', - path: 'https://material.angular.dev/', - }, - ], - }, - ...(isDevMode() - ? [ - { - label: 'Adev Dev Guide', - children: [ - { - label: 'Kitchen Sink', - path: 'kitchen-sink', - contentPath: 'kitchen-sink', - }, - ], - }, - ] - : []), -]; - -export const TUTORIALS_SUB_NAVIGATION_DATA: NavigationItem[] = [ - FIRST_APP_TUTORIAL_NAV_DATA, - LEARN_ANGULAR_TUTORIAL_NAV_DATA, - DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA, - SIGNALS_TUTORIAL_NAV_DATA, - { - path: DEFAULT_PAGES.TUTORIALS, - contentPath: 'tutorials/home', - label: 'Tutorials', - }, -]; - -const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ - { - label: 'Roadmap', - path: 'roadmap', - contentPath: 'reference/roadmap', - }, - { - label: 'Get involved', - path: 'https://github.com/angular/angular/blob/main/CONTRIBUTING.md', - }, - { - label: 'API Reference', - children: [ - { - label: 'Overview', - path: 'api', - }, - ...getApiNavigationItems(), - ], - }, - { - label: 'CLI Reference', - children: [ - { - label: 'Overview', - path: 'cli', - contentPath: 'reference/cli', - }, - { - label: 'ng add', - path: 'cli/add', - }, - { - label: 'ng analytics', - children: [ - { - label: 'Overview', - path: 'cli/analytics', - }, - { - label: 'disable', - path: 'cli/analytics/disable', - }, - { - label: 'enable', - path: 'cli/analytics/enable', - }, - { - label: 'info', - path: 'cli/analytics/info', - }, - { - label: 'prompt', - path: 'cli/analytics/prompt', - }, - ], - }, - { - label: 'ng build', - path: 'cli/build', - }, - { - label: 'ng cache', - children: [ - { - label: 'Overview', - path: 'cli/cache', - }, - { - label: 'clean', - path: 'cli/cache/clean', - }, - { - label: 'disable', - path: 'cli/cache/disable', - }, - { - label: 'enable', - path: 'cli/cache/enable', - }, - { - label: 'info', - path: 'cli/cache/info', - }, - ], - }, - { - label: 'ng completion', - children: [ - { - label: 'Overview', - path: 'cli/completion', - }, - { - label: 'script', - path: 'cli/completion/script', - }, - ], - }, - { - label: 'ng config', - path: 'cli/config', - }, - { - label: 'ng deploy', - path: 'cli/deploy', - }, - { - label: 'ng e2e', - path: 'cli/e2e', - }, - { - label: 'ng extract-i18n', - path: 'cli/extract-i18n', - }, - { - label: 'ng generate', - children: [ - { - label: 'Overview', - path: 'cli/generate', - }, - { - label: 'ai-config', - path: 'cli/generate/ai-config', - }, - { - label: 'app-shell', - path: 'cli/generate/app-shell', - }, - { - label: 'application', - path: 'cli/generate/application', - }, - { - label: 'class', - path: 'cli/generate/class', - }, - { - label: 'component', - path: 'cli/generate/component', - }, - { - label: 'config', - path: 'cli/generate/config', - }, - { - label: 'directive', - path: 'cli/generate/directive', - }, - { - label: 'enum', - path: 'cli/generate/enum', - }, - { - label: 'environments', - path: 'cli/generate/environments', - }, - { - label: 'guard', - path: 'cli/generate/guard', - }, - { - label: 'interceptor', - path: 'cli/generate/interceptor', - }, - { - label: 'interface', - path: 'cli/generate/interface', - }, - { - label: 'library', - path: 'cli/generate/library', - }, - { - label: 'module', - path: 'cli/generate/module', - }, - { - label: 'pipe', - path: 'cli/generate/pipe', - }, - { - label: 'resolver', - path: 'cli/generate/resolver', - }, - { - label: 'service-worker', - path: 'cli/generate/service-worker', - }, - { - label: 'service', - path: 'cli/generate/service', - }, - { - label: 'web-worker', - path: 'cli/generate/web-worker', - }, - ], - }, - { - label: 'ng lint', - path: 'cli/lint', - }, - { - label: 'ng new', - path: 'cli/new', - }, - { - label: 'ng run', - path: 'cli/run', - }, - { - label: 'ng serve', - path: 'cli/serve', - }, - { - label: 'ng test', - path: 'cli/test', - }, - { - label: 'ng update', - path: 'cli/update', - }, - { - label: 'ng version', - path: 'cli/version', - }, - ], - }, - { - label: 'Error Encyclopedia', - children: [ - { - label: 'Overview', - path: 'errors', - contentPath: 'reference/errors/overview', - }, - ...ERRORS_NAV_DATA, - ], - }, - { - label: 'Extended Diagnostics', - children: [ - { - label: 'Overview', - path: 'extended-diagnostics', - contentPath: 'reference/extended-diagnostics/overview', - }, - ...EXT_DIAGNOSTICS_NAV_DATA, - ], - }, - { - label: 'Versioning and releases', - path: 'reference/releases', - contentPath: 'reference/releases', - }, - { - label: 'Version compatibility', - path: 'reference/versions', - contentPath: 'reference/versions', - }, - { - label: 'Update guide', - path: 'update-guide', - }, - { - label: 'Configurations', - children: [ - { - label: 'File structure', - path: 'reference/configs/file-structure', - contentPath: 'reference/configs/file-structure', - }, - { - label: 'Workspace configuration', - path: 'reference/configs/workspace-config', - contentPath: 'reference/configs/workspace-config', - }, - { - label: 'Angular compiler options', - path: 'reference/configs/angular-compiler-options', - contentPath: 'reference/configs/angular-compiler-options', - }, - { - label: 'npm dependencies', - path: 'reference/configs/npm-packages', - contentPath: 'reference/configs/npm-packages', - }, - ], - }, - { - label: 'Migrations', - children: [ - { - label: 'Overview', - path: 'reference/migrations', - contentPath: 'reference/migrations/overview', - }, - { - label: 'Standalone', - path: 'reference/migrations/standalone', - contentPath: 'reference/migrations/standalone', - }, - { - label: 'Control Flow Syntax', - path: 'reference/migrations/control-flow', - contentPath: 'reference/migrations/control-flow', - }, - { - label: 'inject() Function', - path: 'reference/migrations/inject-function', - contentPath: 'reference/migrations/inject-function', - }, - { - label: 'Lazy-loaded routes', - path: 'reference/migrations/route-lazy-loading', - contentPath: 'reference/migrations/route-lazy-loading', - }, - { - label: 'Signal inputs', - path: 'reference/migrations/signal-inputs', - contentPath: 'reference/migrations/signal-inputs', - }, - { - label: 'Outputs', - path: 'reference/migrations/outputs', - contentPath: 'reference/migrations/outputs', - }, - { - label: 'Signal queries', - path: 'reference/migrations/signal-queries', - contentPath: 'reference/migrations/signal-queries', - }, - { - label: 'Clean up unused imports', - path: 'reference/migrations/cleanup-unused-imports', - contentPath: 'reference/migrations/cleanup-unused-imports', - }, - { - label: 'Self-closing tags', - path: 'reference/migrations/self-closing-tags', - contentPath: 'reference/migrations/self-closing-tags', - }, - ], - }, -]; - -const FOOTER_NAVIGATION_DATA: NavigationItem[] = [ - { - label: 'Press Kit', - path: 'press-kit', - contentPath: 'reference/press-kit', - }, - { - label: 'License', - path: 'license', - contentPath: 'reference/license', - }, -]; - -// Docs navigation data structure, it's used to display structure in -// navigation-list component And build the routing table for content pages. -export const SUB_NAVIGATION_DATA: SubNavigationData = { - docs: DOCS_SUB_NAVIGATION_DATA, - reference: REFERENCE_SUB_NAVIGATION_DATA, - tutorials: TUTORIALS_SUB_NAVIGATION_DATA, - footer: FOOTER_NAVIGATION_DATA, -}; diff --git a/adev-ja/src/app/sub-navigation-data.ts b/adev-ja/src/app/sub-navigation-data.ts deleted file mode 100644 index 7749d01a14..0000000000 --- a/adev-ja/src/app/sub-navigation-data.ts +++ /dev/null @@ -1,1461 +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 {isDevMode} from '@angular/core'; -import {NavigationItem} from '@angular/docs'; - -// These 2 imports are expected to be red because they are generated a build time -import FIRST_APP_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/first-app/routes.json'; -import LEARN_ANGULAR_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/learn-angular/routes.json'; -import DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/deferrable-views/routes.json'; -import SIGNALS_TUTORIAL_NAV_DATA from '../../src/assets/tutorials/signals/routes.json'; -import ERRORS_NAV_DATA from '../../src/assets/content/reference/errors/routes.json'; -import EXT_DIAGNOSTICS_NAV_DATA from '../../src/assets/content/reference/extended-diagnostics/routes.json'; - -import {getApiNavigationItems} from './features/references/helpers/manifest.helper'; -import {DEFAULT_PAGES} from './core/constants/pages'; - -interface SubNavigationData { - docs: NavigationItem[]; - reference: NavigationItem[]; - tutorials: NavigationItem[]; - footer: NavigationItem[]; -} - -const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [ - { - label: '入門', - children: [ - { - label: 'Angularとは?', - path: 'overview', - contentPath: 'introduction/what-is-angular', - }, - { - label: 'インストール', - path: 'installation', - contentPath: 'introduction/installation', - }, - { - label: '基本概念', - children: [ - { - label: '概要', - path: 'essentials', - contentPath: 'introduction/essentials/overview', - }, - { - label: 'コンポーネントによる構築', - path: 'essentials/components', - contentPath: 'introduction/essentials/components', - }, - { - label: 'リアクティビティとシグナル', - path: 'essentials/signals', - contentPath: 'introduction/essentials/signals', - }, - { - label: 'テンプレートによる動的なインターフェース', - path: 'essentials/templates', - contentPath: 'introduction/essentials/templates', - }, - { - label: '依存性の注入によるモジュール設計', - path: 'essentials/dependency-injection', - contentPath: 'introduction/essentials/dependency-injection', - }, - { - label: '次のステップ', - path: 'essentials/next-steps', - contentPath: 'introduction/essentials/next-steps', - }, - ], - }, - { - label: '作ってみよう! 🚀', - path: 'tutorials/learn-angular', - }, - ], - }, - { - label: '詳細ガイド', - children: [ - { - label: 'シグナル', - children: [ - { - label: '概要', - path: 'guide/signals', - contentPath: 'guide/signals/overview', - }, - { - label: 'linkedSignalによる派生状態', - path: 'guide/signals/linked-signal', - contentPath: 'guide/signals/linked-signal', - }, - { - label: 'resourceによる非同期リアクティビティ', - path: 'guide/signals/resource', - contentPath: 'guide/signals/resource', - }, - ], - }, - { - label: 'コンポーネント', - children: [ - { - label: 'コンポーネントの構造', - path: 'guide/components', - contentPath: 'guide/components/anatomy-of-components', - }, - { - label: 'セレクター', - path: 'guide/components/selectors', - contentPath: 'guide/components/selectors', - }, - { - label: 'スタイリング', - path: 'guide/components/styling', - contentPath: 'guide/components/styling', - }, - { - label: '入力プロパティによるデータ受け入れ', - path: 'guide/components/inputs', - contentPath: 'guide/components/inputs', - }, - { - label: '出力によるカスタムイベント', - path: 'guide/components/outputs', - contentPath: 'guide/components/outputs', - }, - { - label: 'ng-contentによるコンテンツ投影', - path: 'guide/components/content-projection', - contentPath: 'guide/components/content-projection', - }, - { - label: 'ホスト要素', - path: 'guide/components/host-elements', - contentPath: 'guide/components/host-elements', - }, - { - label: 'ライフサイクル', - path: 'guide/components/lifecycle', - contentPath: 'guide/components/lifecycle', - }, - { - label: 'クエリによるコンポーネントの子への参照', - path: 'guide/components/queries', - contentPath: 'guide/components/queries', - }, - { - label: 'DOM APIの使用', - path: 'guide/components/dom-apis', - contentPath: 'guide/components/dom-apis', - }, - { - label: '継承', - path: 'guide/components/inheritance', - contentPath: 'guide/components/inheritance', - }, - { - label: 'プログラムによるコンポーネントレンダリング', - path: 'guide/components/programmatic-rendering', - contentPath: 'guide/components/programmatic-rendering', - }, - { - label: '高度な設定', - path: 'guide/components/advanced-configuration', - contentPath: 'guide/components/advanced-configuration', - }, - { - label: 'カスタム要素', - path: 'guide/elements', - contentPath: 'guide/elements', - }, - ], - }, - { - label: 'テンプレート', - children: [ - { - label: '概要', - path: 'guide/templates', - contentPath: 'guide/templates/overview', - }, - { - label: '動的テキスト、プロパティ、属性のバインディング', - path: 'guide/templates/binding', - contentPath: 'guide/templates/binding', - }, - { - label: 'イベントリスナーの追加', - path: 'guide/templates/event-listeners', - contentPath: 'guide/templates/event-listeners', - }, - { - label: '双方向バインディング', - path: 'guide/templates/two-way-binding', - contentPath: 'guide/templates/two-way-binding', - }, - { - label: '制御フロー', - path: 'guide/templates/control-flow', - contentPath: 'guide/templates/control-flow', - }, - { - label: 'パイプ', - path: 'guide/templates/pipes', - contentPath: 'guide/templates/pipes', - }, - { - label: 'ng-contentによる子コンテンツのスロット化', - path: 'guide/templates/ng-content', - contentPath: 'guide/templates/ng-content', - }, - { - label: 'ng-templateによるテンプレートフラグメントの作成', - path: 'guide/templates/ng-template', - contentPath: 'guide/templates/ng-template', - }, - { - label: 'ng-containerによる要素のグループ化', - path: 'guide/templates/ng-container', - contentPath: 'guide/templates/ng-container', - }, - { - label: 'テンプレート内の変数', - path: 'guide/templates/variables', - contentPath: 'guide/templates/variables', - }, - { - label: '@deferによる遅延読み込み', - path: 'guide/templates/defer', - contentPath: 'guide/templates/defer', - }, - { - label: '式の構文', - path: 'guide/templates/expression-syntax', - contentPath: 'guide/templates/expression-syntax', - }, - { - label: 'テンプレート内の空白', - path: 'guide/templates/whitespace', - contentPath: 'guide/templates/whitespace', - }, - ], - }, - { - label: 'ディレクティブ', - children: [ - { - label: '概要', - path: 'guide/directives', - contentPath: 'guide/directives/overview', - }, - { - label: '属性ディレクティブ', - path: 'guide/directives/attribute-directives', - contentPath: 'guide/directives/attribute-directives', - }, - { - label: '構造ディレクティブ', - path: 'guide/directives/structural-directives', - contentPath: 'guide/directives/structural-directives', - }, - { - label: 'ディレクティブコンポジションAPI', - path: 'guide/directives/directive-composition-api', - contentPath: 'guide/directives/directive-composition-api', - }, - { - label: 'NgOptimizedImageによる画像の最適化', - path: 'guide/image-optimization', - contentPath: 'guide/image-optimization', - }, - ], - }, - { - label: '依存性の注入', - children: [ - { - label: '概要', - path: 'guide/di', - contentPath: 'guide/di/overview', - }, - { - label: '依存性の注入を理解する', - path: 'guide/di/dependency-injection', - contentPath: 'guide/di/dependency-injection', - }, - { - label: '注入可能なサービスの作成', - path: 'guide/di/creating-injectable-service', - contentPath: 'guide/di/creating-injectable-service', - }, - { - label: '依存性プロバイダーの定義', - path: 'guide/di/dependency-injection-providers', - contentPath: 'guide/di/dependency-injection-providers', - }, - { - label: '注入コンテキスト', - path: 'guide/di/dependency-injection-context', - contentPath: 'guide/di/dependency-injection-context', - }, - { - label: '階層的なインジェクター', - path: 'guide/di/hierarchical-dependency-injection', - contentPath: 'guide/di/hierarchical-dependency-injection', - }, - { - label: 'インジェクショントークンの最適化', - path: 'guide/di/lightweight-injection-tokens', - contentPath: 'guide/di/lightweight-injection-tokens', - }, - { - label: 'DIの実践', - path: 'guide/di/di-in-action', - contentPath: 'guide/di/di-in-action', - }, - ], - }, - { - label: 'ルーティング', - status: 'updated', - children: [ - { - label: '概要', - path: 'guide/routing', - contentPath: 'guide/routing/overview', - }, - { - label: 'ルートを定義する', - path: 'guide/routing/define-routes', - contentPath: 'guide/routing/define-routes', - }, - { - label: 'アウトレットにルートを表示する', - path: 'guide/routing/show-routes-with-outlets', - contentPath: 'guide/routing/show-routes-with-outlets', - }, - { - label: 'ルートへのナビゲーション', - path: 'guide/routing/navigate-to-routes', - contentPath: 'guide/routing/navigate-to-routes', - }, - { - label: 'ルートの状態を読み取る', - path: 'guide/routing/read-route-state', - contentPath: 'guide/routing/read-route-state', - }, - { - label: 'ルートのリダイレクト', - path: 'guide/routing/redirecting-routes', - contentPath: 'guide/routing/redirecting-routes', - }, - { - label: 'ガードによるルートアクセスの制御', - path: 'guide/routing/route-guards', - contentPath: 'guide/routing/route-guards', - }, - { - label: 'ルートデータリゾルバー', - path: 'guide/routing/data-resolvers', - contentPath: 'guide/routing/data-resolvers', - }, - { - label: 'ライフサイクルとイベント', - path: 'guide/routing/lifecycle-and-events', - contentPath: 'guide/routing/lifecycle-and-events', - }, - { - label: 'ルーティングとナビゲーションのテスト', - path: 'guide/routing/testing', - contentPath: 'guide/routing/testing', - status: 'new', - }, - { - label: 'その他のルーティングタスク', - path: 'guide/routing/common-router-tasks', - contentPath: 'guide/routing/common-router-tasks', - }, - { - label: 'カスタムルートマッチの作成', - path: 'guide/routing/routing-with-urlmatcher', - contentPath: 'guide/routing/routing-with-urlmatcher', - }, - { - label: 'レンダリング戦略', - path: 'guide/routing/rendering-strategies', - contentPath: 'guide/routing/rendering-strategies', - status: 'new', - }, - { - label: 'ルーターリファレンス', - path: 'guide/routing/router-reference', - contentPath: 'guide/routing/router-reference', - }, - { - label: 'ルートの動作のカスタマイズ', - path: 'guide/routing/customizing-route-behavior', - contentPath: 'guide/routing/customizing-route-behavior', - status: 'new', - }, - { - label: 'ルート遷移アニメーション', - path: 'guide/routing/route-transition-animations', - contentPath: 'guide/routing/route-transition-animations', - }, - ], - }, - { - label: 'フォーム', - children: [ - { - label: '概要', - path: 'guide/forms', - contentPath: 'guide/forms/overview', - }, - { - label: 'リアクティブフォーム', - path: 'guide/forms/reactive-forms', - contentPath: 'guide/forms/reactive-forms', - }, - { - label: '厳密に型付けされたリアクティブフォーム', - path: 'guide/forms/typed-forms', - contentPath: 'guide/forms/typed-forms', - }, - { - label: 'テンプレート駆動型フォーム', - path: 'guide/forms/template-driven-forms', - contentPath: 'guide/forms/template-driven-forms', - }, - { - label: 'フォーム入力の検証', - path: 'guide/forms/form-validation', - contentPath: 'guide/forms/form-validation', - }, - { - label: '動的フォームの構築', - path: 'guide/forms/dynamic-forms', - contentPath: 'guide/forms/dynamic-forms', - }, - ], - }, - { - label: 'HTTPクライアント', - children: [ - { - label: '概要', - path: 'guide/http', - contentPath: 'guide/http/overview', - }, - { - label: 'HttpClientの設定', - path: 'guide/http/setup', - contentPath: 'guide/http/setup', - }, - { - label: 'リクエストの実行', - path: 'guide/http/making-requests', - contentPath: 'guide/http/making-requests', - }, - { - label: 'httpResourceを使ったリアクティブなデータ取得', - path: 'guide/http/http-resource', - contentPath: 'guide/http/http-resource', - }, - { - label: 'リクエストとレスポンスへの介入', - path: 'guide/http/interceptors', - contentPath: 'guide/http/interceptors', - }, - { - label: 'テスト', - path: 'guide/http/testing', - contentPath: 'guide/http/testing', - }, - ], - }, - { - label: 'サーバーサイド・ハイブリッドレンダリング', - children: [ - { - label: '概要', - path: 'guide/performance', - contentPath: 'guide/performance/overview', - }, - { - label: 'サーバーサイド・ハイブリッドレンダリング', - path: 'guide/ssr', - contentPath: 'guide/ssr', - }, - { - label: 'ハイドレーション', - path: 'guide/hydration', - contentPath: 'guide/hydration', - }, - { - label: 'インクリメンタルハイドレーション', - path: 'guide/incremental-hydration', - contentPath: 'guide/incremental-hydration', - }, - ], - }, - { - label: 'テスト', - children: [ - { - label: '概要', - path: 'guide/testing', - contentPath: 'guide/testing/overview', - }, - { - label: 'コードカバレッジ', - path: 'guide/testing/code-coverage', - contentPath: 'guide/testing/code-coverage', - }, - { - label: 'サービスのテスト', - path: 'guide/testing/services', - contentPath: 'guide/testing/services', - }, - { - label: 'コンポーネントのテストの基本', - path: 'guide/testing/components-basics', - contentPath: 'guide/testing/components-basics', - }, - { - label: 'コンポーネントのテストシナリオ', - path: 'guide/testing/components-scenarios', - contentPath: 'guide/testing/components-scenarios', - }, - { - label: '属性ディレクティブのテスト', - path: 'guide/testing/attribute-directives', - contentPath: 'guide/testing/attribute-directives', - }, - { - label: 'パイプのテスト', - path: 'guide/testing/pipes', - contentPath: 'guide/testing/pipes', - }, - { - label: 'ルーティングとナビゲーションのテスト', - path: 'guide/routing/testing', - contentPath: 'guide/routing/testing', - status: 'new', - }, - { - label: 'テストのデバッグ', - path: 'guide/testing/debugging', - contentPath: 'guide/testing/debugging', - }, - { - label: 'テストユーティリティAPI', - path: 'guide/testing/utility-apis', - contentPath: 'guide/testing/utility-apis', - }, - { - label: '実験的なユニットテストシステム', - path: 'guide/testing/unit-tests', - contentPath: 'guide/testing/experimental-unit-test', - }, - { - label: 'コンポーネントハーネスの概要', - path: 'guide/testing/component-harnesses-overview', - contentPath: 'guide/testing/component-harnesses-overview', - }, - { - label: 'テストでコンポーネントハーネスを使う', - path: 'guide/testing/using-component-harnesses', - contentPath: 'guide/testing/using-component-harnesses', - }, - { - label: 'コンポーネントハーネスを作成する', - path: 'guide/testing/creating-component-harnesses', - contentPath: 'guide/testing/creating-component-harnesses', - }, - { - label: 'テスト環境にハーネスサポートを追加する', - path: 'guide/testing/component-harnesses-testing-environments', - contentPath: 'guide/testing/component-harnesses-testing-environments', - }, - ], - }, - { - label: '国際化', - children: [ - { - label: '概要', - path: 'guide/i18n', - contentPath: 'guide/i18n/overview', - }, - { - label: 'localizeパッケージの追加', - path: 'guide/i18n/add-package', - contentPath: 'guide/i18n/add-package', - }, - { - label: 'IDによるロケールの参照', - path: 'guide/i18n/locale-id', - contentPath: 'guide/i18n/locale-id', - }, - { - label: 'ロケールに基づいたデータのフォーマット', - path: 'guide/i18n/format-data-locale', - contentPath: 'guide/i18n/format-data-locale', - }, - { - label: '翻訳のためのコンポーネントの準備', - path: 'guide/i18n/prepare', - contentPath: 'guide/i18n/prepare', - }, - { - label: '翻訳ファイルの操作', - path: 'guide/i18n/translation-files', - contentPath: 'guide/i18n/translation-files', - }, - { - label: 'アプリへの翻訳の統合', - path: 'guide/i18n/merge', - contentPath: 'guide/i18n/merge', - }, - { - label: '複数のロケールのデプロイ', - path: 'guide/i18n/deploy', - contentPath: 'guide/i18n/deploy', - }, - { - label: 'ロケールデータのグローバルバリアントのインポート', - path: 'guide/i18n/import-global-variants', - contentPath: 'guide/i18n/import-global-variants', - }, - { - label: 'カスタムIDによるマークされたテキストの管理', - path: 'guide/i18n/manage-marked-text', - contentPath: 'guide/i18n/manage-marked-text', - }, - { - label: 'Angularアプリケーションの例', - path: 'guide/i18n/example', - contentPath: 'guide/i18n/example', - }, - ], - }, - { - label: 'アニメーション', - status: 'updated', - children: [ - { - label: 'Enter and Leave アニメーション', - path: 'guide/animations/enter-and-leave', - contentPath: 'guide/animations/enter-and-leave', - status: 'new', - }, - { - label: '複雑なCSSアニメーション', - path: 'guide/animations/css', - contentPath: 'guide/animations/css', - }, - { - label: 'ルート遷移アニメーション', - path: 'guide/routing/route-transition-animations', - contentPath: 'guide/routing/route-transition-animations', - }, - ], - }, - { - label: 'Drag and drop', - path: 'guide/drag-drop', - contentPath: 'guide/drag-drop', - }, - ], - }, - { - label: 'Build with AI', - status: 'new', - children: [ - { - label: 'はじめよう', - path: 'ai', - contentPath: 'ai/overview', - }, - { - label: 'LLMプロンプトとAI IDEセットアップ', - path: 'ai/develop-with-ai', - contentPath: 'ai/develop-with-ai', - }, - { - label: '設計パターン', - path: 'ai/design-patterns', - contentPath: 'ai/design-patterns', - }, - { - label: 'Angular CLI MCPサーバーセットアップ', - path: 'ai/mcp', - contentPath: 'ai/mcp-server-setup', - }, - ], - }, - { - label: '開発者ツール', - children: [ - { - label: 'Angular CLI', - children: [ - { - label: '概要', - path: 'tools/cli', - contentPath: 'tools/cli/overview', - }, - { - label: 'ローカル設定', - path: 'tools/cli/setup-local', - contentPath: 'tools/cli/setup-local', - }, - { - label: 'Angularアプリのビルド', - path: 'tools/cli/build', - contentPath: 'tools/cli/build', - }, - { - label: '開発用ローカルサーバー', - path: 'tools/cli/serve', - contentPath: 'tools/cli/serve', - }, - { - label: 'デプロイメント', - path: 'tools/cli/deployment', - contentPath: 'tools/cli/deployment', - }, - { - label: 'エンドツーエンドテスト', - path: 'tools/cli/end-to-end', - contentPath: 'tools/cli/end-to-end', - }, - { - label: '新しいビルドシステムへの移行', - path: 'tools/cli/build-system-migration', - contentPath: 'tools/cli/build-system-migration', - }, - { - label: 'ビルド環境', - path: 'tools/cli/environments', - contentPath: 'tools/cli/environments', - }, - { - label: 'Angular CLIビルダー', - path: 'tools/cli/cli-builder', - contentPath: 'tools/cli/cli-builder', - }, - { - label: 'Schematicsによるコードの生成', - path: 'tools/cli/schematics', - contentPath: 'tools/cli/schematics', - }, - { - label: 'Schematicsの作成', - path: 'tools/cli/schematics-authoring', - contentPath: 'tools/cli/schematics-authoring', - }, - { - label: 'ライブラリのSchematics', - path: 'tools/cli/schematics-for-libraries', - contentPath: 'tools/cli/schematics-for-libraries', - }, - { - label: 'テンプレート型チェック', - path: 'tools/cli/template-typecheck', - contentPath: 'tools/cli/template-typecheck', - }, - { - label: '事前コンパイル (AOT) コンパイル', - path: 'tools/cli/aot-compiler', - contentPath: 'tools/cli/aot-compiler', - }, - { - label: 'AOTメタデータエラー', - path: 'tools/cli/aot-metadata-errors', - contentPath: 'tools/cli/aot-metadata-errors', - }, - ], - }, - { - label: 'ライブラリ', - children: [ - { - label: '概要', - path: 'tools/libraries', - contentPath: 'tools/libraries/overview', - }, - { - label: 'ライブラリの作成', - path: 'tools/libraries/creating-libraries', - contentPath: 'tools/libraries/creating-libraries', - }, - { - label: 'ライブラリの使用', - path: 'tools/libraries/using-libraries', - contentPath: 'tools/libraries/using-libraries', - }, - { - label: 'Angularパッケージフォーマット', - path: 'tools/libraries/angular-package-format', - contentPath: 'tools/libraries/angular-package-format', - }, - ], - }, - { - label: 'DevTools', - children: [ - { - label: '概要', - path: 'tools/devtools', - contentPath: 'tools/devtools/overview', - }, - { - label: 'コンポーネント', - path: 'tools/devtools/component', - contentPath: 'tools/devtools/component', - }, - { - label: 'プロファイラー', - path: 'tools/devtools/profiler', - contentPath: 'tools/devtools/profiler', - }, - // TODO: create those guides - // The signal debugging docs should also be added to the signal section - // { - // label: 'Signals', - // path: 'tools/devtools/signals', - // contentPath: 'tools/devtools/signals', - // }, - // { - // label: 'Router', - // path: 'tools/devtools/router', - // contentPath: 'tools/devtools/router', - // } - ], - }, - { - label: '言語サービス', - path: 'tools/language-service', - contentPath: 'tools/language-service', - }, - ], - }, - { - label: 'ベストプラクティス', - children: [ - { - label: 'スタイルガイド', - path: 'style-guide', - contentPath: 'best-practices/style-guide', - status: 'updated', - }, - { - label: 'セキュリティ', - path: 'best-practices/security', - contentPath: 'guide/security', // Have not refactored due to build issues - }, - { - label: 'アクセシビリティ', - path: 'best-practices/a11y', - contentPath: 'best-practices/a11y', - }, - { - label: 'Angularでの未処理のエラー', - path: 'best-practices/error-handling', - contentPath: 'best-practices/error-handling', - }, - { - label: 'パフォーマンス', - children: [ - { - label: '概要', - path: 'best-practices/runtime-performance', - contentPath: 'best-practices/runtime-performance/overview', - }, - { - label: 'ゾーンの汚染', - path: 'best-practices/zone-pollution', - contentPath: 'best-practices/runtime-performance/zone-pollution', - }, - { - label: '遅い計算', - path: 'best-practices/slow-computations', - contentPath: 'best-practices/runtime-performance/slow-computations', - }, - { - label: 'コンポーネントサブツリーのスキップ', - path: 'best-practices/skipping-subtrees', - contentPath: 'best-practices/runtime-performance/skipping-subtrees', - }, - { - label: 'Chrome DevToolsでのプロファイリング', - path: 'best-practices/profiling-with-chrome-devtools', - contentPath: 'best-practices/runtime-performance/profiling-with-chrome-devtools', - }, - {label: 'Zoneless', path: 'guide/zoneless', contentPath: 'guide/zoneless'}, - ], - }, - { - label: 'アップデートに追従する', - path: 'update', - contentPath: 'best-practices/update', - }, - ], - }, - { - label: '拡張エコシステム', - children: [ - { - label: 'NgModule', - path: 'guide/ngmodules/overview', - contentPath: 'guide/ngmodules/overview', - }, - { - label: 'レガシーアニメーション', - children: [ - { - label: '概要', - path: 'guide/legacy-animations', - contentPath: 'guide/animations/overview', - }, - { - label: 'トランジションとトリガー', - path: 'guide/legacy-animations/transition-and-triggers', - contentPath: 'guide/animations/transition-and-triggers', - }, - { - label: '複雑なシーケンス', - path: 'guide/legacy-animations/complex-sequences', - contentPath: 'guide/animations/complex-sequences', - }, - { - label: '再利用可能なアニメーション', - path: 'guide/legacy-animations/reusable-animations', - contentPath: 'guide/animations/reusable-animations', - }, - { - label: 'Migrating to Native CSS Animations', - path: 'guide/animations/migration', - contentPath: 'guide/animations/migration', - }, - ], - }, - { - label: 'RxJSとの併用', - children: [ - { - label: 'Signalとの相互運用', - path: 'ecosystem/rxjs-interop', - contentPath: 'ecosystem/rxjs-interop/signals-interop', - }, - { - label: 'コンポーネント出力との相互接続', - path: 'ecosystem/rxjs-interop/output-interop', - contentPath: 'ecosystem/rxjs-interop/output-interop', - }, - { - label: 'takeUntilDestroyedでの購読解除', - path: 'ecosystem/rxjs-interop/take-until-destroyed', - contentPath: 'ecosystem/rxjs-interop/take-until-destroyed', - }, - ], - }, - { - label: 'Service WorkerとPWA', - children: [ - { - label: '概要', - path: 'ecosystem/service-workers', - contentPath: 'ecosystem/service-workers/overview', - }, - { - label: 'はじめに', - path: 'ecosystem/service-workers/getting-started', - contentPath: 'ecosystem/service-workers/getting-started', - }, - { - label: '設定ファイル', - path: 'ecosystem/service-workers/config', - contentPath: 'ecosystem/service-workers/config', - }, - { - label: 'Service Workerとの通信', - path: 'ecosystem/service-workers/communications', - contentPath: 'ecosystem/service-workers/communications', - }, - { - label: 'プッシュ通知', - path: 'ecosystem/service-workers/push-notifications', - contentPath: 'ecosystem/service-workers/push-notifications', - }, - { - label: 'Service WorkerのDevOps', - path: 'ecosystem/service-workers/devops', - contentPath: 'ecosystem/service-workers/devops', - }, - { - label: 'App Shellパターン', - path: 'ecosystem/service-workers/app-shell', - contentPath: 'ecosystem/service-workers/app-shell', - }, - ], - }, - { - label: 'Web Worker', - path: 'ecosystem/web-workers', - contentPath: 'ecosystem/web-workers', - }, - { - label: 'カスタムビルドパイプライン', - path: 'ecosystem/custom-build-pipeline', - contentPath: 'ecosystem/custom-build-pipeline', - }, - { - label: 'Tailwind', - path: 'guide/tailwind', - contentPath: 'guide/tailwind', - status: 'new', - }, - { - label: 'Angular Fire', - path: 'https://github.com/angular/angularfire#readme', - }, - { - label: 'Google Maps', - path: 'https://github.com/angular/components/tree/main/src/google-maps#readme', - }, - { - label: 'Google Pay', - path: 'https://github.com/google-pay/google-pay-button#angular', - }, - { - label: 'YouTubeプレーヤー', - path: 'https://github.com/angular/components/blob/main/src/youtube-player/README.md', - }, - { - label: 'Angular CDK', - path: 'https://material.angular.dev/cdk/categories', - }, - { - label: 'Angular Material', - path: 'https://material.angular.dev/', - }, - ], - }, - ...(isDevMode() - ? [ - { - label: 'Adev Dev Guide', - children: [ - { - label: 'Kitchen Sink', - path: 'kitchen-sink', - contentPath: 'kitchen-sink', - }, - ], - }, - ] - : []), -]; - -export const TUTORIALS_SUB_NAVIGATION_DATA: NavigationItem[] = [ - FIRST_APP_TUTORIAL_NAV_DATA, - LEARN_ANGULAR_TUTORIAL_NAV_DATA, - DEFERRABLE_VIEWS_TUTORIAL_NAV_DATA, - SIGNALS_TUTORIAL_NAV_DATA, - { - path: DEFAULT_PAGES.TUTORIALS, - contentPath: 'tutorials/home', - label: 'チュートリアル', - }, -]; - -const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [ - { - label: 'ロードマップ', - path: 'roadmap', - contentPath: 'reference/roadmap', - }, - { - label: '開発に参加する', - path: 'https://github.com/angular/angular/blob/main/CONTRIBUTING.md', - }, - { - label: 'コミュニティに参加する', - path: 'https://community.angular.jp/', - }, - { - label: '日本語化プロジェクト', - path: 'https://github.com/angular/angular-ja', - }, - { - label: 'APIリファレンス', - children: [ - { - label: '概要', - path: 'api', - }, - ...getApiNavigationItems(), - ], - }, - { - label: 'CLIリファレンス', - children: [ - { - label: '概要', - path: 'cli', - contentPath: 'reference/cli', - }, - { - label: 'ng add', - path: 'cli/add', - }, - { - label: 'ng analytics', - children: [ - { - label: '概要', - path: 'cli/analytics', - }, - { - label: 'disable', - path: 'cli/analytics/disable', - }, - { - label: 'enable', - path: 'cli/analytics/enable', - }, - { - label: 'info', - path: 'cli/analytics/info', - }, - { - label: 'prompt', - path: 'cli/analytics/prompt', - }, - ], - }, - { - label: 'ng build', - path: 'cli/build', - }, - { - label: 'ng cache', - children: [ - { - label: '概要', - path: 'cli/cache', - }, - { - label: 'clear', - path: 'cli/cache/clean', - }, - { - label: 'disable', - path: 'cli/cache/disable', - }, - { - label: 'enable', - path: 'cli/cache/enable', - }, - { - label: 'info', - path: 'cli/cache/info', - }, - ], - }, - { - label: 'ng completion', - children: [ - { - label: '概要', - path: 'cli/completion', - }, - { - label: 'script', - path: 'cli/completion/script', - }, - ], - }, - { - label: 'ng config', - path: 'cli/config', - }, - { - label: 'ng deploy', - path: 'cli/deploy', - }, - { - label: 'ng e2e', - path: 'cli/e2e', - }, - { - label: 'ng extract-i18n', - path: 'cli/extract-i18n', - }, - { - label: 'ng generate', - children: [ - { - label: '概要', - path: 'cli/generate', - }, - { - label: 'ai-config', - path: 'cli/generate/ai-config', - }, - { - label: 'app-shell', - path: 'cli/generate/app-shell', - }, - { - label: 'application', - path: 'cli/generate/application', - }, - { - label: 'class', - path: 'cli/generate/class', - }, - { - label: 'component', - path: 'cli/generate/component', - }, - { - label: 'config', - path: 'cli/generate/config', - }, - { - label: 'directive', - path: 'cli/generate/directive', - }, - { - label: 'enum', - path: 'cli/generate/enum', - }, - { - label: 'environments', - path: 'cli/generate/environments', - }, - { - label: 'guard', - path: 'cli/generate/guard', - }, - { - label: 'interceptor', - path: 'cli/generate/interceptor', - }, - { - label: 'interface', - path: 'cli/generate/interface', - }, - { - label: 'library', - path: 'cli/generate/library', - }, - { - label: 'module', - path: 'cli/generate/module', - }, - { - label: 'pipe', - path: 'cli/generate/pipe', - }, - { - label: 'resolver', - path: 'cli/generate/resolver', - }, - { - label: 'service-worker', - path: 'cli/generate/service-worker', - }, - { - label: 'service', - path: 'cli/generate/service', - }, - { - label: 'web-worker', - path: 'cli/generate/web-worker', - }, - ], - }, - { - label: 'ng lint', - path: 'cli/lint', - }, - { - label: 'ng new', - path: 'cli/new', - }, - { - label: 'ng run', - path: 'cli/run', - }, - { - label: 'ng serve', - path: 'cli/serve', - }, - { - label: 'ng test', - path: 'cli/test', - }, - { - label: 'ng update', - path: 'cli/update', - }, - { - label: 'ng version', - path: 'cli/version', - }, - ], - }, - { - label: 'エラー百科辞典', - children: [ - { - label: '概要', - path: 'errors', - contentPath: 'reference/errors/overview', - }, - ...ERRORS_NAV_DATA, - ], - }, - { - label: 'Extended Diagnostics', - children: [ - { - label: 'Overview', - path: 'extended-diagnostics', - contentPath: 'reference/extended-diagnostics/overview', - }, - ...EXT_DIAGNOSTICS_NAV_DATA, - ], - }, - { - label: 'バージョニングとリリース', - path: 'reference/releases', - contentPath: 'reference/releases', - }, - { - label: 'バージョン互換性', - path: 'reference/versions', - contentPath: 'reference/versions', - }, - { - label: 'アップデートガイド', - path: 'update-guide', - }, - { - label: '設定', - children: [ - { - label: 'ファイル構造', - path: 'reference/configs/file-structure', - contentPath: 'reference/configs/file-structure', - }, - { - label: 'ワークスペース設定', - path: 'reference/configs/workspace-config', - contentPath: 'reference/configs/workspace-config', - }, - { - label: 'Angularコンパイラオプション', - path: 'reference/configs/angular-compiler-options', - contentPath: 'reference/configs/angular-compiler-options', - }, - { - label: 'npmの依存関係', - path: 'reference/configs/npm-packages', - contentPath: 'reference/configs/npm-packages', - }, - ], - }, - { - label: 'マイグレーション', - children: [ - { - label: '概要', - path: 'reference/migrations', - contentPath: 'reference/migrations/overview', - }, - { - label: 'スタンドアロン', - path: 'reference/migrations/standalone', - contentPath: 'reference/migrations/standalone', - }, - { - label: '制御フロー構文', - path: 'reference/migrations/control-flow', - contentPath: 'reference/migrations/control-flow', - }, - { - label: 'inject() 関数', - path: 'reference/migrations/inject-function', - contentPath: 'reference/migrations/inject-function', - }, - { - label: 'Lazy-loaded routes', - path: 'reference/migrations/route-lazy-loading', - contentPath: 'reference/migrations/route-lazy-loading', - }, - { - label: 'Signal inputs', - path: 'reference/migrations/signal-inputs', - contentPath: 'reference/migrations/signal-inputs', - }, - { - label: 'Outputs', - path: 'reference/migrations/outputs', - contentPath: 'reference/migrations/outputs', - }, - { - label: 'Signal queries', - path: 'reference/migrations/signal-queries', - contentPath: 'reference/migrations/signal-queries', - }, - { - label: 'Clean up unused imports', - path: 'reference/migrations/cleanup-unused-imports', - contentPath: 'reference/migrations/cleanup-unused-imports', - }, - { - label: 'Self-closing tags', - path: 'reference/migrations/self-closing-tags', - contentPath: 'reference/migrations/self-closing-tags', - }, - ], - }, -]; - -const FOOTER_NAVIGATION_DATA: NavigationItem[] = [ - { - label: 'プレスキット', - path: 'press-kit', - contentPath: 'reference/press-kit', - }, - { - label: 'ライセンス', - path: 'license', - contentPath: 'reference/license', - }, -]; - -// Docs navigation data structure, it's used to display structure in -// navigation-list component And build the routing table for content pages. -export const SUB_NAVIGATION_DATA: SubNavigationData = { - docs: DOCS_SUB_NAVIGATION_DATA, - reference: REFERENCE_SUB_NAVIGATION_DATA, - tutorials: TUTORIALS_SUB_NAVIGATION_DATA, - footer: FOOTER_NAVIGATION_DATA, -};