@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.
- package/assets/styles/_variables.scss +13 -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/f-home-page.component.mjs +1 -4
- package/fesm2022/foblex-m-render.mjs +223 -48
- 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/package.json +1 -1
package/esm2022/lib/f-documentation/f-preview-group-filters/f-preview-group-filters.component.mjs
ADDED
@@ -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,
|
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,
|
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,
|
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();
|
2362
2484
|
}
|
2363
|
-
|
2364
|
-
|
2485
|
+
_subscribeToThemeChanges() {
|
2486
|
+
this._fState.theme$.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => this.updateTheme());
|
2365
2487
|
}
|
2366
|
-
|
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
|
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,
|
@@ -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,
|
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
|