@foblex/m-render 2.5.4 → 2.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/assets/styles/_variables.scss +13 -0
  2. package/esm2022/lib/common-components/f-radio-button/f-radio-button.component.mjs +41 -0
  3. package/esm2022/lib/common-components/index.mjs +2 -1
  4. package/esm2022/lib/domain/i-environment-service.mjs +2 -3
  5. package/esm2022/lib/f-documentation/f-documentation.component.mjs +6 -6
  6. package/esm2022/lib/f-documentation/f-navigation-panel/domain/i-navigation-item.mjs +1 -1
  7. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.handler.mjs +6 -3
  8. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-preview-group.mjs +6 -2
  9. package/esm2022/lib/f-documentation/f-preview/f-preview-base.mjs +3 -0
  10. package/esm2022/lib/f-documentation/f-preview/f-preview.component.mjs +50 -38
  11. package/esm2022/lib/f-documentation/f-preview-group/f-preview-group.service.mjs +73 -0
  12. package/esm2022/lib/f-documentation/f-preview-group-filters/f-preview-group-filters.component.mjs +53 -0
  13. package/esm2022/lib/f-documentation/index.mjs +4 -1
  14. package/esm2022/lib/f-home-page/f-home-page.component.mjs +1 -4
  15. package/fesm2022/foblex-m-render.mjs +223 -48
  16. package/fesm2022/foblex-m-render.mjs.map +1 -1
  17. package/lib/common-components/f-radio-button/f-radio-button.component.d.ts +16 -0
  18. package/lib/common-components/index.d.ts +1 -0
  19. package/lib/domain/i-environment-service.d.ts +0 -2
  20. package/lib/f-documentation/f-navigation-panel/domain/i-navigation-item.d.ts +1 -0
  21. package/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-preview-group.d.ts +1 -0
  22. package/lib/f-documentation/f-preview/f-preview-base.d.ts +5 -0
  23. package/lib/f-documentation/f-preview/f-preview.component.d.ts +20 -17
  24. package/lib/f-documentation/f-preview-group/f-preview-group.service.d.ts +17 -0
  25. package/lib/f-documentation/f-preview-group-filters/f-preview-group-filters.component.d.ts +17 -0
  26. package/lib/f-documentation/index.d.ts +3 -0
  27. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';
2
+ import { FDocumentationEnvironmentService } from '../f-documentation-environment.service';
3
+ import { FCheckboxComponent, FRadioButtonComponent } from '../../common-components';
4
+ import { TitleCasePipe } from '@angular/common';
5
+ import { FPreviewGroupService } from '../f-preview-group/f-preview-group.service';
6
+ import * as i0 from "@angular/core";
7
+ export class FPreviewGroupFiltersComponent {
8
+ _allKey = 'all';
9
+ _fEnvironment = inject(FDocumentationEnvironmentService);
10
+ _fPreviewGroupService = inject(FPreviewGroupService);
11
+ filters = signal([]);
12
+ activeFilter = signal(this._allKey);
13
+ isSortByDateChecked = signal(false);
14
+ initialize() {
15
+ this.filters.set(this._calculateFiltersMap());
16
+ }
17
+ ngAfterViewInit() {
18
+ this.onFilterChange(this._allKey);
19
+ }
20
+ _calculateFiltersMap() {
21
+ const filters = [];
22
+ this._fEnvironment.getNavigation().forEach((group) => {
23
+ group.items.forEach((item) => {
24
+ if (item.badge && !filters.includes(item.badge.text.toLowerCase())) {
25
+ filters.push(item.badge.text.toLowerCase());
26
+ }
27
+ });
28
+ });
29
+ if (filters.length > 0) {
30
+ filters.unshift(this._allKey);
31
+ }
32
+ return filters;
33
+ }
34
+ onFilterChange(key) {
35
+ this.activeFilter.set(key);
36
+ this._fPreviewGroupService.filterBy(key, this._allKey);
37
+ }
38
+ onSortByDateChange(event) {
39
+ this.isSortByDateChecked.set(event);
40
+ this._fPreviewGroupService.sortByDate(event);
41
+ }
42
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
43
+ 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 });
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewGroupFiltersComponent, decorators: [{
46
+ type: Component,
47
+ args: [{ selector: 'div[f-preview-group-filters]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
48
+ FCheckboxComponent,
49
+ FRadioButtonComponent,
50
+ TitleCasePipe
51
+ ], 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"] }]
52
+ }] });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1wcmV2aWV3LWdyb3VwLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbS1yZW5kZXIvc3JjL2xpYi9mLWRvY3VtZW50YXRpb24vZi1wcmV2aWV3LWdyb3VwLWZpbHRlcnMvZi1wcmV2aWV3LWdyb3VwLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbS1yZW5kZXIvc3JjL2xpYi9mLWRvY3VtZW50YXRpb24vZi1wcmV2aWV3LWdyb3VwLWZpbHRlcnMvZi1wcmV2aWV3LWdyb3VwLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBY2xGLE1BQU0sT0FBTyw2QkFBNkI7SUFFdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUV6QixhQUFhLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDekQscUJBQXFCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFbkQsT0FBTyxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztJQUMvQixZQUFZLEdBQUcsTUFBTSxDQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU1QyxtQkFBbUIsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFaEQsVUFBVTtRQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuRCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVTLGNBQWMsQ0FBQyxHQUFXO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRVMsa0JBQWtCLENBQUMsS0FBYztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQzt3R0EzQ1UsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsd0ZDbEIxQyxpZEFjQSx1TERESSxrQkFBa0IsdUdBQ2xCLHFCQUFxQixzR0FDckIsYUFBYTs7NEZBR0osNkJBQTZCO2tCQVp6QyxTQUFTOytCQUNFLDhCQUE4QixjQUc1QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1Asa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkRvY3VtZW50YXRpb25FbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi9mLWRvY3VtZW50YXRpb24tZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBGQ2hlY2tib3hDb21wb25lbnQsIEZSYWRpb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi1jb21wb25lbnRzJztcbmltcG9ydCB7IFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRlByZXZpZXdHcm91cFNlcnZpY2UgfSBmcm9tICcuLi9mLXByZXZpZXctZ3JvdXAvZi1wcmV2aWV3LWdyb3VwLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkaXZbZi1wcmV2aWV3LWdyb3VwLWZpbHRlcnNdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2YtcHJldmlldy1ncm91cC1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL2YtcHJldmlldy1ncm91cC1maWx0ZXJzLmNvbXBvbmVudC5zY3NzJyBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEZDaGVja2JveENvbXBvbmVudCxcbiAgICBGUmFkaW9CdXR0b25Db21wb25lbnQsXG4gICAgVGl0bGVDYXNlUGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZQcmV2aWV3R3JvdXBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsS2V5ID0gJ2FsbCc7XG5cbiAgcHJpdmF0ZSBfZkVudmlyb25tZW50ID0gaW5qZWN0KEZEb2N1bWVudGF0aW9uRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZlByZXZpZXdHcm91cFNlcnZpY2UgPSBpbmplY3QoRlByZXZpZXdHcm91cFNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBmaWx0ZXJzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIHByb3RlY3RlZCBhY3RpdmVGaWx0ZXIgPSBzaWduYWw8c3RyaW5nPih0aGlzLl9hbGxLZXkpO1xuXG4gIHByb3RlY3RlZCBpc1NvcnRCeURhdGVDaGVja2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcnMuc2V0KHRoaXMuX2NhbGN1bGF0ZUZpbHRlcnNNYXAoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UodGhpcy5fYWxsS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUZpbHRlcnNNYXAoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5fZkVudmlyb25tZW50LmdldE5hdmlnYXRpb24oKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgZ3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5iYWRnZSAmJiAhZmlsdGVycy5pbmNsdWRlcyhpdGVtLmJhZGdlLnRleHQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBmaWx0ZXJzLnB1c2goaXRlbS5iYWRnZS50ZXh0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJzLnVuc2hpZnQodGhpcy5fYWxsS2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25GaWx0ZXJDaGFuZ2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlci5zZXQoa2V5KTtcbiAgICB0aGlzLl9mUHJldmlld0dyb3VwU2VydmljZS5maWx0ZXJCeShrZXksIHRoaXMuX2FsbEtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Tb3J0QnlEYXRlQ2hhbmdlKGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1NvcnRCeURhdGVDaGVja2VkLnNldChldmVudCk7XG4gICAgdGhpcy5fZlByZXZpZXdHcm91cFNlcnZpY2Uuc29ydEJ5RGF0ZShldmVudCk7XG4gIH1cbn1cbiIsIkBpZiAoZmlsdGVycygpLmxlbmd0aCkge1xuICA8ZGl2IGNsYXNzPVwiZmlsdGVycy1yb3dcIj5cbiAgICBAZm9yIChmaWx0ZXIgb2YgZmlsdGVycygpOyB0cmFjayBmaWx0ZXIpIHtcbiAgICAgIDxmLXJhZGlvLWJ1dHRvbiBbY2hlY2tlZF09XCJhY3RpdmVGaWx0ZXIoKSA9PT0gZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGZpbHRlcilcIj57eyBmaWx0ZXIgfCB0aXRsZWNhc2UgfX1cbiAgICAgIDwvZi1yYWRpby1idXR0b24+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlXCI+PC9kaXY+XG4gICAgPGYtY2hlY2tib3ggW2NoZWNrZWRdPVwiaXNTb3J0QnlEYXRlQ2hlY2tlZCgpXCIgKGNoYW5nZSk9XCJvblNvcnRCeURhdGVDaGFuZ2UoJGV2ZW50KVwiPlNvcnQgYnkgTmV3bmVzczwvZi1jaGVja2JveD5cbiAgPC9kaXY+XG59XG5cblxuXG4iXX0=
@@ -9,9 +9,12 @@ export * from './f-scrollable-container';
9
9
  export * from './f-social-links/f-social-links.component';
10
10
  export * from './f-version/f-version.component';
11
11
  export * from './f-preview/f-preview.component';
12
+ export * from './f-preview/f-preview-base';
13
+ export * from './f-preview-group/f-preview-group.service';
14
+ export * from './f-preview-group-filters/f-preview-group-filters.component';
12
15
  export * from './f-documentation.component';
13
16
  export * from './f-documentation-environment.service';
14
17
  export * from './i-documentation-component';
15
18
  export * from './providers';
16
19
  export * from './router';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tLXJlbmRlci9zcmMvbGliL2YtZG9jdW1lbnRhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUV6QixjQUFjLFdBQVcsQ0FBQztBQUUxQixjQUFjLG1EQUFtRCxDQUFDO0FBRWxFLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLHNCQUFzQixDQUFDO0FBRXJDLGNBQWMsVUFBVSxDQUFDO0FBRXpCLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsY0FBYywyQ0FBMkMsQ0FBQztBQUUxRCxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsY0FBYyxhQUFhLENBQUM7QUFFNUIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RvbWFpbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1iYWRnZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1oYW1idXJnZXItYnV0dG9uL2YtaGFtYnVyZ2VyLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2YtaGVhZGVyL2YtaGVhZGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1oZWFkZXItbWVudS9mLWhlYWRlci1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1uYXZpZ2F0aW9uLXBhbmVsJztcblxuZXhwb3J0ICogZnJvbSAnLi9mLXBhZ2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2Ytc2Nyb2xsYWJsZS1jb250YWluZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2Ytc29jaWFsLWxpbmtzL2Ytc29jaWFsLWxpbmtzLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi12ZXJzaW9uL2YtdmVyc2lvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2YtcHJldmlldy9mLXByZXZpZXcuY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9mLWRvY3VtZW50YXRpb24uY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9mLWRvY3VtZW50YXRpb24tZW52aXJvbm1lbnQuc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vaS1kb2N1bWVudGF0aW9uLWNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZXJzJztcblxuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXInO1xuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tLXJlbmRlci9zcmMvbGliL2YtZG9jdW1lbnRhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUV6QixjQUFjLFdBQVcsQ0FBQztBQUUxQixjQUFjLG1EQUFtRCxDQUFDO0FBRWxFLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLHNCQUFzQixDQUFDO0FBRXJDLGNBQWMsVUFBVSxDQUFDO0FBRXpCLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsY0FBYywyQ0FBMkMsQ0FBQztBQUUxRCxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsNkRBQTZELENBQUM7QUFFNUUsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsY0FBYyxhQUFhLENBQUM7QUFFNUIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RvbWFpbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1iYWRnZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1oYW1idXJnZXItYnV0dG9uL2YtaGFtYnVyZ2VyLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2YtaGVhZGVyL2YtaGVhZGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1oZWFkZXItbWVudS9mLWhlYWRlci1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1uYXZpZ2F0aW9uLXBhbmVsJztcblxuZXhwb3J0ICogZnJvbSAnLi9mLXBhZ2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2Ytc2Nyb2xsYWJsZS1jb250YWluZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2Ytc29jaWFsLWxpbmtzL2Ytc29jaWFsLWxpbmtzLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi12ZXJzaW9uL2YtdmVyc2lvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2YtcHJldmlldy9mLXByZXZpZXcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZi1wcmV2aWV3L2YtcHJldmlldy1iYXNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9mLXByZXZpZXctZ3JvdXAvZi1wcmV2aWV3LWdyb3VwLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2YtcHJldmlldy1ncm91cC1maWx0ZXJzL2YtcHJldmlldy1ncm91cC1maWx0ZXJzLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1kb2N1bWVudGF0aW9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZi1kb2N1bWVudGF0aW9uLWVudmlyb25tZW50LnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2ktZG9jdW1lbnRhdGlvbi1jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyJztcbiJdfQ==
@@ -4,7 +4,6 @@ import { FHomePageHeaderComponent } from './f-home-page-header/f-home-page-heade
4
4
  import { FHomePageFeaturesComponent } from './f-home-page-features/f-home-page-features.component';
5
5
  import { FHomePageHeroComponent } from './f-home-page-hero/f-home-page-hero.component';
6
6
  import { FHomePageEnvironmentService } from './f-home-page-environment.service';
7
- import { INTERNAL_ENVIRONMENT_SERVICE } from '../domain';
8
7
  import * as i0 from "@angular/core";
9
8
  export const F_HOME_PAGE_COMPONENT = new InjectionToken('F_HOME_PAGE_COMPONENT');
10
9
  export class FHomePageComponent {
@@ -37,7 +36,6 @@ export class FHomePageComponent {
37
36
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
37
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageComponent, isStandalone: true, selector: "f-home-page", providers: [
39
38
  FHomePageEnvironmentService,
40
- { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
41
39
  { provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
42
40
  ], 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 });
43
41
  }
@@ -45,7 +43,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
45
43
  type: Component,
46
44
  args: [{ selector: 'f-home-page', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
47
45
  FHomePageEnvironmentService,
48
- { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
49
46
  { provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
50
47
  ], imports: [
51
48
  FHomePageFooterComponent,
@@ -60,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
60
57
  type: ViewChild,
61
58
  args: ['heroImageContainer', { read: ViewContainerRef }]
62
59
  }] } });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ob21lLXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbS1yZW5kZXIvc3JjL2xpYi9mLWhvbWUtcGFnZS9mLWhvbWUtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tLXJlbmRlci9zcmMvbGliL2YtaG9tZS1wYWdlL2YtaG9tZS1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLE1BQU0sRUFBRSxjQUFjLEVBQVEsU0FBUyxFQUFFLGdCQUFnQixFQUM1RyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBRXpELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFxQix1QkFBdUIsQ0FBQyxDQUFDO0FBb0JyRyxNQUFNLE9BQU8sa0JBQWtCO0lBRW5CLG1CQUFtQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBRzVELG9CQUFvQixDQUErQjtJQUduRCxtQkFBbUIsQ0FBK0I7SUFFbkQsZUFBZTtRQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8scUJBQXFCLENBQUksU0FBbUI7UUFDbEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFJLFNBQW1CO1FBQ3ZELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQztJQUNILENBQUM7SUFFTyxnQ0FBZ0MsQ0FBSSxTQUFrQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxvQkFBcUIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLDJCQUEyQixDQUFJLFNBQWtCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLG1CQUFvQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsWUFBK0I7UUFDNUQsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hELENBQUM7d0dBckNVLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDBEQVpsQjtZQUNULDJCQUEyQjtZQUMzQixFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUU7WUFDbkYsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO1NBQ3BFLGtJQVl5QyxnQkFBZ0Isb0hBR2pCLGdCQUFnQiw2QkN0QzNELCtYQWFBLDZwQkRZSSx3QkFBd0IsdUVBQ3hCLHdCQUF3Qix1RUFDeEIsMEJBQTBCLGlFQUMxQixzQkFBc0I7OzRGQUdiLGtCQUFrQjtrQkFsQjlCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVCwyQkFBMkI7d0JBQzNCLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRTt3QkFDbkYsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxvQkFBb0IsRUFBRTtxQkFDcEUsV0FDUTt3QkFDUCx3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIsMEJBQTBCO3dCQUMxQixzQkFBc0I7cUJBQ3ZCOzhCQU9PLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJcEQsbUJBQW1CO3NCQUQxQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBUeXBlLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGSG9tZVBhZ2VGb290ZXJDb21wb25lbnQgfSBmcm9tICcuL2YtaG9tZS1wYWdlLWZvb3Rlci9mLWhvbWUtcGFnZS1mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZIb21lUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZi1ob21lLXBhZ2UtaGVhZGVyL2YtaG9tZS1wYWdlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRkhvbWVQYWdlRmVhdHVyZXNDb21wb25lbnQgfSBmcm9tICcuL2YtaG9tZS1wYWdlLWZlYXR1cmVzL2YtaG9tZS1wYWdlLWZlYXR1cmVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGSG9tZVBhZ2VIZXJvQ29tcG9uZW50IH0gZnJvbSAnLi9mLWhvbWUtcGFnZS1oZXJvL2YtaG9tZS1wYWdlLWhlcm8uY29tcG9uZW50JztcbmltcG9ydCB7IEZIb21lUGFnZUVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZi1ob21lLXBhZ2UtZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBJTlRFUk5BTF9FTlZJUk9OTUVOVF9TRVJWSUNFIH0gZnJvbSAnLi4vZG9tYWluJztcblxuZXhwb3J0IGNvbnN0IEZfSE9NRV9QQUdFX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGSG9tZVBhZ2VDb21wb25lbnQ+KCdGX0hPTUVfUEFHRV9DT01QT05FTlQnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZi1ob21lLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZi1ob21lLXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vZi1ob21lLXBhZ2UuY29tcG9uZW50LnNjc3MnIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBGSG9tZVBhZ2VFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBJTlRFUk5BTF9FTlZJUk9OTUVOVF9TRVJWSUNFLCB1c2VFeGlzdGluZzogRkhvbWVQYWdlRW52aXJvbm1lbnRTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBGX0hPTUVfUEFHRV9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBGSG9tZVBhZ2VDb21wb25lbnQgfVxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgRkhvbWVQYWdlRm9vdGVyQ29tcG9uZW50LFxuICAgIEZIb21lUGFnZUhlYWRlckNvbXBvbmVudCxcbiAgICBGSG9tZVBhZ2VGZWF0dXJlc0NvbXBvbmVudCxcbiAgICBGSG9tZVBhZ2VIZXJvQ29tcG9uZW50LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZIb21lUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIHByb3RlY3RlZCBfZW52aXJvbm1lbnRTZXJ2aWNlID0gaW5qZWN0KEZIb21lUGFnZUVudmlyb25tZW50U2VydmljZSk7XG5cbiAgQFZpZXdDaGlsZCgnYmFja2dyb3VuZENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBwcml2YXRlIF9iYWNrZ3JvdW5kQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlcm9JbWFnZUNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBwcml2YXRlIF9oZXJvSW1hZ2VDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJJbWFnZUNvbXBvbmVudCh0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SW1hZ2VDb21wb25lbnQoKSk7XG4gICAgdGhpcy5fcmVuZGVyQmFja2dyb3VuZENvbXBvbmVudCh0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QmFja2dyb3VuZENvbXBvbmVudCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckltYWdlQ29tcG9uZW50PFQ+KGNvbXBvbmVudD86IFR5cGU8VD4pOiB2b2lkIHtcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnJlcXVlc3RDb21wb25lbnRSZWRyYXcodGhpcy5fZ2V0SW1hZ2VDb21wb25lbnRSZWZlcmVuY2UoY29tcG9uZW50KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQmFja2dyb3VuZENvbXBvbmVudDxUPihjb21wb25lbnQ/OiBUeXBlPFQ+KTogdm9pZCB7XG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgdGhpcy5yZXF1ZXN0Q29tcG9uZW50UmVkcmF3KHRoaXMuX2dldEJhY2tncm91bmRDb21wb25lbnRSZWZlcmVuY2UoY29tcG9uZW50KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QmFja2dyb3VuZENvbXBvbmVudFJlZmVyZW5jZTxUPihjb21wb25lbnQ6IFR5cGU8VD4pOiBDb21wb25lbnRSZWY8VD4ge1xuICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyIS5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEltYWdlQ29tcG9uZW50UmVmZXJlbmNlPFQ+KGNvbXBvbmVudDogVHlwZTxUPik6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2hlcm9JbWFnZUNvbnRhaW5lciEuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3RDb21wb25lbnRSZWRyYXcoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55Pik6IHZvaWQge1xuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAjYmFja2dyb3VuZENvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbjxoZWFkZXIgZi1ob21lLXBhZ2UtaGVhZGVyPjwvaGVhZGVyPlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICA8ZGl2IGNsYXNzPVwiaGVyby1yb3dcIj5cbiAgICA8Zi1ob21lLXBhZ2UtaGVybz48L2YtaG9tZS1wYWdlLWhlcm8+XG4gICAgPG5nLWNvbnRhaW5lciAjaGVyb0ltYWdlQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGYtaG9tZS1wYWdlLWZlYXR1cmVzPjwvZi1ob21lLXBhZ2UtZmVhdHVyZXM+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXgtc3BhY2VcIj48L2Rpdj5cbjxmb290ZXIgZi1ob21lLXBhZ2UtZm9vdGVyPjwvZm9vdGVyPlxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ob21lLXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbS1yZW5kZXIvc3JjL2xpYi9mLWhvbWUtcGFnZS9mLWhvbWUtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tLXJlbmRlci9zcmMvbGliL2YtaG9tZS1wYWdlL2YtaG9tZS1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLE1BQU0sRUFBRSxjQUFjLEVBQVEsU0FBUyxFQUFFLGdCQUFnQixFQUM1RyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFFaEYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQXFCLHVCQUF1QixDQUFDLENBQUM7QUFtQnJHLE1BQU0sT0FBTyxrQkFBa0I7SUFFbkIsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFHNUQsb0JBQW9CLENBQStCO0lBR25ELG1CQUFtQixDQUErQjtJQUVuRCxlQUFlO1FBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTyxxQkFBcUIsQ0FBSSxTQUFtQjtRQUNsRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUksU0FBbUI7UUFDdkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdDQUFnQyxDQUFJLFNBQWtCO1FBQzVELE9BQU8sSUFBSSxDQUFDLG9CQUFxQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sMkJBQTJCLENBQUksU0FBa0I7UUFDdkQsT0FBTyxJQUFJLENBQUMsbUJBQW9CLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxZQUErQjtRQUM1RCxZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDaEQsQ0FBQzt3R0FyQ1Usa0JBQWtCOzRGQUFsQixrQkFBa0IsMERBWGxCO1lBQ1QsMkJBQTJCO1lBQzNCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRTtTQUNwRSxrSUFZeUMsZ0JBQWdCLG9IQUdqQixnQkFBZ0IsNkJDcEMzRCwrWEFhQSw2cEJEVUksd0JBQXdCLHVFQUN4Qix3QkFBd0IsdUVBQ3hCLDBCQUEwQixpRUFDMUIsc0JBQXNCOzs0RkFHYixrQkFBa0I7a0JBakI5QixTQUFTOytCQUNFLGFBQWEsY0FHWCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsMkJBQTJCO3dCQUMzQixFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxXQUFXLG9CQUFvQixFQUFFO3FCQUNwRSxXQUNRO3dCQUNQLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3dCQUN4QiwwQkFBMEI7d0JBQzFCLHNCQUFzQjtxQkFDdkI7OEJBT08sb0JBQW9CO3NCQUQzQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUlwRCxtQkFBbUI7c0JBRDFCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIFR5cGUsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZIb21lUGFnZUZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4vZi1ob21lLXBhZ2UtZm9vdGVyL2YtaG9tZS1wYWdlLWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRkhvbWVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9mLWhvbWUtcGFnZS1oZWFkZXIvZi1ob21lLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGSG9tZVBhZ2VGZWF0dXJlc0NvbXBvbmVudCB9IGZyb20gJy4vZi1ob21lLXBhZ2UtZmVhdHVyZXMvZi1ob21lLXBhZ2UtZmVhdHVyZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEZIb21lUGFnZUhlcm9Db21wb25lbnQgfSBmcm9tICcuL2YtaG9tZS1wYWdlLWhlcm8vZi1ob21lLXBhZ2UtaGVyby5jb21wb25lbnQnO1xuaW1wb3J0IHsgRkhvbWVQYWdlRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9mLWhvbWUtcGFnZS1lbnZpcm9ubWVudC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEZfSE9NRV9QQUdFX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGSG9tZVBhZ2VDb21wb25lbnQ+KCdGX0hPTUVfUEFHRV9DT01QT05FTlQnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZi1ob21lLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZi1ob21lLXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vZi1ob21lLXBhZ2UuY29tcG9uZW50LnNjc3MnIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBGSG9tZVBhZ2VFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBGX0hPTUVfUEFHRV9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBGSG9tZVBhZ2VDb21wb25lbnQgfVxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgRkhvbWVQYWdlRm9vdGVyQ29tcG9uZW50LFxuICAgIEZIb21lUGFnZUhlYWRlckNvbXBvbmVudCxcbiAgICBGSG9tZVBhZ2VGZWF0dXJlc0NvbXBvbmVudCxcbiAgICBGSG9tZVBhZ2VIZXJvQ29tcG9uZW50LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZIb21lUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIHByb3RlY3RlZCBfZW52aXJvbm1lbnRTZXJ2aWNlID0gaW5qZWN0KEZIb21lUGFnZUVudmlyb25tZW50U2VydmljZSk7XG5cbiAgQFZpZXdDaGlsZCgnYmFja2dyb3VuZENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBwcml2YXRlIF9iYWNrZ3JvdW5kQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlcm9JbWFnZUNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBwcml2YXRlIF9oZXJvSW1hZ2VDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJJbWFnZUNvbXBvbmVudCh0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SW1hZ2VDb21wb25lbnQoKSk7XG4gICAgdGhpcy5fcmVuZGVyQmFja2dyb3VuZENvbXBvbmVudCh0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QmFja2dyb3VuZENvbXBvbmVudCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckltYWdlQ29tcG9uZW50PFQ+KGNvbXBvbmVudD86IFR5cGU8VD4pOiB2b2lkIHtcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnJlcXVlc3RDb21wb25lbnRSZWRyYXcodGhpcy5fZ2V0SW1hZ2VDb21wb25lbnRSZWZlcmVuY2UoY29tcG9uZW50KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQmFja2dyb3VuZENvbXBvbmVudDxUPihjb21wb25lbnQ/OiBUeXBlPFQ+KTogdm9pZCB7XG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgdGhpcy5yZXF1ZXN0Q29tcG9uZW50UmVkcmF3KHRoaXMuX2dldEJhY2tncm91bmRDb21wb25lbnRSZWZlcmVuY2UoY29tcG9uZW50KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QmFja2dyb3VuZENvbXBvbmVudFJlZmVyZW5jZTxUPihjb21wb25lbnQ6IFR5cGU8VD4pOiBDb21wb25lbnRSZWY8VD4ge1xuICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyIS5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEltYWdlQ29tcG9uZW50UmVmZXJlbmNlPFQ+KGNvbXBvbmVudDogVHlwZTxUPik6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2hlcm9JbWFnZUNvbnRhaW5lciEuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3RDb21wb25lbnRSZWRyYXcoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55Pik6IHZvaWQge1xuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAjYmFja2dyb3VuZENvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbjxoZWFkZXIgZi1ob21lLXBhZ2UtaGVhZGVyPjwvaGVhZGVyPlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICA8ZGl2IGNsYXNzPVwiaGVyby1yb3dcIj5cbiAgICA8Zi1ob21lLXBhZ2UtaGVybz48L2YtaG9tZS1wYWdlLWhlcm8+XG4gICAgPG5nLWNvbnRhaW5lciAjaGVyb0ltYWdlQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGYtaG9tZS1wYWdlLWZlYXR1cmVzPjwvZi1ob21lLXBhZ2UtZmVhdHVyZXM+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXgtc3BhY2VcIj48L2Rpdj5cbjxmb290ZXIgZi1ob21lLXBhZ2UtZm9vdGVyPjwvZm9vdGVyPlxuIl19
@@ -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, InjectionToken, Optional, ViewChildren, ViewContainerRef, ElementRef, DestroyRef, ChangeDetectorRef } from '@angular/core';
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
- return (groups || []).map((x) => {
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 FPreviewComponent {
2342
- fEnvironment;
2343
- fState;
2344
- router;
2345
- changeDetectorRef;
2346
- subscriptions$ = new Subscription();
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
- constructor(fEnvironment, fState, router, changeDetectorRef) {
2353
- this.fEnvironment = fEnvironment;
2354
- this.fState = fState;
2355
- this.router = router;
2356
- this.changeDetectorRef = changeDetectorRef;
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.getNavigationItem(this.getNavigationGroup());
2360
- this.url = this.normalizeLink(this.viewModel.link, this.getUrlPrefix());
2361
- this.subscriptions$.add(this.fState.theme$.pipe(startWith(null)).subscribe(() => this.updateTheme()));
2481
+ this.viewModel = this._getNavigationItem(this._getNavigationGroup());
2482
+ this.url = this._normalizeLink(this.viewModel.link, this._getUrlPrefix());
2483
+ this._subscribeToThemeChanges();
2362
2484
  }
2363
- getNavigationGroup() {
2364
- return this.fEnvironment.getNavigation().find((x) => x.text === this.group);
2485
+ _subscribeToThemeChanges() {
2486
+ this._fState.theme$.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => this.updateTheme());
2365
2487
  }
2366
- getNavigationItem(group) {
2488
+ ngOnInit() {
2489
+ this._fPreviewGroupService.add(this);
2490
+ }
2491
+ _getNavigationGroup() {
2492
+ return this._fEnvironment.getNavigation().find((x) => x.text === this.group);
2493
+ }
2494
+ _getNavigationItem(group) {
2367
2495
  return group.items.find((x) => x.link === this.item);
2368
2496
  }
2369
2497
  updateTheme() {
2370
- this.src = this.fState.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image;
2371
- if (!this.src) {
2372
- this.src = this.viewModel?.image;
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
- normalizeLink(link, prefix) {
2377
- if (!this.isExternalLink(link)) {
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
- getUrlPrefix() {
2383
- return this.router.url.substring(0, this.router.url.lastIndexOf('/'));
2509
+ _getUrlPrefix() {
2510
+ return this._router.url.substring(0, this._router.url.lastIndexOf('/'));
2384
2511
  }
2385
- isExternalLink(href) {
2512
+ _isExternalLink(href) {
2386
2513
  return href.startsWith('www') || href.startsWith('http');
2387
2514
  }
2388
2515
  ngOnDestroy() {
2389
- this.subscriptions$.unsubscribe();
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: [{ token: FDocumentationEnvironmentService }, { token: FStateService }, { token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
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
- }], ctorParameters: () => [{ type: FDocumentationEnvironmentService }, { type: FStateService }, { type: i1.Router }, { type: i0.ChangeDetectorRef }] });
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
- { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FDocumentationEnvironmentService },
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<f-navigation-panel [class.visible]=\"isNavigationVisible\"></f-navigation-panel>\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:10px}.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 });
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
- { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FDocumentationEnvironmentService },
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<f-navigation-panel [class.visible]=\"isNavigationVisible\"></f-navigation-panel>\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:10px}.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"] }]
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,
@@ -2655,7 +2832,6 @@ class FHomePageComponent {
2655
2832
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2656
2833
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageComponent, isStandalone: true, selector: "f-home-page", providers: [
2657
2834
  FHomePageEnvironmentService,
2658
- { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
2659
2835
  { provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
2660
2836
  ], 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 });
2661
2837
  }
@@ -2663,7 +2839,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2663
2839
  type: Component,
2664
2840
  args: [{ selector: 'f-home-page', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2665
2841
  FHomePageEnvironmentService,
2666
- { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
2667
2842
  { provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
2668
2843
  ], imports: [
2669
2844
  FHomePageFooterComponent,
@@ -2702,5 +2877,5 @@ var index = /*#__PURE__*/Object.freeze({
2702
2877
  * Generated bundle index. Do not edit.
2703
2878
  */
2704
2879
 
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, F_HOME_PAGE_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, INTERNAL_ENVIRONMENT_SERVICE, MarkCodeFocusedBlocksPostProcessor, MarkdownService, ModifyPunctuationHighlightPostProcessor, ParseAlerts, ParseCodeGroup, ParseCodeView, ParseExampleGroup, ParsePreviewGroup, ScrollToElementInContainer, SeparateCodeByLinesPostProcessor, TableOfContentData, copyToClipboard, getContent, setCookieConsent };
2880
+ 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, 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_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
2881
  //# sourceMappingURL=foblex-m-render.mjs.map