@foblex/m-render 2.7.0 → 2.7.2
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.
- package/fesm2022/foblex-m-render-cookie-popup.component-BZZxqp3j.mjs +39 -0
- package/fesm2022/foblex-m-render-cookie-popup.component-BZZxqp3j.mjs.map +1 -0
- package/fesm2022/foblex-m-render.mjs +466 -418
- package/fesm2022/foblex-m-render.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/analytics/cookie-popup/cookie-popup.component.d.ts +12 -0
- package/lib/analytics/g-tag.service.d.ts +13 -0
- package/lib/analytics/index.d.ts +2 -0
- package/lib/analytics/provide-g-tag.d.ts +6 -0
- package/lib/common/components/index.d.ts +0 -1
- package/lib/common/services/index.d.ts +1 -1
- package/lib/common/utils/document-element.d.ts +2 -0
- package/lib/common/utils/index.d.ts +5 -0
- package/lib/common/utils/local-storage.d.ts +2 -0
- package/lib/common/utils/location.d.ts +2 -0
- package/lib/common/utils/platform.d.ts +2 -0
- package/lib/common/utils/window.d.ts +2 -0
- package/lib/documentation-page/analytics/common-services/f-meta.service.d.ts +1 -1
- package/lib/documentation-page/analytics/index.d.ts +0 -1
- package/lib/documentation-page/components/markdown-container/f-markdown/components/f-markdown-footer/f-markdown-footer.component.d.ts +1 -1
- package/lib/documentation-page/components/markdown-container/f-markdown/components/f-preview-group/f-preview/f-preview.component.d.ts +1 -1
- package/lib/documentation-page/components/markdown-container/f-markdown/f-markdown-renderer.component.d.ts +2 -1
- package/lib/documentation-page/components/markdown-container/f-markdown/highlight/highlight.service.d.ts +2 -1
- package/lib/documentation-page/components/markdown-container/f-markdown/highlight/mark-code-focused-blocks.post-processor.d.ts +2 -3
- package/lib/documentation-page/components/navigation-panel/navigation-panel.component.d.ts +1 -1
- package/lib/documentation-page/components/scrollable-container/components/table-of-content/table-of-content.component.d.ts +1 -1
- 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
- package/lib/documentation-page/documentation-root.component.d.ts +3 -0
- package/lib/documentation-page/domain/handle-navigation-links/handle-navigation-links.handler.d.ts +0 -1
- package/lib/documentation-page/domain/handle-navigation-links/handle-navigation-links.request.d.ts +2 -3
- package/lib/home-page/home-root.component.d.ts +7 -3
- package/lib/theme/index.d.ts +3 -0
- package/lib/theme/provide-theme.d.ts +2 -0
- package/lib/theme/theme-button/theme-button.component.d.ts +14 -0
- package/lib/{common/services → theme}/theme.service.d.ts +7 -1
- package/package.json +1 -2
- package/lib/common/components/f-theme-button/f-theme-button.component.d.ts +0 -14
- package/lib/documentation-page/analytics/analytics/f-accept-cookies-key.d.ts +0 -1
- package/lib/documentation-page/analytics/analytics/f-analytics.service.d.ts +0 -10
- package/lib/documentation-page/analytics/analytics/f-cookie-popup/f-cookie-popup.component.d.ts +0 -9
- package/lib/documentation-page/analytics/analytics/i-window-with-analytics.d.ts +0 -5
- package/lib/documentation-page/analytics/analytics/index.d.ts +0 -5
- package/lib/documentation-page/analytics/analytics/set-cookie-consent.d.ts +0 -6
@@ -1,18 +1,106 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { EventEmitter, booleanAttribute, HostListener, Input, ViewChild, Output, ChangeDetectionStrategy, Component, input, output, viewChild,
|
3
|
-
import {
|
4
|
-
import {
|
2
|
+
import { inject, Injectable, InjectionToken, EventEmitter, booleanAttribute, HostListener, Input, ViewChild, Output, ChangeDetectionStrategy, Component, input, output, viewChild, signal, ElementRef, NgZone, Directive, PLATFORM_ID, Renderer2, ChangeDetectorRef, DestroyRef, computed, ViewContainerRef, Injector, forwardRef, effect, untracked } from '@angular/core';
|
3
|
+
import { DOCUMENT, isPlatformBrowser, TitleCasePipe } from '@angular/common';
|
4
|
+
import { of, map, Subject, from, switchMap, startWith, filter, defer, Observable, EMPTY, debounceTime, fromEvent } from 'rxjs';
|
5
5
|
import { HttpClient } from '@angular/common/http';
|
6
6
|
import { catchError, tap, filter as filter$1, shareReplay, 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
10
|
import { createHighlighter } from 'shiki';
|
12
11
|
import MarkdownIt from 'markdown-it';
|
13
12
|
import { DomSanitizer } from '@angular/platform-browser';
|
14
13
|
import container from 'markdown-it-container';
|
15
14
|
|
15
|
+
class GTagService {
|
16
|
+
_config = inject(GTAG_CONFIG);
|
17
|
+
_document = inject(DOCUMENT);
|
18
|
+
_initialized = false;
|
19
|
+
initialize() {
|
20
|
+
console.log('[GTag] Initializing with ID:', this._config.id);
|
21
|
+
if (this._initialized) {
|
22
|
+
return;
|
23
|
+
}
|
24
|
+
this._initialized = true;
|
25
|
+
const window = this._getGtagWindow();
|
26
|
+
if (!window) {
|
27
|
+
console.warn('[GTag] Initialization failed: No window available.');
|
28
|
+
this._initialized = false;
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
window.dataLayer = window.dataLayer || [];
|
32
|
+
window.gtag = (...args) => {
|
33
|
+
window.dataLayer?.push(args);
|
34
|
+
};
|
35
|
+
this._loadGtagScript(this._config.id);
|
36
|
+
window.gtag('js', new Date());
|
37
|
+
window.gtag('config', this._config.id);
|
38
|
+
}
|
39
|
+
_getGtagWindow() {
|
40
|
+
const result = this._document.defaultView;
|
41
|
+
if (!result?.gtag) {
|
42
|
+
console.warn('[GTag] gtag function is not available. Ensure the script is loaded.');
|
43
|
+
}
|
44
|
+
return result;
|
45
|
+
}
|
46
|
+
_loadGtagScript(id) {
|
47
|
+
if (this._document.querySelector('#gtag-script'))
|
48
|
+
return;
|
49
|
+
const script = this._document.createElement('script');
|
50
|
+
script.id = 'gtag-script';
|
51
|
+
script.async = true;
|
52
|
+
script.src = `https://www.googletagmanager.com/gtag/js?id=${id}`;
|
53
|
+
this._document.head.appendChild(script);
|
54
|
+
}
|
55
|
+
updateConsent(granted) {
|
56
|
+
const window = this._getGtagWindow();
|
57
|
+
if (!window?.gtag) {
|
58
|
+
console.warn('[GTag] Cannot update consent: gtag not available.');
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
const state = granted ? 'granted' : 'denied';
|
62
|
+
const consentOptions = {
|
63
|
+
ad_user_data: state,
|
64
|
+
ad_personalization: state,
|
65
|
+
ad_storage: state,
|
66
|
+
analytics_storage: state,
|
67
|
+
};
|
68
|
+
if (state === 'denied') {
|
69
|
+
window.gtag('consent', 'default', {
|
70
|
+
...consentOptions,
|
71
|
+
wait_for_update: 500,
|
72
|
+
});
|
73
|
+
}
|
74
|
+
else {
|
75
|
+
window.gtag('consent', 'update', {
|
76
|
+
...consentOptions,
|
77
|
+
});
|
78
|
+
}
|
79
|
+
}
|
80
|
+
trackEvent(action, params) {
|
81
|
+
this._getGtagWindow()?.gtag?.('event', action, params || {});
|
82
|
+
}
|
83
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: GTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
84
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: GTagService });
|
85
|
+
}
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: GTagService, decorators: [{
|
87
|
+
type: Injectable
|
88
|
+
}] });
|
89
|
+
|
90
|
+
function provideGTag(config) {
|
91
|
+
return [
|
92
|
+
{
|
93
|
+
provide: GTAG_CONFIG,
|
94
|
+
useValue: config,
|
95
|
+
},
|
96
|
+
{
|
97
|
+
provide: GTagService,
|
98
|
+
useClass: GTagService,
|
99
|
+
},
|
100
|
+
];
|
101
|
+
}
|
102
|
+
const GTAG_CONFIG = new InjectionToken('GTAG_CONFIG');
|
103
|
+
|
16
104
|
let uniqueId$1 = 0;
|
17
105
|
class FCheckboxComponent {
|
18
106
|
changeDetectorRef;
|
@@ -58,10 +146,10 @@ class FCheckboxComponent {
|
|
58
146
|
event.stopPropagation();
|
59
147
|
}
|
60
148
|
}
|
61
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
62
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.2.
|
149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
150
|
+
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
151
|
}
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCheckboxComponent, decorators: [{
|
65
153
|
type: Component,
|
66
154
|
args: [{ selector: 'f-checkbox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
67
155
|
'[class.f-checkbox-checked]': 'checked',
|
@@ -110,10 +198,10 @@ class FRadioButtonComponent {
|
|
110
198
|
event.stopPropagation();
|
111
199
|
}
|
112
200
|
}
|
113
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
114
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.
|
201
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FRadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
202
|
+
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
203
|
}
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FRadioButtonComponent, decorators: [{
|
117
205
|
type: Component,
|
118
206
|
args: [{ selector: 'f-radio-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
119
207
|
'[class.f-radio-button-checked]': 'checked()',
|
@@ -127,95 +215,14 @@ const F_SOCIAL_LINKS_PROVIDER = new InjectionToken('F_SOCIAL_LINKS_PROVIDER');
|
|
127
215
|
|
128
216
|
class FSocialLinksComponent {
|
129
217
|
links = inject(F_SOCIAL_LINKS_PROVIDER).getSocialLinks();
|
130
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
131
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
218
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FSocialLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
219
|
+
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
220
|
}
|
133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
221
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FSocialLinksComponent, decorators: [{
|
134
222
|
type: Component,
|
135
223
|
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
224
|
}] });
|
137
225
|
|
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
226
|
class NpmVersionComponent {
|
220
227
|
value = input();
|
221
228
|
_http = inject(HttpClient);
|
@@ -236,10 +243,10 @@ class NpmVersionComponent {
|
|
236
243
|
_npmRegistry(name) {
|
237
244
|
return `https://registry.npmjs.org/${encodeURIComponent(name)}`;
|
238
245
|
}
|
239
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
240
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
246
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NpmVersionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
247
|
+
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
248
|
}
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
249
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NpmVersionComponent, decorators: [{
|
243
250
|
type: Component,
|
244
251
|
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
252
|
}] });
|
@@ -300,10 +307,10 @@ class DropdownMenuComponent {
|
|
300
307
|
ngOnDestroy() {
|
301
308
|
clearTimeout(this._hoverTimeout);
|
302
309
|
}
|
303
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
304
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
310
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
311
|
+
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
312
|
}
|
306
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
313
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DropdownMenuComponent, decorators: [{
|
307
314
|
type: Component,
|
308
315
|
args: [{ selector: 'dropdown-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
309
316
|
CdkConnectedOverlay,
|
@@ -366,10 +373,10 @@ class InlineMenuComponent {
|
|
366
373
|
overflowed(event) {
|
367
374
|
this.isOverflowed.set(event);
|
368
375
|
}
|
369
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
370
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
376
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: InlineMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
377
|
+
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
378
|
}
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: InlineMenuComponent, decorators: [{
|
373
380
|
type: Component,
|
374
381
|
args: [{ selector: 'inline-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
375
382
|
RouterLink,
|
@@ -409,10 +416,10 @@ class OverflowObserverDirective {
|
|
409
416
|
ngOnDestroy() {
|
410
417
|
this._resizeObserver.disconnect();
|
411
418
|
}
|
412
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
413
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.
|
419
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: OverflowObserverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
420
|
+
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
421
|
}
|
415
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: OverflowObserverDirective, decorators: [{
|
416
423
|
type: Directive,
|
417
424
|
args: [{
|
418
425
|
selector: '[overflowObserver]',
|
@@ -420,6 +427,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
420
427
|
}]
|
421
428
|
}] });
|
422
429
|
|
430
|
+
class PopoverService {
|
431
|
+
_message = signal(null);
|
432
|
+
get message() {
|
433
|
+
return this._message.asReadonly();
|
434
|
+
}
|
435
|
+
show(message, timeout = 2000) {
|
436
|
+
this._message.set(message);
|
437
|
+
setTimeout(() => this._message.set(null), timeout);
|
438
|
+
}
|
439
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
440
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PopoverService, providedIn: 'root' });
|
441
|
+
}
|
442
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PopoverService, decorators: [{
|
443
|
+
type: Injectable,
|
444
|
+
args: [{
|
445
|
+
providedIn: 'root',
|
446
|
+
}]
|
447
|
+
}] });
|
448
|
+
|
449
|
+
class ThemeService {
|
450
|
+
_localStorage = inject(LOCAL_STORAGE, { optional: true });
|
451
|
+
_window = inject(WINDOW, { optional: true });
|
452
|
+
_theme = new Subject();
|
453
|
+
_docElement = inject(DOCUMENT_ELEMENT);
|
454
|
+
get theme$() {
|
455
|
+
return this._theme.asObservable();
|
456
|
+
}
|
457
|
+
initialize() {
|
458
|
+
if (this.getPreferredTheme() === 'dark' && !this._isDocumentContainsDarkTheme()) {
|
459
|
+
this._docElement.classList.add('dark');
|
460
|
+
this._localStorage?.setItem('preferred-theme', 'dark');
|
461
|
+
}
|
462
|
+
}
|
463
|
+
updateTheme() {
|
464
|
+
this._theme.next();
|
465
|
+
}
|
466
|
+
getPreferredTheme() {
|
467
|
+
return this._getItem('preferred-theme')
|
468
|
+
|| (this._matchMedia('(prefers-color-scheme: dark)')?.matches ? 'dark' : 'light');
|
469
|
+
}
|
470
|
+
_getItem(key) {
|
471
|
+
return this._localStorage?.getItem?.(key) || null;
|
472
|
+
}
|
473
|
+
_matchMedia(query) {
|
474
|
+
return this._window?.matchMedia?.(query) || { matches: false };
|
475
|
+
}
|
476
|
+
_isDocumentContainsDarkTheme() {
|
477
|
+
return this._docElement.classList.contains('dark');
|
478
|
+
}
|
479
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
480
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeService });
|
481
|
+
}
|
482
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeService, decorators: [{
|
483
|
+
type: Injectable
|
484
|
+
}] });
|
485
|
+
|
423
486
|
function copyToClipboard(value) {
|
424
487
|
const blob = new Blob([value], { type: 'text/plain' });
|
425
488
|
const data = [new ClipboardItem({ [blob.type]: blob })];
|
@@ -432,110 +495,33 @@ function copyToClipboard(value) {
|
|
432
495
|
}));
|
433
496
|
}
|
434
497
|
|
435
|
-
const
|
498
|
+
const DOCUMENT_ELEMENT = new InjectionToken('DOCUMENT_ELEMENT', {
|
499
|
+
factory: () => inject(DOCUMENT).documentElement,
|
500
|
+
});
|
436
501
|
|
437
|
-
const
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
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
|
-
}
|
502
|
+
const WINDOW = new InjectionToken('F_WINDOW', {
|
503
|
+
factory: () => {
|
504
|
+
const { defaultView } = inject(DOCUMENT);
|
505
|
+
if (!defaultView) {
|
506
|
+
throw new Error('Window is not available');
|
457
507
|
}
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
console.error('Unable to set default cookie consent.');
|
462
|
-
}
|
463
|
-
else if (state === 'granted') {
|
464
|
-
console.error('Unable to grant cookie consent.');
|
465
|
-
}
|
466
|
-
}
|
467
|
-
};
|
508
|
+
return defaultView;
|
509
|
+
},
|
510
|
+
});
|
468
511
|
|
469
|
-
|
470
|
-
|
471
|
-
|
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
|
-
}
|
479
|
-
}
|
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');
|
487
|
-
}
|
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: () => [] });
|
512
|
+
const LOCAL_STORAGE = new InjectionToken('F_LOCAL_STORAGE', {
|
513
|
+
factory: () => inject(WINDOW).localStorage,
|
514
|
+
});
|
495
515
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
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
|
-
}
|
524
|
-
}
|
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;
|
531
|
-
}
|
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' });
|
534
|
-
}
|
535
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FAnalyticsService, decorators: [{
|
536
|
-
type: Injectable,
|
537
|
-
args: [{ providedIn: 'root' }]
|
538
|
-
}] });
|
516
|
+
const LOCATION = new InjectionToken('F_LOCATION', {
|
517
|
+
factory: () => inject(WINDOW).location,
|
518
|
+
});
|
519
|
+
|
520
|
+
const IS_BROWSER_PLATFORM = new InjectionToken('IS_BROWSER_PLATFORM', {
|
521
|
+
factory() {
|
522
|
+
return isPlatformBrowser(inject(PLATFORM_ID));
|
523
|
+
},
|
524
|
+
});
|
539
525
|
|
540
526
|
class FHeadTagService {
|
541
527
|
_document = inject(DOCUMENT);
|
@@ -572,10 +558,10 @@ class FHeadTagService {
|
|
572
558
|
head.appendChild(element);
|
573
559
|
return element;
|
574
560
|
}
|
575
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
576
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
561
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHeadTagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
562
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHeadTagService, providedIn: 'root' });
|
577
563
|
}
|
578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
564
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHeadTagService, decorators: [{
|
579
565
|
type: Injectable,
|
580
566
|
args: [{ providedIn: 'root' }]
|
581
567
|
}] });
|
@@ -590,7 +576,7 @@ class HandleNavigationLinksHandler {
|
|
590
576
|
this._navigateInternalLink(href, request.router);
|
591
577
|
}
|
592
578
|
else {
|
593
|
-
|
579
|
+
window.open(href, '_blank');
|
594
580
|
}
|
595
581
|
}
|
596
582
|
}
|
@@ -612,18 +598,15 @@ class HandleNavigationLinksHandler {
|
|
612
598
|
}
|
613
599
|
router.navigate([href]).then();
|
614
600
|
}
|
615
|
-
_navigateExternalLink(href, browser) {
|
616
|
-
browser.window.open(href, '_blank');
|
617
|
-
}
|
618
601
|
}
|
619
602
|
|
620
603
|
class HandleNavigationLinksRequest {
|
621
604
|
event;
|
622
|
-
|
605
|
+
window;
|
623
606
|
router;
|
624
|
-
constructor(event,
|
607
|
+
constructor(event, window, router) {
|
625
608
|
this.event = event;
|
626
|
-
this.
|
609
|
+
this.window = window;
|
627
610
|
this.router = router;
|
628
611
|
}
|
629
612
|
}
|
@@ -702,9 +685,9 @@ function provideTocData(toC) {
|
|
702
685
|
}
|
703
686
|
|
704
687
|
class FMetaService {
|
688
|
+
_location = inject(LOCATION);
|
705
689
|
_router = inject(Router);
|
706
690
|
_headTag = inject(FHeadTagService);
|
707
|
-
_browser = inject(BrowserService);
|
708
691
|
_configuration = inject(DOCUMENTATION_CONFIGURATION);
|
709
692
|
changes() {
|
710
693
|
return this._router.events.pipe(startWith(new NavigationEnd(1, '', '')), filter(event => event instanceof NavigationEnd), map(() => void 0), tap(() => {
|
@@ -718,7 +701,7 @@ class FMetaService {
|
|
718
701
|
const item = this._findDocItemByUrl(this._findDocGroupByUrl(this._router.url), this._router.url);
|
719
702
|
if (item) {
|
720
703
|
data.title = `${item.text} - ${defaultData.app_name}`;
|
721
|
-
data.url = this.
|
704
|
+
data.url = this._location.href;
|
722
705
|
data.description = item.description || defaultData.description;
|
723
706
|
data.image = item.image || defaultData.image;
|
724
707
|
data.image_width = item.image_width || defaultData.image_width;
|
@@ -726,14 +709,14 @@ class FMetaService {
|
|
726
709
|
data.image_type = item.image_type || defaultData.image_type;
|
727
710
|
}
|
728
711
|
if (!data.url) {
|
729
|
-
data.url = this.
|
712
|
+
data.url = this._location.origin + this._router.url;
|
730
713
|
}
|
731
714
|
if (!data.image.startsWith('http') && !data.image.startsWith('www')) {
|
732
715
|
if (data.image.startsWith('.')) {
|
733
|
-
data.image = this.
|
716
|
+
data.image = this._location.origin + data.image.slice(1);
|
734
717
|
}
|
735
718
|
else {
|
736
|
-
data.image = this.
|
719
|
+
data.image = this._location.origin + data.image;
|
737
720
|
}
|
738
721
|
}
|
739
722
|
if (!data.url.endsWith('/')) {
|
@@ -770,10 +753,10 @@ class FMetaService {
|
|
770
753
|
this._headTag.updateTag({ property: 'og:image:width', content: item.image_width.toString() });
|
771
754
|
this._headTag.updateTag({ property: 'og:image:height', content: item.image_height.toString() });
|
772
755
|
}
|
773
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
774
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
756
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMetaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
757
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMetaService });
|
775
758
|
}
|
776
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
759
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMetaService, decorators: [{
|
777
760
|
type: Injectable
|
778
761
|
}] });
|
779
762
|
|
@@ -786,10 +769,10 @@ class HamburgerButtonComponent {
|
|
786
769
|
_onShowNavigation() {
|
787
770
|
this._parent?.onToggleNavigation(true);
|
788
771
|
}
|
789
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
790
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
772
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HamburgerButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
773
|
+
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
774
|
}
|
792
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
775
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HamburgerButtonComponent, decorators: [{
|
793
776
|
type: Component,
|
794
777
|
args: [{ selector: 'button[hamburger-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
795
778
|
'(click)': '_onShowNavigation()',
|
@@ -855,26 +838,71 @@ class DocumentationStore {
|
|
855
838
|
getHeader() {
|
856
839
|
return this._configuration.header;
|
857
840
|
}
|
858
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
859
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
841
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
842
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationStore });
|
860
843
|
}
|
861
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
844
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationStore, decorators: [{
|
862
845
|
type: Injectable
|
863
846
|
}] });
|
864
847
|
|
848
|
+
class ThemeButtonComponent {
|
849
|
+
_renderer = inject(Renderer2);
|
850
|
+
_themeService = inject(ThemeService, { optional: true });
|
851
|
+
_localStorage = inject(LOCAL_STORAGE);
|
852
|
+
_documentElement = inject(DOCUMENT_ELEMENT);
|
853
|
+
_isBrowser = inject(IS_BROWSER_PLATFORM);
|
854
|
+
ngOnInit() {
|
855
|
+
if (!this._themeService && this._isBrowser) {
|
856
|
+
throw new Error('Theme is not provided. Please provide it using provideTheme() provider in your application config.');
|
857
|
+
}
|
858
|
+
}
|
859
|
+
_isDocumentContainsDarkTheme() {
|
860
|
+
return this._documentElement.classList.contains('dark');
|
861
|
+
}
|
862
|
+
_onClick() {
|
863
|
+
if (this._themeService?.getPreferredTheme() === 'light' && !this._isDocumentContainsDarkTheme()) {
|
864
|
+
this._renderer.addClass(this._documentElement, 'dark');
|
865
|
+
this._localStorage.setItem('preferred-theme', 'dark');
|
866
|
+
}
|
867
|
+
else {
|
868
|
+
this._renderer.removeClass(this._documentElement, 'dark');
|
869
|
+
this._localStorage.setItem('preferred-theme', 'light');
|
870
|
+
}
|
871
|
+
this._themeService?.updateTheme();
|
872
|
+
}
|
873
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
874
|
+
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 });
|
875
|
+
}
|
876
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ThemeButtonComponent, decorators: [{
|
877
|
+
type: Component,
|
878
|
+
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"] }]
|
879
|
+
}], propDecorators: { _onClick: [{
|
880
|
+
type: HostListener,
|
881
|
+
args: ['click']
|
882
|
+
}] } });
|
883
|
+
|
884
|
+
function provideTheme() {
|
885
|
+
return [
|
886
|
+
{
|
887
|
+
provide: ThemeService,
|
888
|
+
useClass: ThemeService,
|
889
|
+
},
|
890
|
+
];
|
891
|
+
}
|
892
|
+
|
865
893
|
class HeaderComponent {
|
866
894
|
title = inject(DocumentationStore).getTitle();
|
867
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
868
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
895
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
896
|
+
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
897
|
}
|
870
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
898
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HeaderComponent, decorators: [{
|
871
899
|
type: Component,
|
872
900
|
args: [{ selector: 'f-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
873
901
|
HamburgerButtonComponent,
|
874
902
|
FSocialLinksComponent,
|
875
|
-
|
903
|
+
ThemeButtonComponent,
|
876
904
|
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
|
905
|
+
], 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
906
|
}] });
|
879
907
|
|
880
908
|
class NavigationGroupComponent {
|
@@ -883,10 +911,10 @@ class NavigationGroupComponent {
|
|
883
911
|
toggle() {
|
884
912
|
this.isCollapsed.set(!this.isCollapsed());
|
885
913
|
}
|
886
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
887
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
914
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
915
|
+
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
916
|
}
|
889
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationGroupComponent, decorators: [{
|
890
918
|
type: Component,
|
891
919
|
args: [{ selector: 'f-navigation-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
892
920
|
'[class.collapsed]': 'isCollapsed()',
|
@@ -895,10 +923,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
895
923
|
}] });
|
896
924
|
|
897
925
|
class FNavigationItemComponent {
|
898
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
899
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
926
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
927
|
+
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
928
|
}
|
901
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
929
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FNavigationItemComponent, decorators: [{
|
902
930
|
type: Component,
|
903
931
|
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
932
|
}] });
|
@@ -911,7 +939,7 @@ class NavigationPanelComponent {
|
|
911
939
|
_router = inject(Router);
|
912
940
|
_changeDetectorRef = inject(ChangeDetectorRef);
|
913
941
|
_destroyRef = inject(DestroyRef);
|
914
|
-
|
942
|
+
_window = inject(WINDOW);
|
915
943
|
value;
|
916
944
|
navigation = this._provider.getNavigation();
|
917
945
|
title = this._provider.getTitle();
|
@@ -960,12 +988,12 @@ class NavigationPanelComponent {
|
|
960
988
|
});
|
961
989
|
}
|
962
990
|
_onDocumentClick(event) {
|
963
|
-
new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this.
|
991
|
+
new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._window, this._router));
|
964
992
|
}
|
965
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
966
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
993
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
994
|
+
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
995
|
}
|
968
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
996
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NavigationPanelComponent, decorators: [{
|
969
997
|
type: Component,
|
970
998
|
args: [{ selector: 'f-navigation-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
971
999
|
FNavigationItemComponent,
|
@@ -989,10 +1017,10 @@ class FCodeGroupTabsComponent {
|
|
989
1017
|
this.index.set(index);
|
990
1018
|
this.tabIndex.emit(index);
|
991
1019
|
}
|
992
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
993
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
1020
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
1021
|
+
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
1022
|
}
|
995
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1023
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupTabsComponent, decorators: [{
|
996
1024
|
type: Component,
|
997
1025
|
args: [{ selector: 'f-code-group-tabs', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
998
1026
|
class: 'f-code-group-tabs',
|
@@ -1001,9 +1029,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
1001
1029
|
}] });
|
1002
1030
|
|
1003
1031
|
class MarkCodeFocusedBlocksPostProcessor {
|
1004
|
-
|
1005
|
-
constructor(
|
1006
|
-
this.
|
1032
|
+
_window;
|
1033
|
+
constructor(_window) {
|
1034
|
+
this._window = _window;
|
1007
1035
|
}
|
1008
1036
|
handle(element) {
|
1009
1037
|
const html = element.innerHTML;
|
@@ -1033,7 +1061,7 @@ class MarkCodeFocusedBlocksPostProcessor {
|
|
1033
1061
|
}
|
1034
1062
|
}
|
1035
1063
|
_getElementColor(element) {
|
1036
|
-
return this.
|
1064
|
+
return this._window.getComputedStyle(element).color;
|
1037
1065
|
}
|
1038
1066
|
_createRgbaString(color, opacity, isRgb = false) {
|
1039
1067
|
const [r, g, b, a] = this._getRgbValues(color);
|
@@ -1328,10 +1356,11 @@ const UNIVERSAL_THEME = {
|
|
1328
1356
|
};
|
1329
1357
|
|
1330
1358
|
class HighlightService {
|
1331
|
-
|
1359
|
+
_isBrowser = inject(IS_BROWSER_PLATFORM);
|
1360
|
+
_window = inject(WINDOW);
|
1332
1361
|
_highlighter$ = defer(() => from(createHighlighter({ themes: [UNIVERSAL_THEME], langs: LANGUAGES }))).pipe(shareReplay(1));
|
1333
1362
|
highlight(element, lang, content) {
|
1334
|
-
if (!this.
|
1363
|
+
if (!this._isBrowser) {
|
1335
1364
|
console.warn('[HighlightService] Skipping highlight on server.');
|
1336
1365
|
return of(element);
|
1337
1366
|
}
|
@@ -1357,12 +1386,12 @@ class HighlightService {
|
|
1357
1386
|
return code.replace(/\|\:\|([\s\S]*?)\|\:\|/g, (_, p1) => `ƒƒƒ${p1}¢¢¢`);
|
1358
1387
|
}
|
1359
1388
|
_postProcess(element) {
|
1360
|
-
return of(element).pipe(switchMap((x) => new MarkCodeFocusedBlocksPostProcessor(this.
|
1389
|
+
return of(element).pipe(switchMap((x) => new MarkCodeFocusedBlocksPostProcessor(this._window).handle(x)));
|
1361
1390
|
}
|
1362
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1363
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
1391
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
1392
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightService, providedIn: 'root' });
|
1364
1393
|
}
|
1365
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1394
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightService, decorators: [{
|
1366
1395
|
type: Injectable,
|
1367
1396
|
args: [{
|
1368
1397
|
providedIn: 'root',
|
@@ -1381,10 +1410,10 @@ class HighlightComponent {
|
|
1381
1410
|
.pipe(take(1), takeUntilDestroyed(this._destroyRef)).subscribe();
|
1382
1411
|
});
|
1383
1412
|
}
|
1384
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1385
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.
|
1413
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
1414
|
+
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
1415
|
}
|
1387
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HighlightComponent, decorators: [{
|
1388
1417
|
type: Component,
|
1389
1418
|
args: [{
|
1390
1419
|
selector: 'highlight',
|
@@ -1467,10 +1496,10 @@ class FInsertComponentDirective {
|
|
1467
1496
|
this._componentRef?.destroy();
|
1468
1497
|
this._viewContainerRef.clear();
|
1469
1498
|
}
|
1470
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1471
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.
|
1499
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FInsertComponentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
1500
|
+
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
1501
|
}
|
1473
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1502
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FInsertComponentDirective, decorators: [{
|
1474
1503
|
type: Directive,
|
1475
1504
|
args: [{
|
1476
1505
|
standalone: true,
|
@@ -1543,10 +1572,10 @@ class FExampleViewComponent {
|
|
1543
1572
|
}
|
1544
1573
|
}).catch(error => this._logComponentLoadingError(tag, error));
|
1545
1574
|
}
|
1546
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1547
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
1575
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FExampleViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
1576
|
+
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
1577
|
}
|
1549
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1578
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FExampleViewComponent, decorators: [{
|
1550
1579
|
type: Component,
|
1551
1580
|
args: [{ selector: 'f-example-view', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
1552
1581
|
FInsertComponentDirective,
|
@@ -1599,10 +1628,10 @@ class FCodeViewComponent {
|
|
1599
1628
|
_copyContentToClipboard(content) {
|
1600
1629
|
copyToClipboard(content).pipe(take(1), takeUntilDestroyed(this._destroyRef)).subscribe(() => this._popoverService.show('Copied!'));
|
1601
1630
|
}
|
1602
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1603
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
1631
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
1632
|
+
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
1633
|
}
|
1605
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1634
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeViewComponent, decorators: [{
|
1606
1635
|
type: Component,
|
1607
1636
|
args: [{ selector: 'f-code-view', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
1608
1637
|
class: 'f-code-view',
|
@@ -1680,10 +1709,10 @@ class MarkdownService {
|
|
1680
1709
|
_cleanupWasteParagraphFromPreviewGroup(html) {
|
1681
1710
|
return html.replace(/<p>(\[[^\]]+\](\s*\[[^\]]+\])*)<\/p>/g, '');
|
1682
1711
|
}
|
1683
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1684
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
1712
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
1713
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownService });
|
1685
1714
|
}
|
1686
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1715
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownService, decorators: [{
|
1687
1716
|
type: Injectable
|
1688
1717
|
}], ctorParameters: () => [] });
|
1689
1718
|
|
@@ -1908,10 +1937,10 @@ class FCodeGroupComponent {
|
|
1908
1937
|
onTabClick(index) {
|
1909
1938
|
this.index.set(index);
|
1910
1939
|
}
|
1911
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1912
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
1940
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
1941
|
+
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
1942
|
}
|
1914
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
1943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FCodeGroupComponent, decorators: [{
|
1915
1944
|
type: Component,
|
1916
1945
|
args: [{ selector: 'f-code-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
1917
1946
|
FCodeGroupTabsComponent,
|
@@ -1975,10 +2004,10 @@ class GetPreviousNextPageNavigationRequest {
|
|
1975
2004
|
}
|
1976
2005
|
|
1977
2006
|
class FFooterEditInformationComponent {
|
1978
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1979
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
2007
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditInformationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2008
|
+
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
2009
|
}
|
1981
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2010
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditInformationComponent, decorators: [{
|
1982
2011
|
type: Component,
|
1983
2012
|
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
2013
|
}] });
|
@@ -1986,10 +2015,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
1986
2015
|
class FFooterNavigationButtonComponent {
|
1987
2016
|
description;
|
1988
2017
|
link;
|
1989
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
1990
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
2018
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2019
|
+
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
2020
|
}
|
1992
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2021
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationButtonComponent, decorators: [{
|
1993
2022
|
type: Component,
|
1994
2023
|
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
2024
|
}], propDecorators: { description: [{
|
@@ -2001,19 +2030,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
2001
2030
|
}] } });
|
2002
2031
|
|
2003
2032
|
class FFooterNavigationComponent {
|
2004
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2005
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
2033
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2034
|
+
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
2035
|
}
|
2007
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2036
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterNavigationComponent, decorators: [{
|
2008
2037
|
type: Component,
|
2009
2038
|
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
2039
|
}] });
|
2011
2040
|
|
2012
2041
|
class FFooterEditLinkComponent {
|
2013
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2014
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
2042
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2043
|
+
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
2044
|
}
|
2016
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2045
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FFooterEditLinkComponent, decorators: [{
|
2017
2046
|
type: Component,
|
2018
2047
|
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
2048
|
}] });
|
@@ -2024,7 +2053,7 @@ class FMarkdownFooterComponent {
|
|
2024
2053
|
_activatedRoute = inject(ActivatedRoute);
|
2025
2054
|
_changeDetectorRef = inject(ChangeDetectorRef);
|
2026
2055
|
_destroyRef = inject(DestroyRef);
|
2027
|
-
|
2056
|
+
_window = inject(WINDOW);
|
2028
2057
|
navigation = {};
|
2029
2058
|
editLink;
|
2030
2059
|
previousLink;
|
@@ -2065,12 +2094,12 @@ class FMarkdownFooterComponent {
|
|
2065
2094
|
return this._activatedRoute.snapshot.url.map((x) => x.path).join('/');
|
2066
2095
|
}
|
2067
2096
|
_onDocumentClick(event) {
|
2068
|
-
new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this.
|
2097
|
+
new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._window, this._router));
|
2069
2098
|
}
|
2070
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2071
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2099
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2100
|
+
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
2101
|
}
|
2073
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownFooterComponent, decorators: [{
|
2074
2103
|
type: Component,
|
2075
2104
|
args: [{ selector: 'footer [f-markdown-footer]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
2076
2105
|
FFooterNavigationComponent,
|
@@ -2090,7 +2119,7 @@ class FPreviewComponent extends FPreviewBase {
|
|
2090
2119
|
_elementReference = inject(ElementRef);
|
2091
2120
|
_fEnvironment = inject(DocumentationStore);
|
2092
2121
|
_fPreviewGroupService = inject(FPreviewGroupService);
|
2093
|
-
|
2122
|
+
_themeService = inject(ThemeService, { optional: true });
|
2094
2123
|
_router = inject(Router);
|
2095
2124
|
_destroyRef = inject(DestroyRef);
|
2096
2125
|
item;
|
@@ -2113,7 +2142,7 @@ class FPreviewComponent extends FPreviewBase {
|
|
2113
2142
|
this._subscribeToThemeChanges();
|
2114
2143
|
}
|
2115
2144
|
_subscribeToThemeChanges() {
|
2116
|
-
this.
|
2145
|
+
this._themeService?.theme$.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => this._updateTheme());
|
2117
2146
|
}
|
2118
2147
|
ngOnInit() {
|
2119
2148
|
this._fPreviewGroupService.add(this);
|
@@ -2125,7 +2154,7 @@ class FPreviewComponent extends FPreviewBase {
|
|
2125
2154
|
return group.items.find((x) => x.link === this.item);
|
2126
2155
|
}
|
2127
2156
|
_updateTheme() {
|
2128
|
-
this.src.set(this.
|
2157
|
+
this.src.set(this._themeService?.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image);
|
2129
2158
|
if (!this.src()) {
|
2130
2159
|
this.src.set(this.viewModel?.image);
|
2131
2160
|
}
|
@@ -2145,10 +2174,10 @@ class FPreviewComponent extends FPreviewBase {
|
|
2145
2174
|
ngOnDestroy() {
|
2146
2175
|
this._fPreviewGroupService.remove(this);
|
2147
2176
|
}
|
2148
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2149
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2177
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
2178
|
+
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
2179
|
}
|
2151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewComponent, decorators: [{
|
2152
2181
|
type: Component,
|
2153
2182
|
args: [{ selector: 'a[f-preview]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
2154
2183
|
'[attr.href]': 'url',
|
@@ -2191,10 +2220,10 @@ class FPreviewGroupFiltersComponent {
|
|
2191
2220
|
this.isSortByDateChecked.set(event);
|
2192
2221
|
this._fPreviewGroupService.sortByDate(event);
|
2193
2222
|
}
|
2194
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2195
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2223
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2224
|
+
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
2225
|
}
|
2197
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupFiltersComponent, decorators: [{
|
2198
2227
|
type: Component,
|
2199
2228
|
args: [{ selector: 'div[f-preview-group-filters]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
2200
2229
|
FCheckboxComponent,
|
@@ -2267,19 +2296,19 @@ class FPreviewGroupService {
|
|
2267
2296
|
x.hostElement.style.display = 'block';
|
2268
2297
|
});
|
2269
2298
|
}
|
2270
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2271
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
2299
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
2300
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupService });
|
2272
2301
|
}
|
2273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FPreviewGroupService, decorators: [{
|
2274
2303
|
type: Injectable
|
2275
2304
|
}] });
|
2276
2305
|
|
2277
2306
|
class TableOfContentItemsComponent {
|
2278
2307
|
items = input.required();
|
2279
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2280
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2308
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2309
|
+
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
2310
|
}
|
2282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2311
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentItemsComponent, decorators: [{
|
2283
2312
|
type: Component,
|
2284
2313
|
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
2314
|
}] });
|
@@ -2334,12 +2363,14 @@ class GetAbsoluteTopToContainerRequest {
|
|
2334
2363
|
|
2335
2364
|
class CalculateHashFromScrollPositionAndActivateTocHandler {
|
2336
2365
|
_injector;
|
2337
|
-
|
2366
|
+
_docElement;
|
2367
|
+
_window;
|
2338
2368
|
_provider;
|
2339
2369
|
_scrollableContainer;
|
2340
2370
|
constructor(_injector) {
|
2341
2371
|
this._injector = _injector;
|
2342
|
-
this.
|
2372
|
+
this._docElement = _injector.get(DOCUMENT_ELEMENT);
|
2373
|
+
this._window = _injector.get(WINDOW);
|
2343
2374
|
this._provider = _injector.get(DocumentationStore);
|
2344
2375
|
this._scrollableContainer = _injector.get(SCROLLABLE_CONTAINER);
|
2345
2376
|
}
|
@@ -2361,8 +2392,8 @@ class CalculateHashFromScrollPositionAndActivateTocHandler {
|
|
2361
2392
|
return this._scrollableContainer.htmlElement.scrollTop + this._getHeaderHeight();
|
2362
2393
|
}
|
2363
2394
|
_getHeaderHeight() {
|
2364
|
-
return parseInt(this.
|
2365
|
-
.getComputedStyle(this.
|
2395
|
+
return parseInt(this._window
|
2396
|
+
.getComputedStyle(this._docElement)
|
2366
2397
|
.getPropertyValue('--header-height'), 10);
|
2367
2398
|
}
|
2368
2399
|
_calculateElementsTopPositions() {
|
@@ -2593,9 +2624,9 @@ const SCROLLABLE_CONTAINER = new InjectionToken('SCROLLABLE_CONTAINER');
|
|
2593
2624
|
|
2594
2625
|
class TableOfContentComponent {
|
2595
2626
|
_elementRef = inject((ElementRef));
|
2596
|
-
_browser = inject(BrowserService);
|
2597
2627
|
_provider = inject(DocumentationStore);
|
2598
2628
|
_injector = inject(Injector);
|
2629
|
+
_window = inject(WINDOW);
|
2599
2630
|
tocData = computed(() => {
|
2600
2631
|
return this._provider.tocData();
|
2601
2632
|
});
|
@@ -2609,7 +2640,7 @@ class TableOfContentComponent {
|
|
2609
2640
|
return (activeIndex + 1) * itemHeight + itemHeight / 4;
|
2610
2641
|
}
|
2611
2642
|
_getComputedStyle(element) {
|
2612
|
-
return this.
|
2643
|
+
return this._window.getComputedStyle(element);
|
2613
2644
|
}
|
2614
2645
|
_onDocumentClick(event) {
|
2615
2646
|
const target = event.target;
|
@@ -2622,10 +2653,10 @@ class TableOfContentComponent {
|
|
2622
2653
|
new ActivateTocByHashHandler(this._injector).handle(new ActivateTocByHashRequest(hash));
|
2623
2654
|
new ScrollToElementInContainerHandler(this._injector).handle(new ScrollToElementInContainerRequest(hash));
|
2624
2655
|
}
|
2625
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2626
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2656
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2657
|
+
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
2658
|
}
|
2628
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2659
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TableOfContentComponent, decorators: [{
|
2629
2660
|
type: Component,
|
2630
2661
|
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
2662
|
}], propDecorators: { _onDocumentClick: [{
|
@@ -2645,15 +2676,15 @@ class ScrollableContainerComponent {
|
|
2645
2676
|
_calculateHashAndActivate() {
|
2646
2677
|
new CalculateHashFromScrollPositionAndActivateTocHandler(this._injector).handle();
|
2647
2678
|
}
|
2648
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2649
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
2679
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ScrollableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2680
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: ScrollableContainerComponent, isStandalone: true, selector: "f-scrollable-container", providers: [
|
2650
2681
|
{
|
2651
2682
|
provide: SCROLLABLE_CONTAINER,
|
2652
2683
|
useExisting: forwardRef(() => ScrollableContainerComponent),
|
2653
2684
|
},
|
2654
2685
|
], 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
2686
|
}
|
2656
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2687
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ScrollableContainerComponent, decorators: [{
|
2657
2688
|
type: Component,
|
2658
2689
|
args: [{ selector: 'f-scrollable-container', standalone: true, providers: [
|
2659
2690
|
{
|
@@ -2672,7 +2703,8 @@ class FMarkdownRendererComponent {
|
|
2672
2703
|
_activatedRoute = inject(ActivatedRoute);
|
2673
2704
|
_destroyRef = inject(DestroyRef);
|
2674
2705
|
_injector = inject(Injector);
|
2675
|
-
|
2706
|
+
_isBrowser = inject(IS_BROWSER_PLATFORM);
|
2707
|
+
_window = inject(WINDOW);
|
2676
2708
|
_markdown = inject(MarkdownService);
|
2677
2709
|
_provider = inject(DocumentationStore);
|
2678
2710
|
get _markdownPath() {
|
@@ -2693,7 +2725,7 @@ class FMarkdownRendererComponent {
|
|
2693
2725
|
_updateRenderDependencies() {
|
2694
2726
|
effect(() => {
|
2695
2727
|
const html = this.value();
|
2696
|
-
if (html && this.
|
2728
|
+
if (html && this._isBrowser) {
|
2697
2729
|
untracked(() => {
|
2698
2730
|
raf(() => {
|
2699
2731
|
new RenderDynamicComponentsHandler(this._injector).handle(new RenderDynamicComponentsRequest(this._hostElement));
|
@@ -2704,17 +2736,17 @@ class FMarkdownRendererComponent {
|
|
2704
2736
|
}, { injector: this._injector });
|
2705
2737
|
}
|
2706
2738
|
_onDocumentClick(event) {
|
2707
|
-
new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this.
|
2739
|
+
new HandleNavigationLinksHandler().handle(new HandleNavigationLinksRequest(event, this._window, this._router));
|
2708
2740
|
}
|
2709
2741
|
ngOnDestroy() {
|
2710
2742
|
this._provider.disposeDComponents();
|
2711
2743
|
}
|
2712
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2713
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2744
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2745
|
+
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
2746
|
MarkdownService,
|
2715
2747
|
], 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
2748
|
}
|
2717
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2749
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FMarkdownRendererComponent, decorators: [{
|
2718
2750
|
type: Component,
|
2719
2751
|
args: [{ selector: 'f-markdown-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
2720
2752
|
MarkdownService,
|
@@ -2730,10 +2762,10 @@ const raf = typeof requestAnimationFrame === 'function'
|
|
2730
2762
|
: (fn) => setTimeout(fn);
|
2731
2763
|
|
2732
2764
|
class MarkdownContainerComponent {
|
2733
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2734
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
2765
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2766
|
+
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
2767
|
}
|
2736
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
2768
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MarkdownContainerComponent, decorators: [{
|
2737
2769
|
type: Component,
|
2738
2770
|
args: [{ selector: 'f-markdown-container', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
2739
2771
|
FMarkdownRendererComponent,
|
@@ -2792,7 +2824,15 @@ class DocumentationRootComponent {
|
|
2792
2824
|
popover = inject(PopoverService).message;
|
2793
2825
|
_metaService = inject(FMetaService);
|
2794
2826
|
_destroyRef = inject(DestroyRef);
|
2827
|
+
_gTagService = inject(GTagService, { optional: true });
|
2828
|
+
_themeService = inject(ThemeService, { optional: true });
|
2829
|
+
isBrowser = inject(IS_BROWSER_PLATFORM);
|
2795
2830
|
ngOnInit() {
|
2831
|
+
if (!this.isBrowser) {
|
2832
|
+
return;
|
2833
|
+
}
|
2834
|
+
this._themeService?.initialize();
|
2835
|
+
this._gTagService?.initialize();
|
2796
2836
|
this._metaService.changes().pipe(takeUntilDestroyed(this._destroyRef))
|
2797
2837
|
.subscribe();
|
2798
2838
|
}
|
@@ -2803,8 +2843,8 @@ class DocumentationRootComponent {
|
|
2803
2843
|
this._metaService.dispose();
|
2804
2844
|
// Cleanup logic if needed
|
2805
2845
|
}
|
2806
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
2807
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
2846
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DocumentationRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2847
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: DocumentationRootComponent, isStandalone: true, selector: "documentation-root", providers: [
|
2808
2848
|
DocumentationStore,
|
2809
2849
|
FMetaService,
|
2810
2850
|
{
|
@@ -2824,37 +2864,38 @@ class DocumentationRootComponent {
|
|
2824
2864
|
provide: TOGGLE_NAVIGATION_COMPONENT,
|
2825
2865
|
useExisting: DocumentationRootComponent,
|
2826
2866
|
},
|
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.ɵɵ
|
2830
|
-
|
2831
|
-
|
2832
|
-
|
2833
|
-
|
2834
|
-
|
2835
|
-
|
2836
|
-
|
2837
|
-
|
2838
|
-
|
2839
|
-
|
2840
|
-
|
2841
|
-
|
2842
|
-
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2848
|
-
|
2849
|
-
|
2850
|
-
|
2851
|
-
|
2852
|
-
|
2853
|
-
|
2854
|
-
|
2855
|
-
|
2856
|
-
|
2857
|
-
|
2867
|
+
], 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-BZZxqp3j.mjs').then(m => m.CookiePopupComponent)]] });
|
2868
|
+
}
|
2869
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.2.11", ngImport: i0, type: DocumentationRootComponent, resolveDeferredDeps: () => [import('./foblex-m-render-cookie-popup.component-BZZxqp3j.mjs').then(m => m.CookiePopupComponent)], resolveMetadata: CookiePopupComponent => ({ decorators: [{
|
2870
|
+
type: Component,
|
2871
|
+
args: [{ selector: 'documentation-root', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
2872
|
+
DocumentationStore,
|
2873
|
+
FMetaService,
|
2874
|
+
{
|
2875
|
+
provide: F_PREVIEW_NAVIGATION_PROVIDER,
|
2876
|
+
useExisting: DocumentationStore,
|
2877
|
+
},
|
2878
|
+
{
|
2879
|
+
provide: F_SOCIAL_LINKS_PROVIDER,
|
2880
|
+
useExisting: DocumentationStore,
|
2881
|
+
},
|
2882
|
+
{
|
2883
|
+
provide: HEADER_CONFIGURATION_STORE,
|
2884
|
+
useExisting: DocumentationStore,
|
2885
|
+
},
|
2886
|
+
FPreviewGroupService,
|
2887
|
+
{
|
2888
|
+
provide: TOGGLE_NAVIGATION_COMPONENT,
|
2889
|
+
useExisting: DocumentationRootComponent,
|
2890
|
+
},
|
2891
|
+
], imports: [
|
2892
|
+
NavigationPanelComponent,
|
2893
|
+
ScrollableContainerComponent,
|
2894
|
+
RouterOutlet,
|
2895
|
+
HeaderComponent,
|
2896
|
+
CookiePopupComponent,
|
2897
|
+
], 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"] }]
|
2898
|
+
}], ctorParameters: null, propDecorators: null }) });
|
2858
2899
|
|
2859
2900
|
const DOCUMENTATION_ROUTES = [
|
2860
2901
|
{
|
@@ -2883,11 +2924,9 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
2883
2924
|
DocumentationStore: DocumentationStore,
|
2884
2925
|
get EMarkdownContainerType () { return EMarkdownContainerType; },
|
2885
2926
|
get EParsedContainerType () { return EParsedContainerType; },
|
2886
|
-
FAnalyticsService: FAnalyticsService,
|
2887
2927
|
FCodeGroupComponent: FCodeGroupComponent,
|
2888
2928
|
FCodeGroupTabsComponent: FCodeGroupTabsComponent,
|
2889
2929
|
FCodeViewComponent: FCodeViewComponent,
|
2890
|
-
FCookiePopupComponent: FCookiePopupComponent,
|
2891
2930
|
FExampleViewComponent: FExampleViewComponent,
|
2892
2931
|
FFooterEditInformationComponent: FFooterEditInformationComponent,
|
2893
2932
|
FFooterNavigationButtonComponent: FFooterNavigationButtonComponent,
|
@@ -2901,7 +2940,6 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
2901
2940
|
FPreviewComponent: FPreviewComponent,
|
2902
2941
|
FPreviewGroupFiltersComponent: FPreviewGroupFiltersComponent,
|
2903
2942
|
FPreviewGroupService: FPreviewGroupService,
|
2904
|
-
F_ACCEPT_COOKIES_KEY: F_ACCEPT_COOKIES_KEY,
|
2905
2943
|
F_PREVIEW_NAVIGATION_PROVIDER: F_PREVIEW_NAVIGATION_PROVIDER,
|
2906
2944
|
GetAbsoluteTopToContainerHandler: GetAbsoluteTopToContainerHandler,
|
2907
2945
|
GetAbsoluteTopToContainerRequest: GetAbsoluteTopToContainerRequest,
|
@@ -2955,8 +2993,7 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
2955
2993
|
provideDocumentationMeta: provideDocumentationMeta,
|
2956
2994
|
provideFooterNavigation: provideFooterNavigation,
|
2957
2995
|
provideNavigation: provideNavigation,
|
2958
|
-
provideTocData: provideTocData
|
2959
|
-
setCookieConsent: setCookieConsent
|
2996
|
+
provideTocData: provideTocData
|
2960
2997
|
});
|
2961
2998
|
|
2962
2999
|
function provideBackground(background) {
|
@@ -3035,19 +3072,19 @@ class HomeStore {
|
|
3035
3072
|
getHeader() {
|
3036
3073
|
return this._configuration.header;
|
3037
3074
|
}
|
3038
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3039
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
3075
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
3076
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeStore });
|
3040
3077
|
}
|
3041
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3078
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeStore, decorators: [{
|
3042
3079
|
type: Injectable
|
3043
3080
|
}] });
|
3044
3081
|
|
3045
3082
|
class FHomePageButtonsRowComponent {
|
3046
3083
|
viewModel = inject(HomeStore).getButtons();
|
3047
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3048
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
3084
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageButtonsRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3085
|
+
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
3086
|
}
|
3050
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3087
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageButtonsRowComponent, decorators: [{
|
3051
3088
|
type: Component,
|
3052
3089
|
args: [{ selector: 'f-home-page-buttons-row', standalone: true, imports: [
|
3053
3090
|
RouterLink,
|
@@ -3058,10 +3095,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
3058
3095
|
|
3059
3096
|
class FHomePageFeaturesComponent {
|
3060
3097
|
viewModel = inject(HomeStore).getFeatures();
|
3061
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3062
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
3098
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFeaturesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3099
|
+
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
3100
|
}
|
3064
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFeaturesComponent, decorators: [{
|
3065
3102
|
type: Component,
|
3066
3103
|
args: [{ selector: 'f-home-page-features', standalone: true, host: {
|
3067
3104
|
'[class.display-none]': '!viewModel.length',
|
@@ -3070,10 +3107,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
3070
3107
|
|
3071
3108
|
class FHomePageFooterComponent {
|
3072
3109
|
viewModel = inject(HomeStore).getFooter();
|
3073
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3074
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
3110
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3111
|
+
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
3112
|
}
|
3076
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageFooterComponent, decorators: [{
|
3077
3114
|
type: Component,
|
3078
3115
|
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
3116
|
}] });
|
@@ -3081,22 +3118,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
3081
3118
|
class FHomePageHeaderComponent {
|
3082
3119
|
logo = inject(HomeStore).getLogo();
|
3083
3120
|
title = inject(HomeStore).getTitle();
|
3084
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3085
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
3121
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3122
|
+
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=\"/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 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
3123
|
}
|
3087
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeaderComponent, decorators: [{
|
3088
3125
|
type: Component,
|
3089
3126
|
args: [{ selector: 'header[f-home-page-header]', standalone: true, imports: [
|
3090
|
-
|
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
|
3127
|
+
ThemeButtonComponent,
|
3128
|
+
], 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 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
3129
|
}] });
|
3093
3130
|
|
3094
3131
|
class FHomePageHeroComponent {
|
3095
3132
|
viewModel = inject(HomeStore).getHero();
|
3096
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3097
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
3133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3134
|
+
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
3135
|
}
|
3099
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageHeroComponent, decorators: [{
|
3100
3137
|
type: Component,
|
3101
3138
|
args: [{ selector: 'f-home-page-hero', standalone: true, imports: [
|
3102
3139
|
FHomePageButtonsRowComponent,
|
@@ -3105,10 +3142,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
3105
3142
|
|
3106
3143
|
class FHomePageMembershipsComponent {
|
3107
3144
|
viewModel = inject(HomeStore).getMemberships();
|
3108
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3109
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
3145
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageMembershipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3146
|
+
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
3147
|
}
|
3111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
3148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FHomePageMembershipsComponent, decorators: [{
|
3112
3149
|
type: Component,
|
3113
3150
|
args: [{ selector: 'f-home-page-memberships', standalone: true, host: {
|
3114
3151
|
'[class.display-none]': '!viewModel.length',
|
@@ -3117,8 +3154,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
3117
3154
|
|
3118
3155
|
class HomeRootComponent {
|
3119
3156
|
_environment = inject(HomeStore);
|
3157
|
+
_gTagService = inject(GTagService, { optional: true });
|
3158
|
+
_themeService = inject(ThemeService, { optional: true });
|
3159
|
+
isBrowser = inject(IS_BROWSER_PLATFORM);
|
3120
3160
|
_backgroundContainer;
|
3121
3161
|
_heroImageContainer;
|
3162
|
+
ngOnInit() {
|
3163
|
+
if (!this.isBrowser) {
|
3164
|
+
return;
|
3165
|
+
}
|
3166
|
+
this._themeService?.initialize();
|
3167
|
+
this._gTagService?.initialize();
|
3168
|
+
}
|
3122
3169
|
ngAfterViewInit() {
|
3123
3170
|
this._renderImageComponent(this._environment.getImageComponent());
|
3124
3171
|
this._renderBackgroundComponent(this._environment.getBackgroundComponent());
|
@@ -3142,37 +3189,38 @@ class HomeRootComponent {
|
|
3142
3189
|
_requestComponentRedraw(componentRef) {
|
3143
3190
|
componentRef.changeDetectorRef.markForCheck();
|
3144
3191
|
}
|
3145
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
3146
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
3192
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HomeRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
3193
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: HomeRootComponent, isStandalone: true, selector: "home-root", providers: [
|
3147
3194
|
HomeStore,
|
3148
3195
|
{
|
3149
3196
|
provide: HEADER_CONFIGURATION_STORE,
|
3150
3197
|
useExisting: HomeStore,
|
3151
3198
|
},
|
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.ɵɵ
|
3155
|
-
|
3156
|
-
|
3157
|
-
|
3158
|
-
|
3159
|
-
|
3160
|
-
|
3161
|
-
|
3162
|
-
|
3163
|
-
|
3164
|
-
|
3165
|
-
|
3166
|
-
|
3167
|
-
|
3168
|
-
|
3169
|
-
|
3170
|
-
|
3171
|
-
|
3172
|
-
|
3173
|
-
|
3174
|
-
|
3175
|
-
|
3199
|
+
], 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-BZZxqp3j.mjs').then(m => m.CookiePopupComponent)]] });
|
3200
|
+
}
|
3201
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.2.11", ngImport: i0, type: HomeRootComponent, resolveDeferredDeps: () => [import('./foblex-m-render-cookie-popup.component-BZZxqp3j.mjs').then(m => m.CookiePopupComponent)], resolveMetadata: CookiePopupComponent => ({ decorators: [{
|
3202
|
+
type: Component,
|
3203
|
+
args: [{ selector: 'home-root', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
3204
|
+
HomeStore,
|
3205
|
+
{
|
3206
|
+
provide: HEADER_CONFIGURATION_STORE,
|
3207
|
+
useExisting: HomeStore,
|
3208
|
+
},
|
3209
|
+
], imports: [
|
3210
|
+
FHomePageFooterComponent,
|
3211
|
+
FHomePageHeaderComponent,
|
3212
|
+
FHomePageFeaturesComponent,
|
3213
|
+
FHomePageHeroComponent,
|
3214
|
+
FHomePageMembershipsComponent,
|
3215
|
+
CookiePopupComponent,
|
3216
|
+
], 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"] }]
|
3217
|
+
}], ctorParameters: null, propDecorators: { _backgroundContainer: [{
|
3218
|
+
type: ViewChild,
|
3219
|
+
args: ['backgroundContainer', { read: ViewContainerRef }]
|
3220
|
+
}], _heroImageContainer: [{
|
3221
|
+
type: ViewChild,
|
3222
|
+
args: ['heroImageContainer', { read: ViewContainerRef }]
|
3223
|
+
}] } }) });
|
3176
3224
|
|
3177
3225
|
const HOME_ROUTES = [
|
3178
3226
|
{
|
@@ -3206,5 +3254,5 @@ var index = /*#__PURE__*/Object.freeze({
|
|
3206
3254
|
* Generated bundle index. Do not edit.
|
3207
3255
|
*/
|
3208
3256
|
|
3209
|
-
export { ActivateTocByHashHandler, ActivateTocByHashRequest, CalculateHashFromScrollPositionAndActivateTocHandler, CalculateHashFromScrollPositionAndActivateTocRequest, CalculateTableOfContentDataHandler, CalculateTableOfContentDataRequest, DOCUMENTATION_CONFIGURATION, DOCUMENTATION_ROUTES, DocumentationRootComponent, DocumentationStore, DropdownMenuComponent, EMarkdownContainerType, EParsedContainerType,
|
3257
|
+
export { ActivateTocByHashHandler, ActivateTocByHashRequest, CalculateHashFromScrollPositionAndActivateTocHandler, CalculateHashFromScrollPositionAndActivateTocRequest, CalculateTableOfContentDataHandler, CalculateTableOfContentDataRequest, DOCUMENTATION_CONFIGURATION, DOCUMENTATION_ROUTES, DOCUMENT_ELEMENT, 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, HighlightService, HomeRootComponent, HomeStore, IS_BROWSER_PLATFORM, InlineMenuComponent, LANGUAGES, LOCAL_STORAGE, LOCATION, 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, ThemeButtonComponent, ThemeService, WINDOW, coerceComponentHeight, copyToClipboard, 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
3258
|
//# sourceMappingURL=foblex-m-render.mjs.map
|