diff --git a/apps/daffio/src/app/docs/design/components/doc/component.html b/apps/daffio/src/app/docs/design/components/doc/component.html
new file mode 100644
index 0000000000..0cc88dcdf3
--- /dev/null
+++ b/apps/daffio/src/app/docs/design/components/doc/component.html
@@ -0,0 +1,25 @@
+
+
+
+
+ Usage
+
+
+
+
+
+
+
+
+
+ API
+
+
+ @for (apiDoc of doc().api; track $index) {
+
+ }
+
+
+
+
diff --git a/apps/daffio/src/app/docs/design/pages/component/component.spec.ts b/apps/daffio/src/app/docs/design/components/doc/component.spec.ts
similarity index 100%
rename from apps/daffio/src/app/docs/design/pages/component/component.spec.ts
rename to apps/daffio/src/app/docs/design/components/doc/component.spec.ts
diff --git a/apps/daffio/src/app/docs/design/components/doc/component.ts b/apps/daffio/src/app/docs/design/components/doc/component.ts
new file mode 100644
index 0000000000..40efaed0e6
--- /dev/null
+++ b/apps/daffio/src/app/docs/design/components/doc/component.ts
@@ -0,0 +1,34 @@
+import {
+ ChangeDetectionStrategy,
+ Component,
+ input,
+} from '@angular/core';
+
+import { DAFF_ARTICLE_COMPONENTS } from '@daffodil/design/article';
+import { DAFF_TABS_COMPONENTS } from '@daffodil/design/tabs';
+import {
+ DaffDocKind,
+ DaffPackageGuideDoc,
+} from '@daffodil/docs-utils';
+
+import { DaffioSafeHtmlPipe } from '../../../../core/html-sanitizer/safe.pipe';
+import { DaffioDocArticleModule } from '../../../components/doc-article/module';
+import { DaffioDocComponent } from '../../../components/doc-renderer/component.type';
+
+@Component({
+ selector: 'daffio-docs-design-component-page',
+ templateUrl: './component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ standalone: true,
+ imports: [
+ DAFF_TABS_COMPONENTS,
+ DAFF_ARTICLE_COMPONENTS,
+ DaffioDocArticleModule,
+ DaffioSafeHtmlPipe,
+ ],
+})
+export class DaffioDocsDesignComponentDocComponent implements DaffioDocComponent {
+ static readonly kind = DaffDocKind.COMPONENT;
+
+ doc = input();
+}
diff --git a/apps/daffio/src/app/docs/design/components/doc/provider.ts b/apps/daffio/src/app/docs/design/components/doc/provider.ts
new file mode 100644
index 0000000000..90674d3259
--- /dev/null
+++ b/apps/daffio/src/app/docs/design/components/doc/provider.ts
@@ -0,0 +1,4 @@
+import { DaffioDocsDesignComponentDocComponent } from './component';
+import { provideDaffioDocRendererComponents } from '../../../components/doc-renderer/token';
+
+export const daffioDocsDesignComponentProvider = () => provideDaffioDocRendererComponents(DaffioDocsDesignComponentDocComponent);
diff --git a/apps/daffio/src/app/docs/design/design-routing.module.ts b/apps/daffio/src/app/docs/design/design-routing.module.ts
index 14a8729a0d..18e4101780 100644
--- a/apps/daffio/src/app/docs/design/design-routing.module.ts
+++ b/apps/daffio/src/app/docs/design/design-routing.module.ts
@@ -13,10 +13,8 @@ import {
} from '@daffodil/docs-utils';
import { DAFFIO_DOCS_DESIGN_LIST_SIDEBAR_REGISTRATION } from './containers/docs-list/sidebar.provider';
-import { DaffioDocsDesignComponentPageComponent } from './pages/component/component';
import { DaffioDocsDesignComponentOverviewPageComponent } from './pages/components-overview/component-overview.component';
import { DaffioDocsDesignOverviewPageComponent } from './pages/overview/overview.component';
-import { DaffioDesignComponentDocResolver } from './resolvers/component-doc-resolver.service';
import { DAFF_NAV_SIDEBAR_REGISTRATION } from '../../core/nav/sidebar.provider';
import { DaffioRoute } from '../../core/router/route.type';
import { DaffioDocsPageComponent } from '../pages/docs-page/docs-page.component';
@@ -51,21 +49,6 @@ export const docsDesignRoutes: Routes = [
path: DAFF_DOC_KIND_PATH_SEGMENT_MAP[DaffDocKind.COMPONENT],
component: DaffioDocsDesignComponentOverviewPageComponent,
},
- {
- path: 'components',
- children: [
- {
- path: '**',
- component: DaffioDocsDesignComponentPageComponent,
- resolve: {
- doc: DaffioDesignComponentDocResolver,
- },
- data: {
- sidebarMode: DaffSidebarModeEnum.SideFixed,
- },
- },
- ],
- },
{
path: '**',
component: DaffioDocsPageComponent,
diff --git a/apps/daffio/src/app/docs/design/design.module.ts b/apps/daffio/src/app/docs/design/design.module.ts
index 82b90e00a3..ba5e4d0097 100644
--- a/apps/daffio/src/app/docs/design/design.module.ts
+++ b/apps/daffio/src/app/docs/design/design.module.ts
@@ -1,5 +1,6 @@
import { NgModule } from '@angular/core';
+import { daffioDocsDesignComponentProvider } from './components/doc/provider';
import { DaffioDocsDesignRoutingModule } from './design-routing.module';
import { DaffioDocsDesignIndexService } from './services/index.service';
@@ -9,6 +10,7 @@ import { DaffioDocsDesignIndexService } from './services/index.service';
],
providers: [
DaffioDocsDesignIndexService,
+ daffioDocsDesignComponentProvider(),
],
})
export class DaffioDocsDesignModule {}
diff --git a/apps/daffio/src/app/docs/design/pages/component/component.html b/apps/daffio/src/app/docs/design/pages/component/component.html
deleted file mode 100644
index 197fda0a05..0000000000
--- a/apps/daffio/src/app/docs/design/pages/component/component.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- Usage
-
-
-
-
-
-
-
-
-
- API
-
-
- @for (apiDoc of doc.api; track $index) {
-
- }
-
-
-
-
-
diff --git a/apps/daffio/src/app/docs/design/pages/component/component.ts b/apps/daffio/src/app/docs/design/pages/component/component.ts
deleted file mode 100644
index 72b0672832..0000000000
--- a/apps/daffio/src/app/docs/design/pages/component/component.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import {
- ChangeDetectionStrategy,
- Component,
- OnInit,
-} from '@angular/core';
-import {
- DomSanitizer,
- SafeHtml,
-} from '@angular/platform-browser';
-import { ActivatedRoute } from '@angular/router';
-import { LetDirective } from '@ngrx/component';
-import {
- map,
- Observable,
-} from 'rxjs';
-
-import { DAFF_ARTICLE_COMPONENTS } from '@daffodil/design/article';
-import { DAFF_TABS_COMPONENTS } from '@daffodil/design/tabs';
-import {
- DaffDoc,
- DaffGuideDoc,
-} from '@daffodil/docs-utils';
-
-import { DaffioDocViewerModule } from '../../../components/doc-viewer/doc-viewer.module';
-import { DaffioDesignComponentDoc } from '../../resolvers/component-doc-resolver.service';
-
-@Component({
- selector: 'daffio-docs-design-component-page',
- templateUrl: './component.html',
- changeDetection: ChangeDetectionStrategy.OnPush,
- standalone: true,
- imports: [
- LetDirective,
- DAFF_TABS_COMPONENTS,
- DAFF_ARTICLE_COMPONENTS,
- DaffioDocViewerModule,
- ],
-})
-export class DaffioDocsDesignComponentPageComponent implements OnInit {
- doc$: Observable;
-
- constructor(
- private route: ActivatedRoute,
- private sanitizer: DomSanitizer,
- ) {}
-
- ngOnInit() {
- this.doc$ = this.route.data.pipe(map((data: { doc: DaffioDesignComponentDoc }) => data.doc));
- }
-
- getInnerHtml(doc: DaffDoc | DaffGuideDoc): SafeHtml {
- //It is necessary to bypass the default angular sanitization to keep id tags in the injected html. These id tags are used for fragment routing.
- return this.sanitizer.bypassSecurityTrustHtml(doc.contents);
- }
-}
diff --git a/apps/daffio/src/app/docs/design/resolvers/component-doc-resolver.service.spec.ts b/apps/daffio/src/app/docs/design/resolvers/component-doc-resolver.service.spec.ts
deleted file mode 100644
index 33bec1e399..0000000000
--- a/apps/daffio/src/app/docs/design/resolvers/component-doc-resolver.service.spec.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-import { TestBed } from '@angular/core/testing';
-import {
- RouterStateSnapshot,
- Router,
-} from '@angular/router';
-import { RouterTestingModule } from '@angular/router/testing';
-import { cold } from 'jasmine-marbles';
-import {
- of,
- Observable,
- throwError,
-} from 'rxjs';
-
-import { DaffDoc } from '@daffodil/docs-utils';
-
-import { DocsResolver } from './component-doc-resolver.service';
-import { DaffioDocsServiceInterface } from '../services/docs-service.interface';
-import { DaffioDocsService } from '../services/docs.service';
-import { DaffioDocsFactory } from '../testing/factories/docs.factory';
-
-describe('DocsResolver', () => {
- let resolver: DocsResolver;
- let docsService: DaffioDocsService;
- let router: Router;
-
- const doc = new DaffioDocsFactory().create();
- const stubDocService: DaffioDocsServiceInterface = {
- get: (path: string): Observable => of(doc),
- };
-
- beforeEach(() => {
- TestBed.configureTestingModule({
- imports: [
- RouterTestingModule,
- ],
- providers: [
- { provide: DaffioDocsService, useValue: stubDocService },
- ],
- });
-
- router = TestBed.inject(Router);
- docsService = TestBed.inject(DaffioDocsService);
- resolver = TestBed.inject(DocsResolver);
- });
-
- it('should be created', () => {
- expect(resolver).toBeTruthy();
- });
-
- it('should complete with a doc', () => {
- const expected = cold('(a|)', { a: doc });
- expect(resolver.resolve(null, { url: 'my/path' })).toBeObservable(expected);
- });
-
- describe('if the doc doesn\'t exist (the doc service errors)', () => {
- beforeEach(() => {
- spyOn(docsService, 'get').and.returnValue(throwError('error'));
- spyOn(router, 'navigate');
- });
-
- it('should resolve with an empty observable', () => {
- const expected = cold('(|)');
- expect(resolver.resolve(null, { url: 'my/path' })).toBeObservable(expected);
- });
-
- it('should redirect to the 404 page', () => {
- resolver.resolve(null, { url: 'my/path' }).subscribe();
- expect(router.navigate).toHaveBeenCalledWith(['/404'], { skipLocationChange: true });
- });
- });
-});
diff --git a/apps/daffio/src/app/docs/design/resolvers/component-doc-resolver.service.ts b/apps/daffio/src/app/docs/design/resolvers/component-doc-resolver.service.ts
deleted file mode 100644
index b7e20a2495..0000000000
--- a/apps/daffio/src/app/docs/design/resolvers/component-doc-resolver.service.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { Injectable } from '@angular/core';
-import {
- ActivatedRouteSnapshot,
- RouterStateSnapshot,
- Router,
-} from '@angular/router';
-import {
- Observable,
- EMPTY,
- combineLatest,
-} from 'rxjs';
-import {
- take,
- catchError,
- switchMap,
- withLatestFrom,
- map,
-} from 'rxjs/operators';
-
-import {
- daffUriTruncateLeadingSlash,
- daffUriTruncateQueryFragment,
-} from '@daffodil/core/routing';
-import {
- DaffApiDoc,
- DaffPackageGuideDoc,
-} from '@daffodil/docs-utils';
-
-import { DaffioDocsService } from '../../services/docs.service';
-
-export interface DaffioDesignComponentDoc {
- guide: DaffPackageGuideDoc;
- api: Array;
-}
-
-@Injectable({
- providedIn: 'root',
-})
-export class DaffioDesignComponentDocResolver {
-
- constructor(private docService: DaffioDocsService, private router: Router) { }
-
- resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {
- return this.docService
- //remove any route fragment and initial slash from the route.
- .get(daffUriTruncateLeadingSlash(daffUriTruncateQueryFragment(state.url)))
- .pipe(
- take(1),
- switchMap((packageDoc) =>
- combineLatest(packageDoc.symbols?.map((symbol) =>
- this.docService.get(symbol)),
- ).pipe(
- map((api) => ({
- guide: packageDoc,
- api,
- })),
- ),
- ),
- catchError(() => {
- this.router.navigate(['/404'], { skipLocationChange: true });
- return EMPTY;
- }),
- );
- }
-}