@candy-kingdom/bonnie 0.27.1 → 0.27.3

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.
@@ -8,10 +8,10 @@ import { NgTemplateOutlet, JsonPipe } from '@angular/common';
8
8
  class DeviceService {
9
9
  devicePixelRatio = typeof window === "undefined" ? 1 : window.devicePixelRatio;
10
10
  isSSR = typeof window === "undefined";
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DeviceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DeviceService });
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: DeviceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: DeviceService });
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DeviceService, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: DeviceService, decorators: [{
15
15
  type: Injectable
16
16
  }] });
17
17
 
@@ -51,10 +51,10 @@ class EncodeURIComponentPipe {
51
51
  transform(value) {
52
52
  return encodeURIComponent(value);
53
53
  }
54
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: EncodeURIComponentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
55
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: EncodeURIComponentPipe, isStandalone: true, name: "encodeURIComponent" });
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: EncodeURIComponentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
55
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: EncodeURIComponentPipe, isStandalone: true, name: "encodeURIComponent" });
56
56
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: EncodeURIComponentPipe, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: EncodeURIComponentPipe, decorators: [{
58
58
  type: Pipe,
59
59
  args: [{ name: "encodeURIComponent", pure: true }]
60
60
  }] });
@@ -108,10 +108,10 @@ class IntersectionComponent {
108
108
  observer.unobserve(this._hostRef.nativeElement);
109
109
  }
110
110
  }
111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IntersectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: IntersectionComponent, isStandalone: true, selector: "bon-intersection", inputs: { session: { classPropertyName: "session", publicName: "session", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersected: "intersected" }, ngImport: i0, template: "<ng-content></ng-content>", isInline: true, styles: [":host{display:block}\n"] });
111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: IntersectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: IntersectionComponent, isStandalone: true, selector: "bon-intersection", inputs: { session: { classPropertyName: "session", publicName: "session", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersected: "intersected" }, ngImport: i0, template: "<ng-content></ng-content>", isInline: true, styles: [":host{display:block}\n"] });
113
113
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IntersectionComponent, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: IntersectionComponent, decorators: [{
115
115
  type: Component,
116
116
  args: [{ selector: "bon-intersection", template: "<ng-content></ng-content>", styles: [":host{display:block}\n"] }]
117
117
  }], ctorParameters: () => [], propDecorators: { intersected: [{ type: i0.Output, args: ["intersected"] }], session: [{ type: i0.Input, args: [{ isSignal: true, alias: "session", required: false }] }] } });
@@ -283,10 +283,10 @@ class SrcBaseDirective {
283
283
  const combinedObservable = merge(...queryObservables);
284
284
  return combinedObservable;
285
285
  }
286
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SrcBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
287
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: SrcBaseDirective, isStandalone: true, outputs: { ratioChange: "ratioChange" }, ngImport: i0 });
286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SrcBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
287
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: SrcBaseDirective, isStandalone: true, outputs: { ratioChange: "ratioChange" }, ngImport: i0 });
288
288
  }
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SrcBaseDirective, decorators: [{
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SrcBaseDirective, decorators: [{
290
290
  type: Directive
291
291
  }], ctorParameters: () => [], propDecorators: { ratioChange: [{ type: i0.Output, args: ["ratioChange"] }] } });
292
292
 
@@ -489,10 +489,10 @@ class LocalizePipe {
489
489
  }
490
490
  return this._localizeService.getLocalizedText(value, locale);
491
491
  }
492
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
493
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: LocalizePipe, isStandalone: true, name: "localize", pure: false });
492
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
493
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: LocalizePipe, isStandalone: true, name: "localize", pure: false });
494
494
  }
495
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizePipe, decorators: [{
495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizePipe, decorators: [{
496
496
  type: Pipe,
497
497
  args: [{ name: "localize", pure: false }]
498
498
  }] });
@@ -504,10 +504,10 @@ class LocalizeObjectPipe {
504
504
  }
505
505
  return this._localizeService.getLocalized(object, undefined, locale);
506
506
  }
507
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizeObjectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
508
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: LocalizeObjectPipe, isStandalone: true, name: "localizeObject", pure: false });
507
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizeObjectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
508
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: LocalizeObjectPipe, isStandalone: true, name: "localizeObject", pure: false });
509
509
  }
510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizeObjectPipe, decorators: [{
510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizeObjectPipe, decorators: [{
511
511
  type: Pipe,
512
512
  args: [{ name: "localizeObject", pure: false }]
513
513
  }] });
@@ -521,10 +521,10 @@ class LocalizationIsNotEmptyPipe {
521
521
  const isNotEmpty = text.trim().length > 0;
522
522
  return isNotEmpty;
523
523
  }
524
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizationIsNotEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
525
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: LocalizationIsNotEmptyPipe, isStandalone: true, name: "localizationIsNotEmpty", pure: false });
524
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizationIsNotEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
525
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: LocalizationIsNotEmptyPipe, isStandalone: true, name: "localizationIsNotEmpty", pure: false });
526
526
  }
527
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizationIsNotEmptyPipe, decorators: [{
527
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizationIsNotEmptyPipe, decorators: [{
528
528
  type: Pipe,
529
529
  args: [{ name: "localizationIsNotEmpty", pure: false }]
530
530
  }] });
@@ -538,10 +538,10 @@ class LocalizationIsEmptyPipe {
538
538
  const isEmpty = text.trim().length === 0;
539
539
  return isEmpty;
540
540
  }
541
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizationIsEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
542
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: LocalizationIsEmptyPipe, isStandalone: true, name: "localizationIsEmpty", pure: false });
541
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizationIsEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
542
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: LocalizationIsEmptyPipe, isStandalone: true, name: "localizationIsEmpty", pure: false });
543
543
  }
544
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizationIsEmptyPipe, decorators: [{
544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizationIsEmptyPipe, decorators: [{
545
545
  type: Pipe,
546
546
  args: [{ name: "localizationIsEmpty", pure: false }]
547
547
  }] });
@@ -556,10 +556,10 @@ class LocalizeUrlPipe {
556
556
  const safeUrl = this._domSanitizer.bypassSecurityTrustResourceUrl(urlString);
557
557
  return safeUrl;
558
558
  }
559
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizeUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
560
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: LocalizeUrlPipe, isStandalone: true, name: "localizeUrl", pure: false });
559
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizeUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
560
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: LocalizeUrlPipe, isStandalone: true, name: "localizeUrl", pure: false });
561
561
  }
562
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizeUrlPipe, decorators: [{
562
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: LocalizeUrlPipe, decorators: [{
563
563
  type: Pipe,
564
564
  args: [{ name: "localizeUrl", pure: false }]
565
565
  }] });
@@ -572,10 +572,10 @@ class IsLocalUrlPipe {
572
572
  const isLocal = this._localizeService.isLocalUrl(value, locale);
573
573
  return isLocal;
574
574
  }
575
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IsLocalUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
576
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: IsLocalUrlPipe, isStandalone: true, name: "isLocalUrl", pure: false });
575
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: IsLocalUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
576
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: IsLocalUrlPipe, isStandalone: true, name: "isLocalUrl", pure: false });
577
577
  }
578
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IsLocalUrlPipe, decorators: [{
578
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: IsLocalUrlPipe, decorators: [{
579
579
  type: Pipe,
580
580
  args: [{ name: "isLocalUrl", pure: false }]
581
581
  }] });
@@ -588,10 +588,10 @@ class IsNotLocalUrlPipe {
588
588
  const isLocal = this._localizeService.isLocalUrl(value, locale);
589
589
  return !isLocal;
590
590
  }
591
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IsNotLocalUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
592
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: IsNotLocalUrlPipe, isStandalone: true, name: "isNotLocalUrl", pure: false });
591
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: IsNotLocalUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
592
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: IsNotLocalUrlPipe, isStandalone: true, name: "isNotLocalUrl", pure: false });
593
593
  }
594
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IsNotLocalUrlPipe, decorators: [{
594
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: IsNotLocalUrlPipe, decorators: [{
595
595
  type: Pipe,
596
596
  args: [{ name: "isNotLocalUrl", pure: false }]
597
597
  }] });
@@ -613,10 +613,10 @@ function getDefaultSrc(image) {
613
613
 
614
614
  class ImageSrcDirective extends SrcBaseDirective {
615
615
  data = model(undefined, { ...(ngDevMode ? { debugName: "data" } : {}), alias: "imgsrc" });
616
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ImageSrcDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
617
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: ImageSrcDirective, isStandalone: true, selector: "[imgsrc]", inputs: { data: { classPropertyName: "data", publicName: "imgsrc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "imgsrcChange" }, usesInheritance: true, ngImport: i0 });
616
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ImageSrcDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
617
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: ImageSrcDirective, isStandalone: true, selector: "[imgsrc]", inputs: { data: { classPropertyName: "data", publicName: "imgsrc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "imgsrcChange" }, usesInheritance: true, ngImport: i0 });
618
618
  }
619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ImageSrcDirective, decorators: [{
619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ImageSrcDirective, decorators: [{
620
620
  type: Directive,
621
621
  args: [{
622
622
  selector: "[imgsrc]",
@@ -675,20 +675,20 @@ class MarcyImageComponent {
675
675
  onLoad() {
676
676
  this.status.set(MediaStatus.Loaded);
677
677
  }
678
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarcyImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
679
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MarcyImageComponent, isStandalone: true, selector: "bon-image", inputs: { objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoaded: "isLoaded" }, ngImport: i0, template: "@if (sources().length > 0) {\n <div [class.knownRatio]=\"src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"picture-container\">\n\n <ng-template #pictureTemplate>\n <picture>\n @for (source of sources(); track $index) {\n <source [srcset]=\"source.srcSet\"\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\n }\n <img [src]=\"defaultSrc()\" (load)=\"onLoad()\" alt=\"\" />\n </picture>\n </ng-template>\n\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n </noscript>\n } @else {\n <bon-intersection #intersectionZone [session]=\"src\">\n @if (intersectionZone.isIntersected()) {\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n }\n </bon-intersection>\n }\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() +'%'\"></div>\n }\n </div>\n}\n", styles: [":host{display:block}.picture-container{overflow:hidden}.picture-container.cover picture,.picture-container.cover bon-intersection,.picture-container.contain picture,.picture-container.contain bon-intersection,.picture-container.knownRatio picture,.picture-container.knownRatio bon-intersection{width:100%;height:100%}.picture-container.cover picture>img,.picture-container.cover bon-intersection>img,.picture-container.contain picture>img,.picture-container.contain bon-intersection>img,.picture-container.knownRatio picture>img,.picture-container.knownRatio bon-intersection>img{height:100%}.picture-container.cover{height:100%}.picture-container.cover picture>img{object-fit:cover}.picture-container.contain{height:100%}.picture-container.contain picture>img{object-fit:contain}.picture-container.knownRatio{position:relative}.picture-container.knownRatio picture{position:absolute}.picture-container.knownRatio picture>img{object-fit:fill}picture{display:block;backface-visibility:hidden}picture>img{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IntersectionComponent, selector: "bon-intersection", inputs: ["session"], outputs: ["intersected"] }] });
678
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarcyImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
679
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: MarcyImageComponent, isStandalone: true, selector: "bon-image", inputs: { objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoaded: "isLoaded" }, ngImport: i0, template: "@if (sources().length > 0) {\n <div [class.knownRatio]=\"src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"picture-container\">\n\n <ng-template #pictureTemplate>\n <picture>\n @for (source of sources(); track $index) {\n <source [srcset]=\"source.srcSet\"\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\n }\n <img [src]=\"defaultSrc()\" (load)=\"onLoad()\" alt=\"\" />\n </picture>\n </ng-template>\n\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n </noscript>\n } @else {\n <bon-intersection #intersectionZone [session]=\"src\">\n @if (intersectionZone.isIntersected()) {\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n }\n </bon-intersection>\n }\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() +'%'\"></div>\n }\n </div>\n}\n", styles: [":host{display:block}.picture-container{overflow:hidden}.picture-container.cover picture,.picture-container.cover bon-intersection,.picture-container.contain picture,.picture-container.contain bon-intersection,.picture-container.knownRatio picture,.picture-container.knownRatio bon-intersection{width:100%;height:100%}.picture-container.cover picture>img,.picture-container.cover bon-intersection>img,.picture-container.contain picture>img,.picture-container.contain bon-intersection>img,.picture-container.knownRatio picture>img,.picture-container.knownRatio bon-intersection>img{height:100%}.picture-container.cover{height:100%}.picture-container.cover picture>img{object-fit:cover}.picture-container.contain{height:100%}.picture-container.contain picture>img{object-fit:contain}.picture-container.knownRatio{position:relative}.picture-container.knownRatio picture{position:absolute}.picture-container.knownRatio picture>img{object-fit:fill}picture{display:block;backface-visibility:hidden}picture>img{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IntersectionComponent, selector: "bon-intersection", inputs: ["session"], outputs: ["intersected"] }] });
680
680
  }
681
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarcyImageComponent, decorators: [{
681
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarcyImageComponent, decorators: [{
682
682
  type: Component,
683
683
  args: [{ selector: "bon-image", imports: [NgTemplateOutlet, IntersectionComponent], template: "@if (sources().length > 0) {\n <div [class.knownRatio]=\"src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"picture-container\">\n\n <ng-template #pictureTemplate>\n <picture>\n @for (source of sources(); track $index) {\n <source [srcset]=\"source.srcSet\"\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\n }\n <img [src]=\"defaultSrc()\" (load)=\"onLoad()\" alt=\"\" />\n </picture>\n </ng-template>\n\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n </noscript>\n } @else {\n <bon-intersection #intersectionZone [session]=\"src\">\n @if (intersectionZone.isIntersected()) {\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n }\n </bon-intersection>\n }\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() +'%'\"></div>\n }\n </div>\n}\n", styles: [":host{display:block}.picture-container{overflow:hidden}.picture-container.cover picture,.picture-container.cover bon-intersection,.picture-container.contain picture,.picture-container.contain bon-intersection,.picture-container.knownRatio picture,.picture-container.knownRatio bon-intersection{width:100%;height:100%}.picture-container.cover picture>img,.picture-container.cover bon-intersection>img,.picture-container.contain picture>img,.picture-container.contain bon-intersection>img,.picture-container.knownRatio picture>img,.picture-container.knownRatio bon-intersection>img{height:100%}.picture-container.cover{height:100%}.picture-container.cover picture>img{object-fit:cover}.picture-container.contain{height:100%}.picture-container.contain picture>img{object-fit:contain}.picture-container.knownRatio{position:relative}.picture-container.knownRatio picture{position:absolute}.picture-container.knownRatio picture>img{object-fit:fill}picture{display:block;backface-visibility:hidden}picture>img{display:block;width:100%}\n"] }]
684
684
  }], ctorParameters: () => [], propDecorators: { isLoaded: [{ type: i0.Output, args: ["isLoaded"] }], objectFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectFit", required: false }] }] } });
685
685
 
686
686
  class VideoSrcDirective extends SrcBaseDirective {
687
687
  data = model(undefined, { ...(ngDevMode ? { debugName: "data" } : {}), alias: "vidsrc" });
688
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: VideoSrcDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
689
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: VideoSrcDirective, isStandalone: true, selector: "[vidsrc]", inputs: { data: { classPropertyName: "data", publicName: "vidsrc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "vidsrcChange" }, usesInheritance: true, ngImport: i0 });
688
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: VideoSrcDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
689
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: VideoSrcDirective, isStandalone: true, selector: "[vidsrc]", inputs: { data: { classPropertyName: "data", publicName: "vidsrc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "vidsrcChange" }, usesInheritance: true, ngImport: i0 });
690
690
  }
691
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: VideoSrcDirective, decorators: [{
691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: VideoSrcDirective, decorators: [{
692
692
  type: Directive,
693
693
  args: [{
694
694
  selector: "[vidsrc]",
@@ -801,10 +801,10 @@ class MarcyVideoComponent {
801
801
  }
802
802
  return undefined;
803
803
  }
804
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarcyVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
805
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MarcyVideoComponent, isStandalone: true, selector: "bon-video", inputs: { objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoaded: "isLoaded" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [class.knownRatio]=\"\n src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\n \"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"video-container\"\n>\n @if (device.isSSR) {\n <ng-container *ngTemplateOutlet=\"ssrTemplate\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"browserTemplate\"></ng-container>\n }\n\n <ng-template #videoTemplate>\n <video\n #video\n [src]=\"source()?.url ?? ''\"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted = true; video.play()\"\n playsInline\n autoplay\n loop\n muted\n ></video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n }\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() + '%'\"></div>\n }\n</div>\n", styles: [":host{display:block}.video-container{background-color:#000;overflow:hidden}.video-container.cover video,.video-container.cover bon-intersection,.video-container.contain video,.video-container.contain bon-intersection,.video-container.knownRatio video,.video-container.knownRatio bon-intersection{width:100%;height:100%}.video-container.cover{height:100%}.video-container.cover video{object-fit:cover}.video-container.contain{height:100%}.video-container.contain video{object-fit:contain}.video-container.knownRatio{position:relative}.video-container.knownRatio video{position:absolute;object-fit:fill}video{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IntersectionComponent, selector: "bon-intersection", inputs: ["session"], outputs: ["intersected"] }] });
804
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarcyVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
805
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: MarcyVideoComponent, isStandalone: true, selector: "bon-video", inputs: { objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoaded: "isLoaded" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [class.knownRatio]=\"\n src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\n \"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"video-container\"\n>\n @if (device.isSSR) {\n <ng-container *ngTemplateOutlet=\"ssrTemplate\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"browserTemplate\"></ng-container>\n }\n\n <ng-template #videoTemplate>\n <video\n #video\n [src]=\"source()?.url ?? ''\"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted = true; video.play()\"\n playsInline\n autoplay\n loop\n muted\n ></video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n }\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() + '%'\"></div>\n }\n</div>\n", styles: [":host{display:block}.video-container{background-color:#000;overflow:hidden}.video-container.cover video,.video-container.cover bon-intersection,.video-container.contain video,.video-container.contain bon-intersection,.video-container.knownRatio video,.video-container.knownRatio bon-intersection{width:100%;height:100%}.video-container.cover{height:100%}.video-container.cover video{object-fit:cover}.video-container.contain{height:100%}.video-container.contain video{object-fit:contain}.video-container.knownRatio{position:relative}.video-container.knownRatio video{position:absolute;object-fit:fill}video{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IntersectionComponent, selector: "bon-intersection", inputs: ["session"], outputs: ["intersected"] }] });
806
806
  }
807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarcyVideoComponent, decorators: [{
807
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarcyVideoComponent, decorators: [{
808
808
  type: Component,
809
809
  args: [{ selector: "bon-video", imports: [NgTemplateOutlet, IntersectionComponent], template: "<div\n [class.knownRatio]=\"\n src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\n \"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"video-container\"\n>\n @if (device.isSSR) {\n <ng-container *ngTemplateOutlet=\"ssrTemplate\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"browserTemplate\"></ng-container>\n }\n\n <ng-template #videoTemplate>\n <video\n #video\n [src]=\"source()?.url ?? ''\"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted = true; video.play()\"\n playsInline\n autoplay\n loop\n muted\n ></video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n }\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() + '%'\"></div>\n }\n</div>\n", styles: [":host{display:block}.video-container{background-color:#000;overflow:hidden}.video-container.cover video,.video-container.cover bon-intersection,.video-container.contain video,.video-container.contain bon-intersection,.video-container.knownRatio video,.video-container.knownRatio bon-intersection{width:100%;height:100%}.video-container.cover{height:100%}.video-container.cover video{object-fit:cover}.video-container.contain{height:100%}.video-container.contain video{object-fit:contain}.video-container.knownRatio{position:relative}.video-container.knownRatio video{position:absolute;object-fit:fill}video{display:block;width:100%}\n"] }]
810
810
  }], ctorParameters: () => [], propDecorators: { isLoaded: [{ type: i0.Output, args: ["isLoaded"] }], objectFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectFit", required: false }] }], videoRef: [{ type: i0.ViewChild, args: ["video", { isSignal: true }] }] } });
@@ -817,10 +817,10 @@ class MarcyMediaComponent {
817
817
  onLoad() {
818
818
  this.isLoaded.emit();
819
819
  }
820
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarcyMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
821
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MarcyMediaComponent, isStandalone: true, selector: "bon-media", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoaded: "isLoaded" }, ngImport: i0, template: "@if (src(); as mediaSrc) {\n @if (mediaSrc.type === 'image') {\n <bon-image\n [imgsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-image>\n } @else if (mediaSrc.type === 'video') {\n <bon-video\n [vidsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-video>\n }\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: MarcyImageComponent, selector: "bon-image", inputs: ["objectFit"], outputs: ["isLoaded"] }, { kind: "component", type: MarcyVideoComponent, selector: "bon-video", inputs: ["objectFit"], outputs: ["isLoaded"] }, { kind: "directive", type: VideoSrcDirective, selector: "[vidsrc]", inputs: ["vidsrc"], outputs: ["vidsrcChange"] }, { kind: "directive", type: ImageSrcDirective, selector: "[imgsrc]", inputs: ["imgsrc"], outputs: ["imgsrcChange"] }] });
820
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarcyMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
821
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: MarcyMediaComponent, isStandalone: true, selector: "bon-media", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isLoaded: "isLoaded" }, ngImport: i0, template: "@if (src(); as mediaSrc) {\n @if (mediaSrc.type === 'image') {\n <bon-image\n [imgsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-image>\n } @else if (mediaSrc.type === 'video') {\n <bon-video\n [vidsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-video>\n }\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: MarcyImageComponent, selector: "bon-image", inputs: ["objectFit"], outputs: ["isLoaded"] }, { kind: "component", type: MarcyVideoComponent, selector: "bon-video", inputs: ["objectFit"], outputs: ["isLoaded"] }, { kind: "directive", type: VideoSrcDirective, selector: "[vidsrc]", inputs: ["vidsrc"], outputs: ["vidsrcChange"] }, { kind: "directive", type: ImageSrcDirective, selector: "[imgsrc]", inputs: ["imgsrc"], outputs: ["imgsrcChange"] }] });
822
822
  }
823
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarcyMediaComponent, decorators: [{
823
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarcyMediaComponent, decorators: [{
824
824
  type: Component,
825
825
  args: [{ selector: "bon-media", imports: [MarcyImageComponent, MarcyVideoComponent, VideoSrcDirective, ImageSrcDirective], template: "@if (src(); as mediaSrc) {\n @if (mediaSrc.type === 'image') {\n <bon-image\n [imgsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-image>\n } @else if (mediaSrc.type === 'video') {\n <bon-video\n [vidsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-video>\n }\n}\n", styles: [":host{display:block}\n"] }]
826
826
  }], propDecorators: { isLoaded: [{ type: i0.Output, args: ["isLoaded"] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], objectFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectFit", required: false }] }] } });
@@ -837,27 +837,22 @@ class BoneMap extends Map {
837
837
 
838
838
  class BoneDirective {
839
839
  bone = model.required(...(ngDevMode ? [{ debugName: "bone" }] : []));
840
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
841
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: BoneDirective, isStandalone: true, selector: "[bonBoneDir]", inputs: { bone: { classPropertyName: "bone", publicName: "bone", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { bone: "boneChange" }, ngImport: i0 });
840
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
841
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: BoneDirective, isStandalone: true, selector: "[bonBoneDir]", inputs: { bone: { classPropertyName: "bone", publicName: "bone", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { bone: "boneChange" }, ngImport: i0 });
842
842
  }
843
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BoneDirective, decorators: [{
843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BoneDirective, decorators: [{
844
844
  type: Directive,
845
845
  args: [{
846
846
  selector: "[bonBoneDir]",
847
847
  }]
848
848
  }], propDecorators: { bone: [{ type: i0.Input, args: [{ isSignal: true, alias: "bone", required: true }] }, { type: i0.Output, args: ["boneChange"] }] } });
849
- const BONE_DIRECTIVE_WITH_INPUTS_AND_OUTPUTS = {
850
- directive: BoneDirective,
851
- inputs: ["bone"],
852
- outputs: ["boneChange"],
853
- };
854
849
 
855
850
  class SkeletonAnchorDirective {
856
851
  viewContainerRef = inject(ViewContainerRef);
857
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SkeletonAnchorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
858
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: SkeletonAnchorDirective, isStandalone: true, selector: "[bonSkeletonAnchor]", ngImport: i0 });
852
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SkeletonAnchorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
853
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: SkeletonAnchorDirective, isStandalone: true, selector: "[bonSkeletonAnchor]", ngImport: i0 });
859
854
  }
860
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SkeletonAnchorDirective, decorators: [{
855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SkeletonAnchorDirective, decorators: [{
861
856
  type: Directive,
862
857
  args: [{
863
858
  selector: "[bonSkeletonAnchor]",
@@ -866,15 +861,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
866
861
 
867
862
  class UnknownBoneComponent {
868
863
  bd = inject((BoneDirective), { host: true });
869
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UnknownBoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
870
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UnknownBoneComponent, isStandalone: true, selector: "bon-unknown-bone", hostDirectives: [{ directive: BoneDirective, inputs: ["bone", "bone"], outputs: ["boneChange", "boneChange"] }], ngImport: i0, template: `@if (bd.bone(); as bone) {
864
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: UnknownBoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
865
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: UnknownBoneComponent, isStandalone: true, selector: "bon-unknown-bone", hostDirectives: [{ directive: BoneDirective, inputs: ["bone", "bone"], outputs: ["boneChange", "boneChange"] }], ngImport: i0, template: `@if (bd.bone(); as bone) {
871
866
  <h2>unknown bone {{bone.type}}</h2>
872
867
  <div>{{bone | json}}</div>
873
868
  } @else{
874
869
  bone is undefined
875
870
  }`, isInline: true, styles: [":host{display:block;border:2px solid red;box-sizing:border-box}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }] });
876
871
  }
877
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UnknownBoneComponent, decorators: [{
872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: UnknownBoneComponent, decorators: [{
878
873
  type: Component,
879
874
  args: [{ selector: "bon-unknown-bone", imports: [JsonPipe], hostDirectives: [{ directive: BoneDirective, inputs: ["bone"], outputs: ["boneChange"] }], template: `@if (bd.bone(); as bone) {
880
875
  <h2>unknown bone {{bone.type}}</h2>
@@ -908,10 +903,10 @@ class SkeletonComponent {
908
903
  }
909
904
  });
910
905
  }
911
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
912
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.6", type: SkeletonComponent, isStandalone: true, selector: "bon-skeleton", inputs: { map: { classPropertyName: "map", publicName: "map", isSignal: true, isRequired: true, transformFunction: null }, bones: { classPropertyName: "bones", publicName: "bones", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "skeletonAnchor", first: true, predicate: SkeletonAnchorDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template bonSkeletonAnchor></ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: SkeletonAnchorDirective, selector: "[bonSkeletonAnchor]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
906
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
907
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: SkeletonComponent, isStandalone: true, selector: "bon-skeleton", inputs: { map: { classPropertyName: "map", publicName: "map", isSignal: true, isRequired: true, transformFunction: null }, bones: { classPropertyName: "bones", publicName: "bones", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "skeletonAnchor", first: true, predicate: SkeletonAnchorDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template bonSkeletonAnchor></ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: SkeletonAnchorDirective, selector: "[bonSkeletonAnchor]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
913
908
  }
914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SkeletonComponent, decorators: [{
909
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SkeletonComponent, decorators: [{
915
910
  type: Component,
916
911
  args: [{ selector: "bon-skeleton", imports: [SkeletonAnchorDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template bonSkeletonAnchor></ng-template>\n", styles: [":host{display:block}\n"] }]
917
912
  }], ctorParameters: () => [], propDecorators: { skeletonAnchor: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SkeletonAnchorDirective), { isSignal: true }] }], map: [{ type: i0.Input, args: [{ isSignal: true, alias: "map", required: true }] }], bones: [{ type: i0.Input, args: [{ isSignal: true, alias: "bones", required: true }] }] } });
@@ -920,5 +915,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
920
915
  * Generated bundle index. Do not edit.
921
916
  */
922
917
 
923
- export { BONE_DIRECTIVE_WITH_INPUTS_AND_OUTPUTS, BoneDirective, BoneMap, DeviceService, DeviceServiceBase, EncodeURIComponentPipe, ImageSrcDirective, IntersectionComponent, IsLocalUrlPipe, IsNotLocalUrlPipe, LocalizationIsEmptyPipe, LocalizationIsNotEmptyPipe, LocalizeObjectPipe, LocalizePipe, LocalizeServiceBase, LocalizeUrlPipe, MarcyImageComponent, MarcyMediaComponent, MarcyVideoComponent, MediaObjectFit, MediaStatus, PublishStatus, SizesWidthUnit, SkeletonAnchorDirective, SkeletonComponent, SrcBaseDirective, UnknownBoneComponent, VideoSrcDirective, emptyBone, emptyImage, emptyLocalizedString, emptyVideo, getDefaultSrc, toHtmlPictureSources };
918
+ export { BoneDirective, BoneMap, DeviceService, DeviceServiceBase, EncodeURIComponentPipe, ImageSrcDirective, IntersectionComponent, IsLocalUrlPipe, IsNotLocalUrlPipe, LocalizationIsEmptyPipe, LocalizationIsNotEmptyPipe, LocalizeObjectPipe, LocalizePipe, LocalizeServiceBase, LocalizeUrlPipe, MarcyImageComponent, MarcyMediaComponent, MarcyVideoComponent, MediaObjectFit, MediaStatus, PublishStatus, SizesWidthUnit, SkeletonAnchorDirective, SkeletonComponent, SrcBaseDirective, UnknownBoneComponent, VideoSrcDirective, emptyBone, emptyImage, emptyLocalizedString, emptyVideo, getDefaultSrc, toHtmlPictureSources };
924
919
  //# sourceMappingURL=candy-kingdom-bonnie.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"candy-kingdom-bonnie.mjs","sources":["../../../../libs/bonnie/src/lib/core/device.service.ts","../../../../libs/bonnie/src/lib/core/device.service.base.ts","../../../../libs/bonnie/src/lib/core/emptyBone.ts","../../../../libs/bonnie/src/lib/core/emptyImage.ts","../../../../libs/bonnie/src/lib/core/emptyLocalizedString.ts","../../../../libs/bonnie/src/lib/core/emptyVideo.ts","../../../../libs/bonnie/src/lib/core/encode-uri.pipe.ts","../../../../libs/bonnie/src/lib/core/intersection.component.ts","../../../../libs/bonnie/src/lib/core/MediaObjectFit.ts","../../../../libs/bonnie/src/lib/core/MediaStatus.ts","../../../../libs/bonnie/src/lib/core/utils.ts","../../../../libs/bonnie/src/lib/core/src.directive.ts","../../../../libs/bonnie/src/lib/generated/bone.ts","../../../../libs/bonnie/src/lib/generated/file-format.ts","../../../../libs/bonnie/src/lib/generated/file-meta.ts","../../../../libs/bonnie/src/lib/generated/file-src.ts","../../../../libs/bonnie/src/lib/generated/file-src-base.ts","../../../../libs/bonnie/src/lib/generated/i-equatable.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route-with-data.ts","../../../../libs/bonnie/src/lib/generated/i-have-skeleton.ts","../../../../libs/bonnie/src/lib/generated/i-page.ts","../../../../libs/bonnie/src/lib/generated/image.ts","../../../../libs/bonnie/src/lib/generated/image-meta.ts","../../../../libs/bonnie/src/lib/generated/image-source.ts","../../../../libs/bonnie/src/lib/generated/localized-object.ts","../../../../libs/bonnie/src/lib/generated/localized-string.ts","../../../../libs/bonnie/src/lib/generated/media-source.ts","../../../../libs/bonnie/src/lib/generated/media-source-base.ts","../../../../libs/bonnie/src/lib/generated/open-graph-data.ts","../../../../libs/bonnie/src/lib/generated/page.ts","../../../../libs/bonnie/src/lib/generated/page-base.ts","../../../../libs/bonnie/src/lib/generated/page-data.ts","../../../../libs/bonnie/src/lib/generated/pix-media.ts","../../../../libs/bonnie/src/lib/generated/pix-meta.ts","../../../../libs/bonnie/src/lib/generated/publish-status.ts","../../../../libs/bonnie/src/lib/generated/sizes-item.ts","../../../../libs/bonnie/src/lib/generated/sizes-width-unit.ts","../../../../libs/bonnie/src/lib/generated/svg-meta.ts","../../../../libs/bonnie/src/lib/generated/video.ts","../../../../libs/bonnie/src/lib/generated/video-meta.ts","../../../../libs/bonnie/src/lib/generated/video-source.ts","../../../../libs/bonnie/src/lib/generated/view.ts","../../../../libs/bonnie/src/lib/generated/index.ts","../../../../libs/bonnie/src/lib/localization/LocalizeServiceBase.ts","../../../../libs/bonnie/src/lib/localization/localize.pipe.ts","../../../../libs/bonnie/src/lib/marcy-image/getDefaultSrc.ts","../../../../libs/bonnie/src/lib/marcy-image/imgsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-image/toHtmlSources.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.html","../../../../libs/bonnie/src/lib/marcy-video/vidsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.html","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.ts","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.html","../../../../libs/bonnie/src/lib/skeleton/BoneMap.ts","../../../../libs/bonnie/src/lib/skeleton/bone.directive.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton-anchor.directive.ts","../../../../libs/bonnie/src/lib/skeleton/unknown-bone.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.html","../../../../libs/bonnie/src/candy-kingdom-bonnie.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\n\nimport type { DeviceServiceBase } from \"./device.service.base\";\n\n@Injectable()\nexport class DeviceService implements DeviceServiceBase {\n\tpublic readonly devicePixelRatio = typeof window === \"undefined\" ? 1 : window.devicePixelRatio;\n\tpublic readonly isSSR = typeof window === \"undefined\";\n}\n","export abstract class DeviceServiceBase {\n\tpublic abstract get isSSR(): boolean;\n\tpublic abstract get devicePixelRatio(): number;\n}\n","import type { Bone } from \"../generated\";\n\nexport function emptyBone(): Bone {\n\treturn {\n\t\tstyle: \"\",\n\t\tmediaQuery: \"\",\n\t\tenabled: true,\n\t\ttype: \"\",\n\t};\n}\n","import type { Image } from \"../generated\";\n\nexport function emptyImage(): Image {\n\treturn {\n\t\t$type: \"image\", // todo: remove\n\t\ttype: \"image\",\n\t\tsources: [],\n\t};\n}\n","import type { LocalizedString } from \"../generated\";\n\nexport function emptyLocalizedString(): LocalizedString {\n\treturn {};\n}\n","import type { Video } from \"../generated\";\n\nexport function emptyVideo(): Video {\n\treturn {\n\t\t$type: \"video\", // todo: remove\n\t\ttype: \"video\",\n\t\tsources: [],\n\t};\n}\n","import { Pipe, type PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"encodeURIComponent\", pure: true })\nexport class EncodeURIComponentPipe implements PipeTransform {\n\tpublic transform(value: string): string {\n\t\treturn encodeURIComponent(value);\n\t}\n}\n","import {\n\tComponent,\n\tDestroyRef,\n\tElementRef,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"bon-intersection\",\n\ttemplate: \"<ng-content></ng-content>\",\n\tstyles: [\":host{display:block}\"],\n})\nexport class IntersectionComponent {\n\tpublic readonly intersected = output<void>();\n\n\tpublic readonly session = input<unknown>();\n\n\tprivate readonly _hostRef = inject(ElementRef);\n\n\tprivate readonly _intersectionObserver?: IntersectionObserver;\n\tprivate readonly _isIntersected = signal<boolean>(false);\n\n\tpublic readonly isIntersected = this._isIntersected.asReadonly();\n\n\tprivate _session: unknown; // todo: remove\n\n\tconstructor() {\n\t\tif (typeof window === \"undefined\" || typeof IntersectionObserver === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._intersectionObserver = new IntersectionObserver(this.onIntersection.bind(this));\n\n\t\teffect(() => {\n\t\t\tif (this._isIntersected()) {\n\t\t\t\tthis.intersected.emit();\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst newSession = this.session();\n\n\t\t\tif (this._session === newSession) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(\"reset intersection Observer\");\n\t\t\tthis._session = newSession;\n\t\t\tthis.reset();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => this._intersectionObserver?.disconnect());\n\t}\n\n\tprivate reset(): void {\n\t\tif (this._intersectionObserver === undefined || this._intersectionObserver === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._intersectionObserver.unobserve(this._hostRef.nativeElement);\n\n\t\tthis._isIntersected.set(false);\n\n\t\tthis._intersectionObserver.observe(this._hostRef.nativeElement);\n\t}\n\n\tprivate onIntersection(\n\t\tentries: IntersectionObserverEntry[],\n\t\tobserver: IntersectionObserver,\n\t): void {\n\t\tif (entries.length > 1) {\n\t\t\tconsole.warn(\"multi entries!\");\n\t\t}\n\n\t\tconst isIntersecting = entries[0].isIntersecting;\n\t\tthis._isIntersected.set(isIntersecting);\n\n\t\tconsole.log(`intersected ${isIntersecting}`, this._hostRef.nativeElement);\n\n\t\t// only once will recieve intersection\n\t\tif (isIntersecting) {\n\t\t\tobserver.unobserve(this._hostRef.nativeElement);\n\t\t}\n\t}\n}\n","export enum MediaObjectFit {\n\tOriginal = \"Original\",\n\tCover = \"Cover\",\n\tContain = \"Contain\",\n}\n","export enum MediaStatus {\n\tNotSet = \"NotSet\",\n\tNotLoaded = \"NotLoaded\",\n\tLoading = \"Loading\",\n\tLoaded = \"Loaded\",\n}\n","import type * as M_CORE from \"../generated\";\n\n// https://stackoverflow.com/questions/42136098/array-groupby-in-typescript\n\nexport const groupBy = <T, K extends keyof any>(arr: T[], key: (i: T) => K) =>\n\tarr.reduce(\n\t\t(groups, item) => {\n\t\t\t(groups[key(item)] ||= []).push(item);\n\t\t\treturn groups;\n\t\t},\n\t\t{} as Record<K, T[]>,\n\t);\n\nexport function distinct<T>(value: T, index: number, array: T[]) {\n\treturn array.indexOf(value) === index;\n}\n\nexport function ascending(a: number, b: number) {\n\treturn a - b;\n}\n\nexport function ascendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\n\treturn (a: T, b: T) => ascending(sel(a), sel(b));\n}\n\nexport function descending(a: number, b: number) {\n\treturn b - a;\n}\n\nexport function descendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\n\treturn (a: T, b: T) => descending(sel(a), sel(b));\n}\n\nexport function generateSizesString(sizes: M_CORE.SizesItem[]): string {\n\tconst sizesString = sizes\n\t\t.sort((x) => x.width)\n\t\t.map((x) => `${x.mediaQuery} ${x.width}${x.unit.toLowerCase()}`.trim())\n\t\t.join(\",\");\n\n\treturn sizesString;\n}\n\nexport function matchesMediaQuery(mediaQuery?: string): boolean {\n\tconst isEmptyQuery =\n\t\tmediaQuery === null || mediaQuery === undefined || mediaQuery.trim().length === 0;\n\n\t// work for SSR and browser\n\tif (isEmptyQuery) {\n\t\treturn true;\n\t}\n\n\t// other queries disallowed in SSR\n\tif (typeof window === \"undefined\") {\n\t\treturn false;\n\t}\n\n\tconst mediaQueryList = window.matchMedia(mediaQuery);\n\n\treturn mediaQueryList.matches;\n}\n\nexport function isLocalUrlString(url: string): boolean {\n\tif (url === undefined || url === null || url.trim().length === 0) {\n\t\treturn true;\n\t}\n\n\tif (url.startsWith(\"//\")) {\n\t\treturn false;\n\t}\n\n\tif (url.startsWith(\"./\") || url.startsWith(\"/\")) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\ttype ModelSignal,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\n\nimport { fromEvent, merge, NEVER, type Observable, Subject, takeUntil } from \"rxjs\";\n\nimport type * as M_CORE from \"../generated\";\nimport * as utils from \"./utils\";\n\n@Directive()\nexport abstract class SrcBaseDirective<T extends M_CORE.Image | M_CORE.Video> {\n\tpublic readonly ratioChange = output<number>();\n\n\tprivate readonly _ratio = signal<number>(0);\n\tpublic readonly ratio = this._ratio.asReadonly();\n\n\tprivate readonly _queryChangeClearSubject = new Subject<void>();\n\n\tpublic abstract readonly data: ModelSignal<T | undefined>;\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ratio = this._ratio();\n\t\t\tthis.ratioChange.emit(ratio);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst val = this.data();\n\t\t\tthis.onSrcChange(val);\n\t\t});\n\t}\n\n\tprivate onSrcChange(val: T | undefined): void {\n\t\tif (val !== undefined && val !== null && val.sources.length === 0) {\n\t\t\tconsole.warn(\"image should have sources!\");\n\t\t\tthis.data.set(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\t// clear mediaQuery subscriptions\n\t\tthis._queryChangeClearSubject.next();\n\n\t\t// ratio\n\t\tthis._ratio.set(0);\n\n\t\tif (val === undefined || val.sources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst allRatios = val.sources\n\t\t\t.flatMap((x) => x.srcSet)\n\t\t\t.map((x) => x.meta.ratio)\n\t\t\t.filter(utils.distinct);\n\n\t\tif (allRatios.length === 1) {\n\t\t\t// same ratio for all\n\t\t\tthis._ratio.set(allRatios[0]);\n\t\t\treturn;\n\t\t}\n\n\t\t// todo: check if this needed to be unsubscribed\n\t\tthis.watchMediaQueries().subscribe(() => {\n\t\t\tthis.calcRatio();\n\t\t\tconsole.log(\"watchMediaQueries calcRatio\");\n\t\t});\n\n\t\tthis.calcRatio();\n\t}\n\n\tprivate calcRatio(): void {\n\t\tconst data = this.data();\n\t\tif (data === undefined || data === null || data.sources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = 0; i < data.sources.length; i++) {\n\t\t\tconst source = data.sources[i];\n\t\t\tconst srcRatios = source.srcSet\n\t\t\t\t.sort(utils.descendingT((x) => x.meta.width))\n\t\t\t\t.map((x) => x.meta.ratio)\n\t\t\t\t.filter(utils.distinct);\n\n\t\t\tif (srcRatios.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (srcRatios.length > 1) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`each source should have srcSet with same ratio. founded: ${srcRatios.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst ratio = srcRatios[0]; // most accurate ratio in biggest image\n\n\t\t\tif (source.mediaQuery.length === 0) {\n\t\t\t\tthis._ratio.set(ratio);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof window === \"undefined\" || typeof window.matchMedia === \"undefined\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst mediaQueryList = window.matchMedia(source.mediaQuery);\n\n\t\t\tif (mediaQueryList.matches) {\n\t\t\t\tthis._ratio.set(ratio);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic watchMediaQueries(): Observable<MediaQueryListEvent> {\n\t\tconsole.log(\"watchMediaQueries\");\n\t\tconst src = this.data();\n\n\t\tif (\n\t\t\tsrc === undefined ||\n\t\t\tsrc === null ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.matchMedia === \"undefined\"\n\t\t) {\n\t\t\treturn NEVER.pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttakeUntil(this._queryChangeClearSubject),\n\t\t\t);\n\t\t}\n\n\t\tconst mediaQueries = src.sources\n\t\t\t.map((x) => x.mediaQuery)\n\t\t\t.filter(utils.distinct)\n\t\t\t.filter((x) => x.length > 0);\n\n\t\tconsole.log(\"watchMediaQueries mediaQueries\", mediaQueries);\n\t\tconst queryObservables = mediaQueries.map((media) => {\n\t\t\tconst queryList = window.matchMedia(media);\n\t\t\tconst observable = fromEvent<MediaQueryListEvent>(queryList, \"change\").pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttakeUntil(this._queryChangeClearSubject),\n\t\t\t);\n\n\t\t\treturn observable;\n\t\t});\n\n\t\tconst combinedObservable = merge(...queryObservables);\n\t\treturn combinedObservable;\n\t}\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface Bone {\n\tstyle: string;\n\tmediaQuery: string;\n\tenabled: boolean;\n\ttype: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface FileFormat {\n\textension: string;\n\tmimeType: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface FileMeta {\n\tbyteCount: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileMeta } from \"./file-meta\";\nimport type { FileSrcBase } from \"./file-src-base\";\n\nexport interface FileSrc<T extends FileMeta> extends FileSrcBase {\n\tmeta: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface FileSrcBase {\n\tmimeType: string;\n\turl: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport type IEquatable<_T> = {};\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface IHaveDataRoute {\n\tdataRoute: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { IHaveDataRoute } from \"./i-have-data-route\";\n\nexport interface IHaveDataRouteWithData<T> extends IHaveDataRoute {\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Bone } from \"./bone\";\n\nexport interface IHaveSkeleton {\n\tbones: Bone[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PageData } from \"./page-data\";\n\nexport interface IPage<TData extends PageData> {\n\tdata: TData;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { ImageSource } from \"./image-source\";\nimport type { PixMedia } from \"./pix-media\";\n\nexport interface Image extends PixMedia {\n\treadonly $type: \"image\";\n\tsources: ImageSource[];\n\ttype: \"image\";\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMeta } from \"./pix-meta\";\n\nexport interface ImageMeta extends PixMeta {}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { ImageMeta } from \"./image-meta\";\nimport type { MediaSource } from \"./media-source\";\nimport type { SizesItem } from \"./sizes-item\";\n\nexport interface ImageSource extends MediaSource<ImageMeta> {\n\tsizes: SizesItem[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface LocalizedObject<T> {\n\t[locale: string]: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { LocalizedObject } from \"./localized-object\";\n\nexport interface LocalizedString extends LocalizedObject<string> {}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileMeta } from \"./file-meta\";\nimport type { FileSrc } from \"./file-src\";\nimport type { MediaSourceBase } from \"./media-source-base\";\n\nexport interface MediaSource<TMeta extends FileMeta> extends MediaSourceBase {\n\tsrcSet: FileSrc<TMeta>[];\n\tmediaQuery: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcBase } from \"./file-src-base\";\n\nexport interface MediaSourceBase {\n\tsrcSet: FileSrcBase[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrc } from \"./file-src\";\nimport type { ImageMeta } from \"./image-meta\";\nimport type { LocalizedObject } from \"./localized-object\";\nimport type { LocalizedString } from \"./localized-string\";\n\nexport interface OpenGraphData {\n\ttitle: LocalizedString;\n\tdescription: LocalizedString;\n\timage: LocalizedObject<FileSrc<ImageMeta>>;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PageBase } from \"./page-base\";\nimport type { PageData } from \"./page-data\";\n\nexport interface Page<T extends PageData> extends PageBase {\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Bone } from \"./bone\";\nimport type { LocalizedString } from \"./localized-string\";\nimport type { OpenGraphData } from \"./open-graph-data\";\nimport type { PublishStatus } from \"./publish-status\";\n\nexport interface PageBase {\n\tid: string;\n\turl: string;\n\troute: string;\n\torder: number;\n\tpublishStatus: PublishStatus;\n\ttitle: LocalizedString;\n\topenGraph: OpenGraphData;\n\tbones: Bone[];\n\tchildren: PageBase[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface PageData {\n\ttype: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { MediaSourceBase } from \"./media-source-base\";\n\nexport interface PixMedia {\n\tsources: MediaSourceBase[];\n\ttype: \"image\" | \"video\";\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileMeta } from \"./file-meta\";\n\nexport interface PixMeta extends FileMeta {\n\twidth: number;\n\theight: number;\n\tratio: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport enum PublishStatus {\n\tNotSet = 0,\n\tDraft = 1,\n\tPublished = 2,\n\tArchived = 3,\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SizesWidthUnit } from \"./sizes-width-unit\";\n\nexport interface SizesItem {\n\twidth: number;\n\tunit: SizesWidthUnit;\n\tmediaQuery: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport enum SizesWidthUnit {\n\tPx = \"Px\",\n\tEm = \"Em\",\n\tVw = \"Vw\",\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMeta } from \"./pix-meta\";\n\nexport interface SvgMeta extends PixMeta {\n\tpreciseWidth: number;\n\tpreciseHeight: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMedia } from \"./pix-media\";\nimport type { VideoSource } from \"./video-source\";\n\nexport interface Video extends PixMedia {\n\treadonly $type: \"video\";\n\tsources: VideoSource[];\n\ttype: \"video\";\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMeta } from \"./pix-meta\";\n\nexport interface VideoMeta extends PixMeta {\n\tduration: number;\n\tfullFormat: string;\n\thasAudio: boolean;\n\tframeRate: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { MediaSource } from \"./media-source\";\nimport type { VideoMeta } from \"./video-meta\";\n\nexport interface VideoSource extends MediaSource<VideoMeta> {}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Bone } from \"./bone\";\n\nexport interface View {\n\tid: string;\n\tcode: string;\n\tbones: Bone[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport * from \"./bone\";\nexport * from \"./file-format\";\nexport * from \"./file-meta\";\nexport * from \"./file-src\";\nexport * from \"./file-src-base\";\nexport * from \"./i-equatable\";\nexport * from \"./i-have-data-route\";\nexport * from \"./i-have-data-route-with-data\";\nexport * from \"./i-have-skeleton\";\nexport * from \"./i-page\";\nexport * from \"./image\";\nexport * from \"./image-meta\";\nexport * from \"./image-source\";\nexport * from \"./localized-object\";\nexport * from \"./localized-string\";\nexport * from \"./media-source\";\nexport * from \"./media-source-base\";\nexport * from \"./open-graph-data\";\nexport * from \"./page\";\nexport * from \"./page-base\";\nexport * from \"./page-data\";\nexport * from \"./pix-media\";\nexport * from \"./pix-meta\";\nexport * from \"./publish-status\";\nexport * from \"./sizes-item\";\nexport * from \"./sizes-width-unit\";\nexport * from \"./svg-meta\";\nexport * from \"./video\";\nexport * from \"./video-meta\";\nexport * from \"./video-source\";\nexport * from \"./view\";\n","import type { Signal } from \"@angular/core\";\n\nimport { isLocalUrlString } from \"../core/utils\";\nimport type { LocalizedObject, LocalizedString } from \"../generated\";\n\nexport abstract class LocalizeServiceBase {\n\tpublic abstract get locale(): Signal<string>;\n\n\tpublic getLocalized<T>(value: LocalizedObject<T>, defaultValue: T, locale?: string): T {\n\t\tif (value === undefined) {\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\tlocale = locale ?? this.locale();\n\n\t\tconst obj = value[locale] ?? defaultValue;\n\t\treturn obj;\n\t}\n\n\tpublic getLocalizedText(value: LocalizedString, locale?: string): string {\n\t\treturn this.getLocalized<string>(value, \"\", locale);\n\t}\n\n\tpublic isLocalUrl(value: LocalizedString, locale?: string): boolean {\n\t\tconst url = this.getLocalizedText(value, locale);\n\t\treturn isLocalUrlString(url);\n\t}\n}\n","import { inject, Pipe, type PipeTransform } from \"@angular/core\";\nimport { DomSanitizer, type SafeResourceUrl } from \"@angular/platform-browser\";\n\nimport type { LocalizedObject, LocalizedString } from \"../generated\";\nimport { LocalizeServiceBase } from \"./LocalizeServiceBase\";\n\n@Pipe({ name: \"localize\", pure: false })\nexport class LocalizePipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): string {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this._localizeService.getLocalizedText(value, locale);\n\t}\n}\n\n@Pipe({ name: \"localizeObject\", pure: false })\nexport class LocalizeObjectPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform<T>(object: LocalizedObject<T>, locale?: string): T | undefined {\n\t\tif (object === undefined || object === null) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this._localizeService.getLocalized<T | undefined>(object, undefined, locale);\n\t}\n}\n\n@Pipe({ name: \"localizationIsNotEmpty\", pure: false })\nexport class LocalizationIsNotEmptyPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst text = this._localizeService.getLocalizedText(value, locale);\n\n\t\tconst isNotEmpty = text.trim().length > 0;\n\t\treturn isNotEmpty;\n\t}\n}\n\n@Pipe({ name: \"localizationIsEmpty\", pure: false })\nexport class LocalizationIsEmptyPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst text = this._localizeService.getLocalizedText(value, locale);\n\n\t\tconst isEmpty = text.trim().length === 0;\n\t\treturn isEmpty;\n\t}\n}\n\n@Pipe({ name: \"localizeUrl\", pure: false })\nexport class LocalizeUrlPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\tprivate readonly _domSanitizer = inject(DomSanitizer);\n\n\tpublic transform(value: LocalizedString, locale?: string): SafeResourceUrl {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst urlString = this._localizeService.getLocalizedText(value, locale);\n\t\tconst safeUrl = this._domSanitizer.bypassSecurityTrustResourceUrl(urlString);\n\t\treturn safeUrl;\n\t}\n}\n\n@Pipe({ name: \"isLocalUrl\", pure: false })\nexport class IsLocalUrlPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst isLocal = this._localizeService.isLocalUrl(value, locale);\n\t\treturn isLocal;\n\t}\n}\n\n@Pipe({ name: \"isNotLocalUrl\", pure: false })\nexport class IsNotLocalUrlPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst isLocal = this._localizeService.isLocalUrl(value, locale);\n\t\treturn !isLocal;\n\t}\n}\n","import * as utils from \"../core/utils\";\nimport type * as M_CORE from \"../generated\";\n\nexport function getDefaultSrc(\n\timage: M_CORE.Image | undefined,\n): M_CORE.FileSrc<M_CORE.ImageMeta> | undefined {\n\tif (image === undefined || image === null) {\n\t\treturn undefined;\n\t}\n\n\tconst files = image.sources.flatMap((x) => x.srcSet).sort(utils.descendingT((x) => x.meta.width));\n\n\tconst prefferedFiles = files.filter(\n\t\t(x) => x.mimeType === \"image/jpeg\" || x.mimeType === \"image/png\" || x.mimeType === \"image/gif\",\n\t);\n\n\tif (prefferedFiles.length > 0) {\n\t\treturn prefferedFiles[0];\n\t}\n\n\tif (files.length > 0) {\n\t\treturn files[0];\n\t}\n\n\treturn undefined;\n}\n","import { Directive, model } from \"@angular/core\";\n\nimport { SrcBaseDirective } from \"../core/src.directive\";\nimport type * as M_CORE from \"../generated\";\n\n@Directive({\n\tselector: \"[imgsrc]\",\n})\nexport class ImageSrcDirective extends SrcBaseDirective<M_CORE.Image> {\n\tpublic readonly data = model<M_CORE.Image | undefined>(undefined, { alias: \"imgsrc\" });\n}\n","import * as utils from \"../core/utils\";\nimport type * as M_CORE from \"../generated\";\nimport type { IHtmlPictureSource } from \"./IHtmlPictureSource\";\n\nexport function toHtmlPictureSources(imageSource: M_CORE.ImageSource): IHtmlPictureSource[] {\n\tconst sizes = utils.generateSizesString(imageSource.sizes);\n\tconst groupedByMime = utils.groupBy(imageSource.srcSet, (x) => x.mimeType);\n\n\tconst simpleSources: IHtmlPictureSource[] = [];\n\n\tfor (const mime in groupedByMime) {\n\t\tconst fileSrcs = groupedByMime[mime].sort(utils.ascendingT((x) => x.meta.width));\n\n\t\tconst srcSet = fileSrcs.map((x) => `${x.url} ${x.meta.width}w`).join(\",\");\n\n\t\tconst source: IHtmlPictureSource = { mime, sizes, srcSet, media: imageSource.mediaQuery };\n\n\t\tsimpleSources.push(source);\n\t}\n\n\treturn simpleSources;\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, effect, inject, input, output, signal } from \"@angular/core\";\n\nimport { DeviceServiceBase } from \"../core/device.service.base\";\nimport { IntersectionComponent } from \"../core/intersection.component\";\nimport { MediaObjectFit } from \"../core/MediaObjectFit\";\nimport { MediaStatus } from \"../core/MediaStatus\";\nimport type * as M_CORE from \"../generated\";\nimport { getDefaultSrc } from \"./getDefaultSrc\";\nimport type { IHtmlPictureSource } from \"./IHtmlPictureSource\";\nimport { ImageSrcDirective } from \"./imgsrc.directive\";\nimport { toHtmlPictureSources } from \"./toHtmlSources\";\n\n@Component({\n\tselector: \"bon-image\",\n\n\timports: [NgTemplateOutlet, IntersectionComponent],\n\ttemplateUrl: \"./marcy-image.component.html\",\n\tstyleUrl: \"./marcy-image.component.scss\",\n})\nexport class MarcyImageComponent {\n\tpublic readonly MediaStatus = MediaStatus;\n\tpublic readonly MarcyObjectFit = MediaObjectFit;\n\n\tpublic readonly src: ImageSrcDirective;\n\n\tpublic readonly isLoaded = output<void>();\n\tpublic readonly objectFit = input<MediaObjectFit>(MediaObjectFit.Original);\n\n\tpublic readonly sources = signal<IHtmlPictureSource[]>([]);\n\tpublic readonly status = signal<MediaStatus>(MediaStatus.NotSet);\n\tpublic readonly defaultSrc = signal(\"\");\n\n\tpublic readonly device = inject(DeviceServiceBase);\n\n\tconstructor() {\n\t\tconst src = inject(ImageSrcDirective, { optional: true });\n\n\t\tif (src === undefined || src === null) {\n\t\t\tthrow new Error(\n\t\t\t\t`${MarcyImageComponent.name} should have [imgsrc] directive as source object`,\n\t\t\t);\n\t\t}\n\n\t\tthis.src = src;\n\n\t\teffect(() => {\n\t\t\tthis.onSrcChange(this.src.data());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (this.status() === MediaStatus.Loaded) {\n\t\t\t\tthis.isLoaded.emit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate onSrcChange(val: M_CORE.Image | undefined) {\n\t\tthis.defaultSrc.set(getDefaultSrc(val)?.url ?? \"\");\n\n\t\tif (val === undefined || val === null || val.sources.length === 0) {\n\t\t\tthis.sources.set([]);\n\t\t\tthis.status.set(MediaStatus.NotSet);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newSources = val.sources.flatMap(toHtmlPictureSources);\n\t\tthis.sources.set(newSources);\n\t\tthis.status.set(MediaStatus.NotLoaded);\n\t}\n\n\tpublic onLoad() {\n\t\tthis.status.set(MediaStatus.Loaded);\n\t}\n}\n","@if (sources().length > 0) {\n <div [class.knownRatio]=\"src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"picture-container\">\n\n <ng-template #pictureTemplate>\n <picture>\n @for (source of sources(); track $index) {\n <source [srcset]=\"source.srcSet\"\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\n }\n <img [src]=\"defaultSrc()\" (load)=\"onLoad()\" alt=\"\" />\n </picture>\n </ng-template>\n\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n </noscript>\n } @else {\n <bon-intersection #intersectionZone [session]=\"src\">\n @if (intersectionZone.isIntersected()) {\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n }\n </bon-intersection>\n }\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() +'%'\"></div>\n }\n </div>\n}\n","import { Directive, model } from \"@angular/core\";\n\nimport { SrcBaseDirective } from \"../core/src.directive\";\nimport type * as M_CORE from \"../generated\";\n\n@Directive({\n\tselector: \"[vidsrc]\",\n})\nexport class VideoSrcDirective extends SrcBaseDirective<M_CORE.Video> {\n\tpublic readonly data = model<M_CORE.Video | undefined>(undefined, { alias: \"vidsrc\" });\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport {\n\tComponent,\n\ttype ElementRef,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\n\nimport { DeviceServiceBase } from \"../core/device.service.base\";\nimport { IntersectionComponent } from \"../core/intersection.component\";\nimport { MediaObjectFit } from \"../core/MediaObjectFit\";\nimport { MediaStatus } from \"../core/MediaStatus\";\nimport { descendingT, matchesMediaQuery } from \"../core/utils\";\nimport type * as M_CORE from \"../generated\";\nimport { VideoSrcDirective } from \"./vidsrc.directive\";\n\nfunction isWebM(src: M_CORE.FileSrc<M_CORE.ImageMeta>): boolean {\n\treturn src.mimeType === \"video/webm\";\n}\n\n@Component({\n\tselector: \"bon-video\",\n\n\timports: [NgTemplateOutlet, IntersectionComponent],\n\ttemplateUrl: \"./marcy-video.component.html\",\n\tstyleUrl: \"./marcy-video.component.scss\",\n})\nexport class MarcyVideoComponent {\n\tpublic readonly MediaStatus = MediaStatus;\n\tpublic readonly MarcyObjectFit = MediaObjectFit;\n\n\tpublic readonly src: VideoSrcDirective;\n\n\tpublic readonly isLoaded = output<void>();\n\n\tpublic readonly objectFit = input<MediaObjectFit>(MediaObjectFit.Original);\n\n\tpublic readonly videoRef = viewChild<ElementRef<HTMLVideoElement>>(\"video\");\n\n\tpublic readonly status = signal<MediaStatus>(MediaStatus.NotSet);\n\tpublic readonly source = signal<M_CORE.FileSrc<M_CORE.VideoMeta> | undefined>(undefined);\n\n\tpublic readonly device = inject(DeviceServiceBase);\n\n\tprivate readonly _srcDir = inject(VideoSrcDirective, { optional: true });\n\n\tconstructor() {\n\t\tif (this._srcDir === undefined || this._srcDir === null) {\n\t\t\tthrow new Error(\n\t\t\t\t`${MarcyVideoComponent.name} should have [vidsrc] directive as source object`,\n\t\t\t);\n\t\t}\n\n\t\tthis.src = this._srcDir;\n\n\t\teffect(() => {\n\t\t\tthis.src.data();\n\t\t\tthis.videoRef();\n\t\t\tthis.updateSources();\n\t\t\tthis.subscribeToMediaQueryChange();\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (this.status() === MediaStatus.Loaded) {\n\t\t\t\tthis.isLoaded.emit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToMediaQueryChange(): void {\n\t\tthis.src.watchMediaQueries().subscribe(() => {\n\t\t\tconsole.log(\"MarcyVideoComponent watchMediaQueries\");\n\t\t\tthis.updateSources();\n\t\t});\n\t}\n\n\tprivate updateSources() {\n\t\tconsole.log(\"MarcyVideoComponent updateSources\");\n\n\t\tthis.source.set(this.findMoreSuitableSource());\n\n\t\tconsole.log(\"MarcyVideoComponent new source\", this.source());\n\n\t\tconst src = this.source();\n\n\t\tif (this.status() === MediaStatus.NotSet && src === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (src === undefined) {\n\t\t\tthis.status.set(MediaStatus.NotSet);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.status.set(MediaStatus.NotLoaded);\n\t}\n\n\tpublic onLoad() {\n\t\tthis.status.set(MediaStatus.Loaded);\n\t}\n\n\tprivate findMoreSuitableSource(): M_CORE.FileSrc<M_CORE.VideoMeta> | undefined {\n\t\tconst ref = this.videoRef();\n\t\tif (ref === undefined) {\n\t\t\tconsole.log(\"skipping findMoreSuitableSource. videoRef is empty still\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst videoSources = this.src.data()?.sources ?? [];\n\n\t\tconst currentVideoWidth = ref.nativeElement.clientWidth;\n\t\tconst realPixelsVideoWidth = this.device.devicePixelRatio * currentVideoWidth;\n\n\t\tconsole.log(`MarcyVideoComponent currentVideoWidth ${currentVideoWidth}`);\n\t\tconsole.log(`MarcyVideoComponent realPixelsVideoWidth ${realPixelsVideoWidth}`);\n\n\t\tfor (let i = 0; i < videoSources.length; i++) {\n\t\t\tconst videoSource = videoSources[i];\n\n\t\t\tif (!matchesMediaQuery(videoSource.mediaQuery)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// SSR\n\t\t\tif (typeof ref.nativeElement.canPlayType !== \"function\") {\n\t\t\t\tconst mp4Srcs = videoSource.srcSet\n\t\t\t\t\t.filter((x) => x.mimeType === \"video/mp4\")\n\t\t\t\t\t.sort(descendingT((x) => x.meta.width));\n\n\t\t\t\treturn mp4Srcs[0];\n\t\t\t}\n\n\t\t\tconst fileSrcs = videoSource.srcSet\n\t\t\t\t.filter((x) => ref.nativeElement.canPlayType(x.mimeType))\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.meta.width === b.meta.width) {\n\t\t\t\t\t\treturn isWebM(a) ? -1 : 1; // if same width prefer webM\n\t\t\t\t\t}\n\n\t\t\t\t\t// else prefer smallest\n\t\t\t\t\treturn a.meta.width <= b.meta.width ? -1 : 1;\n\t\t\t\t}); // smallest video\n\n\t\t\tif (fileSrcs.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// console.log('sources ', fileSrcs);\n\n\t\t\tlet bestSrc = fileSrcs[0];\n\n\t\t\tfor (let i = 1; i < fileSrcs.length; i++) {\n\t\t\t\tconst fileSrc = fileSrcs[i];\n\n\t\t\t\tconst currentDiff = fileSrc.meta.width - realPixelsVideoWidth;\n\n\t\t\t\t// console.log(`browser video currentDiff ${currentDiff}`)\n\n\t\t\t\t// too big video source width\n\t\t\t\tif (currentDiff > 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbestSrc = fileSrc;\n\t\t\t}\n\n\t\t\tconsole.log(`browser found suitable video ${bestSrc.url}`);\n\n\t\t\treturn bestSrc;\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n","<div\n [class.knownRatio]=\"\n src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\n \"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"video-container\"\n>\n @if (device.isSSR) {\n <ng-container *ngTemplateOutlet=\"ssrTemplate\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"browserTemplate\"></ng-container>\n }\n\n <ng-template #videoTemplate>\n <video\n #video\n [src]=\"source()?.url ?? ''\"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted = true; video.play()\"\n playsInline\n autoplay\n loop\n muted\n ></video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n }\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() + '%'\"></div>\n }\n</div>\n","import { Component, input, output } from \"@angular/core\";\n\nimport { MediaObjectFit } from \"../core/MediaObjectFit\";\nimport type * as M_CORE from \"../generated\";\nimport { ImageSrcDirective } from \"../marcy-image\";\nimport { MarcyImageComponent } from \"../marcy-image/marcy-image.component\";\nimport { VideoSrcDirective } from \"../marcy-video\";\nimport { MarcyVideoComponent } from \"../marcy-video/marcy-video.component\";\n\n@Component({\n\tselector: \"bon-media\",\n\n\timports: [MarcyImageComponent, MarcyVideoComponent, VideoSrcDirective, ImageSrcDirective],\n\ttemplateUrl: \"./marcy-media.component.html\",\n\tstyleUrl: \"./marcy-media.component.scss\",\n})\nexport class MarcyMediaComponent {\n\tpublic readonly MarcyObjectFit = MediaObjectFit;\n\n\tpublic readonly isLoaded = output<void>();\n\n\tpublic readonly src = input<M_CORE.Video | M_CORE.Image | undefined>();\n\tpublic readonly objectFit = input<MediaObjectFit>(MediaObjectFit.Original);\n\n\tpublic onLoad() {\n\t\tthis.isLoaded.emit();\n\t}\n}\n","@if (src(); as mediaSrc) {\n @if (mediaSrc.type === 'image') {\n <bon-image\n [imgsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-image>\n } @else if (mediaSrc.type === 'video') {\n <bon-video\n [vidsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-video>\n }\n}\n","import type { Type } from \"@angular/core\";\n\nimport type { IBoneComponent } from \"./IBoneComponent\";\n\nexport class BoneMap extends Map<string, Type<any>> {\n\tpublic getRequired(key: string): Type<IBoneComponent> {\n\t\tconst value = this.get(key);\n\n\t\tif (value === undefined || value === null) {\n\t\t\tthrow new Error(`BoneMap doesn't contain type for key = ${key}`);\n\t\t}\n\n\t\treturn value;\n\t}\n}\n","import { Directive, model } from \"@angular/core\";\n\nimport type { Bone } from \"../generated\";\n\n@Directive({\n\tselector: \"[bonBoneDir]\",\n})\nexport class BoneDirective<T extends Bone = Bone> {\n\tpublic readonly bone = model.required<T>();\n}\n\nexport const BONE_DIRECTIVE_WITH_INPUTS_AND_OUTPUTS = {\n\tdirective: BoneDirective,\n\tinputs: [\"bone\"],\n\toutputs: [\"boneChange\"],\n};\n","import { Directive, inject, ViewContainerRef } from \"@angular/core\";\n\n@Directive({\n\tselector: \"[bonSkeletonAnchor]\",\n})\nexport class SkeletonAnchorDirective {\n\tpublic readonly viewContainerRef = inject(ViewContainerRef);\n}\n","import { JsonPipe } from \"@angular/common\";\nimport { Component, inject } from \"@angular/core\";\n\nimport type { Bone } from \"../generated\";\nimport { BoneDirective } from \"./bone.directive\";\nimport type { IBoneComponent } from \"./IBoneComponent\";\n\n@Component({\n\tselector: \"bon-unknown-bone\",\n\n\timports: [JsonPipe],\n\thostDirectives: [{ directive: BoneDirective, inputs: [\"bone\"], outputs: [\"boneChange\"] }],\n\ttemplate: `@if (bd.bone(); as bone) {\n <h2>unknown bone {{bone.type}}</h2>\n <div>{{bone | json}}</div>\n } @else{\n bone is undefined\n }`,\n\tstyles: [\n\t\t`:host{\n display: block;\n border: 2px solid red;\n box-sizing: border-box;\n }`,\n\t],\n})\nexport class UnknownBoneComponent implements IBoneComponent {\n\tpublic readonly bd = inject(BoneDirective<Bone>, { host: true });\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\teffect,\n\tinput,\n\ttype Type,\n\tviewChild,\n} from \"@angular/core\";\n\nimport type { Bone } from \"../generated\";\nimport type { IBoneComponent } from \"./IBoneComponent\";\nimport { SkeletonAnchorDirective } from \"./skeleton-anchor.directive\";\nimport { UnknownBoneComponent } from \"./unknown-bone.component\";\n\n@Component({\n\tselector: \"bon-skeleton\",\n\timports: [SkeletonAnchorDirective],\n\ttemplateUrl: \"./skeleton.component.html\",\n\tstyleUrl: \"./skeleton.component.scss\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonComponent {\n\tpublic readonly skeletonAnchor = viewChild.required(SkeletonAnchorDirective);\n\n\tpublic readonly map = input.required<Map<string, Type<IBoneComponent>>>();\n\n\tpublic readonly bones = input.required<Bone[]>();\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst anchor = this.skeletonAnchor();\n\t\t\tconst bones = this.bones();\n\t\t\tconst mapVal = this.map();\n\n\t\t\tconst viewContainerRef = anchor.viewContainerRef;\n\t\t\tviewContainerRef.clear();\n\n\t\t\tif (mapVal === undefined || mapVal === null) {\n\t\t\t\tthrow new Error('add type map with input: [map]=\"...\"');\n\t\t\t}\n\n\t\t\tfor (const bone of bones) {\n\t\t\t\tlet componentType = mapVal.get(bone.type);\n\n\t\t\t\tif (componentType === undefined || componentType === null) {\n\t\t\t\t\tconsole.warn(`Mapping type for ${bone.type} not found`);\n\t\t\t\t\tcomponentType = UnknownBoneComponent;\n\t\t\t\t}\n\n\t\t\t\tviewContainerRef.createComponent(componentType).setInput(\"bone\", bone);\n\t\t\t}\n\t\t});\n\t}\n}\n","<ng-template bonSkeletonAnchor></ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["utils.distinct","utils.descendingT","utils.generateSizesString","utils.groupBy","utils.ascendingT","i1.BoneDirective"],"mappings":"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"}
1
+ {"version":3,"file":"candy-kingdom-bonnie.mjs","sources":["../../../../libs/bonnie/src/lib/core/device.service.ts","../../../../libs/bonnie/src/lib/core/device.service.base.ts","../../../../libs/bonnie/src/lib/core/emptyBone.ts","../../../../libs/bonnie/src/lib/core/emptyImage.ts","../../../../libs/bonnie/src/lib/core/emptyLocalizedString.ts","../../../../libs/bonnie/src/lib/core/emptyVideo.ts","../../../../libs/bonnie/src/lib/core/encode-uri.pipe.ts","../../../../libs/bonnie/src/lib/core/intersection.component.ts","../../../../libs/bonnie/src/lib/core/MediaObjectFit.ts","../../../../libs/bonnie/src/lib/core/MediaStatus.ts","../../../../libs/bonnie/src/lib/core/utils.ts","../../../../libs/bonnie/src/lib/core/src.directive.ts","../../../../libs/bonnie/src/lib/generated/bone.ts","../../../../libs/bonnie/src/lib/generated/file-format.ts","../../../../libs/bonnie/src/lib/generated/file-meta.ts","../../../../libs/bonnie/src/lib/generated/file-src.ts","../../../../libs/bonnie/src/lib/generated/file-src-base.ts","../../../../libs/bonnie/src/lib/generated/i-equatable.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route-with-data.ts","../../../../libs/bonnie/src/lib/generated/i-have-skeleton.ts","../../../../libs/bonnie/src/lib/generated/i-page.ts","../../../../libs/bonnie/src/lib/generated/image.ts","../../../../libs/bonnie/src/lib/generated/image-meta.ts","../../../../libs/bonnie/src/lib/generated/image-source.ts","../../../../libs/bonnie/src/lib/generated/localized-object.ts","../../../../libs/bonnie/src/lib/generated/localized-string.ts","../../../../libs/bonnie/src/lib/generated/media-source.ts","../../../../libs/bonnie/src/lib/generated/media-source-base.ts","../../../../libs/bonnie/src/lib/generated/open-graph-data.ts","../../../../libs/bonnie/src/lib/generated/page.ts","../../../../libs/bonnie/src/lib/generated/page-base.ts","../../../../libs/bonnie/src/lib/generated/page-data.ts","../../../../libs/bonnie/src/lib/generated/pix-media.ts","../../../../libs/bonnie/src/lib/generated/pix-meta.ts","../../../../libs/bonnie/src/lib/generated/publish-status.ts","../../../../libs/bonnie/src/lib/generated/sizes-item.ts","../../../../libs/bonnie/src/lib/generated/sizes-width-unit.ts","../../../../libs/bonnie/src/lib/generated/svg-meta.ts","../../../../libs/bonnie/src/lib/generated/video.ts","../../../../libs/bonnie/src/lib/generated/video-meta.ts","../../../../libs/bonnie/src/lib/generated/video-source.ts","../../../../libs/bonnie/src/lib/generated/view.ts","../../../../libs/bonnie/src/lib/generated/index.ts","../../../../libs/bonnie/src/lib/localization/LocalizeServiceBase.ts","../../../../libs/bonnie/src/lib/localization/localize.pipe.ts","../../../../libs/bonnie/src/lib/marcy-image/getDefaultSrc.ts","../../../../libs/bonnie/src/lib/marcy-image/imgsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-image/toHtmlSources.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.html","../../../../libs/bonnie/src/lib/marcy-video/vidsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.html","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.ts","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.html","../../../../libs/bonnie/src/lib/skeleton/BoneMap.ts","../../../../libs/bonnie/src/lib/skeleton/bone.directive.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton-anchor.directive.ts","../../../../libs/bonnie/src/lib/skeleton/unknown-bone.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.html","../../../../libs/bonnie/src/candy-kingdom-bonnie.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\n\nimport type { DeviceServiceBase } from \"./device.service.base\";\n\n@Injectable()\nexport class DeviceService implements DeviceServiceBase {\n\tpublic readonly devicePixelRatio = typeof window === \"undefined\" ? 1 : window.devicePixelRatio;\n\tpublic readonly isSSR = typeof window === \"undefined\";\n}\n","export abstract class DeviceServiceBase {\n\tpublic abstract get isSSR(): boolean;\n\tpublic abstract get devicePixelRatio(): number;\n}\n","import type { Bone } from \"../generated\";\n\nexport function emptyBone(): Bone {\n\treturn {\n\t\tstyle: \"\",\n\t\tmediaQuery: \"\",\n\t\tenabled: true,\n\t\ttype: \"\",\n\t};\n}\n","import type { Image } from \"../generated\";\n\nexport function emptyImage(): Image {\n\treturn {\n\t\t$type: \"image\", // todo: remove\n\t\ttype: \"image\",\n\t\tsources: [],\n\t};\n}\n","import type { LocalizedString } from \"../generated\";\n\nexport function emptyLocalizedString(): LocalizedString {\n\treturn {};\n}\n","import type { Video } from \"../generated\";\n\nexport function emptyVideo(): Video {\n\treturn {\n\t\t$type: \"video\", // todo: remove\n\t\ttype: \"video\",\n\t\tsources: [],\n\t};\n}\n","import { Pipe, type PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"encodeURIComponent\", pure: true })\nexport class EncodeURIComponentPipe implements PipeTransform {\n\tpublic transform(value: string): string {\n\t\treturn encodeURIComponent(value);\n\t}\n}\n","import {\n\tComponent,\n\tDestroyRef,\n\tElementRef,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"bon-intersection\",\n\ttemplate: \"<ng-content></ng-content>\",\n\tstyles: [\":host{display:block}\"],\n})\nexport class IntersectionComponent {\n\tpublic readonly intersected = output<void>();\n\n\tpublic readonly session = input<unknown>();\n\n\tprivate readonly _hostRef = inject(ElementRef);\n\n\tprivate readonly _intersectionObserver?: IntersectionObserver;\n\tprivate readonly _isIntersected = signal<boolean>(false);\n\n\tpublic readonly isIntersected = this._isIntersected.asReadonly();\n\n\tprivate _session: unknown; // todo: remove\n\n\tconstructor() {\n\t\tif (typeof window === \"undefined\" || typeof IntersectionObserver === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._intersectionObserver = new IntersectionObserver(this.onIntersection.bind(this));\n\n\t\teffect(() => {\n\t\t\tif (this._isIntersected()) {\n\t\t\t\tthis.intersected.emit();\n\t\t\t}\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst newSession = this.session();\n\n\t\t\tif (this._session === newSession) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(\"reset intersection Observer\");\n\t\t\tthis._session = newSession;\n\t\t\tthis.reset();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => this._intersectionObserver?.disconnect());\n\t}\n\n\tprivate reset(): void {\n\t\tif (this._intersectionObserver === undefined || this._intersectionObserver === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._intersectionObserver.unobserve(this._hostRef.nativeElement);\n\n\t\tthis._isIntersected.set(false);\n\n\t\tthis._intersectionObserver.observe(this._hostRef.nativeElement);\n\t}\n\n\tprivate onIntersection(\n\t\tentries: IntersectionObserverEntry[],\n\t\tobserver: IntersectionObserver,\n\t): void {\n\t\tif (entries.length > 1) {\n\t\t\tconsole.warn(\"multi entries!\");\n\t\t}\n\n\t\tconst isIntersecting = entries[0].isIntersecting;\n\t\tthis._isIntersected.set(isIntersecting);\n\n\t\tconsole.log(`intersected ${isIntersecting}`, this._hostRef.nativeElement);\n\n\t\t// only once will recieve intersection\n\t\tif (isIntersecting) {\n\t\t\tobserver.unobserve(this._hostRef.nativeElement);\n\t\t}\n\t}\n}\n","export enum MediaObjectFit {\n\tOriginal = \"Original\",\n\tCover = \"Cover\",\n\tContain = \"Contain\",\n}\n","export enum MediaStatus {\n\tNotSet = \"NotSet\",\n\tNotLoaded = \"NotLoaded\",\n\tLoading = \"Loading\",\n\tLoaded = \"Loaded\",\n}\n","import type * as M_CORE from \"../generated\";\n\n// https://stackoverflow.com/questions/42136098/array-groupby-in-typescript\n\nexport const groupBy = <T, K extends keyof any>(arr: T[], key: (i: T) => K) =>\n\tarr.reduce(\n\t\t(groups, item) => {\n\t\t\t(groups[key(item)] ||= []).push(item);\n\t\t\treturn groups;\n\t\t},\n\t\t{} as Record<K, T[]>,\n\t);\n\nexport function distinct<T>(value: T, index: number, array: T[]) {\n\treturn array.indexOf(value) === index;\n}\n\nexport function ascending(a: number, b: number) {\n\treturn a - b;\n}\n\nexport function ascendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\n\treturn (a: T, b: T) => ascending(sel(a), sel(b));\n}\n\nexport function descending(a: number, b: number) {\n\treturn b - a;\n}\n\nexport function descendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\n\treturn (a: T, b: T) => descending(sel(a), sel(b));\n}\n\nexport function generateSizesString(sizes: M_CORE.SizesItem[]): string {\n\tconst sizesString = sizes\n\t\t.sort((x) => x.width)\n\t\t.map((x) => `${x.mediaQuery} ${x.width}${x.unit.toLowerCase()}`.trim())\n\t\t.join(\",\");\n\n\treturn sizesString;\n}\n\nexport function matchesMediaQuery(mediaQuery?: string): boolean {\n\tconst isEmptyQuery =\n\t\tmediaQuery === null || mediaQuery === undefined || mediaQuery.trim().length === 0;\n\n\t// work for SSR and browser\n\tif (isEmptyQuery) {\n\t\treturn true;\n\t}\n\n\t// other queries disallowed in SSR\n\tif (typeof window === \"undefined\") {\n\t\treturn false;\n\t}\n\n\tconst mediaQueryList = window.matchMedia(mediaQuery);\n\n\treturn mediaQueryList.matches;\n}\n\nexport function isLocalUrlString(url: string): boolean {\n\tif (url === undefined || url === null || url.trim().length === 0) {\n\t\treturn true;\n\t}\n\n\tif (url.startsWith(\"//\")) {\n\t\treturn false;\n\t}\n\n\tif (url.startsWith(\"./\") || url.startsWith(\"/\")) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\ttype ModelSignal,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\n\nimport { fromEvent, merge, NEVER, type Observable, Subject, takeUntil } from \"rxjs\";\n\nimport type * as M_CORE from \"../generated\";\nimport * as utils from \"./utils\";\n\n@Directive()\nexport abstract class SrcBaseDirective<T extends M_CORE.Image | M_CORE.Video> {\n\tpublic readonly ratioChange = output<number>();\n\n\tprivate readonly _ratio = signal<number>(0);\n\tpublic readonly ratio = this._ratio.asReadonly();\n\n\tprivate readonly _queryChangeClearSubject = new Subject<void>();\n\n\tpublic abstract readonly data: ModelSignal<T | undefined>;\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ratio = this._ratio();\n\t\t\tthis.ratioChange.emit(ratio);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst val = this.data();\n\t\t\tthis.onSrcChange(val);\n\t\t});\n\t}\n\n\tprivate onSrcChange(val: T | undefined): void {\n\t\tif (val !== undefined && val !== null && val.sources.length === 0) {\n\t\t\tconsole.warn(\"image should have sources!\");\n\t\t\tthis.data.set(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\t// clear mediaQuery subscriptions\n\t\tthis._queryChangeClearSubject.next();\n\n\t\t// ratio\n\t\tthis._ratio.set(0);\n\n\t\tif (val === undefined || val.sources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst allRatios = val.sources\n\t\t\t.flatMap((x) => x.srcSet)\n\t\t\t.map((x) => x.meta.ratio)\n\t\t\t.filter(utils.distinct);\n\n\t\tif (allRatios.length === 1) {\n\t\t\t// same ratio for all\n\t\t\tthis._ratio.set(allRatios[0]);\n\t\t\treturn;\n\t\t}\n\n\t\t// todo: check if this needed to be unsubscribed\n\t\tthis.watchMediaQueries().subscribe(() => {\n\t\t\tthis.calcRatio();\n\t\t\tconsole.log(\"watchMediaQueries calcRatio\");\n\t\t});\n\n\t\tthis.calcRatio();\n\t}\n\n\tprivate calcRatio(): void {\n\t\tconst data = this.data();\n\t\tif (data === undefined || data === null || data.sources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = 0; i < data.sources.length; i++) {\n\t\t\tconst source = data.sources[i];\n\t\t\tconst srcRatios = source.srcSet\n\t\t\t\t.sort(utils.descendingT((x) => x.meta.width))\n\t\t\t\t.map((x) => x.meta.ratio)\n\t\t\t\t.filter(utils.distinct);\n\n\t\t\tif (srcRatios.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (srcRatios.length > 1) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`each source should have srcSet with same ratio. founded: ${srcRatios.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst ratio = srcRatios[0]; // most accurate ratio in biggest image\n\n\t\t\tif (source.mediaQuery.length === 0) {\n\t\t\t\tthis._ratio.set(ratio);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof window === \"undefined\" || typeof window.matchMedia === \"undefined\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst mediaQueryList = window.matchMedia(source.mediaQuery);\n\n\t\t\tif (mediaQueryList.matches) {\n\t\t\t\tthis._ratio.set(ratio);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic watchMediaQueries(): Observable<MediaQueryListEvent> {\n\t\tconsole.log(\"watchMediaQueries\");\n\t\tconst src = this.data();\n\n\t\tif (\n\t\t\tsrc === undefined ||\n\t\t\tsrc === null ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.matchMedia === \"undefined\"\n\t\t) {\n\t\t\treturn NEVER.pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttakeUntil(this._queryChangeClearSubject),\n\t\t\t);\n\t\t}\n\n\t\tconst mediaQueries = src.sources\n\t\t\t.map((x) => x.mediaQuery)\n\t\t\t.filter(utils.distinct)\n\t\t\t.filter((x) => x.length > 0);\n\n\t\tconsole.log(\"watchMediaQueries mediaQueries\", mediaQueries);\n\t\tconst queryObservables = mediaQueries.map((media) => {\n\t\t\tconst queryList = window.matchMedia(media);\n\t\t\tconst observable = fromEvent<MediaQueryListEvent>(queryList, \"change\").pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttakeUntil(this._queryChangeClearSubject),\n\t\t\t);\n\n\t\t\treturn observable;\n\t\t});\n\n\t\tconst combinedObservable = merge(...queryObservables);\n\t\treturn combinedObservable;\n\t}\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface Bone {\n\tstyle: string;\n\tmediaQuery: string;\n\tenabled: boolean;\n\ttype: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface FileFormat {\n\textension: string;\n\tmimeType: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface FileMeta {\n\tbyteCount: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileMeta } from \"./file-meta\";\nimport type { FileSrcBase } from \"./file-src-base\";\n\nexport interface FileSrc<T extends FileMeta> extends FileSrcBase {\n\tmeta: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface FileSrcBase {\n\tmimeType: string;\n\turl: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport type IEquatable<_T> = {};\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface IHaveDataRoute {\n\tdataRoute: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { IHaveDataRoute } from \"./i-have-data-route\";\n\nexport interface IHaveDataRouteWithData<T> extends IHaveDataRoute {\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Bone } from \"./bone\";\n\nexport interface IHaveSkeleton {\n\tbones: Bone[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PageData } from \"./page-data\";\n\nexport interface IPage<TData extends PageData> {\n\tdata: TData;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { ImageSource } from \"./image-source\";\nimport type { PixMedia } from \"./pix-media\";\n\nexport interface Image extends PixMedia {\n\treadonly $type: \"image\";\n\tsources: ImageSource[];\n\ttype: \"image\";\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMeta } from \"./pix-meta\";\n\nexport interface ImageMeta extends PixMeta {}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { ImageMeta } from \"./image-meta\";\nimport type { MediaSource } from \"./media-source\";\nimport type { SizesItem } from \"./sizes-item\";\n\nexport interface ImageSource extends MediaSource<ImageMeta> {\n\tsizes: SizesItem[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface LocalizedObject<T> {\n\t[locale: string]: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { LocalizedObject } from \"./localized-object\";\n\nexport interface LocalizedString extends LocalizedObject<string> {}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileMeta } from \"./file-meta\";\nimport type { FileSrc } from \"./file-src\";\nimport type { MediaSourceBase } from \"./media-source-base\";\n\nexport interface MediaSource<TMeta extends FileMeta> extends MediaSourceBase {\n\tsrcSet: FileSrc<TMeta>[];\n\tmediaQuery: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcBase } from \"./file-src-base\";\n\nexport interface MediaSourceBase {\n\tsrcSet: FileSrcBase[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrc } from \"./file-src\";\nimport type { ImageMeta } from \"./image-meta\";\nimport type { LocalizedObject } from \"./localized-object\";\nimport type { LocalizedString } from \"./localized-string\";\n\nexport interface OpenGraphData {\n\ttitle: LocalizedString;\n\tdescription: LocalizedString;\n\timage: LocalizedObject<FileSrc<ImageMeta>>;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PageBase } from \"./page-base\";\nimport type { PageData } from \"./page-data\";\n\nexport interface Page<T extends PageData> extends PageBase {\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Bone } from \"./bone\";\nimport type { LocalizedString } from \"./localized-string\";\nimport type { OpenGraphData } from \"./open-graph-data\";\nimport type { PublishStatus } from \"./publish-status\";\n\nexport interface PageBase {\n\tid: string;\n\turl: string;\n\troute: string;\n\torder: number;\n\tpublishStatus: PublishStatus;\n\ttitle: LocalizedString;\n\topenGraph: OpenGraphData;\n\tbones: Bone[];\n\tchildren: PageBase[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface PageData {\n\ttype: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { MediaSourceBase } from \"./media-source-base\";\n\nexport interface PixMedia {\n\tsources: MediaSourceBase[];\n\ttype: \"image\" | \"video\";\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileMeta } from \"./file-meta\";\n\nexport interface PixMeta extends FileMeta {\n\twidth: number;\n\theight: number;\n\tratio: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport enum PublishStatus {\n\tNotSet = 0,\n\tDraft = 1,\n\tPublished = 2,\n\tArchived = 3,\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SizesWidthUnit } from \"./sizes-width-unit\";\n\nexport interface SizesItem {\n\twidth: number;\n\tunit: SizesWidthUnit;\n\tmediaQuery: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport enum SizesWidthUnit {\n\tPx = \"Px\",\n\tEm = \"Em\",\n\tVw = \"Vw\",\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMeta } from \"./pix-meta\";\n\nexport interface SvgMeta extends PixMeta {\n\tpreciseWidth: number;\n\tpreciseHeight: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMedia } from \"./pix-media\";\nimport type { VideoSource } from \"./video-source\";\n\nexport interface Video extends PixMedia {\n\treadonly $type: \"video\";\n\tsources: VideoSource[];\n\ttype: \"video\";\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { PixMeta } from \"./pix-meta\";\n\nexport interface VideoMeta extends PixMeta {\n\tduration: number;\n\tfullFormat: string;\n\thasAudio: boolean;\n\tframeRate: number;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { MediaSource } from \"./media-source\";\nimport type { VideoMeta } from \"./video-meta\";\n\nexport interface VideoSource extends MediaSource<VideoMeta> {}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Bone } from \"./bone\";\n\nexport interface View {\n\tid: string;\n\tcode: string;\n\tbones: Bone[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport * from \"./bone\";\nexport * from \"./file-format\";\nexport * from \"./file-meta\";\nexport * from \"./file-src\";\nexport * from \"./file-src-base\";\nexport * from \"./i-equatable\";\nexport * from \"./i-have-data-route\";\nexport * from \"./i-have-data-route-with-data\";\nexport * from \"./i-have-skeleton\";\nexport * from \"./i-page\";\nexport * from \"./image\";\nexport * from \"./image-meta\";\nexport * from \"./image-source\";\nexport * from \"./localized-object\";\nexport * from \"./localized-string\";\nexport * from \"./media-source\";\nexport * from \"./media-source-base\";\nexport * from \"./open-graph-data\";\nexport * from \"./page\";\nexport * from \"./page-base\";\nexport * from \"./page-data\";\nexport * from \"./pix-media\";\nexport * from \"./pix-meta\";\nexport * from \"./publish-status\";\nexport * from \"./sizes-item\";\nexport * from \"./sizes-width-unit\";\nexport * from \"./svg-meta\";\nexport * from \"./video\";\nexport * from \"./video-meta\";\nexport * from \"./video-source\";\nexport * from \"./view\";\n","import type { Signal } from \"@angular/core\";\n\nimport { isLocalUrlString } from \"../core/utils\";\nimport type { LocalizedObject, LocalizedString } from \"../generated\";\n\nexport abstract class LocalizeServiceBase {\n\tpublic abstract get locale(): Signal<string>;\n\n\tpublic getLocalized<T>(value: LocalizedObject<T>, defaultValue: T, locale?: string): T {\n\t\tif (value === undefined) {\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\tlocale = locale ?? this.locale();\n\n\t\tconst obj = value[locale] ?? defaultValue;\n\t\treturn obj;\n\t}\n\n\tpublic getLocalizedText(value: LocalizedString, locale?: string): string {\n\t\treturn this.getLocalized<string>(value, \"\", locale);\n\t}\n\n\tpublic isLocalUrl(value: LocalizedString, locale?: string): boolean {\n\t\tconst url = this.getLocalizedText(value, locale);\n\t\treturn isLocalUrlString(url);\n\t}\n}\n","import { inject, Pipe, type PipeTransform } from \"@angular/core\";\nimport { DomSanitizer, type SafeResourceUrl } from \"@angular/platform-browser\";\n\nimport type { LocalizedObject, LocalizedString } from \"../generated\";\nimport { LocalizeServiceBase } from \"./LocalizeServiceBase\";\n\n@Pipe({ name: \"localize\", pure: false })\nexport class LocalizePipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): string {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this._localizeService.getLocalizedText(value, locale);\n\t}\n}\n\n@Pipe({ name: \"localizeObject\", pure: false })\nexport class LocalizeObjectPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform<T>(object: LocalizedObject<T>, locale?: string): T | undefined {\n\t\tif (object === undefined || object === null) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this._localizeService.getLocalized<T | undefined>(object, undefined, locale);\n\t}\n}\n\n@Pipe({ name: \"localizationIsNotEmpty\", pure: false })\nexport class LocalizationIsNotEmptyPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst text = this._localizeService.getLocalizedText(value, locale);\n\n\t\tconst isNotEmpty = text.trim().length > 0;\n\t\treturn isNotEmpty;\n\t}\n}\n\n@Pipe({ name: \"localizationIsEmpty\", pure: false })\nexport class LocalizationIsEmptyPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst text = this._localizeService.getLocalizedText(value, locale);\n\n\t\tconst isEmpty = text.trim().length === 0;\n\t\treturn isEmpty;\n\t}\n}\n\n@Pipe({ name: \"localizeUrl\", pure: false })\nexport class LocalizeUrlPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\tprivate readonly _domSanitizer = inject(DomSanitizer);\n\n\tpublic transform(value: LocalizedString, locale?: string): SafeResourceUrl {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst urlString = this._localizeService.getLocalizedText(value, locale);\n\t\tconst safeUrl = this._domSanitizer.bypassSecurityTrustResourceUrl(urlString);\n\t\treturn safeUrl;\n\t}\n}\n\n@Pipe({ name: \"isLocalUrl\", pure: false })\nexport class IsLocalUrlPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst isLocal = this._localizeService.isLocalUrl(value, locale);\n\t\treturn isLocal;\n\t}\n}\n\n@Pipe({ name: \"isNotLocalUrl\", pure: false })\nexport class IsNotLocalUrlPipe implements PipeTransform {\n\tprivate readonly _localizeService = inject(LocalizeServiceBase);\n\n\tpublic transform(value: LocalizedString, locale?: string): boolean {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst isLocal = this._localizeService.isLocalUrl(value, locale);\n\t\treturn !isLocal;\n\t}\n}\n","import * as utils from \"../core/utils\";\nimport type * as M_CORE from \"../generated\";\n\nexport function getDefaultSrc(\n\timage: M_CORE.Image | undefined,\n): M_CORE.FileSrc<M_CORE.ImageMeta> | undefined {\n\tif (image === undefined || image === null) {\n\t\treturn undefined;\n\t}\n\n\tconst files = image.sources.flatMap((x) => x.srcSet).sort(utils.descendingT((x) => x.meta.width));\n\n\tconst prefferedFiles = files.filter(\n\t\t(x) => x.mimeType === \"image/jpeg\" || x.mimeType === \"image/png\" || x.mimeType === \"image/gif\",\n\t);\n\n\tif (prefferedFiles.length > 0) {\n\t\treturn prefferedFiles[0];\n\t}\n\n\tif (files.length > 0) {\n\t\treturn files[0];\n\t}\n\n\treturn undefined;\n}\n","import { Directive, model } from \"@angular/core\";\n\nimport { SrcBaseDirective } from \"../core/src.directive\";\nimport type * as M_CORE from \"../generated\";\n\n@Directive({\n\tselector: \"[imgsrc]\",\n})\nexport class ImageSrcDirective extends SrcBaseDirective<M_CORE.Image> {\n\tpublic readonly data = model<M_CORE.Image | undefined>(undefined, { alias: \"imgsrc\" });\n}\n","import * as utils from \"../core/utils\";\nimport type * as M_CORE from \"../generated\";\nimport type { IHtmlPictureSource } from \"./IHtmlPictureSource\";\n\nexport function toHtmlPictureSources(imageSource: M_CORE.ImageSource): IHtmlPictureSource[] {\n\tconst sizes = utils.generateSizesString(imageSource.sizes);\n\tconst groupedByMime = utils.groupBy(imageSource.srcSet, (x) => x.mimeType);\n\n\tconst simpleSources: IHtmlPictureSource[] = [];\n\n\tfor (const mime in groupedByMime) {\n\t\tconst fileSrcs = groupedByMime[mime].sort(utils.ascendingT((x) => x.meta.width));\n\n\t\tconst srcSet = fileSrcs.map((x) => `${x.url} ${x.meta.width}w`).join(\",\");\n\n\t\tconst source: IHtmlPictureSource = { mime, sizes, srcSet, media: imageSource.mediaQuery };\n\n\t\tsimpleSources.push(source);\n\t}\n\n\treturn simpleSources;\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, effect, inject, input, output, signal } from \"@angular/core\";\n\nimport { DeviceServiceBase } from \"../core/device.service.base\";\nimport { IntersectionComponent } from \"../core/intersection.component\";\nimport { MediaObjectFit } from \"../core/MediaObjectFit\";\nimport { MediaStatus } from \"../core/MediaStatus\";\nimport type * as M_CORE from \"../generated\";\nimport { getDefaultSrc } from \"./getDefaultSrc\";\nimport type { IHtmlPictureSource } from \"./IHtmlPictureSource\";\nimport { ImageSrcDirective } from \"./imgsrc.directive\";\nimport { toHtmlPictureSources } from \"./toHtmlSources\";\n\n@Component({\n\tselector: \"bon-image\",\n\n\timports: [NgTemplateOutlet, IntersectionComponent],\n\ttemplateUrl: \"./marcy-image.component.html\",\n\tstyleUrl: \"./marcy-image.component.scss\",\n})\nexport class MarcyImageComponent {\n\tpublic readonly MediaStatus = MediaStatus;\n\tpublic readonly MarcyObjectFit = MediaObjectFit;\n\n\tpublic readonly src: ImageSrcDirective;\n\n\tpublic readonly isLoaded = output<void>();\n\tpublic readonly objectFit = input<MediaObjectFit>(MediaObjectFit.Original);\n\n\tpublic readonly sources = signal<IHtmlPictureSource[]>([]);\n\tpublic readonly status = signal<MediaStatus>(MediaStatus.NotSet);\n\tpublic readonly defaultSrc = signal(\"\");\n\n\tpublic readonly device = inject(DeviceServiceBase);\n\n\tconstructor() {\n\t\tconst src = inject(ImageSrcDirective, { optional: true });\n\n\t\tif (src === undefined || src === null) {\n\t\t\tthrow new Error(\n\t\t\t\t`${MarcyImageComponent.name} should have [imgsrc] directive as source object`,\n\t\t\t);\n\t\t}\n\n\t\tthis.src = src;\n\n\t\teffect(() => {\n\t\t\tthis.onSrcChange(this.src.data());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (this.status() === MediaStatus.Loaded) {\n\t\t\t\tthis.isLoaded.emit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate onSrcChange(val: M_CORE.Image | undefined) {\n\t\tthis.defaultSrc.set(getDefaultSrc(val)?.url ?? \"\");\n\n\t\tif (val === undefined || val === null || val.sources.length === 0) {\n\t\t\tthis.sources.set([]);\n\t\t\tthis.status.set(MediaStatus.NotSet);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newSources = val.sources.flatMap(toHtmlPictureSources);\n\t\tthis.sources.set(newSources);\n\t\tthis.status.set(MediaStatus.NotLoaded);\n\t}\n\n\tpublic onLoad() {\n\t\tthis.status.set(MediaStatus.Loaded);\n\t}\n}\n","@if (sources().length > 0) {\n <div [class.knownRatio]=\"src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"picture-container\">\n\n <ng-template #pictureTemplate>\n <picture>\n @for (source of sources(); track $index) {\n <source [srcset]=\"source.srcSet\"\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\n }\n <img [src]=\"defaultSrc()\" (load)=\"onLoad()\" alt=\"\" />\n </picture>\n </ng-template>\n\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n </noscript>\n } @else {\n <bon-intersection #intersectionZone [session]=\"src\">\n @if (intersectionZone.isIntersected()) {\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\n }\n </bon-intersection>\n }\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() +'%'\"></div>\n }\n </div>\n}\n","import { Directive, model } from \"@angular/core\";\n\nimport { SrcBaseDirective } from \"../core/src.directive\";\nimport type * as M_CORE from \"../generated\";\n\n@Directive({\n\tselector: \"[vidsrc]\",\n})\nexport class VideoSrcDirective extends SrcBaseDirective<M_CORE.Video> {\n\tpublic readonly data = model<M_CORE.Video | undefined>(undefined, { alias: \"vidsrc\" });\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport {\n\tComponent,\n\ttype ElementRef,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\n\nimport { DeviceServiceBase } from \"../core/device.service.base\";\nimport { IntersectionComponent } from \"../core/intersection.component\";\nimport { MediaObjectFit } from \"../core/MediaObjectFit\";\nimport { MediaStatus } from \"../core/MediaStatus\";\nimport { descendingT, matchesMediaQuery } from \"../core/utils\";\nimport type * as M_CORE from \"../generated\";\nimport { VideoSrcDirective } from \"./vidsrc.directive\";\n\nfunction isWebM(src: M_CORE.FileSrc<M_CORE.ImageMeta>): boolean {\n\treturn src.mimeType === \"video/webm\";\n}\n\n@Component({\n\tselector: \"bon-video\",\n\n\timports: [NgTemplateOutlet, IntersectionComponent],\n\ttemplateUrl: \"./marcy-video.component.html\",\n\tstyleUrl: \"./marcy-video.component.scss\",\n})\nexport class MarcyVideoComponent {\n\tpublic readonly MediaStatus = MediaStatus;\n\tpublic readonly MarcyObjectFit = MediaObjectFit;\n\n\tpublic readonly src: VideoSrcDirective;\n\n\tpublic readonly isLoaded = output<void>();\n\n\tpublic readonly objectFit = input<MediaObjectFit>(MediaObjectFit.Original);\n\n\tpublic readonly videoRef = viewChild<ElementRef<HTMLVideoElement>>(\"video\");\n\n\tpublic readonly status = signal<MediaStatus>(MediaStatus.NotSet);\n\tpublic readonly source = signal<M_CORE.FileSrc<M_CORE.VideoMeta> | undefined>(undefined);\n\n\tpublic readonly device = inject(DeviceServiceBase);\n\n\tprivate readonly _srcDir = inject(VideoSrcDirective, { optional: true });\n\n\tconstructor() {\n\t\tif (this._srcDir === undefined || this._srcDir === null) {\n\t\t\tthrow new Error(\n\t\t\t\t`${MarcyVideoComponent.name} should have [vidsrc] directive as source object`,\n\t\t\t);\n\t\t}\n\n\t\tthis.src = this._srcDir;\n\n\t\teffect(() => {\n\t\t\tthis.src.data();\n\t\t\tthis.videoRef();\n\t\t\tthis.updateSources();\n\t\t\tthis.subscribeToMediaQueryChange();\n\t\t});\n\n\t\teffect(() => {\n\t\t\tif (this.status() === MediaStatus.Loaded) {\n\t\t\t\tthis.isLoaded.emit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToMediaQueryChange(): void {\n\t\tthis.src.watchMediaQueries().subscribe(() => {\n\t\t\tconsole.log(\"MarcyVideoComponent watchMediaQueries\");\n\t\t\tthis.updateSources();\n\t\t});\n\t}\n\n\tprivate updateSources() {\n\t\tconsole.log(\"MarcyVideoComponent updateSources\");\n\n\t\tthis.source.set(this.findMoreSuitableSource());\n\n\t\tconsole.log(\"MarcyVideoComponent new source\", this.source());\n\n\t\tconst src = this.source();\n\n\t\tif (this.status() === MediaStatus.NotSet && src === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (src === undefined) {\n\t\t\tthis.status.set(MediaStatus.NotSet);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.status.set(MediaStatus.NotLoaded);\n\t}\n\n\tpublic onLoad() {\n\t\tthis.status.set(MediaStatus.Loaded);\n\t}\n\n\tprivate findMoreSuitableSource(): M_CORE.FileSrc<M_CORE.VideoMeta> | undefined {\n\t\tconst ref = this.videoRef();\n\t\tif (ref === undefined) {\n\t\t\tconsole.log(\"skipping findMoreSuitableSource. videoRef is empty still\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst videoSources = this.src.data()?.sources ?? [];\n\n\t\tconst currentVideoWidth = ref.nativeElement.clientWidth;\n\t\tconst realPixelsVideoWidth = this.device.devicePixelRatio * currentVideoWidth;\n\n\t\tconsole.log(`MarcyVideoComponent currentVideoWidth ${currentVideoWidth}`);\n\t\tconsole.log(`MarcyVideoComponent realPixelsVideoWidth ${realPixelsVideoWidth}`);\n\n\t\tfor (let i = 0; i < videoSources.length; i++) {\n\t\t\tconst videoSource = videoSources[i];\n\n\t\t\tif (!matchesMediaQuery(videoSource.mediaQuery)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// SSR\n\t\t\tif (typeof ref.nativeElement.canPlayType !== \"function\") {\n\t\t\t\tconst mp4Srcs = videoSource.srcSet\n\t\t\t\t\t.filter((x) => x.mimeType === \"video/mp4\")\n\t\t\t\t\t.sort(descendingT((x) => x.meta.width));\n\n\t\t\t\treturn mp4Srcs[0];\n\t\t\t}\n\n\t\t\tconst fileSrcs = videoSource.srcSet\n\t\t\t\t.filter((x) => ref.nativeElement.canPlayType(x.mimeType))\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.meta.width === b.meta.width) {\n\t\t\t\t\t\treturn isWebM(a) ? -1 : 1; // if same width prefer webM\n\t\t\t\t\t}\n\n\t\t\t\t\t// else prefer smallest\n\t\t\t\t\treturn a.meta.width <= b.meta.width ? -1 : 1;\n\t\t\t\t}); // smallest video\n\n\t\t\tif (fileSrcs.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// console.log('sources ', fileSrcs);\n\n\t\t\tlet bestSrc = fileSrcs[0];\n\n\t\t\tfor (let i = 1; i < fileSrcs.length; i++) {\n\t\t\t\tconst fileSrc = fileSrcs[i];\n\n\t\t\t\tconst currentDiff = fileSrc.meta.width - realPixelsVideoWidth;\n\n\t\t\t\t// console.log(`browser video currentDiff ${currentDiff}`)\n\n\t\t\t\t// too big video source width\n\t\t\t\tif (currentDiff > 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbestSrc = fileSrc;\n\t\t\t}\n\n\t\t\tconsole.log(`browser found suitable video ${bestSrc.url}`);\n\n\t\t\treturn bestSrc;\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n","<div\n [class.knownRatio]=\"\n src.ratio() > 0 && objectFit() === MarcyObjectFit.Original\n \"\n [class.cover]=\"objectFit() === MarcyObjectFit.Cover\"\n [class.contain]=\"objectFit() === MarcyObjectFit.Contain\"\n [class.loaded]=\"status() === MediaStatus.Loaded\"\n class=\"video-container\"\n>\n @if (device.isSSR) {\n <ng-container *ngTemplateOutlet=\"ssrTemplate\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"browserTemplate\"></ng-container>\n }\n\n <ng-template #videoTemplate>\n <video\n #video\n [src]=\"source()?.url ?? ''\"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted = true; video.play()\"\n playsInline\n autoplay\n loop\n muted\n ></video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n @if (device.isSSR) {\n <noscript>\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n }\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n @if (src.ratio() > 0 && objectFit() === MarcyObjectFit.Original) {\n <div [style.padding-top]=\"100 / src.ratio() + '%'\"></div>\n }\n</div>\n","import { Component, input, output } from \"@angular/core\";\n\nimport { MediaObjectFit } from \"../core/MediaObjectFit\";\nimport type * as M_CORE from \"../generated\";\nimport { ImageSrcDirective } from \"../marcy-image\";\nimport { MarcyImageComponent } from \"../marcy-image/marcy-image.component\";\nimport { VideoSrcDirective } from \"../marcy-video\";\nimport { MarcyVideoComponent } from \"../marcy-video/marcy-video.component\";\n\n@Component({\n\tselector: \"bon-media\",\n\n\timports: [MarcyImageComponent, MarcyVideoComponent, VideoSrcDirective, ImageSrcDirective],\n\ttemplateUrl: \"./marcy-media.component.html\",\n\tstyleUrl: \"./marcy-media.component.scss\",\n})\nexport class MarcyMediaComponent {\n\tpublic readonly MarcyObjectFit = MediaObjectFit;\n\n\tpublic readonly isLoaded = output<void>();\n\n\tpublic readonly src = input<M_CORE.Video | M_CORE.Image | undefined>();\n\tpublic readonly objectFit = input<MediaObjectFit>(MediaObjectFit.Original);\n\n\tpublic onLoad() {\n\t\tthis.isLoaded.emit();\n\t}\n}\n","@if (src(); as mediaSrc) {\n @if (mediaSrc.type === 'image') {\n <bon-image\n [imgsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-image>\n } @else if (mediaSrc.type === 'video') {\n <bon-video\n [vidsrc]=\"mediaSrc\"\n [objectFit]=\"objectFit()\"\n (isLoaded)=\"onLoad()\"\n ></bon-video>\n }\n}\n","import type { Type } from \"@angular/core\";\n\nimport type { IBoneComponent } from \"./IBoneComponent\";\n\nexport class BoneMap extends Map<string, Type<any>> {\n\tpublic getRequired(key: string): Type<IBoneComponent> {\n\t\tconst value = this.get(key);\n\n\t\tif (value === undefined || value === null) {\n\t\t\tthrow new Error(`BoneMap doesn't contain type for key = ${key}`);\n\t\t}\n\n\t\treturn value;\n\t}\n}\n","import { Directive, model } from \"@angular/core\";\n\nimport type { Bone } from \"../generated\";\n\n@Directive({\n\tselector: \"[bonBoneDir]\",\n})\nexport class BoneDirective<T extends Bone = Bone> {\n\tpublic readonly bone = model.required<T>();\n}\n","import { Directive, inject, ViewContainerRef } from \"@angular/core\";\n\n@Directive({\n\tselector: \"[bonSkeletonAnchor]\",\n})\nexport class SkeletonAnchorDirective {\n\tpublic readonly viewContainerRef = inject(ViewContainerRef);\n}\n","import { JsonPipe } from \"@angular/common\";\nimport { Component, inject } from \"@angular/core\";\n\nimport type { Bone } from \"../generated\";\nimport { BoneDirective } from \"./bone.directive\";\nimport type { IBoneComponent } from \"./IBoneComponent\";\n\n@Component({\n\tselector: \"bon-unknown-bone\",\n\n\timports: [JsonPipe],\n\thostDirectives: [{ directive: BoneDirective, inputs: [\"bone\"], outputs: [\"boneChange\"] }],\n\ttemplate: `@if (bd.bone(); as bone) {\n <h2>unknown bone {{bone.type}}</h2>\n <div>{{bone | json}}</div>\n } @else{\n bone is undefined\n }`,\n\tstyles: [\n\t\t`:host{\n display: block;\n border: 2px solid red;\n box-sizing: border-box;\n }`,\n\t],\n})\nexport class UnknownBoneComponent implements IBoneComponent {\n\tpublic readonly bd = inject(BoneDirective<Bone>, { host: true });\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\teffect,\n\tinput,\n\ttype Type,\n\tviewChild,\n} from \"@angular/core\";\n\nimport type { Bone } from \"../generated\";\nimport type { IBoneComponent } from \"./IBoneComponent\";\nimport { SkeletonAnchorDirective } from \"./skeleton-anchor.directive\";\nimport { UnknownBoneComponent } from \"./unknown-bone.component\";\n\n@Component({\n\tselector: \"bon-skeleton\",\n\timports: [SkeletonAnchorDirective],\n\ttemplateUrl: \"./skeleton.component.html\",\n\tstyleUrl: \"./skeleton.component.scss\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonComponent {\n\tpublic readonly skeletonAnchor = viewChild.required(SkeletonAnchorDirective);\n\n\tpublic readonly map = input.required<Map<string, Type<IBoneComponent>>>();\n\n\tpublic readonly bones = input.required<Bone[]>();\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst anchor = this.skeletonAnchor();\n\t\t\tconst bones = this.bones();\n\t\t\tconst mapVal = this.map();\n\n\t\t\tconst viewContainerRef = anchor.viewContainerRef;\n\t\t\tviewContainerRef.clear();\n\n\t\t\tif (mapVal === undefined || mapVal === null) {\n\t\t\t\tthrow new Error('add type map with input: [map]=\"...\"');\n\t\t\t}\n\n\t\t\tfor (const bone of bones) {\n\t\t\t\tlet componentType = mapVal.get(bone.type);\n\n\t\t\t\tif (componentType === undefined || componentType === null) {\n\t\t\t\t\tconsole.warn(`Mapping type for ${bone.type} not found`);\n\t\t\t\t\tcomponentType = UnknownBoneComponent;\n\t\t\t\t}\n\n\t\t\t\tviewContainerRef.createComponent(componentType).setInput(\"bone\", bone);\n\t\t\t}\n\t\t});\n\t}\n}\n","<ng-template bonSkeletonAnchor></ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["utils.distinct","utils.descendingT","utils.generateSizesString","utils.groupBy","utils.ascendingT","i1.BoneDirective"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@candy-kingdom/bonnie",
3
- "version": "0.27.1",
3
+ "version": "0.27.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ulmer-morozov/candy-kingdom.git",
@@ -504,11 +504,6 @@ declare class BoneDirective<T extends Bone = Bone> {
504
504
  static ɵfac: i0.ɵɵFactoryDeclaration<BoneDirective<any>, never>;
505
505
  static ɵdir: i0.ɵɵDirectiveDeclaration<BoneDirective<any>, "[bonBoneDir]", never, { "bone": { "alias": "bone"; "required": true; "isSignal": true; }; }, { "bone": "boneChange"; }, never, never, true, never>;
506
506
  }
507
- declare const BONE_DIRECTIVE_WITH_INPUTS_AND_OUTPUTS: {
508
- directive: typeof BoneDirective;
509
- inputs: string[];
510
- outputs: string[];
511
- };
512
507
 
513
508
  interface IBoneComponent {
514
509
  bd: BoneDirective;
@@ -539,5 +534,5 @@ declare class UnknownBoneComponent implements IBoneComponent {
539
534
  static ɵcmp: i0.ɵɵComponentDeclaration<UnknownBoneComponent, "bon-unknown-bone", never, {}, {}, never, never, true, [{ directive: typeof BoneDirective; inputs: { "bone": "bone"; }; outputs: { "boneChange": "boneChange"; }; }]>;
540
535
  }
541
536
 
542
- export { BONE_DIRECTIVE_WITH_INPUTS_AND_OUTPUTS, BoneDirective, BoneMap, DeviceService, DeviceServiceBase, EncodeURIComponentPipe, ImageSrcDirective, IntersectionComponent, IsLocalUrlPipe, IsNotLocalUrlPipe, LocalizationIsEmptyPipe, LocalizationIsNotEmptyPipe, LocalizeObjectPipe, LocalizePipe, LocalizeServiceBase, LocalizeUrlPipe, MarcyImageComponent, MarcyMediaComponent, MarcyVideoComponent, MediaObjectFit, MediaStatus, PublishStatus, SizesWidthUnit, SkeletonAnchorDirective, SkeletonComponent, SrcBaseDirective, UnknownBoneComponent, VideoSrcDirective, emptyBone, emptyImage, emptyLocalizedString, emptyVideo, getDefaultSrc, toHtmlPictureSources };
537
+ export { BoneDirective, BoneMap, DeviceService, DeviceServiceBase, EncodeURIComponentPipe, ImageSrcDirective, IntersectionComponent, IsLocalUrlPipe, IsNotLocalUrlPipe, LocalizationIsEmptyPipe, LocalizationIsNotEmptyPipe, LocalizeObjectPipe, LocalizePipe, LocalizeServiceBase, LocalizeUrlPipe, MarcyImageComponent, MarcyMediaComponent, MarcyVideoComponent, MediaObjectFit, MediaStatus, PublishStatus, SizesWidthUnit, SkeletonAnchorDirective, SkeletonComponent, SrcBaseDirective, UnknownBoneComponent, VideoSrcDirective, emptyBone, emptyImage, emptyLocalizedString, emptyVideo, getDefaultSrc, toHtmlPictureSources };
543
538
  export type { Bone, FileFormat, FileMeta, FileSrc, FileSrcBase, FileSrcFileMeta, FileSrcImageMeta, IBoneComponent, IEquatable, IHaveDataRoute, IHaveDataRouteWithData, IHaveSkeleton, IHtmlPictureSource, IPage, Image, ImageMeta, ImageSource, LocalizedObject, LocalizedString, MediaSource, MediaSourceBase, OpenGraphData, Page, PageBase, PageData, PixMedia, PixMediaUnion, PixMeta, SizesItem, SvgMeta, Video, VideoMeta, VideoSource, View };