@libs-ui/components-skeleton 0.2.10 → 0.2.11

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24taXRlbS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvc2tlbGV0b24vc3JjL2ludGVyZmFjZXMvc2tlbGV0b24taXRlbS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVNrZWxldG9uQ29uZmlnIHtcbiAgcmVwZWF0PzogbnVtYmVyO1xuICBoZWlnaHRDb250YWluZXI/OiBudW1iZXI7XG4gIGNsYXNzUm93cz86IHN0cmluZztcbiAgc3R5bGVNYXJnaW5Cb3R0b20/OiBudW1iZXI7XG4gIHJvd3M6IEFycmF5PHtcbiAgICByZXBlYXQ/OiBudW1iZXI7XG4gICAgY2xhc3NSb3c/OiBzdHJpbmc7XG4gICAgY2xhc3NSb3dMYXN0Pzogc3RyaW5nO1xuICAgIGl0ZW0/OiBJU2tlbGV0b25JdGVtO1xuICAgIGNsYXNzQ29scz86IHN0cmluZztcbiAgICBjbGFzc0NvbHNMYXN0Pzogc3RyaW5nO1xuICAgIGNvbHM/OiBBcnJheTx7XG4gICAgICByZXBlYXQ/OiBudW1iZXI7XG4gICAgICBjbGFzc0NvbD86IHN0cmluZztcbiAgICAgIGNsYXNzQ29sTGFzdD86IHN0cmluZztcbiAgICAgIGl0ZW0/OiBJU2tlbGV0b25JdGVtO1xuICAgIH0+O1xuICB9Pjtcbn1cblxuaW50ZXJmYWNlIElTa2VsZXRvbkl0ZW0ge1xuICBjbGFzc0luY2x1ZGVJdGVtPzogc3RyaW5nO1xuICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG4gIGNsYXNzPzogc3RyaW5nO1xuICBzdHlsZURlZmF1bHQ/OiBib29sZWFuO1xufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24taXRlbS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvc2tlbGV0b24vc3JjL2ludGVyZmFjZXMvc2tlbGV0b24taXRlbS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVNrZWxldG9uQ29uZmlnIHtcbiAgcmVwZWF0PzogbnVtYmVyO1xuICBoZWlnaHRDb250YWluZXI/OiBudW1iZXI7XG4gIGNsYXNzUm93cz86IHN0cmluZztcbiAgc3R5bGVNYXJnaW5Cb3R0b20/OiBudW1iZXI7XG4gIHJvd3M/OiBBcnJheTx7XG4gICAgcmVwZWF0PzogbnVtYmVyO1xuICAgIGNsYXNzUm93Pzogc3RyaW5nO1xuICAgIGNsYXNzUm93TGFzdD86IHN0cmluZztcbiAgICBpdGVtPzogSVNrZWxldG9uSXRlbTtcbiAgICBjbGFzc0NvbHM/OiBzdHJpbmc7XG4gICAgY2xhc3NDb2xzTGFzdD86IHN0cmluZztcbiAgICBjb2xzPzogQXJyYXk8e1xuICAgICAgcmVwZWF0PzogbnVtYmVyO1xuICAgICAgY2xhc3NDb2w/OiBzdHJpbmc7XG4gICAgICBjbGFzc0NvbExhc3Q/OiBzdHJpbmc7XG4gICAgICBpdGVtPzogSVNrZWxldG9uSXRlbTtcbiAgICB9PjtcbiAgfT47XG59XG5cbmludGVyZmFjZSBJU2tlbGV0b25JdGVtIHtcbiAgY2xhc3NJbmNsdWRlSXRlbT86IHN0cmluZztcbiAgY2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICBjbGFzcz86IHN0cmluZztcbiAgc3R5bGVEZWZhdWx0PzogYm9vbGVhbjtcbn0iXX0=
@@ -1,31 +1,35 @@
1
1
  import { NgTemplateOutlet } from "@angular/common";
2
- import { ChangeDetectionStrategy, Component, model, viewChild } from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, input, signal, viewChild } from "@angular/core";
3
3
  import * as i0 from "@angular/core";
4
4
  export class LibsUiComponentsSkeletonComponent {
5
- config = model({
6
- repeat: 1,
7
- heightContainer: 150,
8
- styleMarginBottom: 16,
9
- rows: [{
10
- item: {}
11
- }]
12
- });
5
+ configRender = signal({});
6
+ config = input({}, { transform: value => value || {} });
13
7
  skeletonRef = viewChild.required('skeletonRef');
14
8
  ngAfterViewInit() {
15
9
  setTimeout(() => {
16
- if (!this.config().repeat) {
17
- this.config.update(config => {
18
- config.repeat = Math.ceil((this.skeletonRef().nativeElement.offsetHeight / ((config.heightContainer || 1) + (config.styleMarginBottom || 0))) || 1);
19
- return { ...config };
20
- });
21
- }
10
+ this.configRender.update(config => {
11
+ config = this.config();
12
+ let offsetHeight = this.skeletonRef().nativeElement.offsetHeight;
13
+ if (!config.rows?.length) {
14
+ config.rows = [{ item: {} }];
15
+ }
16
+ if (!config.heightContainer) {
17
+ config.heightContainer = offsetHeight - (config.styleMarginBottom || 0);
18
+ }
19
+ if (config.repeat) {
20
+ offsetHeight = offsetHeight || config.heightContainer || config.styleMarginBottom || 0;
21
+ config.heightContainer = (offsetHeight / config.repeat) - (config.styleMarginBottom || 0);
22
+ }
23
+ config.repeat = Math.ceil((offsetHeight / ((config.heightContainer || 0) + (config.styleMarginBottom || 0))));
24
+ return { ...config };
25
+ });
22
26
  });
23
27
  }
24
28
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
25
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsSkeletonComponent, isStandalone: true, selector: "libs_ui-components-skeleton", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange" }, viewQueries: [{ propertyName: "skeletonRef", first: true, predicate: ["skeletonRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (config(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height]=\"config.heightContainer? config.heightContainer+'px':'100%'\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || firstRow && lastRow ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full' \">\n @for (item of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\"\n [style.height.px]=\"150\">\n </div>\n }\n </div>\n</ng-template>\n", styles: [".skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsSkeletonComponent, isStandalone: true, selector: "libs_ui-components-skeleton", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "skeletonRef", first: true, predicate: ["skeletonRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (configRender(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height.px]=\"config.heightContainer\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || (firstRow && lastRow) ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full h-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full h-full' \">\n @for (_ of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full h-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\">\n </div>\n }\n </div>\n</ng-template>\n", styles: ["@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
30
  }
27
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsSkeletonComponent, decorators: [{
28
32
  type: Component,
29
- args: [{ selector: 'libs_ui-components-skeleton', standalone: true, imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (config(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height]=\"config.heightContainer? config.heightContainer+'px':'100%'\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || firstRow && lastRow ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full' \">\n @for (item of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\"\n [style.height.px]=\"150\">\n </div>\n }\n </div>\n</ng-template>\n", styles: [".skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}\n"] }]
33
+ args: [{ selector: 'libs_ui-components-skeleton', standalone: true, imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (configRender(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height.px]=\"config.heightContainer\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || (firstRow && lastRow) ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full h-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full h-full' \">\n @for (_ of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full h-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\">\n </div>\n }\n </div>\n</ng-template>\n", styles: ["@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}\n"] }]
30
34
  }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3NrZWxldG9uL3NyYy9za2VsZXRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvc2tlbGV0b24vc3JjL3NrZWxldG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWWhILE1BQU0sT0FBTyxpQ0FBaUM7SUFFbkMsTUFBTSxHQUFHLEtBQUssQ0FBa0I7UUFDdkMsTUFBTSxFQUFFLENBQUM7UUFDVCxlQUFlLEVBQUUsR0FBRztRQUNwQixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLElBQUksRUFBRSxDQUFDO2dCQUNMLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQztLQUNILENBQUMsQ0FBQztJQUVNLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGFBQWEsQ0FBQyxDQUFDO0lBRXJFLGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzFCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFFcEosT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F2QlUsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsK1hDYjlDLDZsRUE0Q0EsMFREbENZLGdCQUFnQjs7NEZBR2YsaUNBQWlDO2tCQVQ3QyxTQUFTOytCQUVFLDZCQUE2QixjQUczQixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFDVix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIG1vZGVsLCB2aWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSVNrZWxldG9uQ29uZmlnIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9za2VsZXRvbi1pdGVtLmludGVyZmFjZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24nLFxuICB0ZW1wbGF0ZVVybDogJ3NrZWxldG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2tlbGV0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzU2tlbGV0b25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICByZWFkb25seSBjb25maWcgPSBtb2RlbDxJU2tlbGV0b25Db25maWc+KHtcbiAgICByZXBlYXQ6IDEsXG4gICAgaGVpZ2h0Q29udGFpbmVyOiAxNTAsXG4gICAgc3R5bGVNYXJnaW5Cb3R0b206IDE2LFxuICAgIHJvd3M6IFt7XG4gICAgICBpdGVtOiB7fVxuICAgIH1dXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNrZWxldG9uUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdza2VsZXRvblJlZicpO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcoKS5yZXBlYXQpIHtcbiAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKGNvbmZpZyA9PiB7XG4gICAgICAgICAgY29uZmlnLnJlcGVhdCA9IE1hdGguY2VpbCgodGhpcy5za2VsZXRvblJlZigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gKChjb25maWcuaGVpZ2h0Q29udGFpbmVyIHx8IDEpICsgKGNvbmZpZy5zdHlsZU1hcmdpbkJvdHRvbSB8fCAwKSkpIHx8IDEpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgLi4uY29uZmlnIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IiwiPGRpdiAjc2tlbGV0b25SZWZcbiAgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsXCI+XG4gIEBpZiAoY29uZmlnKCk7IGFzIGNvbmZpZykge1xuICAgIEBmb3IgKGNvbmZpZ1JlcGVhdCBvZiBbXS5jb25zdHJ1Y3Rvcihjb25maWcucmVwZWF0IHx8IDEpO3RyYWNrICRpbmRleDtsZXQgbGFzdEl0ZW0gPSAkbGFzdCkge1xuICAgICAgPGRpdiBbc3R5bGUubWFyZ2luQm90dG9tLnB4XT1cIihjb25maWcuc3R5bGVNYXJnaW5Cb3R0b20gJiYgIWxhc3RJdGVtKSA/IGNvbmZpZy5zdHlsZU1hcmdpbkJvdHRvbTowXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjb25maWcuaGVpZ2h0Q29udGFpbmVyPyBjb25maWcuaGVpZ2h0Q29udGFpbmVyKydweCc6JzEwMCUnXCJcbiAgICAgICAgW2NsYXNzXT1cIihjb25maWcuY2xhc3NSb3dzIHx8ICcnKSsnIGZsZXggZmxleC1jb2wnXCI+XG4gICAgICAgIEBmb3IgKHJvdyBvZiBjb25maWcucm93czt0cmFjayAkaW5kZXg7KSB7XG4gICAgICAgICAgQGZvciAocm93UmVwZWF0IG9mIFtdLmNvbnN0cnVjdG9yKHJvdy5yZXBlYXQgfHwgMSk7dHJhY2sgJGluZGV4O2xldCBmaXJzdFJvdyA9ICRmaXJzdDtsZXQgbGFzdFJvdyA9ICRsYXN0KSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtjbGFzc109XCIoKGxhc3RSb3cgfHwgZmlyc3RSb3cgJiYgbGFzdFJvdyA/IHJvdy5jbGFzc1Jvd0xhc3QgOiByb3cuY2xhc3NSb3cpIHx8ICcnKSsgJyBmbGV4IGZsZXgtY29sIHctZnVsbCdcIj5cbiAgICAgICAgICAgICAgQGlmIChyb3cuaXRlbSkge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVNrZWxldG9uOyBjb250ZXh0OiB7IGNvbmZpZyA6cm93Lml0ZW0gfVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiKChsYXN0Um93IHx8IGZpcnN0Um93ICYmIGxhc3RSb3cgPyByb3cuY2xhc3NDb2xzTGFzdCA6IHJvdy5jbGFzc0NvbHMpIHx8ICcnKSsnZmxleCB3LWZ1bGwnXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHJvdy5jb2xzO3RyYWNrICRpbmRleDspIHtcbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbFJlcGVhdCBvZiBbXS5jb25zdHJ1Y3Rvcihjb2wucmVwZWF0IHx8IDEpO3RyYWNrICRpbmRleDtsZXQgZmlyc3RDb2wgPSAkZmlyc3Q7bGV0IGxhc3RDb2wgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIigobGFzdENvbCB8fCBmaXJzdENvbCAmJiBsYXN0Q29sID8gY29sLmNsYXNzQ29sTGFzdCA6IGNvbC5jbGFzc0NvbCkgfHwgJycpKyAnIGZsZXggdy1mdWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVNrZWxldG9uOyBjb250ZXh0OiB7IGNvbmZpZyA6Y29sLml0ZW0gfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVTa2VsZXRvblxuICBsZXQtY29uZmlnPVwiY29uZmlnXCI+XG4gIDxkaXYgW2NsYXNzXT1cImNvbmZpZz8uY2xhc3NJbmNsdWRlIHx8ICd3LWZ1bGwnIFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgW10uY29uc3RydWN0b3IoY29uZmlnLnJlcGVhdCB8fCAxKTt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgc2tlbGV0b24gcm91bmRlZC1bOHB4XSB7eyBjb25maWc/LmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICBbY2xhc3MubWItWzE2cHhdXT1cImNvbmZpZz8uc3R5bGVEZWZhdWx0ICYmICFsYXN0XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIxNTBcIj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3NrZWxldG9uL3NyYy9za2VsZXRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvc2tlbGV0b24vc3JjL3NrZWxldG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVl4SCxNQUFNLE9BQU8saUNBQWlDO0lBQ2xDLFlBQVksR0FBRyxNQUFNLENBQWtCLEVBQUUsQ0FBQyxDQUFBO0lBRTNDLE1BQU0sR0FBRyxLQUFLLENBQStDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXRHLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGFBQWEsQ0FBQyxDQUFDO0lBRXJFLGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2hDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLGVBQWUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xCLFlBQVksR0FBRyxZQUFZLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDO29CQUN2RixNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDNUYsQ0FBQztnQkFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTlHLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNCVSxpQ0FBaUM7NEZBQWpDLGlDQUFpQywwVkNiOUMsbWpFQTJDQSwwVERqQ1ksZ0JBQWdCOzs0RkFHZixpQ0FBaUM7a0JBVDdDLFNBQVM7K0JBRUUsNkJBQTZCLGNBRzNCLElBQUksV0FDUCxDQUFDLGdCQUFnQixDQUFDLG1CQUNWLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5wdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElTa2VsZXRvbkNvbmZpZyB9IGZyb20gXCIuL2ludGVyZmFjZXMvc2tlbGV0b24taXRlbS5pbnRlcmZhY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXNrZWxldG9uJyxcbiAgdGVtcGxhdGVVcmw6ICdza2VsZXRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NrZWxldG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3RlY3RlZCBjb25maWdSZW5kZXIgPSBzaWduYWw8SVNrZWxldG9uQ29uZmlnPih7fSlcblxuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxJU2tlbGV0b25Db25maWcsIElTa2VsZXRvbkNvbmZpZyB8IHVuZGVmaW5lZD4oe30sIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCB7fSB9KTtcblxuICByZWFkb25seSBza2VsZXRvblJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignc2tlbGV0b25SZWYnKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ1JlbmRlci51cGRhdGUoY29uZmlnID0+IHtcbiAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgbGV0IG9mZnNldEhlaWdodCA9IHRoaXMuc2tlbGV0b25SZWYoKS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgaWYgKCFjb25maWcucm93cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uZmlnLnJvd3MgPSBbeyBpdGVtOiB7fSB9XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmZpZy5oZWlnaHRDb250YWluZXIpIHtcbiAgICAgICAgICBjb25maWcuaGVpZ2h0Q29udGFpbmVyID0gb2Zmc2V0SGVpZ2h0IC0gKGNvbmZpZy5zdHlsZU1hcmdpbkJvdHRvbSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnJlcGVhdCkge1xuICAgICAgICAgIG9mZnNldEhlaWdodCA9IG9mZnNldEhlaWdodCB8fCBjb25maWcuaGVpZ2h0Q29udGFpbmVyIHx8IGNvbmZpZy5zdHlsZU1hcmdpbkJvdHRvbSB8fCAwO1xuICAgICAgICAgIGNvbmZpZy5oZWlnaHRDb250YWluZXIgPSAob2Zmc2V0SGVpZ2h0IC8gY29uZmlnLnJlcGVhdCkgLSAoY29uZmlnLnN0eWxlTWFyZ2luQm90dG9tIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5yZXBlYXQgPSBNYXRoLmNlaWwoKG9mZnNldEhlaWdodCAvICgoY29uZmlnLmhlaWdodENvbnRhaW5lciB8fCAwKSArIChjb25maWcuc3R5bGVNYXJnaW5Cb3R0b20gfHwgMCkpKSk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uY29uZmlnIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIjxkaXYgI3NrZWxldG9uUmVmXG4gIGNsYXNzPVwidy1mdWxsIGgtZnVsbFwiPlxuICBAaWYgKGNvbmZpZ1JlbmRlcigpOyBhcyBjb25maWcpIHtcbiAgICBAZm9yIChjb25maWdSZXBlYXQgb2YgW10uY29uc3RydWN0b3IoY29uZmlnLnJlcGVhdCB8fCAxKTt0cmFjayAkaW5kZXg7bGV0IGxhc3RJdGVtID0gJGxhc3QpIHtcbiAgICAgIDxkaXYgW3N0eWxlLm1hcmdpbkJvdHRvbS5weF09XCIoY29uZmlnLnN0eWxlTWFyZ2luQm90dG9tICYmICFsYXN0SXRlbSkgPyBjb25maWcuc3R5bGVNYXJnaW5Cb3R0b206MFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29uZmlnLmhlaWdodENvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzc109XCIoY29uZmlnLmNsYXNzUm93cyB8fCAnJykrJyBmbGV4IGZsZXgtY29sJ1wiPlxuICAgICAgICBAZm9yIChyb3cgb2YgY29uZmlnLnJvd3M7dHJhY2sgJGluZGV4Oykge1xuICAgICAgICAgIEBmb3IgKHJvd1JlcGVhdCBvZiBbXS5jb25zdHJ1Y3Rvcihyb3cucmVwZWF0IHx8IDEpO3RyYWNrICRpbmRleDtsZXQgZmlyc3RSb3cgPSAkZmlyc3Q7bGV0IGxhc3RSb3cgPSAkbGFzdCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiKChsYXN0Um93IHx8IChmaXJzdFJvdyAmJiBsYXN0Um93KSA/IHJvdy5jbGFzc1Jvd0xhc3QgOiByb3cuY2xhc3NSb3cpIHx8ICcnKSsgJyBmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwnXCI+XG4gICAgICAgICAgICAgIEBpZiAocm93Lml0ZW0pIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVTa2VsZXRvbjsgY29udGV4dDogeyBjb25maWcgOnJvdy5pdGVtIH1cIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIigobGFzdFJvdyB8fCBmaXJzdFJvdyAmJiBsYXN0Um93ID8gcm93LmNsYXNzQ29sc0xhc3QgOiByb3cuY2xhc3NDb2xzKSB8fCAnJykrJ2ZsZXggdy1mdWxsJ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiByb3cuY29sczt0cmFjayAkaW5kZXg7KSB7XG4gICAgICAgICAgICAgICAgICBAZm9yIChjb2xSZXBlYXQgb2YgW10uY29uc3RydWN0b3IoY29sLnJlcGVhdCB8fCAxKTt0cmFjayAkaW5kZXg7bGV0IGZpcnN0Q29sID0gJGZpcnN0O2xldCBsYXN0Q29sID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIoKGxhc3RDb2wgfHwgZmlyc3RDb2wgJiYgbGFzdENvbCA/IGNvbC5jbGFzc0NvbExhc3QgOiBjb2wuY2xhc3NDb2wpIHx8ICcnKSsgJyBmbGV4IHctZnVsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVTa2VsZXRvbjsgY29udGV4dDogeyBjb25maWcgOmNvbC5pdGVtIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlU2tlbGV0b25cbiAgbGV0LWNvbmZpZz1cImNvbmZpZ1wiPlxuICA8ZGl2IFtjbGFzc109XCJjb25maWc/LmNsYXNzSW5jbHVkZSB8fCAndy1mdWxsIGgtZnVsbCcgXCI+XG4gICAgQGZvciAoXyBvZiBbXS5jb25zdHJ1Y3Rvcihjb25maWcucmVwZWF0IHx8IDEpO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBoLWZ1bGwgc2tlbGV0b24gcm91bmRlZC1bOHB4XSB7eyBjb25maWc/LmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICBbY2xhc3MubWItWzE2cHhdXT1cImNvbmZpZz8uc3R5bGVEZWZhdWx0ICYmICFsYXN0XCI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,33 +1,37 @@
1
1
  import { NgTemplateOutlet } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { model, viewChild, Component, ChangeDetectionStrategy } from '@angular/core';
3
+ import { signal, input, viewChild, Component, ChangeDetectionStrategy } from '@angular/core';
4
4
 
5
5
  class LibsUiComponentsSkeletonComponent {
6
- config = model({
7
- repeat: 1,
8
- heightContainer: 150,
9
- styleMarginBottom: 16,
10
- rows: [{
11
- item: {}
12
- }]
13
- });
6
+ configRender = signal({});
7
+ config = input({}, { transform: value => value || {} });
14
8
  skeletonRef = viewChild.required('skeletonRef');
15
9
  ngAfterViewInit() {
16
10
  setTimeout(() => {
17
- if (!this.config().repeat) {
18
- this.config.update(config => {
19
- config.repeat = Math.ceil((this.skeletonRef().nativeElement.offsetHeight / ((config.heightContainer || 1) + (config.styleMarginBottom || 0))) || 1);
20
- return { ...config };
21
- });
22
- }
11
+ this.configRender.update(config => {
12
+ config = this.config();
13
+ let offsetHeight = this.skeletonRef().nativeElement.offsetHeight;
14
+ if (!config.rows?.length) {
15
+ config.rows = [{ item: {} }];
16
+ }
17
+ if (!config.heightContainer) {
18
+ config.heightContainer = offsetHeight - (config.styleMarginBottom || 0);
19
+ }
20
+ if (config.repeat) {
21
+ offsetHeight = offsetHeight || config.heightContainer || config.styleMarginBottom || 0;
22
+ config.heightContainer = (offsetHeight / config.repeat) - (config.styleMarginBottom || 0);
23
+ }
24
+ config.repeat = Math.ceil((offsetHeight / ((config.heightContainer || 0) + (config.styleMarginBottom || 0))));
25
+ return { ...config };
26
+ });
23
27
  });
24
28
  }
25
29
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsSkeletonComponent, isStandalone: true, selector: "libs_ui-components-skeleton", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange" }, viewQueries: [{ propertyName: "skeletonRef", first: true, predicate: ["skeletonRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (config(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height]=\"config.heightContainer? config.heightContainer+'px':'100%'\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || firstRow && lastRow ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full' \">\n @for (item of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\"\n [style.height.px]=\"150\">\n </div>\n }\n </div>\n</ng-template>\n", styles: [".skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsSkeletonComponent, isStandalone: true, selector: "libs_ui-components-skeleton", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "skeletonRef", first: true, predicate: ["skeletonRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (configRender(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height.px]=\"config.heightContainer\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || (firstRow && lastRow) ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full h-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full h-full' \">\n @for (_ of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full h-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\">\n </div>\n }\n </div>\n</ng-template>\n", styles: ["@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
31
  }
28
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsSkeletonComponent, decorators: [{
29
33
  type: Component,
30
- args: [{ selector: 'libs_ui-components-skeleton', standalone: true, imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (config(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height]=\"config.heightContainer? config.heightContainer+'px':'100%'\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || firstRow && lastRow ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full' \">\n @for (item of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\"\n [style.height.px]=\"150\">\n </div>\n }\n </div>\n</ng-template>\n", styles: [".skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}\n"] }]
34
+ args: [{ selector: 'libs_ui-components-skeleton', standalone: true, imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #skeletonRef\n class=\"w-full h-full\">\n @if (configRender(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height.px]=\"config.heightContainer\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || (firstRow && lastRow) ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full h-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full h-full' \">\n @for (_ of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full h-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\">\n </div>\n }\n </div>\n</ng-template>\n", styles: ["@keyframes mo-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.skeleton{animation:mo-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,#bebebe33 25%,#8181813d 37%,#bebebe33 63%);background-size:400% 100%}\n"] }]
31
35
  }] });
32
36
 
33
37
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-skeleton.mjs","sources":["../../../../../libs-ui/components/skeleton/src/skeleton.component.ts","../../../../../libs-ui/components/skeleton/src/skeleton.component.html","../../../../../libs-ui/components/skeleton/src/libs-ui-components-skeleton.ts"],"sourcesContent":["import { NgTemplateOutlet } from \"@angular/common\";\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, model, viewChild } from \"@angular/core\";\nimport { ISkeletonConfig } from \"./interfaces/skeleton-item.interface\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-skeleton',\n templateUrl: 'skeleton.component.html',\n styleUrls: ['./skeleton.component.scss'],\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsSkeletonComponent implements AfterViewInit {\n\n readonly config = model<ISkeletonConfig>({\n repeat: 1,\n heightContainer: 150,\n styleMarginBottom: 16,\n rows: [{\n item: {}\n }]\n });\n\n readonly skeletonRef = viewChild.required<ElementRef>('skeletonRef');\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (!this.config().repeat) {\n this.config.update(config => {\n config.repeat = Math.ceil((this.skeletonRef().nativeElement.offsetHeight / ((config.heightContainer || 1) + (config.styleMarginBottom || 0))) || 1);\n\n return { ...config };\n });\n }\n });\n }\n}","<div #skeletonRef\n class=\"w-full h-full\">\n @if (config(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height]=\"config.heightContainer? config.heightContainer+'px':'100%'\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || firstRow && lastRow ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full' \">\n @for (item of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\"\n [style.height.px]=\"150\">\n </div>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAaa,iCAAiC,CAAA;IAEnC,MAAM,GAAG,KAAK,CAAkB;AACvC,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,eAAe,EAAE,GAAG;AACpB,QAAA,iBAAiB,EAAE,EAAE;AACrB,QAAA,IAAI,EAAE,CAAC;AACL,gBAAA,IAAI,EAAE;aACP;AACF,KAAA,CAAC;AAEO,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAa,aAAa,CAAC;IAEpE,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAG;AAC1B,oBAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEnJ,oBAAA,OAAO,EAAE,GAAG,MAAM,EAAE;AACtB,iBAAC,CAAC;;AAEN,SAAC,CAAC;;wGAtBO,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb9C,6lEA4CA,EAAA,MAAA,EAAA,CAAA,kQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlCY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGf,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAT7C,SAAS;+BAEE,6BAA6B,EAAA,UAAA,EAG3B,IAAI,EACP,OAAA,EAAA,CAAC,gBAAgB,CAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6lEAAA,EAAA,MAAA,EAAA,CAAA,kQAAA,CAAA,EAAA;;;AEXjD;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-components-skeleton.mjs","sources":["../../../../../libs-ui/components/skeleton/src/skeleton.component.ts","../../../../../libs-ui/components/skeleton/src/skeleton.component.html","../../../../../libs-ui/components/skeleton/src/libs-ui-components-skeleton.ts"],"sourcesContent":["import { NgTemplateOutlet } from \"@angular/common\";\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, input, signal, viewChild } from \"@angular/core\";\nimport { ISkeletonConfig } from \"./interfaces/skeleton-item.interface\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-skeleton',\n templateUrl: 'skeleton.component.html',\n styleUrls: ['./skeleton.component.scss'],\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsSkeletonComponent implements AfterViewInit {\n protected configRender = signal<ISkeletonConfig>({})\n\n readonly config = input<ISkeletonConfig, ISkeletonConfig | undefined>({}, { transform: value => value || {} });\n\n readonly skeletonRef = viewChild.required<ElementRef>('skeletonRef');\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.configRender.update(config => {\n config = this.config();\n let offsetHeight = this.skeletonRef().nativeElement.offsetHeight;\n if (!config.rows?.length) {\n config.rows = [{ item: {} }];\n }\n if (!config.heightContainer) {\n config.heightContainer = offsetHeight - (config.styleMarginBottom || 0);\n }\n if (config.repeat) {\n offsetHeight = offsetHeight || config.heightContainer || config.styleMarginBottom || 0;\n config.heightContainer = (offsetHeight / config.repeat) - (config.styleMarginBottom || 0);\n }\n config.repeat = Math.ceil((offsetHeight / ((config.heightContainer || 0) + (config.styleMarginBottom || 0))));\n\n return { ...config };\n });\n });\n }\n}","<div #skeletonRef\n class=\"w-full h-full\">\n @if (configRender(); as config) {\n @for (configRepeat of [].constructor(config.repeat || 1);track $index;let lastItem = $last) {\n <div [style.marginBottom.px]=\"(config.styleMarginBottom && !lastItem) ? config.styleMarginBottom:0\"\n [style.height.px]=\"config.heightContainer\"\n [class]=\"(config.classRows || '')+' flex flex-col'\">\n @for (row of config.rows;track $index;) {\n @for (rowRepeat of [].constructor(row.repeat || 1);track $index;let firstRow = $first;let lastRow = $last) {\n <div\n [class]=\"((lastRow || (firstRow && lastRow) ? row.classRowLast : row.classRow) || '')+ ' flex flex-col w-full h-full'\">\n @if (row.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :row.item }\" />\n }\n <div [class]=\"((lastRow || firstRow && lastRow ? row.classColsLast : row.classCols) || '')+'flex w-full'\">\n @for (col of row.cols;track $index;) {\n @for (colRepeat of [].constructor(col.repeat || 1);track $index;let firstCol = $first;let lastCol = $last) {\n <div\n [class]=\"((lastCol || firstCol && lastCol ? col.classColLast : col.classCol) || '')+ ' flex w-full'\">\n @if (col.item) {\n <ng-container *ngTemplateOutlet=\"templateSkeleton; context: { config :col.item }\" />\n }\n </div>\n }\n }\n </div>\n </div>\n }}\n </div>\n }\n }\n</div>\n\n<ng-template #templateSkeleton\n let-config=\"config\">\n <div [class]=\"config?.classInclude || 'w-full h-full' \">\n @for (_ of [].constructor(config.repeat || 1);track $index; let last = $last) {\n <div class=\"w-full h-full skeleton rounded-[8px] {{ config?.classIncludeItem || '' }}\"\n [class.mb-[16px]]=\"config?.styleDefault && !last\">\n </div>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAaa,iCAAiC,CAAA;AAClC,IAAA,YAAY,GAAG,MAAM,CAAkB,EAAE,CAAC;AAE3C,IAAA,MAAM,GAAG,KAAK,CAA+C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;AAErG,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAa,aAAa,CAAC;IAEpE,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAG;AAChC,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBACtB,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,YAAY;AAChE,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;oBACxB,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;;AAE9B,gBAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC3B,oBAAA,MAAM,CAAC,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC;;AAEzE,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,oBAAA,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC;AACtF,oBAAA,MAAM,CAAC,eAAe,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC;;AAE3F,gBAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAE;AAE7G,gBAAA,OAAO,EAAE,GAAG,MAAM,EAAE;AACtB,aAAC,CAAC;AACJ,SAAC,CAAC;;wGA1BO,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb9C,mjEA2CA,EAAA,MAAA,EAAA,CAAA,kQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjCY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGf,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAT7C,SAAS;+BAEE,6BAA6B,EAAA,UAAA,EAG3B,IAAI,EACP,OAAA,EAAA,CAAC,gBAAgB,CAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mjEAAA,EAAA,MAAA,EAAA,CAAA,kQAAA,CAAA,EAAA;;;AEXjD;;AAEG;;;;"}
@@ -3,7 +3,7 @@ export interface ISkeletonConfig {
3
3
  heightContainer?: number;
4
4
  classRows?: string;
5
5
  styleMarginBottom?: number;
6
- rows: Array<{
6
+ rows?: Array<{
7
7
  repeat?: number;
8
8
  classRow?: string;
9
9
  classRowLast?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/components-skeleton",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"
@@ -2,9 +2,10 @@ import { AfterViewInit, ElementRef } from "@angular/core";
2
2
  import { ISkeletonConfig } from "./interfaces/skeleton-item.interface";
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class LibsUiComponentsSkeletonComponent implements AfterViewInit {
5
- readonly config: import("@angular/core").ModelSignal<ISkeletonConfig>;
5
+ protected configRender: import("@angular/core").WritableSignal<ISkeletonConfig>;
6
+ readonly config: import("@angular/core").InputSignalWithTransform<ISkeletonConfig, ISkeletonConfig | undefined>;
6
7
  readonly skeletonRef: import("@angular/core").Signal<ElementRef<any>>;
7
8
  ngAfterViewInit(): void;
8
9
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsSkeletonComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsSkeletonComponent, "libs_ui-components-skeleton", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, { "config": "configChange"; }, never, never, true, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsSkeletonComponent, "libs_ui-components-skeleton", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
10
11
  }