diff --git a/apps/docs/src/app/components/component-viewer/component-viewer-wrapper.ts b/apps/docs/src/app/components/component-viewer/component-viewer-wrapper.ts
index 9759b03d24..5e145b2406 100644
--- a/apps/docs/src/app/components/component-viewer/component-viewer-wrapper.ts
+++ b/apps/docs/src/app/components/component-viewer/component-viewer-wrapper.ts
@@ -1,4 +1,4 @@
-import { Component } from '@angular/core';
+import { ChangeDetectionStrategy, Component } from '@angular/core';
import { KbqDividerModule } from '@koobiq/components/divider';
import { KbqLinkModule } from '@koobiq/components/link';
import { DocsAnchorsComponent } from '../anchors/anchors.component';
@@ -19,7 +19,7 @@ import { DocsOverviewComponentBase } from './component-viewer.component';
@@ -39,6 +39,7 @@ import { DocsOverviewComponentBase } from './component-viewer.component';
`,
+ changeDetection: ChangeDetectionStrategy.OnPush,
host: {
class: 'docs-component-overview'
}
diff --git a/apps/docs/src/app/components/component-viewer/component-viewer.component.ts b/apps/docs/src/app/components/component-viewer/component-viewer.component.ts
index d44523c98a..511f2eeba7 100644
--- a/apps/docs/src/app/components/component-viewer/component-viewer.component.ts
+++ b/apps/docs/src/app/components/component-viewer/component-viewer.component.ts
@@ -10,7 +10,6 @@ import {
ViewEncapsulation
} from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
-import { Title } from '@angular/platform-browser';
import { ActivatedRoute, Router, RouterLink, RouterLinkActive, RouterOutlet, UrlSegment } from '@angular/router';
import { KbqDividerModule } from '@koobiq/components/divider';
import { KbqLinkModule } from '@koobiq/components/link';
@@ -84,9 +83,11 @@ export class DocsComponentViewerComponent extends DocsLocaleState {
if (!docItem) {
this.router.navigate(['/404']);
+
+ return;
}
- this.structureItem = docItem!;
+ this.structureItem = docItem;
this.structureCategoryId = docsGetCategoryById(this.structureItem.categoryId!)!.id;
});
@@ -98,7 +99,6 @@ export class DocsComponentViewerComponent extends DocsLocaleState {
export class DocsOverviewComponentBase extends DocsLocaleState {
private readonly activatedRoute = inject(ActivatedRoute);
private readonly changeDetectorRef = inject(ChangeDetectorRef);
- private readonly titleService = inject(Title);
componentDocItem: DocsStructureItem | null = null;
@@ -136,15 +136,8 @@ export class DocsOverviewComponentBase extends DocsLocaleState {
}
private showView() {
- const documentName = this.componentDocItem?.id;
- let title = 'Koobiq';
-
- if (documentName) {
- title = `${documentName.charAt(0).toUpperCase()}${documentName.slice(1)} \u00B7 ${title}`;
- }
-
- this.titleService.setTitle(title);
-
+ // The page title/meta are owned centrally by `DocsTitleStrategy`; here we only flush the
+ // view once the document content has rendered.
this.changeDetectorRef.detectChanges();
}
}
diff --git a/apps/docs/src/app/components/component-viewer/component-viewer.template.html b/apps/docs/src/app/components/component-viewer/component-viewer.template.html
index 1a2502f086..b6807eccd3 100644
--- a/apps/docs/src/app/components/component-viewer/component-viewer.template.html
+++ b/apps/docs/src/app/components/component-viewer/component-viewer.template.html
@@ -6,14 +6,14 @@
diff --git a/apps/docs/src/app/components/copy-button/copy-button.ts b/apps/docs/src/app/components/copy-button/copy-button.ts
index da73696904..b58f67bc63 100644
--- a/apps/docs/src/app/components/copy-button/copy-button.ts
+++ b/apps/docs/src/app/components/copy-button/copy-button.ts
@@ -1,9 +1,11 @@
-import { Clipboard } from '@angular/cdk/clipboard';
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, ViewEncapsulation } from '@angular/core';
+import { ChangeDetectionStrategy, Component, inject, input, signal, ViewEncapsulation } from '@angular/core';
import { KbqIconModule } from '@koobiq/components/icon';
import { KbqLinkModule } from '@koobiq/components/link';
+import { DocsClipboardService } from 'src/app/services/clipboard';
import { DocsLocaleState } from 'src/app/services/locale';
+const SUCCESS_LABEL_DURATION = 1000;
+
@Component({
selector: 'docs-copy-button',
imports: [
@@ -11,16 +13,23 @@ import { DocsLocaleState } from 'src/app/services/locale';
KbqLinkModule
],
template: `
- @if (isLabelSuccessVisible) {
-
-
- {{ isRuLocale() ? 'Скопировано' : 'Copied' }}
-
- } @else {
-
-
-
- }
+
+ @if (isLabelSuccessVisible()) {
+
+ {{ t('copied') }}
+ } @else {
+
+ }
+
`,
styleUrls: ['./copy-button.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
@@ -30,23 +39,19 @@ import { DocsLocaleState } from 'src/app/services/locale';
}
})
export class DocsCopyButtonComponent extends DocsLocaleState {
- @Input() contentToCopy: string;
+ readonly contentToCopy = input
('');
- isLabelSuccessVisible = false;
+ protected readonly isLabelSuccessVisible = signal(false);
- private readonly clipboard = inject(Clipboard);
- private readonly changeDetectorRef = inject(ChangeDetectorRef);
+ private readonly clipboard = inject(DocsClipboardService);
copyContent(): void {
- if (!this.contentToCopy || !this.clipboard.copy(this.contentToCopy)) {
+ if (!this.contentToCopy() || !this.clipboard.copy(this.contentToCopy())) {
return;
}
- this.isLabelSuccessVisible = true;
+ this.isLabelSuccessVisible.set(true);
- setTimeout(() => {
- this.isLabelSuccessVisible = false;
- this.changeDetectorRef.markForCheck();
- }, 1000);
+ setTimeout(() => this.isLabelSuccessVisible.set(false), SUCCESS_LABEL_DURATION);
}
}
diff --git a/apps/docs/src/app/components/design-tokens-viewers/design-tokens-viewer.ts b/apps/docs/src/app/components/design-tokens-viewers/design-tokens-viewer.ts
index 4952afd066..b6edbf1304 100644
--- a/apps/docs/src/app/components/design-tokens-viewers/design-tokens-viewer.ts
+++ b/apps/docs/src/app/components/design-tokens-viewers/design-tokens-viewer.ts
@@ -3,6 +3,7 @@ import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
import { KbqSidepanelService } from '@koobiq/components/sidepanel';
import { KbqTabsModule } from '@koobiq/components/tabs';
import { DocsLocale } from 'src/app/constants/locale';
+import { DOCS_TRANSLATIONS } from 'src/app/services/i18n';
import { DocsStructureTokensTab } from '../../structure';
import { DocsComponentViewerComponent } from '../component-viewer/component-viewer.component';
import { DocsRegisterHeaderDirective } from '../register-header/register-header.directive';
@@ -19,7 +20,7 @@ import { DocsRegisterHeaderDirective } from '../register-header/register-header.
template: `