@foblex/m-render 2.7.0 → 2.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/fesm2022/foblex-m-render-cookie-popup.component-CqwZv5lc.mjs +40 -0
  2. package/fesm2022/foblex-m-render-cookie-popup.component-CqwZv5lc.mjs.map +1 -0
  3. package/fesm2022/foblex-m-render.mjs +425 -803
  4. package/fesm2022/foblex-m-render.mjs.map +1 -1
  5. package/index.d.ts +2 -0
  6. package/lib/analytics/cookie-popup/cookie-popup.component.d.ts +12 -0
  7. package/lib/analytics/g-tag.service.d.ts +13 -0
  8. package/lib/analytics/index.d.ts +2 -0
  9. package/lib/analytics/provide-g-tag.d.ts +6 -0
  10. package/lib/common/components/index.d.ts +0 -1
  11. package/lib/common/index.d.ts +0 -1
  12. package/lib/common/services/index.d.ts +1 -1
  13. package/lib/documentation-page/analytics/common-services/f-meta.service.d.ts +1 -1
  14. package/lib/documentation-page/analytics/index.d.ts +0 -1
  15. package/lib/documentation-page/components/markdown-container/f-markdown/components/f-code-group/f-code-view/utils/parse-language.d.ts +0 -1
  16. package/lib/documentation-page/components/markdown-container/f-markdown/components/f-markdown-footer/f-markdown-footer.component.d.ts +1 -1
  17. package/lib/documentation-page/components/markdown-container/f-markdown/components/f-preview-group/f-preview/f-preview.component.d.ts +1 -1
  18. package/lib/documentation-page/components/markdown-container/f-markdown/f-markdown-renderer.component.d.ts +2 -1
  19. package/lib/documentation-page/components/markdown-container/f-markdown/index.d.ts +0 -1
  20. package/lib/documentation-page/components/navigation-panel/navigation-panel.component.d.ts +1 -1
  21. package/lib/documentation-page/components/scrollable-container/components/table-of-content/table-of-content.component.d.ts +1 -1
  22. package/lib/documentation-page/components/scrollable-container/domain/calculate-hash-from-scroll-position-and-activate-toc/calculate-hash-from-scroll-position-and-activate-toc.handler.d.ts +2 -1
  23. package/lib/documentation-page/documentation-root.component.d.ts +3 -0
  24. package/lib/documentation-page/domain/handle-navigation-links/handle-navigation-links.handler.d.ts +0 -1
  25. package/lib/documentation-page/domain/handle-navigation-links/handle-navigation-links.request.d.ts +2 -3
  26. package/lib/home-page/home-root.component.d.ts +7 -3
  27. package/lib/theme/index.d.ts +3 -0
  28. package/lib/theme/provide-theme.d.ts +2 -0
  29. package/lib/theme/theme-button/theme-button.component.d.ts +14 -0
  30. package/lib/{common/services → theme}/theme.service.d.ts +7 -1
  31. package/package.json +1 -2
  32. package/lib/common/components/f-theme-button/f-theme-button.component.d.ts +0 -14
  33. package/lib/common/utils/copy-to-clipboard.d.ts +0 -2
  34. package/lib/common/utils/index.d.ts +0 -1
  35. package/lib/documentation-page/analytics/analytics/f-accept-cookies-key.d.ts +0 -1
  36. package/lib/documentation-page/analytics/analytics/f-analytics.service.d.ts +0 -10
  37. package/lib/documentation-page/analytics/analytics/f-cookie-popup/f-cookie-popup.component.d.ts +0 -9
  38. package/lib/documentation-page/analytics/analytics/i-window-with-analytics.d.ts +0 -5
  39. package/lib/documentation-page/analytics/analytics/index.d.ts +0 -5
  40. package/lib/documentation-page/analytics/analytics/set-cookie-consent.d.ts +0 -6
  41. package/lib/documentation-page/components/markdown-container/f-markdown/highlight/highlight.service.d.ts +0 -13
  42. package/lib/documentation-page/components/markdown-container/f-markdown/highlight/index.d.ts +0 -2
  43. package/lib/documentation-page/components/markdown-container/f-markdown/highlight/mark-code-focused-blocks.post-processor.d.ts +0 -11
  44. package/lib/documentation-page/components/markdown-container/f-markdown/highlight/theme.d.ts +0 -2
@@ -1,18 +1,107 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, booleanAttribute, HostListener, Input, ViewChild, Output, ChangeDetectionStrategy, Component, input, output, viewChild, InjectionToken, inject, signal, Injectable, Renderer2, ElementRef, NgZone, Directive, ChangeDetectorRef, DestroyRef, computed, ViewContainerRef, Injector, forwardRef, effect, untracked } from '@angular/core';
3
- import { BrowserService, F_LOCAL_STORAGE } from '@foblex/platform';
4
- import { Subject, of, map, from, switchMap, startWith, filter, defer, Observable, EMPTY, debounceTime, fromEvent } from 'rxjs';
2
+ import { inject, Injectable, InjectionToken, EventEmitter, booleanAttribute, HostListener, Input, ViewChild, Output, ChangeDetectionStrategy, Component, input, output, viewChild, signal, ElementRef, NgZone, Directive, Renderer2, ChangeDetectorRef, DestroyRef, computed, ViewContainerRef, Injector, forwardRef, effect, untracked } from '@angular/core';
3
+ import { DOCUMENT, TitleCasePipe } from '@angular/common';
4
+ import { of, map, Subject, startWith, filter, EMPTY, switchMap, debounceTime, fromEvent } from 'rxjs';
5
5
  import { HttpClient } from '@angular/common/http';
6
- import { catchError, tap, filter as filter$1, shareReplay, take } from 'rxjs/operators';
6
+ import { catchError, tap, filter as filter$1, take } from 'rxjs/operators';
7
7
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
8
  import { Overlay, CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
9
9
  import { Router, RouterLink, NavigationEnd, ActivatedRoute, RouterOutlet } from '@angular/router';
10
- import { DOCUMENT, TitleCasePipe } from '@angular/common';
11
- import { createHighlighter } from 'shiki';
10
+ import { LOCAL_STORAGE, WINDOW, DOCUMENT_ELEMENT, LOCATION, IS_BROWSER_PLATFORM, copyToClipboard } from '@foblex/mr-common';
11
+ import { HighlightService, AVAILABLE_LANGUAGES } from '@foblex/mr-highlight';
12
12
  import MarkdownIt from 'markdown-it';
13
13
  import { DomSanitizer } from '@angular/platform-browser';
14
14
  import container from 'markdown-it-container';
15
15
 
16
+ class GTagService {
17
+ _config = inject(GTAG_CONFIG);
18
+ _document = inject(DOCUMENT);
19
+ _initialized = false;
20
+ initialize() {
21
+ console.log('[GTag] Initializing with ID:', this._config.id);
22
+ if (this._initialized) {
23
+ return;
24
+ }
25
+ this._initialized = true;
26
+ const window = this._getGtagWindow();
27
+ if (!window) {
28
+ console.warn('[GTag] Initialization failed: No window available.');
29
+ this._initialized = false;
30
+ return;
31
+ }
32
+ window.dataLayer = window.dataLayer || [];
33
+ window.gtag = (...args) => {
34
+ window.dataLayer?.push(args);
35
+ };
36
+ this._loadGtagScript(this._config.id);
37
+ window.gtag('js', new Date());
38
+ window.gtag('config', this._config.id);
39
+ }
40
+ _getGtagWindow() {
41
+ const result = this._document.defaultView;
42
+ if (!result?.gtag) {
43
+ console.warn('[GTag] gtag function is not available. Ensure the script is loaded.');
44
+ }
45
+ return result;
46
+ }
47
+ _loadGtagScript(id) {
48
+ if (this._document.querySelector('#gtag-script'))
49
+ return;
50
+ const script = this._document.createElement('script');
51
+ script.id = 'gtag-script';
52
+ script.async = true;
53
+ script.src = `https://www.googletagmanager.com/gtag/js?id=${id}`;
54
+ this._document.head.appendChild(script);
55
+ }
56
+ updateConsent(granted) {
57
+ const window = this._getGtagWindow();
58
+ if (!window?.gtag) {
59
+ console.warn('[GTag] Cannot update consent: gtag not available.');
60
+ return;
61
+ }
62
+ const state = granted ? 'granted' : 'denied';
63
+ const consentOptions = {
64
+ ad_user_data: state,
65
+ ad_personalization: state,
66
+ ad_storage: state,
67
+ analytics_storage: state,
68
+ };
69
+ if (state === 'denied') {
70
+ window.gtag('consent', 'default', {
71
+ ...consentOptions,
72
+ wait_for_update: 500,
73
+ });
74
+ }
75
+ else {
76
+ window.gtag('consent', 'update', {
77
+ ...consentOptions,
78
+ });
79
+ }
80
+ }
81
+ trackEvent(action, params) {
82
+ this._getGtagWindow()?.gtag?.('event', action, params || {});
83
+ }
84
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: GTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
85
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: GTagService });
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: GTagService, decorators: [{
88
+ type: Injectable
89
+ }] });
90
+
91
+ function provideGTag(config) {
92
+ return [
93
+ {
94
+ provide: GTAG_CONFIG,
95
+ useValue: config,
96
+ },
97
+ {
98
+ provide: GTagService,
99
+ useClass: GTagService,
100
+ },
101
+ ];
102
+ }
103
+ const GTAG_CONFIG = new InjectionToken('GTAG_CONFIG');
104
+
16
105
  let uniqueId$1 = 0;
17
106
  class FCheckboxComponent {
18
107
  changeDetectorRef;
@@ -58,10 +147,10 @@ class FCheckboxComponent {
58
147
  event.stopPropagation();
59
148
  }
60
149
  }
61
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
62
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.2.14", type: FCheckboxComponent, isStandalone: true, selector: "f-checkbox", inputs: { id: "id", checked: ["checked", "checked", booleanAttribute] }, outputs: { change: "change" }, host: { listeners: { "click": "preventBubblingFromLabel($event)" }, properties: { "class.f-checkbox-checked": "checked" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["label"], descendants: true }], ngImport: i0, template: "<input #input\n [id]=\"id\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-checkbox-container\" (click)=\"onTouchTargetClick()\">\n <svg class=\"f-checkbox-checkmark\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path class=\"f-checkbox-checkmark-path\" fill=\"none\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n</div>\n<label [for]=\"id\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--checkbox-container-background);border-radius:var(--checkbox-border-radius);padding:0 8px;color:var(--checkbox-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-checkbox-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--checkbox-size);height:var(--checkbox-size);margin-right:6px;border-radius:var(--checkbox-border-radius);background-color:var(--checkbox-background);padding:2px}:host .f-checkbox-container .f-checkbox-checkmark{position:absolute;top:calc(var(--checkbox-size) / 8);right:calc(var(--checkbox-size) / 8);bottom:calc(var(--checkbox-size) / 8);left:calc(var(--checkbox-size) / 8);opacity:0}:host .f-checkbox-container .f-checkbox-checkmark .f-checkbox-checkmark-path{stroke:currentColor;stroke-width:3}:host label{-webkit-user-select:none;user-select:none}:host.f-checkbox-checked .f-checkbox-container{background-color:var(--checkbox-checked-background)}:host.f-checkbox-checked .f-checkbox-container .f-checkbox-checkmark{color:var(--checkbox-checkmark-color);opacity:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
150
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
151
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.2.11", type: FCheckboxComponent, isStandalone: true, selector: "f-checkbox", inputs: { id: "id", checked: ["checked", "checked", booleanAttribute] }, outputs: { change: "change" }, host: { listeners: { "click": "preventBubblingFromLabel($event)" }, properties: { "class.f-checkbox-checked": "checked" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["label"], descendants: true }], ngImport: i0, template: "<input #input\n [id]=\"id\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-checkbox-container\" (click)=\"onTouchTargetClick()\">\n <svg class=\"f-checkbox-checkmark\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path class=\"f-checkbox-checkmark-path\" fill=\"none\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n</div>\n<label [for]=\"id\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--checkbox-container-background);border-radius:var(--checkbox-border-radius);padding:0 8px;color:var(--checkbox-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-checkbox-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--checkbox-size);height:var(--checkbox-size);margin-right:6px;border-radius:var(--checkbox-border-radius);background-color:var(--checkbox-background);padding:2px}:host .f-checkbox-container .f-checkbox-checkmark{position:absolute;top:calc(var(--checkbox-size) / 8);right:calc(var(--checkbox-size) / 8);bottom:calc(var(--checkbox-size) / 8);left:calc(var(--checkbox-size) / 8);opacity:0}:host .f-checkbox-container .f-checkbox-checkmark .f-checkbox-checkmark-path{stroke:currentColor;stroke-width:3}:host label{-webkit-user-select:none;user-select:none}:host.f-checkbox-checked .f-checkbox-container{background-color:var(--checkbox-checked-background)}:host.f-checkbox-checked .f-checkbox-container .f-checkbox-checkmark{color:var(--checkbox-checkmark-color);opacity:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
63
152
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCheckboxComponent, decorators: [{
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCheckboxComponent, decorators: [{
65
154
  type: Component,
66
155
  args: [{ selector: 'f-checkbox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
67
156
  '[class.f-checkbox-checked]': 'checked',
@@ -110,10 +199,10 @@ class FRadioButtonComponent {
110
199
  event.stopPropagation();
111
200
  }
112
201
  }
113
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FRadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
114
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.14", type: FRadioButtonComponent, isStandalone: true, selector: "f-radio-button", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "click": "preventBubblingFromLabel($event)" }, properties: { "class.f-radio-button-checked": "checked()" } }, viewQueries: [{ propertyName: "labelElement", first: true, predicate: ["label"], descendants: true, isSignal: true }], ngImport: i0, template: "<input [id]=\"id()\"\n type=\"radio\"\n [checked]=\"checked()\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-radio-button-container\" (click)=\"onTouchTargetClick()\">\n <div class=\"f-radio-button-inner-circle\"></div>\n</div>\n<label [for]=\"id()\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--radio-button-container-background);border-radius:var(--radio-button-container-border-radius);padding:0 8px;color:var(--radio-button-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-radio-button-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--radio-button-size);height:var(--radio-button-size);margin-right:6px;border-radius:50%;border:1px solid var(--radio-button-border-color);background-color:var(--radio-button-background)}:host .f-radio-button-container .f-radio-button-inner-circle{position:absolute;top:calc(var(--radio-button-size) / 4);right:calc(var(--radio-button-size) / 4);bottom:calc(var(--radio-button-size) / 4);left:calc(var(--radio-button-size) / 4);border-radius:50%}:host label{-webkit-user-select:none;user-select:none}:host.f-radio-button-checked .f-radio-button-container{background-color:var(--radio-button-checked-background)}:host.f-radio-button-checked .f-radio-button-container .f-radio-button-inner-circle{background-color:var(--radio-button-inner-circle-color)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
202
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FRadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
203
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.11", type: FRadioButtonComponent, isStandalone: true, selector: "f-radio-button", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "click": "preventBubblingFromLabel($event)" }, properties: { "class.f-radio-button-checked": "checked()" } }, viewQueries: [{ propertyName: "labelElement", first: true, predicate: ["label"], descendants: true, isSignal: true }], ngImport: i0, template: "<input [id]=\"id()\"\n type=\"radio\"\n [checked]=\"checked()\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-radio-button-container\" (click)=\"onTouchTargetClick()\">\n <div class=\"f-radio-button-inner-circle\"></div>\n</div>\n<label [for]=\"id()\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--radio-button-container-background);border-radius:var(--radio-button-container-border-radius);padding:0 8px;color:var(--radio-button-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-radio-button-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--radio-button-size);height:var(--radio-button-size);margin-right:6px;border-radius:50%;border:1px solid var(--radio-button-border-color);background-color:var(--radio-button-background)}:host .f-radio-button-container .f-radio-button-inner-circle{position:absolute;top:calc(var(--radio-button-size) / 4);right:calc(var(--radio-button-size) / 4);bottom:calc(var(--radio-button-size) / 4);left:calc(var(--radio-button-size) / 4);border-radius:50%}:host label{-webkit-user-select:none;user-select:none}:host.f-radio-button-checked .f-radio-button-container{background-color:var(--radio-button-checked-background)}:host.f-radio-button-checked .f-radio-button-container .f-radio-button-inner-circle{background-color:var(--radio-button-inner-circle-color)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
115
204
  }
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FRadioButtonComponent, decorators: [{
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FRadioButtonComponent, decorators: [{
117
206
  type: Component,
118
207
  args: [{ selector: 'f-radio-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
119
208
  '[class.f-radio-button-checked]': 'checked()',
@@ -127,95 +216,14 @@ const F_SOCIAL_LINKS_PROVIDER = new InjectionToken('F_SOCIAL_LINKS_PROVIDER');
127
216
 
128
217
  class FSocialLinksComponent {
129
218
  links = inject(F_SOCIAL_LINKS_PROVIDER).getSocialLinks();
130
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FSocialLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
131
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FSocialLinksComponent, isStandalone: true, selector: "f-social-links", ngImport: i0, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
219
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FSocialLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
220
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FSocialLinksComponent, isStandalone: true, selector: "f-social-links", ngImport: i0, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
132
221
  }
133
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FSocialLinksComponent, decorators: [{
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FSocialLinksComponent, decorators: [{
134
223
  type: Component,
135
224
  args: [{ selector: 'f-social-links', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"] }]
136
225
  }] });
137
226
 
138
- class PopoverService {
139
- _message = signal(null);
140
- get message() {
141
- return this._message.asReadonly();
142
- }
143
- show(message, timeout = 2000) {
144
- this._message.set(message);
145
- setTimeout(() => this._message.set(null), timeout);
146
- }
147
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
148
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PopoverService, providedIn: 'root' });
149
- }
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PopoverService, decorators: [{
151
- type: Injectable,
152
- args: [{
153
- providedIn: 'root',
154
- }]
155
- }] });
156
-
157
- class ThemeService {
158
- _browser = inject(BrowserService);
159
- _theme = new Subject();
160
- get theme$() {
161
- return this._theme.asObservable();
162
- }
163
- updateTheme() {
164
- this._theme.next();
165
- }
166
- getPreferredTheme() {
167
- return this._browser.localStorage.getItem('preferred-theme')
168
- || (this._browser.window.isMediaQuery('(prefers-color-scheme: dark)') ? 'dark' : 'light');
169
- }
170
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
171
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ThemeService, providedIn: 'root' });
172
- }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ThemeService, decorators: [{
174
- type: Injectable,
175
- args: [{ providedIn: 'root' }]
176
- }] });
177
-
178
- class FThemeButtonComponent {
179
- _renderer = inject(Renderer2);
180
- _fState = inject(ThemeService);
181
- _browser = inject(BrowserService);
182
- get _localStorage() {
183
- return this._browser.localStorage;
184
- }
185
- get _documentElement() {
186
- return this._browser.document.documentElement;
187
- }
188
- ngOnInit() {
189
- if (this._fState.getPreferredTheme() === 'dark' && !this._isDocumentContainsDarkTheme()) {
190
- this._renderer.addClass(this._documentElement, 'dark');
191
- this._localStorage.setItem('preferred-theme', 'dark');
192
- }
193
- }
194
- _isDocumentContainsDarkTheme() {
195
- return this._documentElement.classList.contains('dark');
196
- }
197
- _onClick() {
198
- if (this._fState.getPreferredTheme() === 'light' && !this._isDocumentContainsDarkTheme()) {
199
- this._renderer.addClass(this._documentElement, 'dark');
200
- this._localStorage.setItem('preferred-theme', 'dark');
201
- }
202
- else {
203
- this._renderer.removeClass(this._documentElement, 'dark');
204
- this._localStorage.setItem('preferred-theme', 'light');
205
- }
206
- this._fState.updateTheme();
207
- }
208
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FThemeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
209
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FThemeButtonComponent, isStandalone: true, selector: "button[f-theme-button]", host: { listeners: { "click": "_onClick()" } }, ngImport: i0, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
210
- }
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FThemeButtonComponent, decorators: [{
212
- type: Component,
213
- args: [{ selector: 'button[f-theme-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"] }]
214
- }], propDecorators: { _onClick: [{
215
- type: HostListener,
216
- args: ['click']
217
- }] } });
218
-
219
227
  class NpmVersionComponent {
220
228
  value = input();
221
229
  _http = inject(HttpClient);
@@ -236,10 +244,10 @@ class NpmVersionComponent {
236
244
  _npmRegistry(name) {
237
245
  return `https://registry.npmjs.org/${encodeURIComponent(name)}`;
238
246
  }
239
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NpmVersionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
240
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NpmVersionComponent, isStandalone: true, selector: "npm-version", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (version()) {\n <span class=\"version\">v{{ version() }}</span>\n} @else {\n <div class=\"spinner\"></div>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
247
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NpmVersionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
248
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: NpmVersionComponent, isStandalone: true, selector: "npm-version", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (version()) {\n <span class=\"version\">v{{ version() }}</span>\n} @else {\n <div class=\"spinner\"></div>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
241
249
  }
242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NpmVersionComponent, decorators: [{
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NpmVersionComponent, decorators: [{
243
251
  type: Component,
244
252
  args: [{ selector: 'npm-version', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (version()) {\n <span class=\"version\">v{{ version() }}</span>\n} @else {\n <div class=\"spinner\"></div>\n}\n" }]
245
253
  }] });
@@ -300,10 +308,10 @@ class DropdownMenuComponent {
300
308
  ngOnDestroy() {
301
309
  clearTimeout(this._hoverTimeout);
302
310
  }
303
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
304
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DropdownMenuComponent, isStandalone: true, selector: "dropdown-menu", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span class=\"label\" cdk-overlay-origin\n (click)=\"toggle()\"\n (mouseenter)=\"mouseEnter()\"\n (mouseleave)=\"mouseLeave()\"\n #overlayOrigin=\"cdkOverlayOrigin\">\n <span class=\"text\">{{ label() }}</span>\n <span class=\"f-icon chevron-down\"></span>\n</span>\n\n<ng-template\n cdk-connected-overlay\n [cdkConnectedOverlayLockPosition]=\"true\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayDisableClose]=\"false\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayOffsetY]=\"-10\"\n (backdropClick)=\"close()\"\n>\n <div class=\"dropdown-panel\"\n (mouseenter)=\"mouseEnter()\"\n (mouseleave)=\"mouseLeave()\">\n <div class=\"items\">\n @for (link of links(); track link.link) {\n <div class=\"menu-item\">\n <a class=\"menu-link\" [href]=\"link.link\">{{ link.text }}</a>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n", styles: [":host{overflow:hidden}.label{margin-left:8px;margin-right:8px;display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer;line-height:64px}.label .text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.label .f-icon{margin-left:4px;width:14px;min-width:14px;height:14px;color:inherit}.label:hover{color:var(--secondary-text)}.dropdown-panel{border-radius:6px;padding:12px;min-width:128px;border:1px solid var(--divider-color);background-color:var(--background-color);box-shadow:var(--shadow-3);max-height:calc(100vh - var(--header-height));overflow-y:auto}.menu-link{display:block;border-radius:4px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-text);white-space:nowrap;cursor:pointer}.menu-link:hover{color:var(--primary-1);background-color:var(--gray-soft)}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
311
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
312
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: DropdownMenuComponent, isStandalone: true, selector: "dropdown-menu", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span class=\"label\" cdk-overlay-origin\n (click)=\"toggle()\"\n (mouseenter)=\"mouseEnter()\"\n (mouseleave)=\"mouseLeave()\"\n #overlayOrigin=\"cdkOverlayOrigin\">\n <span class=\"text\">{{ label() }}</span>\n <span class=\"f-icon chevron-down\"></span>\n</span>\n\n<ng-template\n cdk-connected-overlay\n [cdkConnectedOverlayLockPosition]=\"true\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayDisableClose]=\"false\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayOffsetY]=\"-10\"\n (backdropClick)=\"close()\"\n>\n <div class=\"dropdown-panel\"\n (mouseenter)=\"mouseEnter()\"\n (mouseleave)=\"mouseLeave()\">\n <div class=\"items\">\n @for (link of links(); track link.link) {\n <div class=\"menu-item\">\n <a class=\"menu-link\" [href]=\"link.link\">{{ link.text }}</a>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n", styles: [":host{overflow:hidden}.label{margin-left:8px;margin-right:8px;display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer;line-height:64px}.label .text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.label .f-icon{margin-left:4px;width:14px;min-width:14px;height:14px;color:inherit}.label:hover{color:var(--secondary-text)}.dropdown-panel{border-radius:6px;padding:12px;min-width:128px;border:1px solid var(--divider-color);background-color:var(--background-color);box-shadow:var(--shadow-3);max-height:calc(100vh - var(--header-height));overflow-y:auto}.menu-link{display:block;border-radius:4px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-text);white-space:nowrap;cursor:pointer}.menu-link:hover{color:var(--primary-1);background-color:var(--gray-soft)}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
305
313
  }
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DropdownMenuComponent, decorators: [{
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DropdownMenuComponent, decorators: [{
307
315
  type: Component,
308
316
  args: [{ selector: 'dropdown-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
309
317
  CdkConnectedOverlay,
@@ -366,10 +374,10 @@ class InlineMenuComponent {
366
374
  overflowed(event) {
367
375
  this.isOverflowed.set(event);
368
376
  }
369
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: InlineMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
370
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: InlineMenuComponent, isStandalone: true, selector: "inline-menu", ngImport: i0, template: "<!--<div class=\"inline-menu-wrapper\" [element]=\"element\" overflowObserver (overflowed)=\"overflowed($event)\">-->\n<!-- <div #element class=\"inline-menu-container\" [class.hidden]=\"isOverflowed()\">-->\n<!-- @for (item of navigation; track item.link) {-->\n<!-- <a class=\"inline-menu-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">-->\n<!-- <span>{{ item.text }}</span>-->\n<!-- </a>-->\n<!-- }-->\n<!-- </div>-->\n\n<!-- @if (isOverflowed()) {-->\n\n<!-- }-->\n<!-- <dropdown-menu label=\"\"/>-->\n<!--</div>-->\n\n\n\n<div class=\"inline-menu-wrapper\" >\n <div #element class=\"inline-menu-container\" [class.hidden]=\"isOverflowed()\">\n @for (item of navigation; track item.link) {\n <a class=\"inline-menu-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">\n <span>{{ item.text }}</span>\n </a>\n }\n </div>\n</div>\n\n", styles: [":host{flex:1;max-width:100%}.inline-menu-wrapper{display:flex;justify-content:end;width:100%}.inline-menu-container{display:flex;justify-content:flex-start;align-items:center;overflow:hidden}.inline-menu-container.hidden{visibility:hidden;position:absolute}.inline-menu-link{padding:0 12px;line-height:var(--header-height);font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inline-menu-link:hover,.inline-menu-link.active{color:var(--primary-1)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
377
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: InlineMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
378
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: InlineMenuComponent, isStandalone: true, selector: "inline-menu", ngImport: i0, template: "<!--<div class=\"inline-menu-wrapper\" [element]=\"element\" overflowObserver (overflowed)=\"overflowed($event)\">-->\n<!-- <div #element class=\"inline-menu-container\" [class.hidden]=\"isOverflowed()\">-->\n<!-- @for (item of navigation; track item.link) {-->\n<!-- <a class=\"inline-menu-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">-->\n<!-- <span>{{ item.text }}</span>-->\n<!-- </a>-->\n<!-- }-->\n<!-- </div>-->\n\n<!-- @if (isOverflowed()) {-->\n\n<!-- }-->\n<!-- <dropdown-menu label=\"\"/>-->\n<!--</div>-->\n\n\n\n<div class=\"inline-menu-wrapper\" >\n <div #element class=\"inline-menu-container\" [class.hidden]=\"isOverflowed()\">\n @for (item of navigation; track item.link) {\n <a class=\"inline-menu-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">\n <span>{{ item.text }}</span>\n </a>\n }\n </div>\n</div>\n\n", styles: [":host{flex:1;max-width:100%}.inline-menu-wrapper{display:flex;justify-content:end;width:100%}.inline-menu-container{display:flex;justify-content:flex-start;align-items:center;overflow:hidden}.inline-menu-container.hidden{visibility:hidden;position:absolute}.inline-menu-link{padding:0 12px;line-height:var(--header-height);font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inline-menu-link:hover,.inline-menu-link.active{color:var(--primary-1)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
371
379
  }
372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: InlineMenuComponent, decorators: [{
380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: InlineMenuComponent, decorators: [{
373
381
  type: Component,
374
382
  args: [{ selector: 'inline-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
375
383
  RouterLink,
@@ -409,10 +417,10 @@ class OverflowObserverDirective {
409
417
  ngOnDestroy() {
410
418
  this._resizeObserver.disconnect();
411
419
  }
412
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OverflowObserverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
413
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.14", type: OverflowObserverDirective, isStandalone: true, selector: "[overflowObserver]", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overflowed: "overflowed" }, ngImport: i0 });
420
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: OverflowObserverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
421
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.11", type: OverflowObserverDirective, isStandalone: true, selector: "[overflowObserver]", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overflowed: "overflowed" }, ngImport: i0 });
414
422
  }
415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OverflowObserverDirective, decorators: [{
423
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: OverflowObserverDirective, decorators: [{
416
424
  type: Directive,
417
425
  args: [{
418
426
  selector: '[overflowObserver]',
@@ -420,121 +428,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
420
428
  }]
421
429
  }] });
422
430
 
423
- function copyToClipboard(value) {
424
- const blob = new Blob([value], { type: 'text/plain' });
425
- const data = [new ClipboardItem({ [blob.type]: blob })];
426
- // @ts-ignore
427
- return from(window?.navigator.permissions.query({ name: 'clipboard-write' })).pipe(map((permission) => permission.state !== 'denied'), switchMap((isGranted) => {
428
- if (isGranted) {
429
- return from(navigator.clipboard.write(data));
430
- }
431
- return of(undefined);
432
- }));
431
+ class PopoverService {
432
+ _message = signal(null);
433
+ get message() {
434
+ return this._message.asReadonly();
435
+ }
436
+ show(message, timeout = 2000) {
437
+ this._message.set(message);
438
+ setTimeout(() => this._message.set(null), timeout);
439
+ }
440
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
441
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PopoverService, providedIn: 'root' });
433
442
  }
443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PopoverService, decorators: [{
444
+ type: Injectable,
445
+ args: [{
446
+ providedIn: 'root',
447
+ }]
448
+ }] });
434
449
 
435
- const F_ACCEPT_COOKIES_KEY = 'm-render-accepts-cookies';
436
-
437
- const setCookieConsent = (state) => {
438
- try {
439
- if (window.gtag) {
440
- const consentOptions = {
441
- ad_user_data: state,
442
- ad_personalization: state,
443
- ad_storage: state,
444
- analytics_storage: state,
445
- };
446
- if (state === 'denied') {
447
- window.gtag('consent', 'default', {
448
- ...consentOptions,
449
- wait_for_update: 500,
450
- });
451
- }
452
- else if (state === 'granted') {
453
- window.gtag('consent', 'update', {
454
- ...consentOptions,
455
- });
456
- }
457
- }
450
+ class ThemeService {
451
+ _localStorage = inject(LOCAL_STORAGE, { optional: true });
452
+ _window = inject(WINDOW, { optional: true });
453
+ _theme = new Subject();
454
+ _docElement = inject(DOCUMENT_ELEMENT);
455
+ get theme$() {
456
+ return this._theme.asObservable();
458
457
  }
459
- catch {
460
- if (state === 'denied') {
461
- console.error('Unable to set default cookie consent.');
462
- }
463
- else if (state === 'granted') {
464
- console.error('Unable to grant cookie consent.');
458
+ initialize() {
459
+ if (this.getPreferredTheme() === 'dark' && !this._isDocumentContainsDarkTheme()) {
460
+ this._docElement.classList.add('dark');
461
+ this._localStorage?.setItem('preferred-theme', 'dark');
465
462
  }
466
463
  }
467
- };
468
-
469
- class FCookiePopupComponent {
470
- _storage = inject(F_LOCAL_STORAGE);
471
- hasAccepted = signal(false);
472
- constructor() {
473
- try {
474
- this.hasAccepted.set(this._storage?.getItem(F_ACCEPT_COOKIES_KEY) === 'true');
475
- }
476
- catch {
477
- this.hasAccepted.set(false);
478
- }
464
+ updateTheme() {
465
+ this._theme.next();
479
466
  }
480
- accept() {
481
- try {
482
- this._storage?.setItem(F_ACCEPT_COOKIES_KEY, 'true');
483
- }
484
- catch { /* empty */ }
485
- this.hasAccepted.set(true);
486
- setCookieConsent('granted');
467
+ getPreferredTheme() {
468
+ return this._getItem('preferred-theme')
469
+ || (this._matchMedia('(prefers-color-scheme: dark)')?.matches ? 'dark' : 'light');
487
470
  }
488
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCookiePopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
489
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FCookiePopupComponent, isStandalone: true, selector: "f-cookie-popup", ngImport: i0, template: "@if (!hasAccepted()) {\n <div class=\"docs-cookies-popup docs-invert-mode\">\n <p>This site uses cookies from Google to deliver its services and to analyze traffic.</p>\n\n <div>\n <a href=\"https://policies.google.com/technologies/cookies\" target=\"_blank\" rel=\"noopener\">\n <button class=\"f-button\" [attr.text]=\"'Learn more'\" aria-label=\"Learn More\">\n Learn more\n </button>\n </a>\n <button\n (click)=\"accept()\"\n class=\"f-button\"\n [attr.text]=\"'Ok, Got it'\"\n aria-label=\"Ok, Got it\">\n Ok, Got it\n </button>\n </div>\n </div>\n}\n", styles: [":host{position:fixed;bottom:16px;right:16px;z-index:99999;opacity:0;visibility:hidden;animation:1s linear forwards .5s fadeIn}.docs-cookies-popup{padding:1rem;background-color:var(--background-color);border:1px solid var(--divider-color);color:var(--primary-text);border-radius:var(--border-radius);font-size:14px;max-width:310px;transition:background-color .3s ease,border-color .3s ease,color .3s ease;box-shadow:var(--shadow-3)}.docs-cookies-popup>div{display:flex;gap:8px;align-items:center;width:100%;margin-block-start:1rem}.f-button{outline:none;border:none;height:unset;line-height:26px;font-size:14px;font-weight:500;border-radius:var(--border-radius)}@keyframes fadeIn{to{opacity:100%;visibility:visible}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
490
- }
491
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCookiePopupComponent, decorators: [{
492
- type: Component,
493
- args: [{ selector: 'f-cookie-popup', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hasAccepted()) {\n <div class=\"docs-cookies-popup docs-invert-mode\">\n <p>This site uses cookies from Google to deliver its services and to analyze traffic.</p>\n\n <div>\n <a href=\"https://policies.google.com/technologies/cookies\" target=\"_blank\" rel=\"noopener\">\n <button class=\"f-button\" [attr.text]=\"'Learn more'\" aria-label=\"Learn More\">\n Learn more\n </button>\n </a>\n <button\n (click)=\"accept()\"\n class=\"f-button\"\n [attr.text]=\"'Ok, Got it'\"\n aria-label=\"Ok, Got it\">\n Ok, Got it\n </button>\n </div>\n </div>\n}\n", styles: [":host{position:fixed;bottom:16px;right:16px;z-index:99999;opacity:0;visibility:hidden;animation:1s linear forwards .5s fadeIn}.docs-cookies-popup{padding:1rem;background-color:var(--background-color);border:1px solid var(--divider-color);color:var(--primary-text);border-radius:var(--border-radius);font-size:14px;max-width:310px;transition:background-color .3s ease,border-color .3s ease,color .3s ease;box-shadow:var(--shadow-3)}.docs-cookies-popup>div{display:flex;gap:8px;align-items:center;width:100%;margin-block-start:1rem}.f-button{outline:none;border:none;height:unset;line-height:26px;font-size:14px;font-weight:500;border-radius:var(--border-radius)}@keyframes fadeIn{to{opacity:100%;visibility:visible}}\n"] }]
494
- }], ctorParameters: () => [] });
495
-
496
- class FAnalyticsService {
497
- fLocalStorage = inject(F_LOCAL_STORAGE);
498
- document = inject(DOCUMENT);
499
- initialize(analyticsId) {
500
- this._installGtag(analyticsId);
471
+ _getItem(key) {
472
+ return this._localStorage?.getItem?.(key) || null;
501
473
  }
502
- _installGtag(analyticsId) {
503
- const window = this.document.defaultView;
504
- window.dataLayer = window.dataLayer || [];
505
- window.gtag = function () {
506
- window.dataLayer?.push(arguments);
507
- };
508
- if (this.fLocalStorage) {
509
- if (this.fLocalStorage.getItem(F_ACCEPT_COOKIES_KEY) === 'true') {
510
- setCookieConsent('granted');
511
- }
512
- else {
513
- setCookieConsent('denied');
514
- }
515
- }
516
- else {
517
- setCookieConsent('denied');
518
- }
519
- window.gtag('js', new Date());
520
- window.gtag('config', analyticsId);
521
- if (this.document.querySelector('#gtag-script') === null) {
522
- this.document.head.appendChild(this._getGtmScript(analyticsId));
523
- }
474
+ _matchMedia(query) {
475
+ return this._window?.matchMedia?.(query) || { matches: false };
524
476
  }
525
- _getGtmScript(analyticsId) {
526
- const gtmScript = this.document.createElement('script');
527
- gtmScript.async = true;
528
- gtmScript.src = `https://www.googletagmanager.com/gtag/js?id=${analyticsId}`;
529
- gtmScript.id = 'gtag-script';
530
- return gtmScript;
477
+ _isDocumentContainsDarkTheme() {
478
+ return this._docElement.classList.contains('dark');
531
479
  }
532
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
533
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FAnalyticsService, providedIn: 'root' });
480
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
481
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeService });
534
482
  }
535
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FAnalyticsService, decorators: [{
536
- type: Injectable,
537
- args: [{ providedIn: 'root' }]
483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeService, decorators: [{
484
+ type: Injectable
538
485
  }] });
539
486
 
540
487
  class FHeadTagService {
@@ -572,10 +519,10 @@ class FHeadTagService {
572
519
  head.appendChild(element);
573
520
  return element;
574
521
  }
575
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHeadTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
576
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHeadTagService, providedIn: 'root' });
522
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHeadTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
523
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHeadTagService, providedIn: 'root' });
577
524
  }
578
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHeadTagService, decorators: [{
525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHeadTagService, decorators: [{
579
526
  type: Injectable,
580
527
  args: [{ providedIn: 'root' }]
581
528
  }] });
@@ -590,7 +537,7 @@ class HandleNavigationLinksHandler {
590
537
  this._navigateInternalLink(href, request.router);
591
538
  }
592
539
  else {
593
- this._navigateExternalLink(href, request.browser);
540
+ window.open(href, '_blank');
594
541
  }
595
542
  }
596
543
  }
@@ -612,18 +559,15 @@ class HandleNavigationLinksHandler {
612
559
  }
613
560
  router.navigate([href]).then();
614
561
  }
615
- _navigateExternalLink(href, browser) {
616
- browser.window.open(href, '_blank');
617
- }
618
562
  }
619
563
 
620
564
  class HandleNavigationLinksRequest {
621
565
  event;
622
- browser;
566
+ window;
623
567
  router;
624
- constructor(event, browser, router) {
568
+ constructor(event, window, router) {
625
569
  this.event = event;
626
- this.browser = browser;
570
+ this.window = window;
627
571
  this.router = router;
628
572
  }
629
573
  }
@@ -702,9 +646,9 @@ function provideTocData(toC) {
702
646
  }
703
647
 
704
648
  class FMetaService {
649
+ _location = inject(LOCATION);
705
650
  _router = inject(Router);
706
651
  _headTag = inject(FHeadTagService);
707
- _browser = inject(BrowserService);
708
652
  _configuration = inject(DOCUMENTATION_CONFIGURATION);
709
653
  changes() {
710
654
  return this._router.events.pipe(startWith(new NavigationEnd(1, '', '')), filter(event => event instanceof NavigationEnd), map(() => void 0), tap(() => {
@@ -718,7 +662,7 @@ class FMetaService {
718
662
  const item = this._findDocItemByUrl(this._findDocGroupByUrl(this._router.url), this._router.url);
719
663
  if (item) {
720
664
  data.title = `${item.text} - ${defaultData.app_name}`;
721
- data.url = this._browser.window.location.href;
665
+ data.url = this._location.href;
722
666
  data.description = item.description || defaultData.description;
723
667
  data.image = item.image || defaultData.image;
724
668
  data.image_width = item.image_width || defaultData.image_width;
@@ -726,14 +670,14 @@ class FMetaService {
726
670
  data.image_type = item.image_type || defaultData.image_type;
727
671
  }
728
672
  if (!data.url) {
729
- data.url = this._browser.window.location.origin + this._router.url;
673
+ data.url = this._location.origin + this._router.url;
730
674
  }
731
675
  if (!data.image.startsWith('http') && !data.image.startsWith('www')) {
732
676
  if (data.image.startsWith('.')) {
733
- data.image = this._browser.window.location.origin + data.image.slice(1);
677
+ data.image = this._location.origin + data.image.slice(1);
734
678
  }
735
679
  else {
736
- data.image = this._browser.window.location.origin + data.image;
680
+ data.image = this._location.origin + data.image;
737
681
  }
738
682
  }
739
683
  if (!data.url.endsWith('/')) {
@@ -770,10 +714,10 @@ class FMetaService {
770
714
  this._headTag.updateTag({ property: 'og:image:width', content: item.image_width.toString() });
771
715
  this._headTag.updateTag({ property: 'og:image:height', content: item.image_height.toString() });
772
716
  }
773
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMetaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
774
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMetaService });
717
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMetaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
718
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMetaService });
775
719
  }
776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMetaService, decorators: [{
720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMetaService, decorators: [{
777
721
  type: Injectable
778
722
  }] });
779
723
 
@@ -786,10 +730,10 @@ class HamburgerButtonComponent {
786
730
  _onShowNavigation() {
787
731
  this._parent?.onToggleNavigation(true);
788
732
  }
789
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HamburgerButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
790
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: HamburgerButtonComponent, isStandalone: true, selector: "button[hamburger-button]", host: { listeners: { "click": "_onShowNavigation()" } }, ngImport: i0, template: "<span class=\"f-icon hamburger\"></span>\n\n", styles: [":host{background-color:transparent;border:0;display:flex;padding:0;margin-right:16px;color:var(--secondary-text);cursor:pointer}@media (min-width: 960px){:host{display:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
733
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HamburgerButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
734
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: HamburgerButtonComponent, isStandalone: true, selector: "button[hamburger-button]", host: { listeners: { "click": "_onShowNavigation()" } }, ngImport: i0, template: "<span class=\"f-icon hamburger\"></span>\n\n", styles: [":host{background-color:transparent;border:0;display:flex;padding:0;margin-right:16px;color:var(--secondary-text);cursor:pointer}@media (min-width: 960px){:host{display:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
791
735
  }
792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HamburgerButtonComponent, decorators: [{
736
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HamburgerButtonComponent, decorators: [{
793
737
  type: Component,
794
738
  args: [{ selector: 'button[hamburger-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
795
739
  '(click)': '_onShowNavigation()',
@@ -855,26 +799,71 @@ class DocumentationStore {
855
799
  getHeader() {
856
800
  return this._configuration.header;
857
801
  }
858
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentationStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
859
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentationStore });
802
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
803
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationStore });
860
804
  }
861
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentationStore, decorators: [{
805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationStore, decorators: [{
862
806
  type: Injectable
863
807
  }] });
864
808
 
809
+ class ThemeButtonComponent {
810
+ _renderer = inject(Renderer2);
811
+ _themeService = inject(ThemeService, { optional: true });
812
+ _localStorage = inject(LOCAL_STORAGE);
813
+ _documentElement = inject(DOCUMENT_ELEMENT);
814
+ _isBrowser = inject(IS_BROWSER_PLATFORM);
815
+ ngOnInit() {
816
+ if (!this._themeService && this._isBrowser) {
817
+ throw new Error('Theme is not provided. Please provide it using provideTheme() provider in your application config.');
818
+ }
819
+ }
820
+ _isDocumentContainsDarkTheme() {
821
+ return this._documentElement.classList.contains('dark');
822
+ }
823
+ _onClick() {
824
+ if (this._themeService?.getPreferredTheme() === 'light' && !this._isDocumentContainsDarkTheme()) {
825
+ this._renderer.addClass(this._documentElement, 'dark');
826
+ this._localStorage.setItem('preferred-theme', 'dark');
827
+ }
828
+ else {
829
+ this._renderer.removeClass(this._documentElement, 'dark');
830
+ this._localStorage.setItem('preferred-theme', 'light');
831
+ }
832
+ this._themeService?.updateTheme();
833
+ }
834
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
835
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: ThemeButtonComponent, isStandalone: true, selector: "button[theme-button]", host: { listeners: { "click": "_onClick()" } }, ngImport: i0, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
836
+ }
837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeButtonComponent, decorators: [{
838
+ type: Component,
839
+ args: [{ selector: 'button[theme-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"] }]
840
+ }], propDecorators: { _onClick: [{
841
+ type: HostListener,
842
+ args: ['click']
843
+ }] } });
844
+
845
+ function provideTheme() {
846
+ return [
847
+ {
848
+ provide: ThemeService,
849
+ useClass: ThemeService,
850
+ },
851
+ ];
852
+ }
853
+
865
854
  class HeaderComponent {
866
855
  title = inject(DocumentationStore).getTitle();
867
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
868
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: HeaderComponent, isStandalone: true, selector: "f-header", ngImport: i0, template: "<button hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<inline-menu/>\n<!--<npm-version/>-->\n<div class=\"divider\"></div>\n<button f-theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links/>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"], dependencies: [{ kind: "component", type: HamburgerButtonComponent, selector: "button[hamburger-button]" }, { kind: "component", type: FSocialLinksComponent, selector: "f-social-links" }, { kind: "component", type: FThemeButtonComponent, selector: "button[f-theme-button]" }, { kind: "component", type: InlineMenuComponent, selector: "inline-menu" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
856
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
857
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: HeaderComponent, isStandalone: true, selector: "f-header", ngImport: i0, template: "<button hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<inline-menu/>\n<!--<npm-version/>-->\n<div class=\"divider\"></div>\n<button theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links/>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"], dependencies: [{ kind: "component", type: HamburgerButtonComponent, selector: "button[hamburger-button]" }, { kind: "component", type: FSocialLinksComponent, selector: "f-social-links" }, { kind: "component", type: ThemeButtonComponent, selector: "button[theme-button]" }, { kind: "component", type: InlineMenuComponent, selector: "inline-menu" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
869
858
  }
870
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HeaderComponent, decorators: [{
859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HeaderComponent, decorators: [{
871
860
  type: Component,
872
861
  args: [{ selector: 'f-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
873
862
  HamburgerButtonComponent,
874
863
  FSocialLinksComponent,
875
- FThemeButtonComponent,
864
+ ThemeButtonComponent,
876
865
  InlineMenuComponent,
877
- ], template: "<button hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<inline-menu/>\n<!--<npm-version/>-->\n<div class=\"divider\"></div>\n<button f-theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links/>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"] }]
866
+ ], template: "<button hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<inline-menu/>\n<!--<npm-version/>-->\n<div class=\"divider\"></div>\n<button theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links/>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"] }]
878
867
  }] });
879
868
 
880
869
  class NavigationGroupComponent {
@@ -883,10 +872,10 @@ class NavigationGroupComponent {
883
872
  toggle() {
884
873
  this.isCollapsed.set(!this.isCollapsed());
885
874
  }
886
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NavigationGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
887
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NavigationGroupComponent, isStandalone: true, selector: "f-navigation-group", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.collapsed": "isCollapsed()", "class.no-title": "!title()" } }, ngImport: i0, template: "@if (title()) {\n <header (click)=\"toggle()\">\n <span>{{ title() }}</span>\n <div class=\"flex-space\"></div>\n <div class=\"caret\">\n <span class=\"chevron-right caret-icon\"></span>\n </div>\n </header>\n}\n@if (!isCollapsed()) {\n <ng-content></ng-content>\n}\n\n\n\n", styles: [":host{padding-top:10px;padding-bottom:24px;border-top:1px solid var(--divider-color);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;max-width:240px;margin-left:auto}:host.collapsed,:host.no-title{padding-top:10px;padding-bottom:10px}header{font-weight:600;color:var(--primary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;display:flex;justify-content:flex-start;align-items:center;width:100%}.caret{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--tertiary-text);cursor:pointer;transition:color .25s;flex-shrink:0}:host:hover .caret{color:var(--secondary-text)}:host:hover .caret:hover{color:var(--primary-text)}:host .caret-icon{font-size:18px;transform:rotate(90deg);transition:transform .25s;mask-size:100% 100%;background-color:currentColor;color:inherit;width:18px;height:18px}:host.collapsed .caret-icon{transform:rotate(0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
875
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
876
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: NavigationGroupComponent, isStandalone: true, selector: "f-navigation-group", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.collapsed": "isCollapsed()", "class.no-title": "!title()" } }, ngImport: i0, template: "@if (title()) {\n <header (click)=\"toggle()\">\n <span>{{ title() }}</span>\n <div class=\"flex-space\"></div>\n <div class=\"caret\">\n <span class=\"chevron-right caret-icon\"></span>\n </div>\n </header>\n}\n@if (!isCollapsed()) {\n <ng-content></ng-content>\n}\n\n\n\n", styles: [":host{padding-top:10px;padding-bottom:24px;border-top:1px solid var(--divider-color);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;max-width:240px;margin-left:auto}:host.collapsed,:host.no-title{padding-top:10px;padding-bottom:10px}header{font-weight:600;color:var(--primary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;display:flex;justify-content:flex-start;align-items:center;width:100%}.caret{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--tertiary-text);cursor:pointer;transition:color .25s;flex-shrink:0}:host:hover .caret{color:var(--secondary-text)}:host:hover .caret:hover{color:var(--primary-text)}:host .caret-icon{font-size:18px;transform:rotate(90deg);transition:transform .25s;mask-size:100% 100%;background-color:currentColor;color:inherit;width:18px;height:18px}:host.collapsed .caret-icon{transform:rotate(0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
888
877
  }
889
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NavigationGroupComponent, decorators: [{
878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationGroupComponent, decorators: [{
890
879
  type: Component,
891
880
  args: [{ selector: 'f-navigation-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
892
881
  '[class.collapsed]': 'isCollapsed()',
@@ -895,10 +884,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
895
884
  }] });
896
885
 
897
886
  class FNavigationItemComponent {
898
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
899
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FNavigationItemComponent, isStandalone: true, selector: "a[f-navigation-item]", ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
887
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
888
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FNavigationItemComponent, isStandalone: true, selector: "a[f-navigation-item]", ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
900
889
  }
901
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FNavigationItemComponent, decorators: [{
890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FNavigationItemComponent, decorators: [{
902
891
  type: Component,
903
892
  args: [{ selector: 'a[f-navigation-item]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"] }]
904
893
  }] });
@@ -911,7 +900,7 @@ class NavigationPanelComponent {
911
900
  _router = inject(Router);
912
901
  _changeDetectorRef = inject(ChangeDetectorRef);
913
902
  _destroyRef = inject(DestroyRef);
914
- _browser = inject(BrowserService);
903
+ _window = inject(WINDOW);
915
904
  value;
916
905
  navigation = this._provider.getNavigation();
917
906
  title = this._provider.getTitle();
@@ -960,12 +949,12 @@ class NavigationPanelComponent {
960
949
  });
961
950
  }
962
951
  _onDocumentClick(event) {
963
- new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._browser, this._router));
952
+ new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._window, this._router));
964
953
  }
965
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NavigationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
966
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NavigationPanelComponent, isStandalone: true, selector: "f-navigation-panel", host: { listeners: { "click": "_onDocumentClick($event)" } }, ngImport: i0, template: "<a routerLink class=\"navigation-header\">\n <img [src]=\"image\" width=\"24\" height=\"24\" alt=\"logo\" class=\"logo\"/> {{ title }}\n</a>\n\n@for (group of navigation; track group) {\n <f-navigation-group [title]=\"group.text\">\n @for (item of group.items; track item.link) {\n <a f-navigation-item [href]=\"item.link\" [class.active]=\"item.link === value\">\n <div class=\"text-ellipsis\">{{ item.text }}</div>\n @if (item.badge) {\n <span class=\"f-badge {{ item.badge.type }}\">{{ item.badge.text }}</span>\n }\n </a>\n }\n </f-navigation-group>\n}\n", styles: [":host{height:100%;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 var(--navigation-panel-padding);background-color:var(--navigation-panel-background);overflow:hidden;overflow-y:auto;position:fixed;width:var(--navigation-panel-width);top:0;left:calc(-1 * var(--navigation-panel-width));transition:transform .2s ease-in-out;z-index:var(--z-index-navigation);transform:none}@media (min-width: 960px){:host{position:unset;display:flex;min-width:var(--navigation-panel-width);width:fit-content;transform:none!important}}@media (min-width: 1440px){:host{min-width:calc((100% - (var(--layout-max-width) - 64px)) / 3 + var(--navigation-panel-width) - var(--navigation-panel-padding))}}:host.visible{transform:translate(var(--navigation-panel-width))}.navigation-header{display:flex;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height);width:100%;max-width:240px;margin-left:auto;cursor:pointer}.navigation-header img{margin-right:8px}\n"], dependencies: [{ kind: "component", type: FNavigationItemComponent, selector: "a[f-navigation-item]" }, { kind: "component", type: NavigationGroupComponent, selector: "f-navigation-group", inputs: ["title"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
954
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
955
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: NavigationPanelComponent, isStandalone: true, selector: "f-navigation-panel", host: { listeners: { "click": "_onDocumentClick($event)" } }, ngImport: i0, template: "<a routerLink class=\"navigation-header\">\n <img [src]=\"image\" width=\"24\" height=\"24\" alt=\"logo\" class=\"logo\"/> {{ title }}\n</a>\n\n@for (group of navigation; track group) {\n <f-navigation-group [title]=\"group.text\">\n @for (item of group.items; track item.link) {\n <a f-navigation-item [href]=\"item.link\" [class.active]=\"item.link === value\">\n <div class=\"text-ellipsis\">{{ item.text }}</div>\n @if (item.badge) {\n <span class=\"f-badge {{ item.badge.type }}\">{{ item.badge.text }}</span>\n }\n </a>\n }\n </f-navigation-group>\n}\n", styles: [":host{height:100%;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 var(--navigation-panel-padding);background-color:var(--navigation-panel-background);overflow:hidden;overflow-y:auto;position:fixed;width:var(--navigation-panel-width);top:0;left:calc(-1 * var(--navigation-panel-width));transition:transform .2s ease-in-out;z-index:var(--z-index-navigation);transform:none}@media (min-width: 960px){:host{position:unset;display:flex;min-width:var(--navigation-panel-width);width:fit-content;transform:none!important}}@media (min-width: 1440px){:host{min-width:calc((100% - (var(--layout-max-width) - 64px)) / 3 + var(--navigation-panel-width) - var(--navigation-panel-padding))}}:host.visible{transform:translate(var(--navigation-panel-width))}.navigation-header{display:flex;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height);width:100%;max-width:240px;margin-left:auto;cursor:pointer}.navigation-header img{margin-right:8px}\n"], dependencies: [{ kind: "component", type: FNavigationItemComponent, selector: "a[f-navigation-item]" }, { kind: "component", type: NavigationGroupComponent, selector: "f-navigation-group", inputs: ["title"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
967
956
  }
968
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NavigationPanelComponent, decorators: [{
957
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationPanelComponent, decorators: [{
969
958
  type: Component,
970
959
  args: [{ selector: 'f-navigation-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
971
960
  FNavigationItemComponent,
@@ -989,10 +978,10 @@ class FCodeGroupTabsComponent {
989
978
  this.index.set(index);
990
979
  this.tabIndex.emit(index);
991
980
  }
992
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCodeGroupTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
993
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FCodeGroupTabsComponent, isStandalone: true, selector: "f-code-group-tabs", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tabIndex: "tabIndex" }, host: { properties: { "style.display": "display()" }, classAttribute: "f-code-group-tabs" }, ngImport: i0, template: "@for (data of data(); track data) {\n <button class=\"f-tab-button\" [class.active]=\"$index === index()\"\n (click)=\"onTabClick($index)\">\n {{ data.tab }}\n </button>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
981
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
982
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FCodeGroupTabsComponent, isStandalone: true, selector: "f-code-group-tabs", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tabIndex: "tabIndex" }, host: { properties: { "style.display": "display()" }, classAttribute: "f-code-group-tabs" }, ngImport: i0, template: "@for (data of data(); track data) {\n <button class=\"f-tab-button\" [class.active]=\"$index === index()\"\n (click)=\"onTabClick($index)\">\n {{ data.tab }}\n </button>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
994
983
  }
995
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCodeGroupTabsComponent, decorators: [{
984
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupTabsComponent, decorators: [{
996
985
  type: Component,
997
986
  args: [{ selector: 'f-code-group-tabs', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
998
987
  class: 'f-code-group-tabs',
@@ -1000,375 +989,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
1000
989
  }, template: "@for (data of data(); track data) {\n <button class=\"f-tab-button\" [class.active]=\"$index === index()\"\n (click)=\"onTabClick($index)\">\n {{ data.tab }}\n </button>\n}\n" }]
1001
990
  }] });
1002
991
 
1003
- class MarkCodeFocusedBlocksPostProcessor {
1004
- _browser;
1005
- constructor(_browser) {
1006
- this._browser = _browser;
1007
- }
1008
- handle(element) {
1009
- const html = element.innerHTML;
1010
- if (!FOCUS_REGEX.test(html)) {
1011
- return of(element);
1012
- }
1013
- element.innerHTML = html.replace(FOCUS_REGEX, (_match, content) => {
1014
- return `<focus class="focused"><div class="inline-focus">${content}</div></focus>`;
1015
- });
1016
- const focused = element.querySelector('.focused');
1017
- if (focused) {
1018
- this._applyOpacity(element.parentElement);
1019
- }
1020
- return of(element);
1021
- }
1022
- _applyOpacity(element) {
1023
- if (!element.classList.contains('focused')) {
1024
- element.style.color = this._createRgbaString(this._getElementColor(element), 0.5);
1025
- element.childNodes.forEach((child) => {
1026
- if (child.nodeType === Node.ELEMENT_NODE) {
1027
- this._applyOpacity(child);
1028
- }
1029
- });
1030
- }
1031
- else {
1032
- element.style.color = this._createRgbaString(this._getElementColor(element), 1, true);
1033
- }
1034
- }
1035
- _getElementColor(element) {
1036
- return this._browser.window.getComputedStyle(element).color;
1037
- }
1038
- _createRgbaString(color, opacity, isRgb = false) {
1039
- const [r, g, b, a] = this._getRgbValues(color);
1040
- const alpha = Number(a) || 1;
1041
- return isRgb ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${opacity * alpha})`;
1042
- }
1043
- _getRgbValues(color) {
1044
- return color.match(/\d+/g);
1045
- }
1046
- }
1047
- const FOCUS_REGEX = /ƒƒƒ([\s\S]*?)¢¢¢/g;
1048
-
1049
- const UNIVERSAL_THEME = {
1050
- name: 'universal',
1051
- colors: {
1052
- 'editor.background': 'transparent',
1053
- 'editor.foreground': 'var(--code-view-text-color)',
1054
- },
1055
- settings: [
1056
- {
1057
- scope: ['comment', 'punctuation.definition.comment', 'string.comment'],
1058
- settings: {
1059
- foreground: 'var(--token-comment)',
1060
- },
1061
- },
1062
- {
1063
- scope: ['constant', 'entity.name.constant', 'variable.other.constant', 'variable.other.enummember', 'variable.language'],
1064
- settings: {
1065
- foreground: 'var(--token-number)',
1066
- },
1067
- },
1068
- {
1069
- scope: ['entity', 'entity.name'],
1070
- settings: {
1071
- foreground: 'var(--token-tag)',
1072
- },
1073
- },
1074
- {
1075
- scope: 'variable.parameter.function',
1076
- settings: {
1077
- foreground: 'var(--primary-text)',
1078
- },
1079
- },
1080
- {
1081
- scope: 'entity.name.tag',
1082
- settings: {
1083
- foreground: 'var(--token-tag)',
1084
- },
1085
- },
1086
- {
1087
- scope: 'keyword',
1088
- settings: {
1089
- foreground: 'var(--token-keyword)',
1090
- },
1091
- },
1092
- {
1093
- scope: ['storage', 'storage.type'],
1094
- settings: {
1095
- foreground: 'var(--token-keyword)',
1096
- },
1097
- },
1098
- {
1099
- scope: ['storage.modifier.package', 'storage.modifier.import', 'storage.type.java'],
1100
- settings: {
1101
- foreground: 'var(--primary-text)',
1102
- },
1103
- },
1104
- {
1105
- scope: ['string', 'punctuation.definition.string', 'string punctuation.section.embedded source'],
1106
- settings: {
1107
- foreground: 'var(--token-string)',
1108
- },
1109
- },
1110
- {
1111
- scope: 'support',
1112
- settings: {
1113
- foreground: 'var(--token-function)',
1114
- },
1115
- },
1116
- {
1117
- scope: 'meta.property-name',
1118
- settings: {
1119
- foreground: 'var(--token-function)',
1120
- },
1121
- },
1122
- {
1123
- scope: 'variable',
1124
- settings: {
1125
- foreground: 'var(--token-variable)',
1126
- },
1127
- },
1128
- {
1129
- scope: 'variable.other',
1130
- settings: {
1131
- foreground: 'var(--token-function)',
1132
- },
1133
- },
1134
- {
1135
- scope: [
1136
- 'invalid.broken',
1137
- 'invalid.deprecated',
1138
- 'invalid.illegal',
1139
- 'invalid.unimplemented',
1140
- ],
1141
- settings: {
1142
- fontStyle: 'italic',
1143
- foreground: 'var(--danger-2)',
1144
- },
1145
- },
1146
- {
1147
- scope: 'carriage-return',
1148
- settings: {
1149
- fontStyle: 'italic underline',
1150
- foreground: 'var(--background-color)',
1151
- background: 'var(--token-keyword)',
1152
- },
1153
- },
1154
- {
1155
- scope: 'message.error',
1156
- settings: {
1157
- foreground: 'var(--danger-2)',
1158
- },
1159
- },
1160
- {
1161
- scope: 'string variable',
1162
- settings: {
1163
- foreground: 'var(--token-function)',
1164
- },
1165
- },
1166
- {
1167
- scope: ['source.regexp', 'string.regexp'],
1168
- settings: {
1169
- foreground: 'var(--token-interpolation)',
1170
- },
1171
- },
1172
- {
1173
- scope: [
1174
- 'string.regexp.character-class',
1175
- 'string.regexp constant.character.escape',
1176
- 'string.regexp source.ruby.embedded',
1177
- 'string.regexp string.regexp.arbitrary-repitition',
1178
- ],
1179
- settings: {
1180
- foreground: 'var(--token-interpolation)',
1181
- },
1182
- },
1183
- {
1184
- scope: 'string.regexp constant.character.escape',
1185
- settings: {
1186
- fontStyle: 'bold',
1187
- foreground: 'var(--token-attr-value)',
1188
- },
1189
- },
1190
- {
1191
- scope: ['support.constant', 'support.variable', 'meta.module-reference'],
1192
- settings: {
1193
- foreground: 'var(--token-function)',
1194
- },
1195
- },
1196
- {
1197
- scope: 'punctuation.definition.list.begin.markdown',
1198
- settings: {
1199
- foreground: 'var(--token-variable)',
1200
- },
1201
- },
1202
- {
1203
- scope: ['markup.heading', 'markup.heading entity.name'],
1204
- settings: {
1205
- fontStyle: 'bold',
1206
- foreground: 'var(--token-function)',
1207
- },
1208
- },
1209
- {
1210
- scope: 'markup.quote',
1211
- settings: {
1212
- foreground: 'var(--token-attr-value)',
1213
- },
1214
- },
1215
- {
1216
- scope: 'markup.italic',
1217
- settings: {
1218
- fontStyle: 'italic',
1219
- foreground: 'var(--primary-text)',
1220
- },
1221
- },
1222
- {
1223
- scope: 'markup.bold',
1224
- settings: {
1225
- fontStyle: 'bold',
1226
- foreground: 'var(--primary-text)',
1227
- },
1228
- },
1229
- {
1230
- scope: 'markup.underline',
1231
- settings: {
1232
- fontStyle: 'underline',
1233
- },
1234
- },
1235
- {
1236
- scope: 'markup.strikethrough',
1237
- settings: {
1238
- fontStyle: 'strikethrough',
1239
- },
1240
- },
1241
- {
1242
- scope: 'markup.inline.raw',
1243
- settings: {
1244
- foreground: 'var(--token-function)',
1245
- },
1246
- },
1247
- {
1248
- scope: ['markup.deleted', 'meta.diff.header.from-file', 'punctuation.definition.deleted'],
1249
- settings: {
1250
- background: 'var(--danger-3)',
1251
- foreground: 'var(--danger-2)',
1252
- },
1253
- },
1254
- {
1255
- scope: ['markup.inserted', 'meta.diff.header.to-file', 'punctuation.definition.inserted'],
1256
- settings: {
1257
- background: 'var(--success-3)',
1258
- foreground: 'var(--token-attr-value)',
1259
- },
1260
- },
1261
- {
1262
- scope: ['markup.changed', 'punctuation.definition.changed'],
1263
- settings: {
1264
- background: 'var(--warning-3)',
1265
- foreground: 'var(--token-variable)',
1266
- },
1267
- },
1268
- {
1269
- scope: ['markup.ignored', 'markup.untracked'],
1270
- settings: {
1271
- background: 'var(--token-function)',
1272
- foreground: 'var(--alt-background)',
1273
- },
1274
- },
1275
- {
1276
- scope: 'meta.diff.range',
1277
- settings: {
1278
- fontStyle: 'bold',
1279
- foreground: 'var(--token-attr-name)',
1280
- },
1281
- },
1282
- {
1283
- scope: 'meta.diff.header',
1284
- settings: {
1285
- foreground: 'var(--token-function)',
1286
- },
1287
- },
1288
- {
1289
- scope: 'meta.separator',
1290
- settings: {
1291
- fontStyle: 'bold',
1292
- foreground: 'var(--token-function)',
1293
- },
1294
- },
1295
- {
1296
- scope: 'meta.output',
1297
- settings: {
1298
- foreground: 'var(--token-function)',
1299
- },
1300
- },
1301
- {
1302
- scope: [
1303
- 'brackethighlighter.tag',
1304
- 'brackethighlighter.curly',
1305
- 'brackethighlighter.round',
1306
- 'brackethighlighter.square',
1307
- 'brackethighlighter.angle',
1308
- 'brackethighlighter.quote',
1309
- ],
1310
- settings: {
1311
- foreground: 'var(--gray-1)',
1312
- },
1313
- },
1314
- {
1315
- scope: 'brackethighlighter.unmatched',
1316
- settings: {
1317
- foreground: 'var(--danger-2)',
1318
- },
1319
- },
1320
- {
1321
- scope: ['constant.other.reference.link', 'string.other.link'],
1322
- settings: {
1323
- fontStyle: 'underline',
1324
- foreground: 'var(--token-interpolation)',
1325
- },
1326
- },
1327
- ],
1328
- };
1329
-
1330
- class HighlightService {
1331
- _browser = inject(BrowserService);
1332
- _highlighter$ = defer(() => from(createHighlighter({ themes: [UNIVERSAL_THEME], langs: LANGUAGES }))).pipe(shareReplay(1));
1333
- highlight(element, lang, content) {
1334
- if (!this._browser.isBrowser()) {
1335
- console.warn('[HighlightService] Skipping highlight on server.');
1336
- return of(element);
1337
- }
1338
- return this._highlightCodeBlock(element, lang, content).pipe(switchMap((x) => this._postProcess(x)), catchError((err) => {
1339
- console.error('[HighlightService] Failed to highlight:', err);
1340
- return of(element);
1341
- }));
1342
- }
1343
- _highlightCodeBlock(element, lang, content) {
1344
- return this._highlighter$.pipe(switchMap((highlighter) => this._renderCode(element, highlighter, lang, content)));
1345
- }
1346
- _renderCode(element, highlighter, lang, content) {
1347
- return new Observable((observer) => {
1348
- const processedContent = this._preprocessFocus(content);
1349
- element.innerHTML = highlighter.codeToHtml(processedContent, { lang, theme: 'universal', defaultColor: false });
1350
- requestAnimationFrame(() => {
1351
- observer.next(element);
1352
- observer.complete();
1353
- });
1354
- });
1355
- }
1356
- _preprocessFocus(code) {
1357
- return code.replace(/\|\:\|([\s\S]*?)\|\:\|/g, (_, p1) => `ƒƒƒ${p1}¢¢¢`);
1358
- }
1359
- _postProcess(element) {
1360
- return of(element).pipe(switchMap((x) => new MarkCodeFocusedBlocksPostProcessor(this._browser).handle(x)));
1361
- }
1362
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1363
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HighlightService, providedIn: 'root' });
1364
- }
1365
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HighlightService, decorators: [{
1366
- type: Injectable,
1367
- args: [{
1368
- providedIn: 'root',
1369
- }]
1370
- }] });
1371
-
1372
992
  class HighlightComponent {
1373
993
  _highlightService = inject(HighlightService);
1374
994
  _elementRef = inject(ElementRef);
@@ -1381,10 +1001,10 @@ class HighlightComponent {
1381
1001
  .pipe(take(1), takeUntilDestroyed(this._destroyRef)).subscribe();
1382
1002
  });
1383
1003
  }
1384
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: HighlightComponent, isStandalone: true, selector: "highlight", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1004
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1005
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.11", type: HighlightComponent, isStandalone: true, selector: "highlight", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1386
1006
  }
1387
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HighlightComponent, decorators: [{
1007
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightComponent, decorators: [{
1388
1008
  type: Component,
1389
1009
  args: [{
1390
1010
  selector: 'highlight',
@@ -1405,19 +1025,6 @@ function parseLanguageFromFileExtension(url) {
1405
1025
  }
1406
1026
  return '';
1407
1027
  }
1408
- const LANGUAGES = [
1409
- 'javascript',
1410
- 'typescript',
1411
- 'angular-html',
1412
- 'angular-ts',
1413
- 'shell',
1414
- 'html',
1415
- 'bash',
1416
- 'css',
1417
- 'scss',
1418
- 'markdown',
1419
- 'text',
1420
- ];
1421
1028
  function parseSyntaxLanguage(language) {
1422
1029
  let result;
1423
1030
  switch (language) {
@@ -1437,7 +1044,7 @@ function parseSyntaxLanguage(language) {
1437
1044
  default:
1438
1045
  result = extractLanguage(language);
1439
1046
  }
1440
- if (!LANGUAGES.includes(result)) {
1047
+ if (!AVAILABLE_LANGUAGES.includes(result)) {
1441
1048
  result = 'text';
1442
1049
  }
1443
1050
  return result;
@@ -1467,10 +1074,10 @@ class FInsertComponentDirective {
1467
1074
  this._componentRef?.destroy();
1468
1075
  this._viewContainerRef.clear();
1469
1076
  }
1470
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FInsertComponentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1471
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.14", type: FInsertComponentDirective, isStandalone: true, selector: "ng-container[fInsertComponent]", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
1077
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FInsertComponentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1078
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.11", type: FInsertComponentDirective, isStandalone: true, selector: "ng-container[fInsertComponent]", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
1472
1079
  }
1473
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FInsertComponentDirective, decorators: [{
1080
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FInsertComponentDirective, decorators: [{
1474
1081
  type: Directive,
1475
1082
  args: [{
1476
1083
  standalone: true,
@@ -1543,10 +1150,10 @@ class FExampleViewComponent {
1543
1150
  }
1544
1151
  }).catch(error => this._logComponentLoadingError(tag, error));
1545
1152
  }
1546
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FExampleViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1547
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FExampleViewComponent, isStandalone: true, selector: "f-example-view", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style.height": "data().height" }, classAttribute: "f-example-view" }, ngImport: i0, template: "{{ errors() }}\n@if (component()) {\n <ng-container fInsertComponent [component]=\"component()\"/>\n}\n\n", dependencies: [{ kind: "directive", type: FInsertComponentDirective, selector: "ng-container[fInsertComponent]", inputs: ["component"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FExampleViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FExampleViewComponent, isStandalone: true, selector: "f-example-view", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style.height": "data().height" }, classAttribute: "f-example-view" }, ngImport: i0, template: "{{ errors() }}\n@if (component()) {\n <ng-container fInsertComponent [component]=\"component()\"/>\n}\n\n", dependencies: [{ kind: "directive", type: FInsertComponentDirective, selector: "ng-container[fInsertComponent]", inputs: ["component"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1548
1155
  }
1549
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FExampleViewComponent, decorators: [{
1156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FExampleViewComponent, decorators: [{
1550
1157
  type: Component,
1551
1158
  args: [{ selector: 'f-example-view', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1552
1159
  FInsertComponentDirective,
@@ -1599,10 +1206,10 @@ class FCodeViewComponent {
1599
1206
  _copyContentToClipboard(content) {
1600
1207
  copyToClipboard(content).pipe(take(1), takeUntilDestroyed(this._destroyRef)).subscribe(() => this._popoverService.show('Copied!'));
1601
1208
  }
1602
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCodeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1603
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FCodeViewComponent, isStandalone: true, selector: "f-code-view", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.height": "height()" }, classAttribute: "f-code-view" }, ngImport: i0, template: "<span class=\"f-code-language\">{{ visibleLanguage() }}</span>\n<button class=\"f-copy-button\" (click)=\"onCopyClick()\"></button>\n@if (content()) {\n <highlight [content]=\"content()\" [language]=\"syntaxLanguage()\"/>\n}\n\n", dependencies: [{ kind: "component", type: HighlightComponent, selector: "highlight", inputs: ["content", "language"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1210
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FCodeViewComponent, isStandalone: true, selector: "f-code-view", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.height": "height()" }, classAttribute: "f-code-view" }, ngImport: i0, template: "<span class=\"f-code-language\">{{ visibleLanguage() }}</span>\n<button class=\"f-copy-button\" (click)=\"onCopyClick()\"></button>\n@if (content()) {\n <highlight [content]=\"content()\" [language]=\"syntaxLanguage()\"/>\n}\n\n", dependencies: [{ kind: "component", type: HighlightComponent, selector: "highlight", inputs: ["content", "language"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1604
1211
  }
1605
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCodeViewComponent, decorators: [{
1212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeViewComponent, decorators: [{
1606
1213
  type: Component,
1607
1214
  args: [{ selector: 'f-code-view', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1608
1215
  class: 'f-code-view',
@@ -1680,10 +1287,10 @@ class MarkdownService {
1680
1287
  _cleanupWasteParagraphFromPreviewGroup(html) {
1681
1288
  return html.replace(/<p>(\[[^\]]+\](\s*\[[^\]]+\])*)<\/p>/g, '');
1682
1289
  }
1683
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MarkdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1684
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MarkdownService });
1290
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1291
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownService });
1685
1292
  }
1686
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MarkdownService, decorators: [{
1293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownService, decorators: [{
1687
1294
  type: Injectable
1688
1295
  }], ctorParameters: () => [] });
1689
1296
 
@@ -1908,10 +1515,10 @@ class FCodeGroupComponent {
1908
1515
  onTabClick(index) {
1909
1516
  this.index.set(index);
1910
1517
  }
1911
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCodeGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1912
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FCodeGroupComponent, isStandalone: true, selector: "f-code-group", host: { classAttribute: "f-code-group" }, ngImport: i0, template: "<f-code-group-tabs [data]=\"data()\" (tabIndex)=\"onTabClick($event)\"/>\n<div class=\"f-code-group-body\">\n @for (data of data(); track data) {\n @let isExampleView = data.type === containerType.EXAMPLE;\n @let display = $index === index() ? 'block' : 'none';\n @if (isExampleView) {\n <f-example-view [style.display]=\"display\" [data]=\"data\"/>\n } @else {\n <f-code-view [style.display]=\"display\" [data]=\"data\"/>\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: FCodeGroupTabsComponent, selector: "f-code-group-tabs", inputs: ["data"], outputs: ["tabIndex"] }, { kind: "component", type: FCodeViewComponent, selector: "f-code-view", inputs: ["data"] }, { kind: "component", type: FExampleViewComponent, selector: "f-example-view", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1518
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1519
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FCodeGroupComponent, isStandalone: true, selector: "f-code-group", host: { classAttribute: "f-code-group" }, ngImport: i0, template: "<f-code-group-tabs [data]=\"data()\" (tabIndex)=\"onTabClick($event)\"/>\n<div class=\"f-code-group-body\">\n @for (data of data(); track data) {\n @let isExampleView = data.type === containerType.EXAMPLE;\n @let display = $index === index() ? 'block' : 'none';\n @if (isExampleView) {\n <f-example-view [style.display]=\"display\" [data]=\"data\"/>\n } @else {\n <f-code-view [style.display]=\"display\" [data]=\"data\"/>\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: FCodeGroupTabsComponent, selector: "f-code-group-tabs", inputs: ["data"], outputs: ["tabIndex"] }, { kind: "component", type: FCodeViewComponent, selector: "f-code-view", inputs: ["data"] }, { kind: "component", type: FExampleViewComponent, selector: "f-example-view", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1913
1520
  }
1914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FCodeGroupComponent, decorators: [{
1521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupComponent, decorators: [{
1915
1522
  type: Component,
1916
1523
  args: [{ selector: 'f-code-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1917
1524
  FCodeGroupTabsComponent,
@@ -1975,10 +1582,10 @@ class GetPreviousNextPageNavigationRequest {
1975
1582
  }
1976
1583
 
1977
1584
  class FFooterEditInformationComponent {
1978
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterEditInformationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1979
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FFooterEditInformationComponent, isStandalone: true, selector: "f-footer-edit-information", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{padding-bottom:18px}@media (min-width: 640px){:host{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditInformationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1586
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FFooterEditInformationComponent, isStandalone: true, selector: "f-footer-edit-information", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{padding-bottom:18px}@media (min-width: 640px){:host{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1980
1587
  }
1981
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterEditInformationComponent, decorators: [{
1588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditInformationComponent, decorators: [{
1982
1589
  type: Component,
1983
1590
  args: [{ selector: 'f-footer-edit-information', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-content></ng-content>\n", styles: [":host{padding-bottom:18px}@media (min-width: 640px){:host{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}\n"] }]
1984
1591
  }] });
@@ -1986,10 +1593,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
1986
1593
  class FFooterNavigationButtonComponent {
1987
1594
  description;
1988
1595
  link;
1989
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterNavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1990
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FFooterNavigationButtonComponent, isStandalone: true, selector: "a[f-footer-navigation-button]", inputs: { description: "description", link: "link" }, ngImport: i0, template: "<span class=\"description\">{{ description }}</span>\n<span class=\"page-title\">{{ link.text }}</span>\n", styles: [":host{display:block;border:1px solid var(--divider-color);border-radius:2px;padding:12px 16px;flex:1;max-width:50%;min-width:260px;text-decoration:none!important;cursor:pointer;pointer-events:all}:host:hover{border-color:var(--dark-divider-color)}:host:active{border-color:var(--primary-1)}:host.next{margin-left:auto;text-align:right}:host .description{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);pointer-events:none}:host .page-title{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--primary-1);pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1596
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1597
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FFooterNavigationButtonComponent, isStandalone: true, selector: "a[f-footer-navigation-button]", inputs: { description: "description", link: "link" }, ngImport: i0, template: "<span class=\"description\">{{ description }}</span>\n<span class=\"page-title\">{{ link.text }}</span>\n", styles: [":host{display:block;border:1px solid var(--divider-color);border-radius:2px;padding:12px 16px;flex:1;max-width:50%;min-width:260px;text-decoration:none!important;cursor:pointer;pointer-events:all}:host:hover{border-color:var(--dark-divider-color)}:host:active{border-color:var(--primary-1)}:host.next{margin-left:auto;text-align:right}:host .description{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);pointer-events:none}:host .page-title{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--primary-1);pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1991
1598
  }
1992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterNavigationButtonComponent, decorators: [{
1599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationButtonComponent, decorators: [{
1993
1600
  type: Component,
1994
1601
  args: [{ selector: 'a[f-footer-navigation-button]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<span class=\"description\">{{ description }}</span>\n<span class=\"page-title\">{{ link.text }}</span>\n", styles: [":host{display:block;border:1px solid var(--divider-color);border-radius:2px;padding:12px 16px;flex:1;max-width:50%;min-width:260px;text-decoration:none!important;cursor:pointer;pointer-events:all}:host:hover{border-color:var(--dark-divider-color)}:host:active{border-color:var(--primary-1)}:host.next{margin-left:auto;text-align:right}:host .description{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);pointer-events:none}:host .page-title{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--primary-1);pointer-events:none}\n"] }]
1995
1602
  }], propDecorators: { description: [{
@@ -2001,19 +1608,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
2001
1608
  }] } });
2002
1609
 
2003
1610
  class FFooterNavigationComponent {
2004
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2005
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FFooterNavigationComponent, isStandalone: true, selector: "nav[f-footer-navigation]", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{border-top:1px solid var(--divider-color);padding-top:24px;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1611
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1612
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FFooterNavigationComponent, isStandalone: true, selector: "nav[f-footer-navigation]", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{border-top:1px solid var(--divider-color);padding-top:24px;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2006
1613
  }
2007
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterNavigationComponent, decorators: [{
1614
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationComponent, decorators: [{
2008
1615
  type: Component,
2009
1616
  args: [{ selector: 'nav[f-footer-navigation]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-content></ng-content>\n", styles: [":host{border-top:1px solid var(--divider-color);padding-top:24px;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:16px}\n"] }]
2010
1617
  }] });
2011
1618
 
2012
1619
  class FFooterEditLinkComponent {
2013
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterEditLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2014
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FFooterEditLinkComponent, isStandalone: true, selector: "a[f-footer-edit-link]", ngImport: i0, template: "<span class=\"edit-link-icon f-icon edit\"></span>\n<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-1);cursor:pointer}:host .edit-link-icon{margin-right:8px;width:14px;height:14px;color:inherit}:host:hover{color:var(--primary-2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1620
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1621
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FFooterEditLinkComponent, isStandalone: true, selector: "a[f-footer-edit-link]", ngImport: i0, template: "<span class=\"edit-link-icon f-icon edit\"></span>\n<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-1);cursor:pointer}:host .edit-link-icon{margin-right:8px;width:14px;height:14px;color:inherit}:host:hover{color:var(--primary-2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2015
1622
  }
2016
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FFooterEditLinkComponent, decorators: [{
1623
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditLinkComponent, decorators: [{
2017
1624
  type: Component,
2018
1625
  args: [{ selector: 'a[f-footer-edit-link]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<span class=\"edit-link-icon f-icon edit\"></span>\n<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-1);cursor:pointer}:host .edit-link-icon{margin-right:8px;width:14px;height:14px;color:inherit}:host:hover{color:var(--primary-2)}\n"] }]
2019
1626
  }] });
@@ -2024,7 +1631,7 @@ class FMarkdownFooterComponent {
2024
1631
  _activatedRoute = inject(ActivatedRoute);
2025
1632
  _changeDetectorRef = inject(ChangeDetectorRef);
2026
1633
  _destroyRef = inject(DestroyRef);
2027
- _browser = inject(BrowserService);
1634
+ _window = inject(WINDOW);
2028
1635
  navigation = {};
2029
1636
  editLink;
2030
1637
  previousLink;
@@ -2065,12 +1672,12 @@ class FMarkdownFooterComponent {
2065
1672
  return this._activatedRoute.snapshot.url.map((x) => x.path).join('/');
2066
1673
  }
2067
1674
  _onDocumentClick(event) {
2068
- new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._browser, this._router));
1675
+ new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._window, this._router));
2069
1676
  }
2070
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMarkdownFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2071
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FMarkdownFooterComponent, isStandalone: true, selector: "footer [f-markdown-footer]", host: { listeners: { "click": "_onDocumentClick($event)" } }, ngImport: i0, template: "@if (editLink) {\n <f-footer-edit-information>\n <a f-footer-edit-link [href]=\"editLink\">\n {{ navigation.editLink?.text || 'Edit this page on GitHub' }}\n </a>\n\n<!-- <f-footer-last-updated>-->\n<!-- Last updated: <span>111</span>-->\n<!-- </f-footer-last-updated>-->\n </f-footer-edit-information>\n}\n\n@if (previousLink || nextLink) {\n <nav f-footer-navigation>\n @if (previousLink) {\n <a f-footer-navigation-button\n [href]=\"previousLink.link\"\n [description]=\"navigation.previous\"\n [link]=\"previousLink\">\n </a>\n }\n @if (nextLink) {\n <a f-footer-navigation-button class=\"next\"\n [href]=\"nextLink.link\"\n [description]=\"navigation.next\"\n [link]=\"nextLink\">\n </a>\n }\n </nav>\n}\n\n", styles: [":host{display:block;margin-top:64px}\n"], dependencies: [{ kind: "component", type: FFooterNavigationComponent, selector: "nav[f-footer-navigation]" }, { kind: "component", type: FFooterNavigationButtonComponent, selector: "a[f-footer-navigation-button]", inputs: ["description", "link"] }, { kind: "component", type: FFooterEditInformationComponent, selector: "f-footer-edit-information" }, { kind: "component", type: FFooterEditLinkComponent, selector: "a[f-footer-edit-link]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1677
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1678
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FMarkdownFooterComponent, isStandalone: true, selector: "footer [f-markdown-footer]", host: { listeners: { "click": "_onDocumentClick($event)" } }, ngImport: i0, template: "@if (editLink) {\n <f-footer-edit-information>\n <a f-footer-edit-link [href]=\"editLink\">\n {{ navigation.editLink?.text || 'Edit this page on GitHub' }}\n </a>\n\n<!-- <f-footer-last-updated>-->\n<!-- Last updated: <span>111</span>-->\n<!-- </f-footer-last-updated>-->\n </f-footer-edit-information>\n}\n\n@if (previousLink || nextLink) {\n <nav f-footer-navigation>\n @if (previousLink) {\n <a f-footer-navigation-button\n [href]=\"previousLink.link\"\n [description]=\"navigation.previous\"\n [link]=\"previousLink\">\n </a>\n }\n @if (nextLink) {\n <a f-footer-navigation-button class=\"next\"\n [href]=\"nextLink.link\"\n [description]=\"navigation.next\"\n [link]=\"nextLink\">\n </a>\n }\n </nav>\n}\n\n", styles: [":host{display:block;margin-top:64px}\n"], dependencies: [{ kind: "component", type: FFooterNavigationComponent, selector: "nav[f-footer-navigation]" }, { kind: "component", type: FFooterNavigationButtonComponent, selector: "a[f-footer-navigation-button]", inputs: ["description", "link"] }, { kind: "component", type: FFooterEditInformationComponent, selector: "f-footer-edit-information" }, { kind: "component", type: FFooterEditLinkComponent, selector: "a[f-footer-edit-link]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2072
1679
  }
2073
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMarkdownFooterComponent, decorators: [{
1680
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownFooterComponent, decorators: [{
2074
1681
  type: Component,
2075
1682
  args: [{ selector: 'footer [f-markdown-footer]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2076
1683
  FFooterNavigationComponent,
@@ -2090,7 +1697,7 @@ class FPreviewComponent extends FPreviewBase {
2090
1697
  _elementReference = inject(ElementRef);
2091
1698
  _fEnvironment = inject(DocumentationStore);
2092
1699
  _fPreviewGroupService = inject(FPreviewGroupService);
2093
- _fState = inject(ThemeService);
1700
+ _themeService = inject(ThemeService, { optional: true });
2094
1701
  _router = inject(Router);
2095
1702
  _destroyRef = inject(DestroyRef);
2096
1703
  item;
@@ -2113,7 +1720,7 @@ class FPreviewComponent extends FPreviewBase {
2113
1720
  this._subscribeToThemeChanges();
2114
1721
  }
2115
1722
  _subscribeToThemeChanges() {
2116
- this._fState.theme$.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => this._updateTheme());
1723
+ this._themeService?.theme$.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => this._updateTheme());
2117
1724
  }
2118
1725
  ngOnInit() {
2119
1726
  this._fPreviewGroupService.add(this);
@@ -2125,7 +1732,7 @@ class FPreviewComponent extends FPreviewBase {
2125
1732
  return group.items.find((x) => x.link === this.item);
2126
1733
  }
2127
1734
  _updateTheme() {
2128
- this.src.set(this._fState.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image);
1735
+ this.src.set(this._themeService?.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image);
2129
1736
  if (!this.src()) {
2130
1737
  this.src.set(this.viewModel?.image);
2131
1738
  }
@@ -2145,10 +1752,10 @@ class FPreviewComponent extends FPreviewBase {
2145
1752
  ngOnDestroy() {
2146
1753
  this._fPreviewGroupService.remove(this);
2147
1754
  }
2148
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2149
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FPreviewComponent, isStandalone: true, selector: "a[f-preview]", host: { properties: { "attr.href": "url", "attr.title": "viewModel?.text" } }, usesInheritance: true, ngImport: i0, template: "@if (viewModel) {\n <img [src]=\"src()\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">\n {{ viewModel.text }}\n @if (viewModel.badge) {\n <span class=\"f-badge {{viewModel.badge.type}}\">{{ viewModel.badge.text }}</span>\n }\n </div>\n <div class=\"description\">{{ viewModel.description }}</div>\n}\n\n\n\n", styles: [":host{display:block;border-radius:4px;background-color:var(--soft-background);padding:24px;width:100%;text-decoration:none!important;color:inherit!important;line-height:24px;font-size:14px;cursor:pointer}:host:hover img{transform:scale(1.1)}:host img{display:block;margin-bottom:16px;width:100%;height:180px;border-radius:4px;object-fit:cover;transition:transform .3s}:host .title{line-height:inherit;font-weight:600;text-transform:uppercase;color:var(--primary-text);display:flex;justify-content:space-between;align-items:center}:host .description{margin:8px 0!important;line-height:inherit;color:var(--secondary-text);width:100%;word-wrap:break-word;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media (min-width: 640px){:host{width:calc((100% - 32px)/2)}}.f-badge{padding:0 6px;line-height:14px;text-transform:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1755
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1756
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FPreviewComponent, isStandalone: true, selector: "a[f-preview]", host: { properties: { "attr.href": "url", "attr.title": "viewModel?.text" } }, usesInheritance: true, ngImport: i0, template: "@if (viewModel) {\n <img [src]=\"src()\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">\n {{ viewModel.text }}\n @if (viewModel.badge) {\n <span class=\"f-badge {{viewModel.badge.type}}\">{{ viewModel.badge.text }}</span>\n }\n </div>\n <div class=\"description\">{{ viewModel.description }}</div>\n}\n\n\n\n", styles: [":host{display:block;border-radius:4px;background-color:var(--soft-background);padding:24px;width:100%;text-decoration:none!important;color:inherit!important;line-height:24px;font-size:14px;cursor:pointer}:host:hover img{transform:scale(1.1)}:host img{display:block;margin-bottom:16px;width:100%;height:180px;border-radius:4px;object-fit:cover;transition:transform .3s}:host .title{line-height:inherit;font-weight:600;text-transform:uppercase;color:var(--primary-text);display:flex;justify-content:space-between;align-items:center}:host .description{margin:8px 0!important;line-height:inherit;color:var(--secondary-text);width:100%;word-wrap:break-word;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media (min-width: 640px){:host{width:calc((100% - 32px)/2)}}.f-badge{padding:0 6px;line-height:14px;text-transform:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2150
1757
  }
2151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewComponent, decorators: [{
1758
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewComponent, decorators: [{
2152
1759
  type: Component,
2153
1760
  args: [{ selector: 'a[f-preview]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
2154
1761
  '[attr.href]': 'url',
@@ -2191,10 +1798,10 @@ class FPreviewGroupFiltersComponent {
2191
1798
  this.isSortByDateChecked.set(event);
2192
1799
  this._fPreviewGroupService.sortByDate(event);
2193
1800
  }
2194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewGroupFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2195
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FPreviewGroupFiltersComponent, isStandalone: true, selector: "div[f-preview-group-filters]", ngImport: i0, template: "@if (filters().length) {\n <div class=\"filters-row\">\n @for (filter of filters(); track filter) {\n <f-radio-button [checked]=\"activeFilter() === filter\"\n (change)=\"onFilterChange(filter)\">{{ filter | titlecase }}\n </f-radio-button>\n }\n <div class=\"flex-space\"></div>\n <f-checkbox [checked]=\"isSortByDateChecked()\" (change)=\"onSortByDateChange($event)\">Sort by Newness</f-checkbox>\n </div>\n}\n\n\n\n", styles: [".filters-row{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;padding-top:20px;gap:8px}\n"], dependencies: [{ kind: "component", type: FCheckboxComponent, selector: "f-checkbox", inputs: ["id", "checked"], outputs: ["change"] }, { kind: "component", type: FRadioButtonComponent, selector: "f-radio-button", inputs: ["id", "checked"], outputs: ["change"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1801
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1802
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FPreviewGroupFiltersComponent, isStandalone: true, selector: "div[f-preview-group-filters]", ngImport: i0, template: "@if (filters().length) {\n <div class=\"filters-row\">\n @for (filter of filters(); track filter) {\n <f-radio-button [checked]=\"activeFilter() === filter\"\n (change)=\"onFilterChange(filter)\">{{ filter | titlecase }}\n </f-radio-button>\n }\n <div class=\"flex-space\"></div>\n <f-checkbox [checked]=\"isSortByDateChecked()\" (change)=\"onSortByDateChange($event)\">Sort by Newness</f-checkbox>\n </div>\n}\n\n\n\n", styles: [".filters-row{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;padding-top:20px;gap:8px}\n"], dependencies: [{ kind: "component", type: FCheckboxComponent, selector: "f-checkbox", inputs: ["id", "checked"], outputs: ["change"] }, { kind: "component", type: FRadioButtonComponent, selector: "f-radio-button", inputs: ["id", "checked"], outputs: ["change"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2196
1803
  }
2197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewGroupFiltersComponent, decorators: [{
1804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupFiltersComponent, decorators: [{
2198
1805
  type: Component,
2199
1806
  args: [{ selector: 'div[f-preview-group-filters]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2200
1807
  FCheckboxComponent,
@@ -2267,19 +1874,19 @@ class FPreviewGroupService {
2267
1874
  x.hostElement.style.display = 'block';
2268
1875
  });
2269
1876
  }
2270
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2271
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewGroupService });
1877
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1878
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupService });
2272
1879
  }
2273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FPreviewGroupService, decorators: [{
1880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupService, decorators: [{
2274
1881
  type: Injectable
2275
1882
  }] });
2276
1883
 
2277
1884
  class TableOfContentItemsComponent {
2278
1885
  items = input.required();
2279
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TableOfContentItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2280
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: TableOfContentItemsComponent, isStandalone: true, selector: "ul[f-table-of-content-items]", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (item of items(); track item.hash) {\n <li [class.active]=\"item.isActive\"><a class=\"text-ellipsis\" [href]=\"item.hash\">{{ item.title }}</a></li>\n @if (item.children) {\n <ul f-table-of-content-items [items]=\"item.children\"></ul>\n }\n}\n", styles: [":host{list-style:none;margin:0;padding:0}:host li{overflow-wrap:break-word;color:var(--secondary-text);max-width:180px}:host li a{display:block;line-height:var(--on-page-navigation-item-height);font-size:14px;color:inherit;font-weight:400}:host li.active{color:var(--primary-text)}:host li+ul{padding:0 16px}\n"], dependencies: [{ kind: "component", type: TableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
1886
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1887
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: TableOfContentItemsComponent, isStandalone: true, selector: "ul[f-table-of-content-items]", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (item of items(); track item.hash) {\n <li [class.active]=\"item.isActive\"><a class=\"text-ellipsis\" [href]=\"item.hash\">{{ item.title }}</a></li>\n @if (item.children) {\n <ul f-table-of-content-items [items]=\"item.children\"></ul>\n }\n}\n", styles: [":host{list-style:none;margin:0;padding:0}:host li{overflow-wrap:break-word;color:var(--secondary-text);max-width:180px}:host li a{display:block;line-height:var(--on-page-navigation-item-height);font-size:14px;color:inherit;font-weight:400}:host li.active{color:var(--primary-text)}:host li+ul{padding:0 16px}\n"], dependencies: [{ kind: "component", type: TableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
2281
1888
  }
2282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TableOfContentItemsComponent, decorators: [{
1889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentItemsComponent, decorators: [{
2283
1890
  type: Component,
2284
1891
  args: [{ selector: 'ul[f-table-of-content-items]', changeDetection: ChangeDetectionStrategy.Default, standalone: true, template: "@for (item of items(); track item.hash) {\n <li [class.active]=\"item.isActive\"><a class=\"text-ellipsis\" [href]=\"item.hash\">{{ item.title }}</a></li>\n @if (item.children) {\n <ul f-table-of-content-items [items]=\"item.children\"></ul>\n }\n}\n", styles: [":host{list-style:none;margin:0;padding:0}:host li{overflow-wrap:break-word;color:var(--secondary-text);max-width:180px}:host li a{display:block;line-height:var(--on-page-navigation-item-height);font-size:14px;color:inherit;font-weight:400}:host li.active{color:var(--primary-text)}:host li+ul{padding:0 16px}\n"] }]
2285
1892
  }] });
@@ -2334,12 +1941,14 @@ class GetAbsoluteTopToContainerRequest {
2334
1941
 
2335
1942
  class CalculateHashFromScrollPositionAndActivateTocHandler {
2336
1943
  _injector;
2337
- _browser;
1944
+ _docElement;
1945
+ _window;
2338
1946
  _provider;
2339
1947
  _scrollableContainer;
2340
1948
  constructor(_injector) {
2341
1949
  this._injector = _injector;
2342
- this._browser = _injector.get(BrowserService);
1950
+ this._docElement = _injector.get(DOCUMENT_ELEMENT);
1951
+ this._window = _injector.get(WINDOW);
2343
1952
  this._provider = _injector.get(DocumentationStore);
2344
1953
  this._scrollableContainer = _injector.get(SCROLLABLE_CONTAINER);
2345
1954
  }
@@ -2361,8 +1970,8 @@ class CalculateHashFromScrollPositionAndActivateTocHandler {
2361
1970
  return this._scrollableContainer.htmlElement.scrollTop + this._getHeaderHeight();
2362
1971
  }
2363
1972
  _getHeaderHeight() {
2364
- return parseInt(this._browser.window
2365
- .getComputedStyle(this._browser.document.documentElement)
1973
+ return parseInt(this._window
1974
+ .getComputedStyle(this._docElement)
2366
1975
  .getPropertyValue('--header-height'), 10);
2367
1976
  }
2368
1977
  _calculateElementsTopPositions() {
@@ -2593,9 +2202,9 @@ const SCROLLABLE_CONTAINER = new InjectionToken('SCROLLABLE_CONTAINER');
2593
2202
 
2594
2203
  class TableOfContentComponent {
2595
2204
  _elementRef = inject((ElementRef));
2596
- _browser = inject(BrowserService);
2597
2205
  _provider = inject(DocumentationStore);
2598
2206
  _injector = inject(Injector);
2207
+ _window = inject(WINDOW);
2599
2208
  tocData = computed(() => {
2600
2209
  return this._provider.tocData();
2601
2210
  });
@@ -2609,7 +2218,7 @@ class TableOfContentComponent {
2609
2218
  return (activeIndex + 1) * itemHeight + itemHeight / 4;
2610
2219
  }
2611
2220
  _getComputedStyle(element) {
2612
- return this._browser.window.getComputedStyle(element);
2221
+ return this._window.getComputedStyle(element);
2613
2222
  }
2614
2223
  _onDocumentClick(event) {
2615
2224
  const target = event.target;
@@ -2622,10 +2231,10 @@ class TableOfContentComponent {
2622
2231
  new ActivateTocByHashHandler(this._injector).handle(new ActivateTocByHashRequest(hash));
2623
2232
  new ScrollToElementInContainerHandler(this._injector).handle(new ScrollToElementInContainerRequest(hash));
2624
2233
  }
2625
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TableOfContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2626
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: TableOfContentComponent, isStandalone: true, selector: "aside[f-table-of-content]", host: { listeners: { "click": "_onDocumentClick($event)" } }, ngImport: i0, template: "@let data = tocData();\n@if (data) {\n <div class=\"title\">{{ title || 'In this article' }}</div>\n <ul f-table-of-content-items [items]=\"data.tree\"></ul>\n <div class=\"active-marker\" [style.top]=\"activeMarkerPosition() + 'px'\"></div>\n}\n\n", styles: [":host{--on-page-navigation-item-height: 32px;display:none;padding-left:16px;border-left:1px solid var(--divider-color);font-size:13px;font-weight:500;position:relative}:host .title{line-height:32px;font-size:14px;font-weight:600}@media (min-width: 1280px){:host{display:block;width:var(--on-page-navigation-width);position:fixed;top:calc(var(--header-height) + 48px);right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3)}}:host .active-marker{position:absolute;top:0;left:0;width:2px;height:calc(var(--on-page-navigation-item-height) / 2);border-radius:2px;background-color:var(--primary-1);transition:top .25s cubic-bezier(0,1,.5,1),opacity .25s}\n"], dependencies: [{ kind: "component", type: TableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2234
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2235
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: TableOfContentComponent, isStandalone: true, selector: "aside[f-table-of-content]", host: { listeners: { "click": "_onDocumentClick($event)" } }, ngImport: i0, template: "@let data = tocData();\n@if (data) {\n <div class=\"title\">{{ title || 'In this article' }}</div>\n <ul f-table-of-content-items [items]=\"data.tree\"></ul>\n <div class=\"active-marker\" [style.top]=\"activeMarkerPosition() + 'px'\"></div>\n}\n\n", styles: [":host{--on-page-navigation-item-height: 32px;display:none;padding-left:16px;border-left:1px solid var(--divider-color);font-size:13px;font-weight:500;position:relative}:host .title{line-height:32px;font-size:14px;font-weight:600}@media (min-width: 1280px){:host{display:block;width:var(--on-page-navigation-width);position:fixed;top:calc(var(--header-height) + 48px);right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3)}}:host .active-marker{position:absolute;top:0;left:0;width:2px;height:calc(var(--on-page-navigation-item-height) / 2);border-radius:2px;background-color:var(--primary-1);transition:top .25s cubic-bezier(0,1,.5,1),opacity .25s}\n"], dependencies: [{ kind: "component", type: TableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2627
2236
  }
2628
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TableOfContentComponent, decorators: [{
2237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentComponent, decorators: [{
2629
2238
  type: Component,
2630
2239
  args: [{ selector: 'aside[f-table-of-content]', standalone: true, imports: [TableOfContentItemsComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let data = tocData();\n@if (data) {\n <div class=\"title\">{{ title || 'In this article' }}</div>\n <ul f-table-of-content-items [items]=\"data.tree\"></ul>\n <div class=\"active-marker\" [style.top]=\"activeMarkerPosition() + 'px'\"></div>\n}\n\n", styles: [":host{--on-page-navigation-item-height: 32px;display:none;padding-left:16px;border-left:1px solid var(--divider-color);font-size:13px;font-weight:500;position:relative}:host .title{line-height:32px;font-size:14px;font-weight:600}@media (min-width: 1280px){:host{display:block;width:var(--on-page-navigation-width);position:fixed;top:calc(var(--header-height) + 48px);right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3)}}:host .active-marker{position:absolute;top:0;left:0;width:2px;height:calc(var(--on-page-navigation-item-height) / 2);border-radius:2px;background-color:var(--primary-1);transition:top .25s cubic-bezier(0,1,.5,1),opacity .25s}\n"] }]
2631
2240
  }], propDecorators: { _onDocumentClick: [{
@@ -2645,15 +2254,15 @@ class ScrollableContainerComponent {
2645
2254
  _calculateHashAndActivate() {
2646
2255
  new CalculateHashFromScrollPositionAndActivateTocHandler(this._injector).handle();
2647
2256
  }
2648
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ScrollableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2649
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ScrollableContainerComponent, isStandalone: true, selector: "f-scrollable-container", providers: [
2257
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ScrollableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2258
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: ScrollableContainerComponent, isStandalone: true, selector: "f-scrollable-container", providers: [
2650
2259
  {
2651
2260
  provide: SCROLLABLE_CONTAINER,
2652
2261
  useExisting: forwardRef(() => ScrollableContainerComponent),
2653
2262
  },
2654
2263
  ], ngImport: i0, template: "<ng-content></ng-content>\n<aside f-table-of-content></aside>\n\n\n", styles: [":host{position:relative;width:100%;height:100%;overflow:hidden;overflow-y:auto}\n"], dependencies: [{ kind: "component", type: TableOfContentComponent, selector: "aside[f-table-of-content]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2655
2264
  }
2656
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ScrollableContainerComponent, decorators: [{
2265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ScrollableContainerComponent, decorators: [{
2657
2266
  type: Component,
2658
2267
  args: [{ selector: 'f-scrollable-container', standalone: true, providers: [
2659
2268
  {
@@ -2672,7 +2281,8 @@ class FMarkdownRendererComponent {
2672
2281
  _activatedRoute = inject(ActivatedRoute);
2673
2282
  _destroyRef = inject(DestroyRef);
2674
2283
  _injector = inject(Injector);
2675
- _browser = inject(BrowserService);
2284
+ _isBrowser = inject(IS_BROWSER_PLATFORM);
2285
+ _window = inject(WINDOW);
2676
2286
  _markdown = inject(MarkdownService);
2677
2287
  _provider = inject(DocumentationStore);
2678
2288
  get _markdownPath() {
@@ -2693,7 +2303,7 @@ class FMarkdownRendererComponent {
2693
2303
  _updateRenderDependencies() {
2694
2304
  effect(() => {
2695
2305
  const html = this.value();
2696
- if (html && this._browser.isBrowser()) {
2306
+ if (html && this._isBrowser) {
2697
2307
  untracked(() => {
2698
2308
  raf(() => {
2699
2309
  new RenderDynamicComponentsHandler(this._injector).handle(new RenderDynamicComponentsRequest(this._hostElement));
@@ -2704,17 +2314,17 @@ class FMarkdownRendererComponent {
2704
2314
  }, { injector: this._injector });
2705
2315
  }
2706
2316
  _onDocumentClick(event) {
2707
- new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._browser, this._router));
2317
+ new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._window, this._router));
2708
2318
  }
2709
2319
  ngOnDestroy() {
2710
2320
  this._provider.disposeDComponents();
2711
2321
  }
2712
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMarkdownRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2713
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FMarkdownRendererComponent, isStandalone: true, selector: "f-markdown-renderer", host: { listeners: { "click": "_onDocumentClick($event)" }, classAttribute: "m-render" }, providers: [
2322
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2323
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FMarkdownRendererComponent, isStandalone: true, selector: "f-markdown-renderer", host: { listeners: { "click": "_onDocumentClick($event)" }, classAttribute: "m-render" }, providers: [
2714
2324
  MarkdownService,
2715
2325
  ], ngImport: i0, template: "<div [innerHTML]=\"value()\"></div>\n@if (value()) {\n <footer f-markdown-footer></footer>\n}\n\n", styles: [":host{display:block;width:100%}@media (min-width: 1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FMarkdownFooterComponent, selector: "footer [f-markdown-footer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2716
2326
  }
2717
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FMarkdownRendererComponent, decorators: [{
2327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownRendererComponent, decorators: [{
2718
2328
  type: Component,
2719
2329
  args: [{ selector: 'f-markdown-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2720
2330
  MarkdownService,
@@ -2730,10 +2340,10 @@ const raf = typeof requestAnimationFrame === 'function'
2730
2340
  : (fn) => setTimeout(fn);
2731
2341
 
2732
2342
  class MarkdownContainerComponent {
2733
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MarkdownContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2734
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: MarkdownContainerComponent, isStandalone: true, selector: "f-markdown-container", host: { attributes: { "ngSkipHydration": "" } }, ngImport: i0, template: "<f-markdown-renderer></f-markdown-renderer>\n\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}:host [fMarkdownRenderer]{width:100%}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}:host [fMarkdownRenderer]{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FMarkdownRendererComponent, selector: "f-markdown-renderer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2343
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2344
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: MarkdownContainerComponent, isStandalone: true, selector: "f-markdown-container", host: { attributes: { "ngSkipHydration": "" } }, ngImport: i0, template: "<f-markdown-renderer></f-markdown-renderer>\n\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}:host [fMarkdownRenderer]{width:100%}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}:host [fMarkdownRenderer]{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FMarkdownRendererComponent, selector: "f-markdown-renderer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2735
2345
  }
2736
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MarkdownContainerComponent, decorators: [{
2346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownContainerComponent, decorators: [{
2737
2347
  type: Component,
2738
2348
  args: [{ selector: 'f-markdown-container', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2739
2349
  FMarkdownRendererComponent,
@@ -2765,9 +2375,6 @@ var index$2 = /*#__PURE__*/Object.freeze({
2765
2375
  GetPreviousNextPageNavigationRequest: GetPreviousNextPageNavigationRequest,
2766
2376
  GetPreviousNextPageNavigationResponse: GetPreviousNextPageNavigationResponse,
2767
2377
  HighlightComponent: HighlightComponent,
2768
- HighlightService: HighlightService,
2769
- LANGUAGES: LANGUAGES,
2770
- MarkCodeFocusedBlocksPostProcessor: MarkCodeFocusedBlocksPostProcessor,
2771
2378
  MarkdownContainerComponent: MarkdownContainerComponent,
2772
2379
  MarkdownService: MarkdownService,
2773
2380
  ParseAlerts: ParseAlerts,
@@ -2792,7 +2399,15 @@ class DocumentationRootComponent {
2792
2399
  popover = inject(PopoverService).message;
2793
2400
  _metaService = inject(FMetaService);
2794
2401
  _destroyRef = inject(DestroyRef);
2402
+ _gTagService = inject(GTagService, { optional: true });
2403
+ _themeService = inject(ThemeService, { optional: true });
2404
+ isBrowser = inject(IS_BROWSER_PLATFORM);
2795
2405
  ngOnInit() {
2406
+ if (!this.isBrowser) {
2407
+ return;
2408
+ }
2409
+ this._themeService?.initialize();
2410
+ this._gTagService?.initialize();
2796
2411
  this._metaService.changes().pipe(takeUntilDestroyed(this._destroyRef))
2797
2412
  .subscribe();
2798
2413
  }
@@ -2803,8 +2418,9 @@ class DocumentationRootComponent {
2803
2418
  this._metaService.dispose();
2804
2419
  // Cleanup logic if needed
2805
2420
  }
2806
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentationRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2807
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DocumentationRootComponent, isStandalone: true, selector: "documentation-root", providers: [
2421
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2422
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: DocumentationRootComponent, isStandalone: true, selector: "documentation-root", providers: [
2423
+ HighlightService,
2808
2424
  DocumentationStore,
2809
2425
  FMetaService,
2810
2426
  {
@@ -2824,37 +2440,39 @@ class DocumentationRootComponent {
2824
2440
  provide: TOGGLE_NAVIGATION_COMPONENT,
2825
2441
  useExisting: DocumentationRootComponent,
2826
2442
  },
2827
- ], ngImport: i0, template: "<f-navigation-panel [class.visible]=\"isNavigationVisible()\"></f-navigation-panel>\n<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible()\" (click)=\"onToggleNavigation(false)\"></div>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n\n@if (popover()) {\n <div class=\"popover\">{{ popover() }}</div>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:5px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);box-shadow:var(--shadow-3);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"], dependencies: [{ kind: "component", type: NavigationPanelComponent, selector: "f-navigation-panel" }, { kind: "component", type: ScrollableContainerComponent, selector: "f-scrollable-container" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: HeaderComponent, selector: "f-header" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2828
- }
2829
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentationRootComponent, decorators: [{
2830
- type: Component,
2831
- args: [{ selector: 'documentation-root', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2832
- DocumentationStore,
2833
- FMetaService,
2834
- {
2835
- provide: F_PREVIEW_NAVIGATION_PROVIDER,
2836
- useExisting: DocumentationStore,
2837
- },
2838
- {
2839
- provide: F_SOCIAL_LINKS_PROVIDER,
2840
- useExisting: DocumentationStore,
2841
- },
2842
- {
2843
- provide: HEADER_CONFIGURATION_STORE,
2844
- useExisting: DocumentationStore,
2845
- },
2846
- FPreviewGroupService,
2847
- {
2848
- provide: TOGGLE_NAVIGATION_COMPONENT,
2849
- useExisting: DocumentationRootComponent,
2850
- },
2851
- ], imports: [
2852
- NavigationPanelComponent,
2853
- ScrollableContainerComponent,
2854
- RouterOutlet,
2855
- HeaderComponent,
2856
- ], template: "<f-navigation-panel [class.visible]=\"isNavigationVisible()\"></f-navigation-panel>\n<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible()\" (click)=\"onToggleNavigation(false)\"></div>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n\n@if (popover()) {\n <div class=\"popover\">{{ popover() }}</div>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:5px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);box-shadow:var(--shadow-3);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"] }]
2857
- }] });
2443
+ ], ngImport: i0, template: "<f-navigation-panel [class.visible]=\"isNavigationVisible()\"></f-navigation-panel>\n<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible()\" (click)=\"onToggleNavigation(false)\"></div>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n\n@if (popover()) {\n <div class=\"popover\">{{ popover() }}</div>\n}\n@defer (when isBrowser) {\n <cookie-popup/>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:5px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);box-shadow:var(--shadow-3);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"], dependencies: [{ kind: "component", type: NavigationPanelComponent, selector: "f-navigation-panel" }, { kind: "component", type: ScrollableContainerComponent, selector: "f-scrollable-container" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: HeaderComponent, selector: "f-header" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./foblex-m-render-cookie-popup.component-CqwZv5lc.mjs').then(m => m.CookiePopupComponent)]] });
2444
+ }
2445
+ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.2.11", ngImport: i0, type: DocumentationRootComponent, resolveDeferredDeps: () => [import('./foblex-m-render-cookie-popup.component-CqwZv5lc.mjs').then(m => m.CookiePopupComponent)], resolveMetadata: CookiePopupComponent => ({ decorators: [{
2446
+ type: Component,
2447
+ args: [{ selector: 'documentation-root', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2448
+ HighlightService,
2449
+ DocumentationStore,
2450
+ FMetaService,
2451
+ {
2452
+ provide: F_PREVIEW_NAVIGATION_PROVIDER,
2453
+ useExisting: DocumentationStore,
2454
+ },
2455
+ {
2456
+ provide: F_SOCIAL_LINKS_PROVIDER,
2457
+ useExisting: DocumentationStore,
2458
+ },
2459
+ {
2460
+ provide: HEADER_CONFIGURATION_STORE,
2461
+ useExisting: DocumentationStore,
2462
+ },
2463
+ FPreviewGroupService,
2464
+ {
2465
+ provide: TOGGLE_NAVIGATION_COMPONENT,
2466
+ useExisting: DocumentationRootComponent,
2467
+ },
2468
+ ], imports: [
2469
+ NavigationPanelComponent,
2470
+ ScrollableContainerComponent,
2471
+ RouterOutlet,
2472
+ HeaderComponent,
2473
+ CookiePopupComponent,
2474
+ ], template: "<f-navigation-panel [class.visible]=\"isNavigationVisible()\"></f-navigation-panel>\n<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible()\" (click)=\"onToggleNavigation(false)\"></div>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n\n@if (popover()) {\n <div class=\"popover\">{{ popover() }}</div>\n}\n@defer (when isBrowser) {\n <cookie-popup/>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:5px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);box-shadow:var(--shadow-3);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"] }]
2475
+ }], ctorParameters: null, propDecorators: null }) });
2858
2476
 
2859
2477
  const DOCUMENTATION_ROUTES = [
2860
2478
  {
@@ -2883,11 +2501,9 @@ var index$1 = /*#__PURE__*/Object.freeze({
2883
2501
  DocumentationStore: DocumentationStore,
2884
2502
  get EMarkdownContainerType () { return EMarkdownContainerType; },
2885
2503
  get EParsedContainerType () { return EParsedContainerType; },
2886
- FAnalyticsService: FAnalyticsService,
2887
2504
  FCodeGroupComponent: FCodeGroupComponent,
2888
2505
  FCodeGroupTabsComponent: FCodeGroupTabsComponent,
2889
2506
  FCodeViewComponent: FCodeViewComponent,
2890
- FCookiePopupComponent: FCookiePopupComponent,
2891
2507
  FExampleViewComponent: FExampleViewComponent,
2892
2508
  FFooterEditInformationComponent: FFooterEditInformationComponent,
2893
2509
  FFooterNavigationButtonComponent: FFooterNavigationButtonComponent,
@@ -2901,7 +2517,6 @@ var index$1 = /*#__PURE__*/Object.freeze({
2901
2517
  FPreviewComponent: FPreviewComponent,
2902
2518
  FPreviewGroupFiltersComponent: FPreviewGroupFiltersComponent,
2903
2519
  FPreviewGroupService: FPreviewGroupService,
2904
- F_ACCEPT_COOKIES_KEY: F_ACCEPT_COOKIES_KEY,
2905
2520
  F_PREVIEW_NAVIGATION_PROVIDER: F_PREVIEW_NAVIGATION_PROVIDER,
2906
2521
  GetAbsoluteTopToContainerHandler: GetAbsoluteTopToContainerHandler,
2907
2522
  GetAbsoluteTopToContainerRequest: GetAbsoluteTopToContainerRequest,
@@ -2913,9 +2528,6 @@ var index$1 = /*#__PURE__*/Object.freeze({
2913
2528
  HandleNavigationLinksRequest: HandleNavigationLinksRequest,
2914
2529
  HeaderComponent: HeaderComponent,
2915
2530
  HighlightComponent: HighlightComponent,
2916
- HighlightService: HighlightService,
2917
- LANGUAGES: LANGUAGES,
2918
- MarkCodeFocusedBlocksPostProcessor: MarkCodeFocusedBlocksPostProcessor,
2919
2531
  MarkdownContainerComponent: MarkdownContainerComponent,
2920
2532
  MarkdownService: MarkdownService,
2921
2533
  NavigationGroupComponent: NavigationGroupComponent,
@@ -2955,8 +2567,7 @@ var index$1 = /*#__PURE__*/Object.freeze({
2955
2567
  provideDocumentationMeta: provideDocumentationMeta,
2956
2568
  provideFooterNavigation: provideFooterNavigation,
2957
2569
  provideNavigation: provideNavigation,
2958
- provideTocData: provideTocData,
2959
- setCookieConsent: setCookieConsent
2570
+ provideTocData: provideTocData
2960
2571
  });
2961
2572
 
2962
2573
  function provideBackground(background) {
@@ -3035,19 +2646,19 @@ class HomeStore {
3035
2646
  getHeader() {
3036
2647
  return this._configuration.header;
3037
2648
  }
3038
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HomeStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3039
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HomeStore });
2649
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2650
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeStore });
3040
2651
  }
3041
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HomeStore, decorators: [{
2652
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeStore, decorators: [{
3042
2653
  type: Injectable
3043
2654
  }] });
3044
2655
 
3045
2656
  class FHomePageButtonsRowComponent {
3046
2657
  viewModel = inject(HomeStore).getButtons();
3047
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageButtonsRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3048
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FHomePageButtonsRowComponent, isStandalone: true, selector: "f-home-page-buttons-row", host: { properties: { "class.display-none": "!viewModel.length" } }, ngImport: i0, template: "@for (button of viewModel; track button.text) {\n @if (button.routerLink) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" routerLink=\"{{ button.routerLink }}\">\n @if (button.icon) {\n <span class=\"f-icon {{ button.icon }}\"></span>\n }\n {{ button.text }}\n </a>\n } @else if(button.href) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" href=\"{{ button.href }}\" target=\"_blank\" rel=\"noopener noreferrer\">\n @if (button.icon) {\n <span class=\"f-icon {{ button.icon }}\"></span>\n }\n {{ button.text }}\n </a>\n }\n}\n\n", styles: [":host{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;width:fit-content;margin:0 auto;padding:32px 10px 0}@media (min-width: 960px){:host{margin:0;padding:32px 0 0;justify-content:flex-start}}.f-button{display:flex;align-items:center;gap:6px}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
2658
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageButtonsRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2659
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FHomePageButtonsRowComponent, isStandalone: true, selector: "f-home-page-buttons-row", host: { properties: { "class.display-none": "!viewModel.length" } }, ngImport: i0, template: "@for (button of viewModel; track button.text) {\n @if (button.routerLink) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" routerLink=\"{{ button.routerLink }}\">\n @if (button.icon) {\n <span class=\"f-icon {{ button.icon }}\"></span>\n }\n {{ button.text }}\n </a>\n } @else if(button.href) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" href=\"{{ button.href }}\" target=\"_blank\" rel=\"noopener noreferrer\">\n @if (button.icon) {\n <span class=\"f-icon {{ button.icon }}\"></span>\n }\n {{ button.text }}\n </a>\n }\n}\n\n", styles: [":host{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;width:fit-content;margin:0 auto;padding:32px 10px 0}@media (min-width: 960px){:host{margin:0;padding:32px 0 0;justify-content:flex-start}}.f-button{display:flex;align-items:center;gap:6px}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
3049
2660
  }
3050
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageButtonsRowComponent, decorators: [{
2661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageButtonsRowComponent, decorators: [{
3051
2662
  type: Component,
3052
2663
  args: [{ selector: 'f-home-page-buttons-row', standalone: true, imports: [
3053
2664
  RouterLink,
@@ -3058,10 +2669,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
3058
2669
 
3059
2670
  class FHomePageFeaturesComponent {
3060
2671
  viewModel = inject(HomeStore).getFeatures();
3061
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageFeaturesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3062
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FHomePageFeaturesComponent, isStandalone: true, selector: "f-home-page-features", host: { properties: { "class.display-none": "!viewModel.length" } }, ngImport: i0, template: "<div class=\"feature-list\">\n @for (feature of viewModel; track feature.headline) {\n <div class=\"feature\">\n <h2>{{ feature.headline }}</h2>\n <p>{{ feature.description }}</p>\n </div>\n }\n</div>\n\n", styles: [":host{margin-top:64px;margin-bottom:64px;width:100%;display:block;padding:0 24px}:host .feature-list{margin:0 auto;display:flex;flex-wrap:wrap;gap:16px;max-width:1248px;pointer-events:none}:host .feature{width:100%;border-radius:4px;background-color:var(--soft-background);display:flex;flex-direction:column;padding:24px;pointer-events:all}:host .feature h2{margin:0;line-height:24px;font-size:16px;font-weight:600}:host .feature p{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{padding:0 48px}:host .feature{width:calc(50% - 12px)}}@media (min-width: 960px){:host{padding:0 64px}:host .feature{width:calc(25% - 12px)}}\n"] });
2672
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFeaturesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2673
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FHomePageFeaturesComponent, isStandalone: true, selector: "f-home-page-features", host: { properties: { "class.display-none": "!viewModel.length" } }, ngImport: i0, template: "<div class=\"feature-list\">\n @for (feature of viewModel; track feature.headline) {\n <div class=\"feature\">\n <h2>{{ feature.headline }}</h2>\n <p>{{ feature.description }}</p>\n </div>\n }\n</div>\n\n", styles: [":host{margin-top:64px;margin-bottom:64px;width:100%;display:block;padding:0 24px}:host .feature-list{margin:0 auto;display:flex;flex-wrap:wrap;gap:16px;max-width:1248px;pointer-events:none}:host .feature{width:100%;border-radius:4px;background-color:var(--soft-background);display:flex;flex-direction:column;padding:24px;pointer-events:all}:host .feature h2{margin:0;line-height:24px;font-size:16px;font-weight:600}:host .feature p{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{padding:0 48px}:host .feature{width:calc(50% - 12px)}}@media (min-width: 960px){:host{padding:0 64px}:host .feature{width:calc(25% - 12px)}}\n"] });
3063
2674
  }
3064
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageFeaturesComponent, decorators: [{
2675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFeaturesComponent, decorators: [{
3065
2676
  type: Component,
3066
2677
  args: [{ selector: 'f-home-page-features', standalone: true, host: {
3067
2678
  '[class.display-none]': '!viewModel.length',
@@ -3070,10 +2681,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
3070
2681
 
3071
2682
  class FHomePageFooterComponent {
3072
2683
  viewModel = inject(HomeStore).getFooter();
3073
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3074
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FHomePageFooterComponent, isStandalone: true, selector: "footer[f-home-page-footer]", ngImport: i0, template: "<div class=\"content\">\n <div class=\"flex-space\"></div>\n <div>\n <div class=\"item\">Created with Foblex <a href=\"https://m-render.foblex.com/\" target=\"_blank\">MRender</a></div>\n <div class=\"item\">{{ viewModel.text }}</div>\n </div>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .item{line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);text-align:right}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] });
2684
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2685
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FHomePageFooterComponent, isStandalone: true, selector: "footer[f-home-page-footer]", ngImport: i0, template: "<div class=\"content\">\n <div class=\"flex-space\"></div>\n <div>\n <div class=\"item\">Created with Foblex <a href=\"https://m-render.foblex.com/\" target=\"_blank\">MRender</a></div>\n <div class=\"item\">{{ viewModel.text }}</div>\n </div>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .item{line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);text-align:right}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] });
3075
2686
  }
3076
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageFooterComponent, decorators: [{
2687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFooterComponent, decorators: [{
3077
2688
  type: Component,
3078
2689
  args: [{ selector: 'footer[f-home-page-footer]', standalone: true, template: "<div class=\"content\">\n <div class=\"flex-space\"></div>\n <div>\n <div class=\"item\">Created with Foblex <a href=\"https://m-render.foblex.com/\" target=\"_blank\">MRender</a></div>\n <div class=\"item\">{{ viewModel.text }}</div>\n </div>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .item{line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);text-align:right}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] }]
3079
2690
  }] });
@@ -3081,22 +2692,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
3081
2692
  class FHomePageHeaderComponent {
3082
2693
  logo = inject(HomeStore).getLogo();
3083
2694
  title = inject(HomeStore).getTitle();
3084
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3085
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FHomePageHeaderComponent, isStandalone: true, selector: "header[f-home-page-header]", ngImport: i0, template: "<div class=\"content\">\n <a class=\"logo-link\" href=\"/libs/public\" aria-label=\"Home\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n </a>\n\n <div class=\"flex-space\"></div>\n <button f-theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .logo-link{display:flex;align-items:center;text-decoration:none}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"], dependencies: [{ kind: "component", type: FThemeButtonComponent, selector: "button[f-theme-button]" }] });
2695
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2696
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FHomePageHeaderComponent, isStandalone: true, selector: "header[f-home-page-header]", ngImport: i0, template: "<div class=\"content\">\n <a class=\"logo-link\" href=\"\" aria-label=\"Home\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n </a>\n\n <div class=\"flex-space\"></div>\n <button theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .logo-link{display:flex;align-items:center;text-decoration:none}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"], dependencies: [{ kind: "component", type: ThemeButtonComponent, selector: "button[theme-button]" }] });
3086
2697
  }
3087
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageHeaderComponent, decorators: [{
2698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeaderComponent, decorators: [{
3088
2699
  type: Component,
3089
2700
  args: [{ selector: 'header[f-home-page-header]', standalone: true, imports: [
3090
- FThemeButtonComponent,
3091
- ], template: "<div class=\"content\">\n <a class=\"logo-link\" href=\"/libs/public\" aria-label=\"Home\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n </a>\n\n <div class=\"flex-space\"></div>\n <button f-theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .logo-link{display:flex;align-items:center;text-decoration:none}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] }]
2701
+ ThemeButtonComponent,
2702
+ ], template: "<div class=\"content\">\n <a class=\"logo-link\" href=\"\" aria-label=\"Home\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n </a>\n\n <div class=\"flex-space\"></div>\n <button theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .logo-link{display:flex;align-items:center;text-decoration:none}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] }]
3092
2703
  }] });
3093
2704
 
3094
2705
  class FHomePageHeroComponent {
3095
2706
  viewModel = inject(HomeStore).getHero();
3096
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageHeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3097
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FHomePageHeroComponent, isStandalone: true, selector: "f-home-page-hero", ngImport: i0, template: "<h1>{{ viewModel.headline }}</h1>\n<p class=\"powered\">{{ viewModel.tagline1 }}</p>\n<p class=\"powered\">{{ viewModel.tagline2 }}</p>\n<p class=\"second-description\">{{ viewModel.subDescription }}</p>\n<f-home-page-buttons-row></f-home-page-buttons-row>\n", styles: [":host{display:block;width:100%;padding:0 10px}@media (min-width: 640px){:host{padding:0;width:100%}}@media (min-width: 960px){:host{width:50%}}.powered,h1{letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;width:fit-content;margin:0 auto;text-align:center;white-space:pre-wrap;pointer-events:all}@media (min-width: 640px){.powered,h1{line-height:56px;font-size:48px}}@media (min-width: 960px){.powered,h1{line-height:64px;font-size:56px;margin:0;text-align:left}}h1{background:-webkit-linear-gradient(120deg,#bd34fe 30%,#41d1ff);background-clip:text;color:transparent}.second-description{line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--secondary-text);margin:0 auto;width:fit-content;pointer-events:all;text-align:center;padding:8px 16px 0}@media (min-width: 640px){.second-description{padding-top:12px;line-height:32px;font-size:20px}}@media (min-width: 960px){.second-description{line-height:36px;font-size:24px;margin:0;text-align:left;padding:8px 0 0}}\n"], dependencies: [{ kind: "component", type: FHomePageButtonsRowComponent, selector: "f-home-page-buttons-row" }] });
2707
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2708
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: FHomePageHeroComponent, isStandalone: true, selector: "f-home-page-hero", ngImport: i0, template: "<h1>{{ viewModel.headline }}</h1>\n<p class=\"powered\">{{ viewModel.tagline1 }}</p>\n<p class=\"powered\">{{ viewModel.tagline2 }}</p>\n<p class=\"second-description\">{{ viewModel.subDescription }}</p>\n<f-home-page-buttons-row></f-home-page-buttons-row>\n", styles: [":host{display:block;width:100%;padding:0 10px}@media (min-width: 640px){:host{padding:0;width:100%}}@media (min-width: 960px){:host{width:50%}}.powered,h1{letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;width:fit-content;margin:0 auto;text-align:center;white-space:pre-wrap;pointer-events:all}@media (min-width: 640px){.powered,h1{line-height:56px;font-size:48px}}@media (min-width: 960px){.powered,h1{line-height:64px;font-size:56px;margin:0;text-align:left}}h1{background:-webkit-linear-gradient(120deg,#bd34fe 30%,#41d1ff);background-clip:text;color:transparent}.second-description{line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--secondary-text);margin:0 auto;width:fit-content;pointer-events:all;text-align:center;padding:8px 16px 0}@media (min-width: 640px){.second-description{padding-top:12px;line-height:32px;font-size:20px}}@media (min-width: 960px){.second-description{line-height:36px;font-size:24px;margin:0;text-align:left;padding:8px 0 0}}\n"], dependencies: [{ kind: "component", type: FHomePageButtonsRowComponent, selector: "f-home-page-buttons-row" }] });
3098
2709
  }
3099
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageHeroComponent, decorators: [{
2710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeroComponent, decorators: [{
3100
2711
  type: Component,
3101
2712
  args: [{ selector: 'f-home-page-hero', standalone: true, imports: [
3102
2713
  FHomePageButtonsRowComponent,
@@ -3105,10 +2716,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
3105
2716
 
3106
2717
  class FHomePageMembershipsComponent {
3107
2718
  viewModel = inject(HomeStore).getMemberships();
3108
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageMembershipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3109
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FHomePageMembershipsComponent, isStandalone: true, selector: "f-home-page-memberships", host: { properties: { "class.display-none": "!viewModel.length" } }, ngImport: i0, template: "<div class=\"membership-list\">\n @for (membership of viewModel; track membership.id) {\n <div class=\"membership\">\n <h2>{{ membership.name }}</h2>\n <p>{{ membership.description }}</p>\n <div class=\"benefit-list\">\n @for (benefit of membership.benefits; track benefit) {\n <p class=\"benefit\">\u2705 {{ benefit }}</p>\n }\n </div>\n <a class=\"f-button\" [href]=\"membership.buttonRef\">{{ membership.buttonText }}</a>\n </div>\n }\n</div>\n", styles: [":host{margin-top:64px;margin-bottom:64px;width:100%;display:block;padding:0 24px}:host .membership-list{margin:0 auto;display:flex;flex-wrap:wrap;gap:16px;max-width:1248px;pointer-events:none}:host .membership{width:100%;border-radius:4px;background-color:var(--soft-background);display:flex;flex-direction:column;padding:24px;position:relative;pointer-events:all}:host .membership h2{margin:0;line-height:24px;font-size:16px;font-weight:600}:host .membership p{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}:host .membership .price{color:var(--primary-text);font-size:1.2rem;font-weight:700;padding-top:16px}:host .membership .price span{font-weight:600;color:var(--primary-color)}:host .membership .benefit-list{display:flex;flex-direction:column;padding:16px 0}@media (min-width: 640px){:host{padding:0 48px}:host .membership{width:calc(50% - 12px);min-width:unset}}@media (min-width: 960px){:host{padding:0 64px}:host .membership{width:calc(25% - 12px);min-width:300px}}.ribbon{position:absolute;top:-10px;right:-10px;color:var(--button-primary-text);background-color:var(--button-primary-bg);padding:4px 8px;font-size:.8rem;border-radius:2px}\n"] });
2719
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageMembershipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2720
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FHomePageMembershipsComponent, isStandalone: true, selector: "f-home-page-memberships", host: { properties: { "class.display-none": "!viewModel.length" } }, ngImport: i0, template: "<div class=\"membership-list\">\n @for (membership of viewModel; track membership.id) {\n <div class=\"membership\">\n <h2>{{ membership.name }}</h2>\n <p>{{ membership.description }}</p>\n <div class=\"benefit-list\">\n @for (benefit of membership.benefits; track benefit) {\n <p class=\"benefit\">\u2705 {{ benefit }}</p>\n }\n </div>\n <a class=\"f-button\" [href]=\"membership.buttonRef\">{{ membership.buttonText }}</a>\n </div>\n }\n</div>\n", styles: [":host{margin-top:64px;margin-bottom:64px;width:100%;display:block;padding:0 24px}:host .membership-list{margin:0 auto;display:flex;flex-wrap:wrap;gap:16px;max-width:1248px;pointer-events:none}:host .membership{width:100%;border-radius:4px;background-color:var(--soft-background);display:flex;flex-direction:column;padding:24px;position:relative;pointer-events:all}:host .membership h2{margin:0;line-height:24px;font-size:16px;font-weight:600}:host .membership p{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}:host .membership .price{color:var(--primary-text);font-size:1.2rem;font-weight:700;padding-top:16px}:host .membership .price span{font-weight:600;color:var(--primary-color)}:host .membership .benefit-list{display:flex;flex-direction:column;padding:16px 0}@media (min-width: 640px){:host{padding:0 48px}:host .membership{width:calc(50% - 12px);min-width:unset}}@media (min-width: 960px){:host{padding:0 64px}:host .membership{width:calc(25% - 12px);min-width:300px}}.ribbon{position:absolute;top:-10px;right:-10px;color:var(--button-primary-text);background-color:var(--button-primary-bg);padding:4px 8px;font-size:.8rem;border-radius:2px}\n"] });
3110
2721
  }
3111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FHomePageMembershipsComponent, decorators: [{
2722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageMembershipsComponent, decorators: [{
3112
2723
  type: Component,
3113
2724
  args: [{ selector: 'f-home-page-memberships', standalone: true, host: {
3114
2725
  '[class.display-none]': '!viewModel.length',
@@ -3117,8 +2728,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
3117
2728
 
3118
2729
  class HomeRootComponent {
3119
2730
  _environment = inject(HomeStore);
2731
+ _gTagService = inject(GTagService, { optional: true });
2732
+ _themeService = inject(ThemeService, { optional: true });
2733
+ isBrowser = inject(IS_BROWSER_PLATFORM);
3120
2734
  _backgroundContainer;
3121
2735
  _heroImageContainer;
2736
+ ngOnInit() {
2737
+ if (!this.isBrowser) {
2738
+ return;
2739
+ }
2740
+ this._themeService?.initialize();
2741
+ this._gTagService?.initialize();
2742
+ }
3122
2743
  ngAfterViewInit() {
3123
2744
  this._renderImageComponent(this._environment.getImageComponent());
3124
2745
  this._renderBackgroundComponent(this._environment.getBackgroundComponent());
@@ -3142,37 +2763,38 @@ class HomeRootComponent {
3142
2763
  _requestComponentRedraw(componentRef) {
3143
2764
  componentRef.changeDetectorRef.markForCheck();
3144
2765
  }
3145
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HomeRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3146
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: HomeRootComponent, isStandalone: true, selector: "home-root", providers: [
2766
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2767
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: HomeRootComponent, isStandalone: true, selector: "home-root", providers: [
3147
2768
  HomeStore,
3148
2769
  {
3149
2770
  provide: HEADER_CONFIGURATION_STORE,
3150
2771
  useExisting: HomeStore,
3151
2772
  },
3152
- ], viewQueries: [{ propertyName: "_backgroundContainer", first: true, predicate: ["backgroundContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_heroImageContainer", first: true, predicate: ["heroImageContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<ng-container #backgroundContainer></ng-container>\n<header f-home-page-header></header>\n\n<div class=\"body\">\n <div class=\"hero-row\">\n <f-home-page-hero></f-home-page-hero>\n <ng-container #heroImageContainer></ng-container>\n </div>\n <f-home-page-features></f-home-page-features>\n <f-home-page-memberships></f-home-page-memberships>\n</div>\n\n<div class=\"flex-space\"></div>\n<footer f-home-page-footer></footer>\n", styles: [":host{display:flex;flex-direction:column;position:relative;width:100%;height:100%;min-height:100%;overflow:hidden;overflow-y:auto}.body{position:relative;z-index:3;pointer-events:none}@media (min-width: 960px){.body{margin-top:50px}}@media (min-width: 1376px){.body{margin-top:100px}}.hero-row{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;margin:0 auto}@media (min-width: 960px){.hero-row{flex-direction:row;margin-left:64px;margin-right:64px}}@media (min-width: 1376px){.hero-row{flex-direction:row;margin-left:calc(50% - 624px);margin-right:calc(50% - 624px)}}\n"], dependencies: [{ kind: "component", type: FHomePageFooterComponent, selector: "footer[f-home-page-footer]" }, { kind: "component", type: FHomePageHeaderComponent, selector: "header[f-home-page-header]" }, { kind: "component", type: FHomePageFeaturesComponent, selector: "f-home-page-features" }, { kind: "component", type: FHomePageHeroComponent, selector: "f-home-page-hero" }, { kind: "component", type: FHomePageMembershipsComponent, selector: "f-home-page-memberships" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3153
- }
3154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HomeRootComponent, decorators: [{
3155
- type: Component,
3156
- args: [{ selector: 'home-root', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
3157
- HomeStore,
3158
- {
3159
- provide: HEADER_CONFIGURATION_STORE,
3160
- useExisting: HomeStore,
3161
- },
3162
- ], imports: [
3163
- FHomePageFooterComponent,
3164
- FHomePageHeaderComponent,
3165
- FHomePageFeaturesComponent,
3166
- FHomePageHeroComponent,
3167
- FHomePageMembershipsComponent,
3168
- ], template: "<ng-container #backgroundContainer></ng-container>\n<header f-home-page-header></header>\n\n<div class=\"body\">\n <div class=\"hero-row\">\n <f-home-page-hero></f-home-page-hero>\n <ng-container #heroImageContainer></ng-container>\n </div>\n <f-home-page-features></f-home-page-features>\n <f-home-page-memberships></f-home-page-memberships>\n</div>\n\n<div class=\"flex-space\"></div>\n<footer f-home-page-footer></footer>\n", styles: [":host{display:flex;flex-direction:column;position:relative;width:100%;height:100%;min-height:100%;overflow:hidden;overflow-y:auto}.body{position:relative;z-index:3;pointer-events:none}@media (min-width: 960px){.body{margin-top:50px}}@media (min-width: 1376px){.body{margin-top:100px}}.hero-row{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;margin:0 auto}@media (min-width: 960px){.hero-row{flex-direction:row;margin-left:64px;margin-right:64px}}@media (min-width: 1376px){.hero-row{flex-direction:row;margin-left:calc(50% - 624px);margin-right:calc(50% - 624px)}}\n"] }]
3169
- }], propDecorators: { _backgroundContainer: [{
3170
- type: ViewChild,
3171
- args: ['backgroundContainer', { read: ViewContainerRef }]
3172
- }], _heroImageContainer: [{
3173
- type: ViewChild,
3174
- args: ['heroImageContainer', { read: ViewContainerRef }]
3175
- }] } });
2773
+ ], viewQueries: [{ propertyName: "_backgroundContainer", first: true, predicate: ["backgroundContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_heroImageContainer", first: true, predicate: ["heroImageContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<ng-container #backgroundContainer></ng-container>\n<header f-home-page-header></header>\n\n<div class=\"body\">\n <div class=\"hero-row\">\n <f-home-page-hero></f-home-page-hero>\n <ng-container #heroImageContainer></ng-container>\n </div>\n <f-home-page-features></f-home-page-features>\n <f-home-page-memberships></f-home-page-memberships>\n</div>\n\n<div class=\"flex-space\"></div>\n<footer f-home-page-footer></footer>\n\n@defer (when isBrowser) {\n <cookie-popup/>\n}\n", styles: [":host{display:flex;flex-direction:column;position:relative;width:100%;height:100%;min-height:100%;overflow:hidden;overflow-y:auto}.body{position:relative;z-index:3;pointer-events:none}@media (min-width: 960px){.body{margin-top:50px}}@media (min-width: 1376px){.body{margin-top:100px}}.hero-row{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;margin:0 auto}@media (min-width: 960px){.hero-row{flex-direction:row;margin-left:64px;margin-right:64px}}@media (min-width: 1376px){.hero-row{flex-direction:row;margin-left:calc(50% - 624px);margin-right:calc(50% - 624px)}}\n"], dependencies: [{ kind: "component", type: FHomePageFooterComponent, selector: "footer[f-home-page-footer]" }, { kind: "component", type: FHomePageHeaderComponent, selector: "header[f-home-page-header]" }, { kind: "component", type: FHomePageFeaturesComponent, selector: "f-home-page-features" }, { kind: "component", type: FHomePageHeroComponent, selector: "f-home-page-hero" }, { kind: "component", type: FHomePageMembershipsComponent, selector: "f-home-page-memberships" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./foblex-m-render-cookie-popup.component-CqwZv5lc.mjs').then(m => m.CookiePopupComponent)]] });
2774
+ }
2775
+ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.2.11", ngImport: i0, type: HomeRootComponent, resolveDeferredDeps: () => [import('./foblex-m-render-cookie-popup.component-CqwZv5lc.mjs').then(m => m.CookiePopupComponent)], resolveMetadata: CookiePopupComponent => ({ decorators: [{
2776
+ type: Component,
2777
+ args: [{ selector: 'home-root', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2778
+ HomeStore,
2779
+ {
2780
+ provide: HEADER_CONFIGURATION_STORE,
2781
+ useExisting: HomeStore,
2782
+ },
2783
+ ], imports: [
2784
+ FHomePageFooterComponent,
2785
+ FHomePageHeaderComponent,
2786
+ FHomePageFeaturesComponent,
2787
+ FHomePageHeroComponent,
2788
+ FHomePageMembershipsComponent,
2789
+ CookiePopupComponent,
2790
+ ], template: "<ng-container #backgroundContainer></ng-container>\n<header f-home-page-header></header>\n\n<div class=\"body\">\n <div class=\"hero-row\">\n <f-home-page-hero></f-home-page-hero>\n <ng-container #heroImageContainer></ng-container>\n </div>\n <f-home-page-features></f-home-page-features>\n <f-home-page-memberships></f-home-page-memberships>\n</div>\n\n<div class=\"flex-space\"></div>\n<footer f-home-page-footer></footer>\n\n@defer (when isBrowser) {\n <cookie-popup/>\n}\n", styles: [":host{display:flex;flex-direction:column;position:relative;width:100%;height:100%;min-height:100%;overflow:hidden;overflow-y:auto}.body{position:relative;z-index:3;pointer-events:none}@media (min-width: 960px){.body{margin-top:50px}}@media (min-width: 1376px){.body{margin-top:100px}}.hero-row{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;margin:0 auto}@media (min-width: 960px){.hero-row{flex-direction:row;margin-left:64px;margin-right:64px}}@media (min-width: 1376px){.hero-row{flex-direction:row;margin-left:calc(50% - 624px);margin-right:calc(50% - 624px)}}\n"] }]
2791
+ }], ctorParameters: null, propDecorators: { _backgroundContainer: [{
2792
+ type: ViewChild,
2793
+ args: ['backgroundContainer', { read: ViewContainerRef }]
2794
+ }], _heroImageContainer: [{
2795
+ type: ViewChild,
2796
+ args: ['heroImageContainer', { read: ViewContainerRef }]
2797
+ }] } }) });
3176
2798
 
3177
2799
  const HOME_ROUTES = [
3178
2800
  {
@@ -3206,5 +2828,5 @@ var index = /*#__PURE__*/Object.freeze({
3206
2828
  * Generated bundle index. Do not edit.
3207
2829
  */
3208
2830
 
3209
- export { ActivateTocByHashHandler, ActivateTocByHashRequest, CalculateHashFromScrollPositionAndActivateTocHandler, CalculateHashFromScrollPositionAndActivateTocRequest, CalculateTableOfContentDataHandler, CalculateTableOfContentDataRequest, DOCUMENTATION_CONFIGURATION, DOCUMENTATION_ROUTES, DocumentationRootComponent, DocumentationStore, DropdownMenuComponent, EMarkdownContainerType, EParsedContainerType, FAnalyticsService, FCheckboxComponent, FCodeGroupComponent, FCodeGroupTabsComponent, FCodeViewComponent, FCookiePopupComponent, FExampleViewComponent, FFooterEditInformationComponent, FFooterNavigationButtonComponent, FFooterNavigationComponent, FHomePageButtonsRowComponent, FHomePageFeaturesComponent, FHomePageFooterComponent, FHomePageHeaderComponent, FHomePageHeroComponent, FHomePageMembershipsComponent, FInsertComponentDirective, FMarkdownFooterComponent, FMarkdownRendererComponent, FMetaService, FNavigationItemComponent, FPreviewBase, FPreviewComponent, FPreviewGroupFiltersComponent, FPreviewGroupService, FRadioButtonComponent, FSocialLinksComponent, FThemeButtonComponent, F_ACCEPT_COOKIES_KEY, F_PREVIEW_NAVIGATION_PROVIDER, F_SOCIAL_LINKS_PROVIDER, GetAbsoluteTopToContainerHandler, GetAbsoluteTopToContainerRequest, GetPreviousNextPageNavigationHandler, GetPreviousNextPageNavigationRequest, GetPreviousNextPageNavigationResponse, HEADER_CONFIGURATION, HEADER_CONFIGURATION_STORE, HOME_PAGE_CONFIGURATION, HOME_ROUTES, HamburgerButtonComponent, HandleNavigationLinksHandler, HandleNavigationLinksRequest, HeaderComponent, HighlightComponent, HighlightService, HomeRootComponent, HomeStore, InlineMenuComponent, LANGUAGES, MarkCodeFocusedBlocksPostProcessor, MarkdownContainerComponent, MarkdownService, NavigationGroupComponent, NavigationPanelComponent, NpmVersionComponent, OverflowObserverDirective, ParseAlerts, ParseAngularExampleWithCodeLinks, ParseGroupedCodeItems, ParsePreviewGroup, ParseSingleCodeItem, PopoverService, RIGHT_TOP_OVERLAY_POSITION, RenderDynamicComponentsHandler, RenderDynamicComponentsRequest, SCROLLABLE_CONTAINER, ScrollToElementInContainerHandler, ScrollToElementInContainerRequest, ScrollableContainerComponent, TOGGLE_NAVIGATION_COMPONENT, TableOfContentComponent, TableOfContentData, TableOfContentItemsComponent, ThemeService, coerceComponentHeight, copyToClipboard, defineLazyComponent, defineNavigationGroup, encodeDataAttr, extractComponent, getContent, isClosingToken, isOpeningToken, parseComponentTag, parseFileLinkLine, parseLanguageFromFileExtension, parseSingleBracketText, parseSyntaxLanguage, provide404Markdown, provideBackground, provideComponents, provideDirectory, provideDocumentation, provideDocumentationMeta, provideFooterNavigation, provideHeader, provideHeaderMediaLinks, provideHeaderNavigation, provideHero, provideHomeButtons, provideHomeFeatures, provideHomeFooter, provideHomePage, provideImage, provideLanguage, provideLogo, provideNavigation, provideTitle, provideTocData, setCookieConsent };
2831
+ export { ActivateTocByHashHandler, ActivateTocByHashRequest, CalculateHashFromScrollPositionAndActivateTocHandler, CalculateHashFromScrollPositionAndActivateTocRequest, CalculateTableOfContentDataHandler, CalculateTableOfContentDataRequest, DOCUMENTATION_CONFIGURATION, DOCUMENTATION_ROUTES, DocumentationRootComponent, DocumentationStore, DropdownMenuComponent, EMarkdownContainerType, EParsedContainerType, FCheckboxComponent, FCodeGroupComponent, FCodeGroupTabsComponent, FCodeViewComponent, FExampleViewComponent, FFooterEditInformationComponent, FFooterNavigationButtonComponent, FFooterNavigationComponent, FHomePageButtonsRowComponent, FHomePageFeaturesComponent, FHomePageFooterComponent, FHomePageHeaderComponent, FHomePageHeroComponent, FHomePageMembershipsComponent, FInsertComponentDirective, FMarkdownFooterComponent, FMarkdownRendererComponent, FMetaService, FNavigationItemComponent, FPreviewBase, FPreviewComponent, FPreviewGroupFiltersComponent, FPreviewGroupService, FRadioButtonComponent, FSocialLinksComponent, F_PREVIEW_NAVIGATION_PROVIDER, F_SOCIAL_LINKS_PROVIDER, GTAG_CONFIG, GTagService, GetAbsoluteTopToContainerHandler, GetAbsoluteTopToContainerRequest, GetPreviousNextPageNavigationHandler, GetPreviousNextPageNavigationRequest, GetPreviousNextPageNavigationResponse, HEADER_CONFIGURATION, HEADER_CONFIGURATION_STORE, HOME_PAGE_CONFIGURATION, HOME_ROUTES, HamburgerButtonComponent, HandleNavigationLinksHandler, HandleNavigationLinksRequest, HeaderComponent, HighlightComponent, HomeRootComponent, HomeStore, InlineMenuComponent, MarkdownContainerComponent, MarkdownService, NavigationGroupComponent, NavigationPanelComponent, NpmVersionComponent, OverflowObserverDirective, ParseAlerts, ParseAngularExampleWithCodeLinks, ParseGroupedCodeItems, ParsePreviewGroup, ParseSingleCodeItem, PopoverService, RIGHT_TOP_OVERLAY_POSITION, RenderDynamicComponentsHandler, RenderDynamicComponentsRequest, SCROLLABLE_CONTAINER, ScrollToElementInContainerHandler, ScrollToElementInContainerRequest, ScrollableContainerComponent, TOGGLE_NAVIGATION_COMPONENT, TableOfContentComponent, TableOfContentData, TableOfContentItemsComponent, ThemeButtonComponent, ThemeService, coerceComponentHeight, defineLazyComponent, defineNavigationGroup, encodeDataAttr, extractComponent, getContent, isClosingToken, isOpeningToken, parseComponentTag, parseFileLinkLine, parseLanguageFromFileExtension, parseSingleBracketText, parseSyntaxLanguage, provide404Markdown, provideBackground, provideComponents, provideDirectory, provideDocumentation, provideDocumentationMeta, provideFooterNavigation, provideGTag, provideHeader, provideHeaderMediaLinks, provideHeaderNavigation, provideHero, provideHomeButtons, provideHomeFeatures, provideHomeFooter, provideHomePage, provideImage, provideLanguage, provideLogo, provideNavigation, provideTheme, provideTitle, provideTocData };
3210
2832
  //# sourceMappingURL=foblex-m-render.mjs.map