@foblex/m-render 2.5.4 → 2.5.6
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/assets/styles/_icons.scss +6 -3
- package/assets/styles/_variables.scss +15 -0
- package/assets/styles/styles.scss +6 -0
- package/esm2022/lib/common-components/f-radio-button/f-radio-button.component.mjs +41 -0
- package/esm2022/lib/common-components/index.mjs +2 -1
- package/esm2022/lib/domain/i-environment-service.mjs +2 -3
- package/esm2022/lib/f-documentation/f-documentation.component.mjs +6 -6
- package/esm2022/lib/f-documentation/f-navigation-panel/domain/i-navigation-item.mjs +1 -1
- package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.handler.mjs +6 -3
- package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-preview-group.mjs +6 -2
- package/esm2022/lib/f-documentation/f-preview/f-preview-base.mjs +3 -0
- package/esm2022/lib/f-documentation/f-preview/f-preview.component.mjs +50 -38
- package/esm2022/lib/f-documentation/f-preview-group/f-preview-group.service.mjs +73 -0
- package/esm2022/lib/f-documentation/f-preview-group-filters/f-preview-group-filters.component.mjs +53 -0
- package/esm2022/lib/f-documentation/index.mjs +4 -1
- package/esm2022/lib/f-home-page/domain/i-home-page-environment.mjs +1 -1
- package/esm2022/lib/f-home-page/domain/i-home-page-hero.mjs +1 -1
- package/esm2022/lib/f-home-page/domain/i-home-page-link.mjs +1 -1
- package/esm2022/lib/f-home-page/domain/i-home-page-membership.mjs +2 -0
- package/esm2022/lib/f-home-page/domain/index.mjs +2 -1
- package/esm2022/lib/f-home-page/f-home-page-environment.service.mjs +16 -24
- package/esm2022/lib/f-home-page/f-home-page-features/f-home-page-features.component.mjs +5 -3
- package/esm2022/lib/f-home-page/f-home-page-header/f-home-page-header.component.mjs +3 -3
- package/esm2022/lib/f-home-page/f-home-page-hero/f-home-page-buttons-row/f-home-page-buttons-row.component.mjs +5 -3
- package/esm2022/lib/f-home-page/f-home-page-memberships/f-home-page-memberships.component.mjs +15 -0
- package/esm2022/lib/f-home-page/f-home-page.component.mjs +9 -13
- package/esm2022/lib/f-home-page/index.mjs +2 -1
- package/esm2022/lib/index.mjs +1 -1
- package/fesm2022/foblex-m-render.mjs +266 -84
- package/fesm2022/foblex-m-render.mjs.map +1 -1
- package/lib/common-components/f-radio-button/f-radio-button.component.d.ts +16 -0
- package/lib/common-components/index.d.ts +1 -0
- package/lib/domain/i-environment-service.d.ts +0 -2
- package/lib/f-documentation/f-navigation-panel/domain/i-navigation-item.d.ts +1 -0
- package/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-preview-group.d.ts +1 -0
- package/lib/f-documentation/f-preview/f-preview-base.d.ts +5 -0
- package/lib/f-documentation/f-preview/f-preview.component.d.ts +20 -17
- package/lib/f-documentation/f-preview-group/f-preview-group.service.d.ts +17 -0
- package/lib/f-documentation/f-preview-group-filters/f-preview-group-filters.component.d.ts +17 -0
- package/lib/f-documentation/index.d.ts +3 -0
- package/lib/f-home-page/domain/i-home-page-environment.d.ts +4 -2
- package/lib/f-home-page/domain/i-home-page-hero.d.ts +4 -4
- package/lib/f-home-page/domain/i-home-page-link.d.ts +1 -0
- package/lib/f-home-page/domain/i-home-page-membership.d.ts +9 -0
- package/lib/f-home-page/domain/index.d.ts +1 -0
- package/lib/f-home-page/f-home-page-environment.service.d.ts +4 -6
- package/lib/f-home-page/f-home-page-memberships/f-home-page-memberships.component.d.ts +6 -0
- package/lib/f-home-page/f-home-page.component.d.ts +2 -4
- package/lib/f-home-page/index.d.ts +1 -0
- package/package.json +1 -1
@@ -1,8 +1,8 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { EventEmitter, booleanAttribute, Component, ChangeDetectionStrategy, Input, Output, ViewChild, HostListener, inject, Injectable, Inject, signal,
|
2
|
+
import { EventEmitter, booleanAttribute, Component, ChangeDetectionStrategy, Input, Output, ViewChild, HostListener, inject, Injectable, Inject, signal, input, output, viewChild, Optional, ViewChildren, ViewContainerRef, ElementRef, DestroyRef, InjectionToken, ChangeDetectorRef } from '@angular/core';
|
3
3
|
import * as i2 from '@foblex/platform';
|
4
4
|
import { F_LOCAL_STORAGE } from '@foblex/platform';
|
5
|
-
import { DOCUMENT, ɵgetDOM as _getDOM, AsyncPipe, JsonPipe } from '@angular/common';
|
5
|
+
import { DOCUMENT, ɵgetDOM as _getDOM, AsyncPipe, JsonPipe, TitleCasePipe } from '@angular/common';
|
6
6
|
import * as i1 from '@angular/router';
|
7
7
|
import { NavigationEnd, Router, RouterLink, ActivatedRoute, RouterOutlet } from '@angular/router';
|
8
8
|
import { startWith, filter, BehaviorSubject, Subject, of, map, Subscription, from, switchMap, Observable, fromEvent, debounceTime } from 'rxjs';
|
@@ -10,15 +10,15 @@ import { catchError, filter as filter$1, take, tap } from 'rxjs/operators';
|
|
10
10
|
import * as i1$1 from '@angular/common/http';
|
11
11
|
import { HttpClient } from '@angular/common/http';
|
12
12
|
import { deepClone } from '@foblex/utils';
|
13
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
13
14
|
import container from 'markdown-it-container';
|
14
15
|
import MarkdownIt from 'markdown-it';
|
15
16
|
import * as i2$1 from '@angular/platform-browser';
|
16
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
17
17
|
|
18
|
-
let uniqueId = 0;
|
18
|
+
let uniqueId$1 = 0;
|
19
19
|
class FCheckboxComponent {
|
20
20
|
changeDetectorRef;
|
21
|
-
id = `f-checkbox-${uniqueId++}`;
|
21
|
+
id = `f-checkbox-${uniqueId$1++}`;
|
22
22
|
change = new EventEmitter();
|
23
23
|
inputElement;
|
24
24
|
labelElement;
|
@@ -388,6 +388,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
388
388
|
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"] }]
|
389
389
|
}], ctorParameters: () => [] });
|
390
390
|
|
391
|
+
let uniqueId = 0;
|
392
|
+
class FRadioButtonComponent {
|
393
|
+
id = input(`f-radio-button-${uniqueId++}`);
|
394
|
+
change = output();
|
395
|
+
checked = input(false);
|
396
|
+
labelElement = viewChild('label');
|
397
|
+
onInputClick() {
|
398
|
+
this._handleInputClick();
|
399
|
+
}
|
400
|
+
onTouchTargetClick() {
|
401
|
+
this._handleInputClick();
|
402
|
+
}
|
403
|
+
_handleInputClick() {
|
404
|
+
this._emitChangeEvent();
|
405
|
+
}
|
406
|
+
_emitChangeEvent() {
|
407
|
+
this.change.emit(true);
|
408
|
+
}
|
409
|
+
onInteractionEvent(event) {
|
410
|
+
event.stopPropagation();
|
411
|
+
}
|
412
|
+
preventBubblingFromLabel(event) {
|
413
|
+
if (!!event.target && this.labelElement()?.nativeElement.contains(event.target)) {
|
414
|
+
event.stopPropagation();
|
415
|
+
}
|
416
|
+
}
|
417
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FRadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
418
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", 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 });
|
419
|
+
}
|
420
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FRadioButtonComponent, decorators: [{
|
421
|
+
type: Component,
|
422
|
+
args: [{ selector: 'f-radio-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
423
|
+
'[class.f-radio-button-checked]': 'checked()',
|
424
|
+
}, 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"] }]
|
425
|
+
}], propDecorators: { preventBubblingFromLabel: [{
|
426
|
+
type: HostListener,
|
427
|
+
args: ['click', ['$event']]
|
428
|
+
}] } });
|
429
|
+
|
391
430
|
class FStateService {
|
392
431
|
fBrowser;
|
393
432
|
theme = new Subject();
|
@@ -541,8 +580,6 @@ class HandleNavigationLinksRequest {
|
|
541
580
|
}
|
542
581
|
}
|
543
582
|
|
544
|
-
const INTERNAL_ENVIRONMENT_SERVICE = new InjectionToken('INTERNAL_ENVIRONMENT_SERVICE');
|
545
|
-
|
546
583
|
class FBadgeComponent {
|
547
584
|
text = '';
|
548
585
|
type = 'tip';
|
@@ -856,7 +893,10 @@ class HandleDynamicComponentsHandler {
|
|
856
893
|
this.dispose();
|
857
894
|
const components = [
|
858
895
|
{
|
859
|
-
tag: 'f-preview', component: FPreviewComponent
|
896
|
+
tag: 'f-preview', component: FPreviewComponent,
|
897
|
+
},
|
898
|
+
{
|
899
|
+
tag: 'f-preview-group-filters', component: FPreviewGroupFiltersComponent,
|
860
900
|
},
|
861
901
|
...this.fEnvironmentService.getComponents()
|
862
902
|
];
|
@@ -1620,9 +1660,13 @@ class ParsePreviewGroup {
|
|
1620
1660
|
return match ? match[1] : null;
|
1621
1661
|
}
|
1622
1662
|
getGroupsHTML(groups) {
|
1623
|
-
|
1663
|
+
const result = (groups || []).map((x) => {
|
1624
1664
|
return `<h2>${x.text}</h2><div class="f-preview-group">${this.getItemsHTML(x)}</div>`;
|
1625
1665
|
}).join('');
|
1666
|
+
return this._getGroupFiltersHTML() + result;
|
1667
|
+
}
|
1668
|
+
_getGroupFiltersHTML() {
|
1669
|
+
return `<f-preview-group-filters></f-preview-group-filters>`;
|
1626
1670
|
}
|
1627
1671
|
getItemsHTML(group) {
|
1628
1672
|
return group.items.map((item) => {
|
@@ -2338,66 +2382,196 @@ var index$2 = /*#__PURE__*/Object.freeze({
|
|
2338
2382
|
getContent: getContent
|
2339
2383
|
});
|
2340
2384
|
|
2341
|
-
class
|
2342
|
-
|
2343
|
-
|
2344
|
-
|
2345
|
-
|
2346
|
-
|
2385
|
+
class FPreviewBase {
|
2386
|
+
}
|
2387
|
+
|
2388
|
+
class FPreviewGroupService {
|
2389
|
+
_fPreviews = [];
|
2390
|
+
_originalOrder = null;
|
2391
|
+
add(fPreview) {
|
2392
|
+
this._fPreviews.push(fPreview);
|
2393
|
+
}
|
2394
|
+
remove(fPreview) {
|
2395
|
+
this._fPreviews = this._fPreviews.filter(preview => preview !== fPreview);
|
2396
|
+
}
|
2397
|
+
sortByDate(sort) {
|
2398
|
+
if (sort) {
|
2399
|
+
this._applyByDateOrder();
|
2400
|
+
}
|
2401
|
+
else {
|
2402
|
+
this._applyOriginalOrder();
|
2403
|
+
}
|
2404
|
+
}
|
2405
|
+
_setOriginalOrder() {
|
2406
|
+
this._originalOrder = new Map();
|
2407
|
+
this._fPreviews.forEach((x) => {
|
2408
|
+
const parentElement = x.hostElement.parentElement;
|
2409
|
+
if (parentElement) {
|
2410
|
+
const childrenArray = Array.from(parentElement.children);
|
2411
|
+
this._originalOrder.set(parentElement, childrenArray);
|
2412
|
+
}
|
2413
|
+
});
|
2414
|
+
}
|
2415
|
+
_getOrderByDate() {
|
2416
|
+
return this._fPreviews
|
2417
|
+
.slice()
|
2418
|
+
.sort((a, b) => {
|
2419
|
+
const dateA = a.date ? a.date.getTime() : Number.MIN_SAFE_INTEGER;
|
2420
|
+
const dateB = b.date ? b.date.getTime() : Number.MIN_SAFE_INTEGER;
|
2421
|
+
return dateB - dateA;
|
2422
|
+
});
|
2423
|
+
}
|
2424
|
+
_applyByDateOrder() {
|
2425
|
+
this._setOriginalOrder();
|
2426
|
+
this._getOrderByDate().forEach((x) => {
|
2427
|
+
const parent = x.hostElement.parentElement;
|
2428
|
+
parent?.appendChild(x.hostElement);
|
2429
|
+
});
|
2430
|
+
}
|
2431
|
+
_applyOriginalOrder() {
|
2432
|
+
this._originalOrder.forEach((originalChildren, parentElement) => {
|
2433
|
+
originalChildren.forEach(child => parentElement.appendChild(child));
|
2434
|
+
});
|
2435
|
+
}
|
2436
|
+
filterBy(filterKey, _allKey) {
|
2437
|
+
this._resetLastActiveFilter();
|
2438
|
+
if (filterKey === _allKey) {
|
2439
|
+
return;
|
2440
|
+
}
|
2441
|
+
this._fPreviews.forEach((x) => {
|
2442
|
+
if (x.filterKey !== filterKey) {
|
2443
|
+
x.hostElement.style.display = 'none';
|
2444
|
+
}
|
2445
|
+
});
|
2446
|
+
}
|
2447
|
+
_resetLastActiveFilter() {
|
2448
|
+
this._fPreviews.forEach((x) => {
|
2449
|
+
x.hostElement.style.display = 'block';
|
2450
|
+
});
|
2451
|
+
}
|
2452
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
2453
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupService });
|
2454
|
+
}
|
2455
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupService, decorators: [{
|
2456
|
+
type: Injectable
|
2457
|
+
}] });
|
2458
|
+
|
2459
|
+
class FPreviewComponent extends FPreviewBase {
|
2460
|
+
_elementReference = inject(ElementRef);
|
2461
|
+
_fEnvironment = inject(FDocumentationEnvironmentService);
|
2462
|
+
_fPreviewGroupService = inject(FPreviewGroupService);
|
2463
|
+
_fState = inject(FStateService);
|
2464
|
+
_router = inject(Router);
|
2465
|
+
_destroyRef = inject(DestroyRef);
|
2347
2466
|
item;
|
2348
2467
|
group;
|
2349
2468
|
viewModel;
|
2350
|
-
src;
|
2469
|
+
src = signal(undefined);
|
2351
2470
|
url;
|
2352
|
-
|
2353
|
-
this.
|
2354
|
-
|
2355
|
-
|
2356
|
-
this.
|
2471
|
+
get hostElement() {
|
2472
|
+
return this._elementReference.nativeElement;
|
2473
|
+
}
|
2474
|
+
get filterKey() {
|
2475
|
+
return this.viewModel?.badge?.text.toLowerCase();
|
2476
|
+
}
|
2477
|
+
get date() {
|
2478
|
+
return this.viewModel?.date;
|
2357
2479
|
}
|
2358
2480
|
initialize() {
|
2359
|
-
this.viewModel = this.
|
2360
|
-
this.url = this.
|
2361
|
-
this.
|
2481
|
+
this.viewModel = this._getNavigationItem(this._getNavigationGroup());
|
2482
|
+
this.url = this._normalizeLink(this.viewModel.link, this._getUrlPrefix());
|
2483
|
+
this._subscribeToThemeChanges();
|
2484
|
+
}
|
2485
|
+
_subscribeToThemeChanges() {
|
2486
|
+
this._fState.theme$.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => this.updateTheme());
|
2362
2487
|
}
|
2363
|
-
|
2364
|
-
|
2488
|
+
ngOnInit() {
|
2489
|
+
this._fPreviewGroupService.add(this);
|
2490
|
+
}
|
2491
|
+
_getNavigationGroup() {
|
2492
|
+
return this._fEnvironment.getNavigation().find((x) => x.text === this.group);
|
2365
2493
|
}
|
2366
|
-
|
2494
|
+
_getNavigationItem(group) {
|
2367
2495
|
return group.items.find((x) => x.link === this.item);
|
2368
2496
|
}
|
2369
2497
|
updateTheme() {
|
2370
|
-
this.src
|
2371
|
-
if (!this.src) {
|
2372
|
-
this.src
|
2498
|
+
this.src.set(this._fState.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image);
|
2499
|
+
if (!this.src()) {
|
2500
|
+
this.src.set(this.viewModel?.image);
|
2373
2501
|
}
|
2374
|
-
this.changeDetectorRef.markForCheck();
|
2375
2502
|
}
|
2376
|
-
|
2377
|
-
if (!this.
|
2503
|
+
_normalizeLink(link, prefix) {
|
2504
|
+
if (!this._isExternalLink(link)) {
|
2378
2505
|
return link.startsWith('/') ? `${prefix}${link}` : `${prefix}/${link}`;
|
2379
2506
|
}
|
2380
2507
|
return link;
|
2381
2508
|
}
|
2382
|
-
|
2383
|
-
return this.
|
2509
|
+
_getUrlPrefix() {
|
2510
|
+
return this._router.url.substring(0, this._router.url.lastIndexOf('/'));
|
2384
2511
|
}
|
2385
|
-
|
2512
|
+
_isExternalLink(href) {
|
2386
2513
|
return href.startsWith('www') || href.startsWith('http');
|
2387
2514
|
}
|
2388
2515
|
ngOnDestroy() {
|
2389
|
-
this.
|
2516
|
+
this._fPreviewGroupService.remove(this);
|
2390
2517
|
}
|
2391
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewComponent, deps:
|
2392
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FPreviewComponent, isStandalone: true, selector: "a[f-preview]", host: { properties: { "attr.href": "url", "attr.title": "viewModel?.text" } }, ngImport: i0, template: "@if (viewModel) {\n <img [src]=\"src\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">{{ viewModel.text }}</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)}: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)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
2518
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
2519
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 });
|
2393
2520
|
}
|
2394
2521
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewComponent, decorators: [{
|
2395
2522
|
type: Component,
|
2396
2523
|
args: [{ selector: 'a[f-preview]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
2397
2524
|
'[attr.href]': 'url',
|
2398
2525
|
'[attr.title]': 'viewModel?.text',
|
2399
|
-
}, template: "@if (viewModel) {\n <img [src]=\"src\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">{{ viewModel.text }}</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)}: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)}}\n"] }]
|
2400
|
-
}]
|
2526
|
+
}, 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"] }]
|
2527
|
+
}] });
|
2528
|
+
|
2529
|
+
class FPreviewGroupFiltersComponent {
|
2530
|
+
_allKey = 'all';
|
2531
|
+
_fEnvironment = inject(FDocumentationEnvironmentService);
|
2532
|
+
_fPreviewGroupService = inject(FPreviewGroupService);
|
2533
|
+
filters = signal([]);
|
2534
|
+
activeFilter = signal(this._allKey);
|
2535
|
+
isSortByDateChecked = signal(false);
|
2536
|
+
initialize() {
|
2537
|
+
this.filters.set(this._calculateFiltersMap());
|
2538
|
+
}
|
2539
|
+
ngAfterViewInit() {
|
2540
|
+
this.onFilterChange(this._allKey);
|
2541
|
+
}
|
2542
|
+
_calculateFiltersMap() {
|
2543
|
+
const filters = [];
|
2544
|
+
this._fEnvironment.getNavigation().forEach((group) => {
|
2545
|
+
group.items.forEach((item) => {
|
2546
|
+
if (item.badge && !filters.includes(item.badge.text.toLowerCase())) {
|
2547
|
+
filters.push(item.badge.text.toLowerCase());
|
2548
|
+
}
|
2549
|
+
});
|
2550
|
+
});
|
2551
|
+
if (filters.length > 0) {
|
2552
|
+
filters.unshift(this._allKey);
|
2553
|
+
}
|
2554
|
+
return filters;
|
2555
|
+
}
|
2556
|
+
onFilterChange(key) {
|
2557
|
+
this.activeFilter.set(key);
|
2558
|
+
this._fPreviewGroupService.filterBy(key, this._allKey);
|
2559
|
+
}
|
2560
|
+
onSortByDateChange(event) {
|
2561
|
+
this.isSortByDateChecked.set(event);
|
2562
|
+
this._fPreviewGroupService.sortByDate(event);
|
2563
|
+
}
|
2564
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2565
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 });
|
2566
|
+
}
|
2567
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupFiltersComponent, decorators: [{
|
2568
|
+
type: Component,
|
2569
|
+
args: [{ selector: 'div[f-preview-group-filters]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
2570
|
+
FCheckboxComponent,
|
2571
|
+
FRadioButtonComponent,
|
2572
|
+
TitleCasePipe
|
2573
|
+
], 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"] }]
|
2574
|
+
}] });
|
2401
2575
|
|
2402
2576
|
const F_DOCUMENTATION_COMPONENT = new InjectionToken('F_DOCUMENTATION_COMPONENT');
|
2403
2577
|
|
@@ -2425,23 +2599,23 @@ class FDocumentationComponent {
|
|
2425
2599
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FDocumentationComponent, isStandalone: true, selector: "f-documentation", providers: [
|
2426
2600
|
FDocumentationEnvironmentService,
|
2427
2601
|
FPopoverService,
|
2428
|
-
|
2602
|
+
FPreviewGroupService,
|
2429
2603
|
{ provide: F_DOCUMENTATION_COMPONENT, useExisting: FDocumentationComponent }
|
2430
|
-
], ngImport: i0, template: "<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible\" (click)=\"onToggleNavigation(false)\"></div>\n
|
2604
|
+
], 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@if (popoverMessage) {\n <div class=\"popover\">{{ popoverMessage }}</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);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: FNavigationPanelComponent, selector: "f-navigation-panel" }, { kind: "component", type: FHeaderComponent, selector: "f-header" }, { kind: "component", type: FScrollableContainerComponent, selector: "f-scrollable-container" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
2431
2605
|
}
|
2432
2606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FDocumentationComponent, decorators: [{
|
2433
2607
|
type: Component,
|
2434
2608
|
args: [{ selector: 'f-documentation', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
2435
2609
|
FDocumentationEnvironmentService,
|
2436
2610
|
FPopoverService,
|
2437
|
-
|
2611
|
+
FPreviewGroupService,
|
2438
2612
|
{ provide: F_DOCUMENTATION_COMPONENT, useExisting: FDocumentationComponent }
|
2439
2613
|
], imports: [
|
2440
2614
|
FNavigationPanelComponent,
|
2441
2615
|
FHeaderComponent,
|
2442
2616
|
FScrollableContainerComponent,
|
2443
2617
|
RouterOutlet
|
2444
|
-
], template: "<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible\" (click)=\"onToggleNavigation(false)\"></div>\n
|
2618
|
+
], 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@if (popoverMessage) {\n <div class=\"popover\">{{ popoverMessage }}</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);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"] }]
|
2445
2619
|
}] });
|
2446
2620
|
|
2447
2621
|
const F_DOCS_ENVIRONMENT = new InjectionToken('F_DOCS_ENVIRONMENT');
|
@@ -2486,7 +2660,10 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
2486
2660
|
FNavigationItemComponent: FNavigationItemComponent,
|
2487
2661
|
FNavigationPanelComponent: FNavigationPanelComponent,
|
2488
2662
|
FPageComponent: FPageComponent,
|
2663
|
+
FPreviewBase: FPreviewBase,
|
2489
2664
|
FPreviewComponent: FPreviewComponent,
|
2665
|
+
FPreviewGroupFiltersComponent: FPreviewGroupFiltersComponent,
|
2666
|
+
FPreviewGroupService: FPreviewGroupService,
|
2490
2667
|
FScrollableContainerComponent: FScrollableContainerComponent,
|
2491
2668
|
FSocialLinksComponent: FSocialLinksComponent,
|
2492
2669
|
FTableOfContentComponent: FTableOfContentComponent,
|
@@ -2525,69 +2702,76 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
2525
2702
|
const F_HOME_PAGE_ENVIRONMENT = new InjectionToken('F_HOME_PAGE_ENVIRONMENT');
|
2526
2703
|
|
2527
2704
|
class FHomePageEnvironmentService {
|
2528
|
-
|
2529
|
-
http;
|
2530
|
-
constructor(environment, http) {
|
2531
|
-
this.environment = environment;
|
2532
|
-
this.http = http;
|
2533
|
-
}
|
2705
|
+
_environment = inject(F_HOME_PAGE_ENVIRONMENT);
|
2534
2706
|
getLogo() {
|
2535
|
-
return this.
|
2707
|
+
return this._environment.logo;
|
2536
2708
|
}
|
2537
2709
|
getTitle() {
|
2538
|
-
return this.
|
2710
|
+
return this._environment.title;
|
2539
2711
|
}
|
2540
2712
|
getHero() {
|
2541
|
-
return this.
|
2713
|
+
return this._environment.hero;
|
2542
2714
|
}
|
2543
2715
|
getButtons() {
|
2544
|
-
return this.
|
2716
|
+
return this._environment.buttons || [];
|
2545
2717
|
}
|
2546
2718
|
getFeatures() {
|
2547
|
-
return this.
|
2719
|
+
return this._environment.features || [];
|
2720
|
+
}
|
2721
|
+
getMemberships() {
|
2722
|
+
return this._environment.memberships || [];
|
2548
2723
|
}
|
2549
2724
|
getFooter() {
|
2550
|
-
return this.
|
2725
|
+
return this._environment.footer;
|
2551
2726
|
}
|
2552
2727
|
getBackgroundComponent() {
|
2553
|
-
return this.
|
2728
|
+
return this._environment.backgroundComponent;
|
2554
2729
|
}
|
2555
2730
|
getImageComponent() {
|
2556
|
-
return this.
|
2731
|
+
return this._environment.heroImageComponent;
|
2557
2732
|
}
|
2558
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService, deps: [
|
2733
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
2559
2734
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService });
|
2560
2735
|
}
|
2561
2736
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService, decorators: [{
|
2562
2737
|
type: Injectable
|
2563
|
-
}]
|
2564
|
-
type: Optional
|
2565
|
-
}, {
|
2566
|
-
type: Inject,
|
2567
|
-
args: [F_HOME_PAGE_ENVIRONMENT]
|
2568
|
-
}] }, { type: i1$1.HttpClient }] });
|
2738
|
+
}] });
|
2569
2739
|
|
2570
2740
|
class FHomePageFeaturesComponent {
|
2571
2741
|
viewModel = inject(FHomePageEnvironmentService).getFeatures();
|
2572
2742
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageFeaturesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2573
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FHomePageFeaturesComponent, isStandalone: true, selector: "f-home-page-features", 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:
|
2743
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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}: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"] });
|
2574
2744
|
}
|
2575
2745
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageFeaturesComponent, decorators: [{
|
2576
2746
|
type: Component,
|
2577
|
-
args: [{ selector: 'f-home-page-features', standalone: true,
|
2747
|
+
args: [{ selector: 'f-home-page-features', standalone: true, host: {
|
2748
|
+
'[class.display-none]': '!viewModel.length',
|
2749
|
+
}, 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}: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"] }]
|
2750
|
+
}] });
|
2751
|
+
|
2752
|
+
class FHomePageMembershipsComponent {
|
2753
|
+
viewModel = inject(FHomePageEnvironmentService).getMemberships();
|
2754
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageMembershipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2755
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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}: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}}:host a{pointer-events:all}.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"] });
|
2756
|
+
}
|
2757
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageMembershipsComponent, decorators: [{
|
2758
|
+
type: Component,
|
2759
|
+
args: [{ selector: 'f-home-page-memberships', standalone: true, host: {
|
2760
|
+
'[class.display-none]': '!viewModel.length',
|
2761
|
+
}, 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}: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}}:host a{pointer-events:all}.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"] }]
|
2578
2762
|
}] });
|
2579
2763
|
|
2580
2764
|
class FHomePageHeaderComponent {
|
2581
2765
|
logo = inject(FHomePageEnvironmentService).getLogo();
|
2582
2766
|
title = inject(FHomePageEnvironmentService).getTitle();
|
2583
2767
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2584
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageHeaderComponent, isStandalone: true, selector: "header[f-home-page-header]", ngImport: i0, template: "<div class=\"content\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n
|
2768
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageHeaderComponent, isStandalone: true, selector: "header[f-home-page-header]", ngImport: i0, template: "<div class=\"content\">\n <a class=\"logo-link\" href=\"/\" aria-label=\"Home\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n </a>\n\n <div class=\"flex-space\"></div>\n <button f-theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .logo-link{display:flex;align-items:center;text-decoration:none}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"], dependencies: [{ kind: "component", type: FThemeButtonComponent, selector: "button[f-theme-button]" }] });
|
2585
2769
|
}
|
2586
2770
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageHeaderComponent, decorators: [{
|
2587
2771
|
type: Component,
|
2588
2772
|
args: [{ selector: 'header[f-home-page-header]', standalone: true, imports: [
|
2589
2773
|
FThemeButtonComponent
|
2590
|
-
], template: "<div class=\"content\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n
|
2774
|
+
], template: "<div class=\"content\">\n <a class=\"logo-link\" href=\"/\" aria-label=\"Home\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n </a>\n\n <div class=\"flex-space\"></div>\n <button f-theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .logo-link{display:flex;align-items:center;text-decoration:none}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] }]
|
2591
2775
|
}] });
|
2592
2776
|
|
2593
2777
|
class FHomePageFooterComponent {
|
@@ -2603,13 +2787,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
2603
2787
|
class FHomePageButtonsRowComponent {
|
2604
2788
|
viewModel = inject(FHomePageEnvironmentService).getButtons();
|
2605
2789
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageButtonsRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2606
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FHomePageButtonsRowComponent, isStandalone: true, selector: "f-home-page-buttons-row", 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 }}\"
|
2790
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 }}\">{{ button.text }}</a>\n }\n}\n\n", styles: [":host{display:flex;padding-top:32px;gap:12px;width:fit-content;margin:0 auto}@media (min-width: 960px){:host{margin:0}}.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"] }] });
|
2607
2791
|
}
|
2608
2792
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageButtonsRowComponent, decorators: [{
|
2609
2793
|
type: Component,
|
2610
2794
|
args: [{ selector: 'f-home-page-buttons-row', standalone: true, imports: [
|
2611
2795
|
RouterLink
|
2612
|
-
],
|
2796
|
+
], host: {
|
2797
|
+
'[class.display-none]': '!viewModel.length',
|
2798
|
+
}, 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 }}\">{{ button.text }}</a>\n }\n}\n\n", styles: [":host{display:flex;padding-top:32px;gap:12px;width:fit-content;margin:0 auto}@media (min-width: 960px){:host{margin:0}}.f-button{display:flex;align-items:center;gap:6px}\n"] }]
|
2613
2799
|
}] });
|
2614
2800
|
|
2615
2801
|
class FHomePageHeroComponent {
|
@@ -2624,14 +2810,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
2624
2810
|
], 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%}@media (min-width: 640px){:host{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"] }]
|
2625
2811
|
}] });
|
2626
2812
|
|
2627
|
-
const F_HOME_PAGE_COMPONENT = new InjectionToken('F_HOME_PAGE_COMPONENT');
|
2628
2813
|
class FHomePageComponent {
|
2629
|
-
|
2814
|
+
_environment = inject(FHomePageEnvironmentService);
|
2630
2815
|
_backgroundContainer;
|
2631
2816
|
_heroImageContainer;
|
2632
2817
|
ngAfterViewInit() {
|
2633
|
-
this._renderImageComponent(this.
|
2634
|
-
this._renderBackgroundComponent(this.
|
2818
|
+
this._renderImageComponent(this._environment.getImageComponent());
|
2819
|
+
this._renderBackgroundComponent(this._environment.getBackgroundComponent());
|
2635
2820
|
}
|
2636
2821
|
_renderImageComponent(component) {
|
2637
2822
|
if (component) {
|
@@ -2655,22 +2840,19 @@ class FHomePageComponent {
|
|
2655
2840
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
2656
2841
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageComponent, isStandalone: true, selector: "f-home-page", providers: [
|
2657
2842
|
FHomePageEnvironmentService,
|
2658
|
-
|
2659
|
-
{ provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
|
2660
|
-
], 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</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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
2843
|
+
], 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 });
|
2661
2844
|
}
|
2662
2845
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageComponent, decorators: [{
|
2663
2846
|
type: Component,
|
2664
2847
|
args: [{ selector: 'f-home-page', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
2665
2848
|
FHomePageEnvironmentService,
|
2666
|
-
{ provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
|
2667
|
-
{ provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
|
2668
2849
|
], imports: [
|
2669
2850
|
FHomePageFooterComponent,
|
2670
2851
|
FHomePageHeaderComponent,
|
2671
2852
|
FHomePageFeaturesComponent,
|
2672
2853
|
FHomePageHeroComponent,
|
2673
|
-
|
2854
|
+
FHomePageMembershipsComponent,
|
2855
|
+
], 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"] }]
|
2674
2856
|
}], propDecorators: { _backgroundContainer: [{
|
2675
2857
|
type: ViewChild,
|
2676
2858
|
args: ['backgroundContainer', { read: ViewContainerRef }]
|
@@ -2693,7 +2875,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
2693
2875
|
FHomePageFeaturesComponent: FHomePageFeaturesComponent,
|
2694
2876
|
FHomePageFooterComponent: FHomePageFooterComponent,
|
2695
2877
|
FHomePageHeaderComponent: FHomePageHeaderComponent,
|
2696
|
-
|
2878
|
+
FHomePageMembershipsComponent: FHomePageMembershipsComponent,
|
2697
2879
|
F_HOME_PAGE_ENVIRONMENT: F_HOME_PAGE_ENVIRONMENT,
|
2698
2880
|
F_HOME_PAGE_ROUTES: F_HOME_PAGE_ROUTES
|
2699
2881
|
});
|
@@ -2702,5 +2884,5 @@ var index = /*#__PURE__*/Object.freeze({
|
|
2702
2884
|
* Generated bundle index. Do not edit.
|
2703
2885
|
*/
|
2704
2886
|
|
2705
|
-
export { CalculateHashFromScrollPositionHandler, CalculateHashFromScrollPositionRequest, ChangeCodeFocusedSyntaxPreProcessor, CookiePopup, EMarkdownContainerType, FAnalyticsService, FAsyncCodeViewHandler, FBadgeComponent, FCheckboxComponent, FCodeGroupBodyHandler, FCodeGroupHandler, FCodeViewHandler, FDocumentationComponent, FDocumentationEnvironmentService, FExampleViewHandler, FFooterEditInformationComponent, FFooterNavigationButtonComponent, FFooterNavigationComponent, FHamburgerButtonComponent, FHeadTagService, FHeaderComponent, FHeaderMenuComponent, FHomePageComponent, FHomePageEnvironmentService, FHomePageFeaturesComponent, FHomePageFooterComponent, FHomePageHeaderComponent, FJsonLdService, FMarkdownFooterComponent, FMarkdownRendererComponent, FMetaService, FNavigationGroupComponent, FNavigationHeaderComponent, FNavigationItemComponent, FNavigationPanelComponent, FPageComponent, FPopoverService, FPreviewComponent, FScrollableContainerComponent, FSocialLinksComponent, FTableOfContentComponent, FTableOfContentItemsComponent, FThemeButtonComponent, FVersionComponent, F_ACCEPT_COOKIES_KEY, F_DOCS_ENVIRONMENT, F_DOCS_ROUTES, F_DOCUMENTATION_COMPONENT,
|
2887
|
+
export { CalculateHashFromScrollPositionHandler, CalculateHashFromScrollPositionRequest, ChangeCodeFocusedSyntaxPreProcessor, CookiePopup, EMarkdownContainerType, FAnalyticsService, FAsyncCodeViewHandler, FBadgeComponent, FCheckboxComponent, FCodeGroupBodyHandler, FCodeGroupHandler, FCodeViewHandler, FDocumentationComponent, FDocumentationEnvironmentService, FExampleViewHandler, FFooterEditInformationComponent, FFooterNavigationButtonComponent, FFooterNavigationComponent, FHamburgerButtonComponent, FHeadTagService, FHeaderComponent, FHeaderMenuComponent, FHomePageComponent, FHomePageEnvironmentService, FHomePageFeaturesComponent, FHomePageFooterComponent, FHomePageHeaderComponent, FHomePageMembershipsComponent, FJsonLdService, FMarkdownFooterComponent, FMarkdownRendererComponent, FMetaService, FNavigationGroupComponent, FNavigationHeaderComponent, FNavigationItemComponent, FNavigationPanelComponent, FPageComponent, FPopoverService, FPreviewBase, FPreviewComponent, FPreviewGroupFiltersComponent, FPreviewGroupService, FRadioButtonComponent, FScrollableContainerComponent, FSocialLinksComponent, FTableOfContentComponent, FTableOfContentItemsComponent, FThemeButtonComponent, FVersionComponent, F_ACCEPT_COOKIES_KEY, F_DOCS_ENVIRONMENT, F_DOCS_ROUTES, F_DOCUMENTATION_COMPONENT, F_HOME_PAGE_ENVIRONMENT, F_HOME_PAGE_ROUTES, GetAbsoluteTopToContainerHandler, GetAbsoluteTopToContainerRequest, GetPreviousNextPageNavigationHandler, GetPreviousNextPageNavigationRequest, GetPreviousNextPageNavigationResponse, GetTableOfContentDataHandler, GetTableOfContentDataRequest, GetVersionHandler, GetVersionRequest, HandleDynamicComponentsHandler, HandleDynamicComponentsRequest, HandleNavigationLinksHandler, HandleNavigationLinksRequest, HandleParsedContainersHandler, HandleParsedContainersRequest, HighlightService, MarkCodeFocusedBlocksPostProcessor, MarkdownService, ModifyPunctuationHighlightPostProcessor, ParseAlerts, ParseCodeGroup, ParseCodeView, ParseExampleGroup, ParsePreviewGroup, ScrollToElementInContainer, SeparateCodeByLinesPostProcessor, TableOfContentData, copyToClipboard, getContent, setCookieConsent };
|
2706
2888
|
//# sourceMappingURL=foblex-m-render.mjs.map
|