@candy-kingdom/bonnie 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +7 -0
  2. package/esm2022/candy-kingdom-bonnie.mjs +5 -0
  3. package/esm2022/index.mjs +9 -0
  4. package/esm2022/lib/core/MediaObjectFit.mjs +7 -0
  5. package/esm2022/lib/core/MediaStatus.mjs +8 -0
  6. package/esm2022/lib/core/device.service.base.mjs +3 -0
  7. package/esm2022/lib/core/device.service.mjs +14 -0
  8. package/esm2022/lib/core/index.mjs +8 -0
  9. package/esm2022/lib/core/intersection.component.mjs +69 -0
  10. package/esm2022/lib/core/src.directive.mjs +128 -0
  11. package/esm2022/lib/core/unsubscribe.service.mjs +19 -0
  12. package/esm2022/lib/core/utils.mjs +48 -0
  13. package/esm2022/lib/generated/bone.mjs +6 -0
  14. package/esm2022/lib/generated/file-meta.mjs +6 -0
  15. package/esm2022/lib/generated/file-src-base.mjs +6 -0
  16. package/esm2022/lib/generated/file-src.mjs +6 -0
  17. package/esm2022/lib/generated/i-equatable.mjs +6 -0
  18. package/esm2022/lib/generated/i-have-data-route-with-data.mjs +6 -0
  19. package/esm2022/lib/generated/i-have-data-route.mjs +6 -0
  20. package/esm2022/lib/generated/i-have-skeleton.mjs +6 -0
  21. package/esm2022/lib/generated/i-page.mjs +6 -0
  22. package/esm2022/lib/generated/image-meta.mjs +6 -0
  23. package/esm2022/lib/generated/image-source.mjs +6 -0
  24. package/esm2022/lib/generated/image.mjs +6 -0
  25. package/esm2022/lib/generated/index.mjs +34 -0
  26. package/esm2022/lib/generated/localized-object.mjs +6 -0
  27. package/esm2022/lib/generated/localized-string.mjs +6 -0
  28. package/esm2022/lib/generated/media-source-base.mjs +6 -0
  29. package/esm2022/lib/generated/media-source.mjs +6 -0
  30. package/esm2022/lib/generated/open-graph-data.mjs +6 -0
  31. package/esm2022/lib/generated/page-base.mjs +6 -0
  32. package/esm2022/lib/generated/page-data.mjs +6 -0
  33. package/esm2022/lib/generated/page.mjs +6 -0
  34. package/esm2022/lib/generated/pix-media.mjs +6 -0
  35. package/esm2022/lib/generated/pix-meta.mjs +6 -0
  36. package/esm2022/lib/generated/publish-status.mjs +12 -0
  37. package/esm2022/lib/generated/sizes-item.mjs +6 -0
  38. package/esm2022/lib/generated/sizes-width-unit.mjs +11 -0
  39. package/esm2022/lib/generated/video-meta.mjs +6 -0
  40. package/esm2022/lib/generated/video-source.mjs +6 -0
  41. package/esm2022/lib/generated/video.mjs +6 -0
  42. package/esm2022/lib/generated/view.mjs +6 -0
  43. package/esm2022/lib/localization/LocalizeServiceBase.mjs +19 -0
  44. package/esm2022/lib/localization/index.mjs +3 -0
  45. package/esm2022/lib/localization/localize.pipe.mjs +128 -0
  46. package/esm2022/lib/marcy-elements.module.mjs +98 -0
  47. package/esm2022/lib/marcy-image/IHtmlPictureSource.mjs +2 -0
  48. package/esm2022/lib/marcy-image/getDefaultSrc.mjs +17 -0
  49. package/esm2022/lib/marcy-image/imgsrc.directive.mjs +20 -0
  50. package/esm2022/lib/marcy-image/index.mjs +6 -0
  51. package/esm2022/lib/marcy-image/marcy-image.component.mjs +83 -0
  52. package/esm2022/lib/marcy-image/toHtmlSources.mjs +16 -0
  53. package/esm2022/lib/marcy-media/index.mjs +2 -0
  54. package/esm2022/lib/marcy-media/marcy-media.component.mjs +59 -0
  55. package/esm2022/lib/marcy-video/index.mjs +3 -0
  56. package/esm2022/lib/marcy-video/marcy-video.component.mjs +147 -0
  57. package/esm2022/lib/marcy-video/vidsrc.directive.mjs +20 -0
  58. package/esm2022/lib/skeleton/IBoneComponent.mjs +2 -0
  59. package/esm2022/lib/skeleton/bone.directive.mjs +41 -0
  60. package/esm2022/lib/skeleton/index.mjs +6 -0
  61. package/esm2022/lib/skeleton/skeleton-anchor.directive.mjs +17 -0
  62. package/esm2022/lib/skeleton/skeleton.component.mjs +53 -0
  63. package/esm2022/lib/skeleton/unknown-bone.component.mjs +25 -0
  64. package/fesm2022/candy-kingdom-bonnie.mjs +1107 -0
  65. package/fesm2022/candy-kingdom-bonnie.mjs.map +1 -0
  66. package/index.d.ts +8 -0
  67. package/lib/core/MediaObjectFit.d.ts +5 -0
  68. package/lib/core/MediaStatus.d.ts +6 -0
  69. package/lib/core/device.service.base.d.ts +4 -0
  70. package/lib/core/device.service.d.ts +8 -0
  71. package/lib/core/index.d.ts +7 -0
  72. package/lib/core/intersection.component.d.ts +20 -0
  73. package/lib/core/src.directive.d.ts +23 -0
  74. package/lib/core/unsubscribe.service.d.ts +10 -0
  75. package/lib/core/utils.d.ts +10 -0
  76. package/lib/generated/bone.d.ts +10 -0
  77. package/lib/generated/file-meta.d.ts +7 -0
  78. package/lib/generated/file-src-base.d.ts +8 -0
  79. package/lib/generated/file-src.d.ts +9 -0
  80. package/lib/generated/i-equatable.d.ts +6 -0
  81. package/lib/generated/i-have-data-route-with-data.d.ts +8 -0
  82. package/lib/generated/i-have-data-route.d.ts +7 -0
  83. package/lib/generated/i-have-skeleton.d.ts +8 -0
  84. package/lib/generated/i-page.d.ts +8 -0
  85. package/lib/generated/image-meta.d.ts +7 -0
  86. package/lib/generated/image-source.d.ts +10 -0
  87. package/lib/generated/image.d.ts +10 -0
  88. package/lib/generated/index.d.ts +33 -0
  89. package/lib/generated/localized-object.d.ts +7 -0
  90. package/lib/generated/localized-string.d.ts +7 -0
  91. package/lib/generated/media-source-base.d.ts +8 -0
  92. package/lib/generated/media-source.d.ts +11 -0
  93. package/lib/generated/open-graph-data.d.ts +11 -0
  94. package/lib/generated/page-base.d.ts +19 -0
  95. package/lib/generated/page-data.d.ts +7 -0
  96. package/lib/generated/page.d.ts +9 -0
  97. package/lib/generated/pix-media.d.ts +9 -0
  98. package/lib/generated/pix-meta.d.ts +10 -0
  99. package/lib/generated/publish-status.d.ts +10 -0
  100. package/lib/generated/sizes-item.d.ts +10 -0
  101. package/lib/generated/sizes-width-unit.d.ts +9 -0
  102. package/lib/generated/video-meta.d.ts +11 -0
  103. package/lib/generated/video-source.d.ts +8 -0
  104. package/lib/generated/video.d.ts +10 -0
  105. package/lib/generated/view.d.ts +9 -0
  106. package/lib/localization/LocalizeServiceBase.d.ts +9 -0
  107. package/lib/localization/index.d.ts +2 -0
  108. package/lib/localization/localize.pipe.d.ts +55 -0
  109. package/lib/marcy-elements.module.d.ts +19 -0
  110. package/lib/marcy-image/IHtmlPictureSource.d.ts +6 -0
  111. package/lib/marcy-image/getDefaultSrc.d.ts +2 -0
  112. package/lib/marcy-image/imgsrc.directive.d.ts +9 -0
  113. package/lib/marcy-image/index.d.ts +5 -0
  114. package/lib/marcy-image/marcy-image.component.d.ts +30 -0
  115. package/lib/marcy-image/toHtmlSources.d.ts +3 -0
  116. package/lib/marcy-media/index.d.ts +1 -0
  117. package/lib/marcy-media/marcy-media.component.d.ts +24 -0
  118. package/lib/marcy-video/index.d.ts +2 -0
  119. package/lib/marcy-video/marcy-video.component.d.ts +33 -0
  120. package/lib/marcy-video/vidsrc.directive.d.ts +9 -0
  121. package/lib/skeleton/IBoneComponent.d.ts +4 -0
  122. package/lib/skeleton/bone.directive.d.ts +17 -0
  123. package/lib/skeleton/index.d.ts +5 -0
  124. package/lib/skeleton/skeleton-anchor.directive.d.ts +8 -0
  125. package/lib/skeleton/skeleton.component.d.ts +18 -0
  126. package/lib/skeleton/unknown-bone.component.d.ts +14 -0
  127. package/package.json +25 -0
@@ -0,0 +1,59 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
+ import { UnsubscriberService } from '../core/unsubscribe.service';
3
+ import { MediaObjectFit } from '../core/MediaObjectFit';
4
+ import { DeviceServiceBase } from '../core/device.service.base';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../core/device.service.base";
7
+ import * as i2 from "../core/unsubscribe.service";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "../marcy-image/marcy-image.component";
10
+ import * as i5 from "../marcy-video/marcy-video.component";
11
+ import * as i6 from "../marcy-image/imgsrc.directive";
12
+ import * as i7 from "../marcy-video/vidsrc.directive";
13
+ export class MarcyMediaComponent {
14
+ constructor(device, cd, _u) {
15
+ this.device = device;
16
+ this.cd = cd;
17
+ this._u = _u;
18
+ this.MarcyObjectFit = MediaObjectFit;
19
+ this.isLoaded = new EventEmitter();
20
+ this._objectFit = MediaObjectFit.Original;
21
+ console.log('MarcyMediaComponent ctor');
22
+ cd.detach();
23
+ }
24
+ ngOnInit() {
25
+ console.log('MarcyMediaComponent ngOnInit');
26
+ this.cd.detectChanges();
27
+ }
28
+ get src() {
29
+ return this._src;
30
+ }
31
+ set src(val) {
32
+ console.log('set data', val);
33
+ this._src = val;
34
+ this.cd.detectChanges();
35
+ }
36
+ set objectFit(val) {
37
+ this._objectFit = val ?? MediaObjectFit.Original;
38
+ this.cd.detectChanges();
39
+ }
40
+ get objectFit() {
41
+ return this._objectFit;
42
+ }
43
+ onLoad() {
44
+ this.isLoaded.next();
45
+ }
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MarcyMediaComponent, deps: [{ token: i1.DeviceServiceBase }, { token: i0.ChangeDetectorRef }, { token: i2.UnsubscriberService }], target: i0.ɵɵFactoryTarget.Component }); }
47
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: MarcyMediaComponent, selector: "bon-media", inputs: { src: "src", objectFit: "objectFit" }, outputs: { isLoaded: "isLoaded" }, providers: [UnsubscriberService], ngImport: i0, template: "<bon-image *ngIf=\"src && src.type==='image'\"\n [imgsrc]=\"src\"\n [objectFit]=\"objectFit\"\n (isLoaded)=\"onLoad()\"></bon-image>\n\n<bon-video *ngIf=\"src && src.type==='video'\"\n [vidsrc]=\"src\"\n [objectFit]=\"objectFit\"\n (isLoaded)=\"onLoad()\"></bon-video>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MarcyImageComponent, selector: "bon-image", inputs: ["objectFit"], outputs: ["isLoaded"] }, { kind: "component", type: i5.MarcyVideoComponent, selector: "bon-video", inputs: ["objectFit"], outputs: ["isLoaded"] }, { kind: "directive", type: i6.ImageSrcDirective, selector: "[imgsrc]", inputs: ["imgsrc"] }, { kind: "directive", type: i7.VideoSrcDirective, selector: "[vidsrc]", inputs: ["vidsrc"] }] }); }
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MarcyMediaComponent, decorators: [{
50
+ type: Component,
51
+ args: [{ selector: 'bon-media', providers: [UnsubscriberService], template: "<bon-image *ngIf=\"src && src.type==='image'\"\n [imgsrc]=\"src\"\n [objectFit]=\"objectFit\"\n (isLoaded)=\"onLoad()\"></bon-image>\n\n<bon-video *ngIf=\"src && src.type==='video'\"\n [vidsrc]=\"src\"\n [objectFit]=\"objectFit\"\n (isLoaded)=\"onLoad()\"></bon-video>\n", styles: [":host{display:block}\n"] }]
52
+ }], ctorParameters: () => [{ type: i1.DeviceServiceBase }, { type: i0.ChangeDetectorRef }, { type: i2.UnsubscriberService }], propDecorators: { isLoaded: [{
53
+ type: Output
54
+ }], src: [{
55
+ type: Input
56
+ }], objectFit: [{
57
+ type: Input
58
+ }] } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyY3ktbWVkaWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUvc3JjL2xpYi9tYXJjeS1tZWRpYS9tYXJjeS1tZWRpYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL21hcmN5LW1lZGlhL21hcmN5LW1lZGlhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFJbEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7QUFRaEUsTUFBTSxPQUFPLG1CQUFtQjtJQVM1QixZQUV3QixNQUF5QixFQUN6QixFQUFxQixFQUNwQixFQUF1QjtRQUZ4QixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNwQixPQUFFLEdBQUYsRUFBRSxDQUFxQjtRQVpoQyxtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUdoQyxhQUFRLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsZUFBVSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFVekMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRXhDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBR00sUUFBUTtRQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFHRCxJQUFXLEdBQUc7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQ1csR0FBRyxDQUFDLEdBQTBDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBRWhCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQ1csU0FBUyxDQUFDLEdBQStCO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFFakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRU0sTUFBTTtRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0F2RFEsbUJBQW1CO2tHQUFuQixtQkFBbUIsdUhBRmpCLENBQUMsbUJBQW1CLENBQUMsMEJDWnBDLDRVQVNBOzsyRkRLYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksV0FBVyxhQUdWLENBQUMsbUJBQW1CLENBQUM7d0pBTWhCLFFBQVE7c0JBRHZCLE1BQU07Z0JBK0JJLEdBQUc7c0JBRGIsS0FBSztnQkFVSyxTQUFTO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgTUNvcmUgZnJvbSAnLi4vZ2VuZXJhdGVkJztcblxuaW1wb3J0IHsgVW5zdWJzY3JpYmVyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdW5zdWJzY3JpYmUuc2VydmljZSc7XG5pbXBvcnQgeyBNZWRpYU9iamVjdEZpdCB9IGZyb20gJy4uL2NvcmUvTWVkaWFPYmplY3RGaXQnO1xuaW1wb3J0IHsgRGV2aWNlU2VydmljZUJhc2UgfSBmcm9tICcuLi9jb3JlL2RldmljZS5zZXJ2aWNlLmJhc2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Jvbi1tZWRpYScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21hcmN5LW1lZGlhLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tYXJjeS1tZWRpYS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1Vuc3Vic2NyaWJlclNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmN5TWVkaWFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHB1YmxpYyByZWFkb25seSBNYXJjeU9iamVjdEZpdCA9IE1lZGlhT2JqZWN0Rml0O1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGlzTG9hZGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIF9vYmplY3RGaXQgPSBNZWRpYU9iamVjdEZpdC5PcmlnaW5hbDtcbiAgICBwcml2YXRlIF9zcmM/OiBNQ29yZS5WaWRlbyB8IE1Db3JlLkltYWdlO1xuXG4gICAgY29uc3RydWN0b3JcbiAgICAgICAgKFxuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IGRldmljZTogRGV2aWNlU2VydmljZUJhc2UsXG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdTogVW5zdWJzY3JpYmVyU2VydmljZVxuICAgICAgICApIHtcblxuICAgICAgICBjb25zb2xlLmxvZygnTWFyY3lNZWRpYUNvbXBvbmVudCBjdG9yJyk7XG5cbiAgICAgICAgY2QuZGV0YWNoKCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeU1lZGlhQ29tcG9uZW50IG5nT25Jbml0Jyk7XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0IHNyYygpOiBNQ29yZS5WaWRlbyB8IE1Db3JlLkltYWdlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NyYztcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3JjKHZhbDogTUNvcmUuVmlkZW8gfCBNQ29yZS5JbWFnZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmxvZygnc2V0IGRhdGEnLCB2YWwpO1xuXG4gICAgICAgIHRoaXMuX3NyYyA9IHZhbDtcblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgb2JqZWN0Rml0KHZhbDogTWVkaWFPYmplY3RGaXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fb2JqZWN0Rml0ID0gdmFsID8/IE1lZGlhT2JqZWN0Rml0Lk9yaWdpbmFsO1xuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2JqZWN0Rml0KCk6IE1lZGlhT2JqZWN0Rml0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEZpdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Mb2FkKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGVkLm5leHQoKTtcbiAgICB9XG5cbn1cbiIsIjxib24taW1hZ2UgKm5nSWY9XCJzcmMgJiYgc3JjLnR5cGU9PT0naW1hZ2UnXCJcbiAgICAgICAgICAgW2ltZ3NyY109XCJzcmNcIlxuICAgICAgICAgICBbb2JqZWN0Rml0XT1cIm9iamVjdEZpdFwiXG4gICAgICAgICAgIChpc0xvYWRlZCk9XCJvbkxvYWQoKVwiPjwvYm9uLWltYWdlPlxuXG48Ym9uLXZpZGVvICpuZ0lmPVwic3JjICYmIHNyYy50eXBlPT09J3ZpZGVvJ1wiXG4gICAgICAgICAgIFt2aWRzcmNdPVwic3JjXCJcbiAgICAgICAgICAgW29iamVjdEZpdF09XCJvYmplY3RGaXRcIlxuICAgICAgICAgICAoaXNMb2FkZWQpPVwib25Mb2FkKClcIj48L2Jvbi12aWRlbz5cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './marcy-video.component';
2
+ export * from './vidsrc.directive';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL21hcmN5LXZpZGVvL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWFyY3ktdmlkZW8uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdmlkc3JjLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,147 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectorRef, Optional, ElementRef, ViewChild } from '@angular/core';
2
+ import { BehaviorSubject, filter } from 'rxjs';
3
+ import { UnsubscriberService } from '../core/unsubscribe.service';
4
+ import { MediaStatus } from '../core/MediaStatus';
5
+ import { MediaObjectFit } from '../core/MediaObjectFit';
6
+ import { DeviceServiceBase } from '../core/device.service.base';
7
+ import { VideoSrcDirective } from './vidsrc.directive';
8
+ import { ascendingT, matchesMediaQuery, descendingT } from '../core/utils';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../core/device.service.base";
11
+ import * as i2 from "../core/unsubscribe.service";
12
+ import * as i3 from "./vidsrc.directive";
13
+ import * as i4 from "@angular/common";
14
+ import * as i5 from "../core/intersection.component";
15
+ export class MarcyVideoComponent {
16
+ constructor(device, cd, _u, srcDir) {
17
+ this.device = device;
18
+ this.cd = cd;
19
+ this._u = _u;
20
+ this.MediaStatus = MediaStatus;
21
+ this.MarcyObjectFit = MediaObjectFit;
22
+ this.isLoaded = new EventEmitter();
23
+ this.$status = new BehaviorSubject(MediaStatus.NotSet);
24
+ this._objectFit = MediaObjectFit.Original;
25
+ console.log('MarcyVideoComponent ctor');
26
+ if (srcDir === undefined || srcDir === null)
27
+ throw new Error(`${MarcyVideoComponent.name} should have [vidsrc] directive as source object`);
28
+ this.src = srcDir;
29
+ cd.detach();
30
+ }
31
+ ngOnInit() {
32
+ console.log('MarcyVideoComponent ngOnInit');
33
+ // bind loaded event
34
+ this.$status
35
+ .pipe(this._u.takeUntilDestroy, filter(status => status === MediaStatus.Loaded))
36
+ .subscribe(() => this.isLoaded.next());
37
+ this.cd.detectChanges();
38
+ }
39
+ ngAfterViewInit() {
40
+ console.log('MarcyVideoComponent ngAfterViewInit');
41
+ // bind src changes
42
+ this.src.srcChange
43
+ .pipe(this._u.takeUntilDestroy)
44
+ .subscribe((val) => {
45
+ console.log('MarcyVideoComponent onSrcChange', val);
46
+ this.updateSources();
47
+ // resubscribe because its updated with src
48
+ this.subscribeToMediaQueryChange();
49
+ });
50
+ this.updateSources();
51
+ // initial, for src added before init
52
+ this.subscribeToMediaQueryChange();
53
+ }
54
+ subscribeToMediaQueryChange() {
55
+ this.src
56
+ .watchMediaQueries()
57
+ .subscribe(() => {
58
+ console.log('MarcyVideoComponent watchMediaQueries');
59
+ this.updateSources();
60
+ });
61
+ }
62
+ updateSources() {
63
+ console.log('MarcyVideoComponent updateSources');
64
+ this.source = this.findMoreSuitableSource();
65
+ console.log('MarcyVideoComponent new source', this.source);
66
+ if (this.$status.value === MediaStatus.NotSet && this.source === undefined) {
67
+ return;
68
+ }
69
+ if (this.source === undefined) {
70
+ this.$status.next(MediaStatus.NotSet);
71
+ this.cd.detectChanges();
72
+ return;
73
+ }
74
+ this.$status.next(MediaStatus.NotLoaded);
75
+ this.cd.detectChanges();
76
+ }
77
+ set objectFit(val) {
78
+ this._objectFit = val ?? MediaObjectFit.Original;
79
+ this.cd.detectChanges();
80
+ }
81
+ get objectFit() {
82
+ return this._objectFit;
83
+ }
84
+ onLoad() {
85
+ this.$status.next(MediaStatus.Loaded);
86
+ }
87
+ findMoreSuitableSource() {
88
+ if (this.videoRef === undefined) {
89
+ console.log('skipping findMoreSuitableSource. videoRef is empty still');
90
+ return;
91
+ }
92
+ const videoSources = this.src.data?.sources ?? [];
93
+ const currentVideoWidth = this.videoRef.nativeElement.clientWidth;
94
+ const realPixelsVideoWidth = this.device.devicePixelRatio * currentVideoWidth;
95
+ console.log(`MarcyVideoComponent currentVideoWidth ${currentVideoWidth}`);
96
+ console.log(`MarcyVideoComponent realPixelsVideoWidth ${realPixelsVideoWidth}`);
97
+ for (let i = 0; i < videoSources.length; i++) {
98
+ const videoSource = videoSources[i];
99
+ if (!matchesMediaQuery(videoSource.mediaQuery))
100
+ continue;
101
+ // SSR
102
+ if (typeof this.videoRef.nativeElement.canPlayType !== 'function') {
103
+ // return first mp4, because all players can play them
104
+ const mp4Srcs = videoSource
105
+ .srcSet
106
+ .filter(x => x.mimeType === 'video/mp4')
107
+ .sort(descendingT(x => x.meta.width)); // bigest video
108
+ // element or undefined
109
+ return mp4Srcs[0];
110
+ }
111
+ const fileSrcs = videoSource
112
+ .srcSet
113
+ .filter(x => this.videoRef.nativeElement.canPlayType(x.mimeType))
114
+ .sort(ascendingT(x => x.meta.width)) // smallest video
115
+ .sort(x => x.mimeType.includes('webm') ? 1 : -1); // webm first
116
+ if (fileSrcs.length === 0)
117
+ continue;
118
+ let bestSrc = fileSrcs[0];
119
+ for (let i = 1; i < fileSrcs.length; i++) {
120
+ const fileSrc = fileSrcs[i];
121
+ const currentDiff = fileSrc.meta.width - realPixelsVideoWidth;
122
+ // too big video source width
123
+ if (currentDiff > 0)
124
+ break;
125
+ bestSrc = fileSrc;
126
+ }
127
+ return bestSrc;
128
+ }
129
+ return undefined;
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MarcyVideoComponent, deps: [{ token: i1.DeviceServiceBase }, { token: i0.ChangeDetectorRef }, { token: i2.UnsubscriberService }, { token: i3.VideoSrcDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: MarcyVideoComponent, selector: "bon-video", inputs: { objectFit: "objectFit" }, outputs: { isLoaded: "isLoaded" }, providers: [UnsubscriberService], viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true }], ngImport: i0, template: "<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 | async) === MediaStatus.Loaded\"\n class=\"video-container\">\n\n <ng-container *ngIf=\"device.isSSR ; then ssrTemplate else browserTemplate\"></ng-container>\n\n <ng-template #videoTemplate>\n <video #video\n [src]=\"source !== undefined ? source.url :'' \"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted=true;video.play();\"\n autoplay\n loop\n muted> </video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n <noscript *ngIf=\"device.isSSR\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\" (intersected)=\"cd.detectChanges()\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n <div *ngIf=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\" [style.padding-top]=\"100 / src.ratio +'%'\"></div>\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: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IntersectionComponent, selector: "bon-intersection", inputs: ["session"], outputs: ["intersected"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MarcyVideoComponent, decorators: [{
135
+ type: Component,
136
+ args: [{ selector: 'bon-video', providers: [UnsubscriberService], template: "<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 | async) === MediaStatus.Loaded\"\n class=\"video-container\">\n\n <ng-container *ngIf=\"device.isSSR ; then ssrTemplate else browserTemplate\"></ng-container>\n\n <ng-template #videoTemplate>\n <video #video\n [src]=\"source !== undefined ? source.url :'' \"\n (load)=\"onLoad()\"\n (canplay)=\"video.muted=true;video.play();\"\n autoplay\n loop\n muted> </video>\n </ng-template>\n\n <ng-template #ssrTemplate>\n <noscript *ngIf=\"device.isSSR\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </noscript>\n </ng-template>\n\n <ng-template #browserTemplate>\n <bon-intersection #intersectionZone [session]=\"src\" (intersected)=\"cd.detectChanges()\">\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\n </bon-intersection>\n </ng-template>\n\n <div *ngIf=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\" [style.padding-top]=\"100 / src.ratio +'%'\"></div>\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"] }]
137
+ }], ctorParameters: () => [{ type: i1.DeviceServiceBase }, { type: i0.ChangeDetectorRef }, { type: i2.UnsubscriberService }, { type: i3.VideoSrcDirective, decorators: [{
138
+ type: Optional
139
+ }] }], propDecorators: { videoRef: [{
140
+ type: ViewChild,
141
+ args: ['video']
142
+ }], isLoaded: [{
143
+ type: Output
144
+ }], objectFit: [{
145
+ type: Input
146
+ }] } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyY3ktdmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUvc3JjL2xpYi9tYXJjeS12aWRlby9tYXJjeS12aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL21hcmN5LXZpZGVvL21hcmN5LXZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQXFCLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3SixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjVCLFlBRXdCLE1BQXlCLEVBQ3pCLEVBQXFCLEVBQ3BCLEVBQXVCLEVBQzVCLE1BQTBCO1FBSHRCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3pCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3BCLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBcEJoQyxnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMx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LE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU1QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxvQkFBb0IsQ0FBQztnQkFFOUQsNkJBQTZCO2dCQUM3QixJQUFJLFdBQVcsR0FBRyxDQUFDO29CQUNmLE1BQU07Z0JBRVYsT0FBTyxHQUFHLE9BQU8sQ0FBQzthQUNyQjtZQUVELE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs4R0FqTFEsbUJBQW1CO2tHQUFuQixtQkFBbUIsMkdBRmpCLENBQUMsbUJBQW1CLENBQUMsNkhDaEJwQyx1dUNBZ0NBOzsyRkRkYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksV0FBVyxhQUdWLENBQUMsbUJBQW1CLENBQUM7OzBCQXdCdkIsUUFBUTt5Q0FqQkQsUUFBUTtzQkFEdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUlGLFFBQVE7c0JBRHZCLE1BQU07Z0JBaUdJLFNBQVM7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCwgT25EZXN0cm95LCBPcHRpb25hbCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgKiBhcyBNQ29yZSBmcm9tICcuLi9nZW5lcmF0ZWQnO1xuXG5pbXBvcnQgeyBVbnN1YnNjcmliZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS91bnN1YnNjcmliZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1lZGlhU3RhdHVzIH0gZnJvbSAnLi4vY29yZS9NZWRpYVN0YXR1cyc7XG5pbXBvcnQgeyBNZWRpYU9iamVjdEZpdCB9IGZyb20gJy4uL2NvcmUvTWVkaWFPYmplY3RGaXQnO1xuaW1wb3J0IHsgRGV2aWNlU2VydmljZUJhc2UgfSBmcm9tICcuLi9jb3JlL2RldmljZS5zZXJ2aWNlLmJhc2UnO1xuaW1wb3J0IHsgVmlkZW9TcmNEaXJlY3RpdmUgfSBmcm9tICcuL3ZpZHNyYy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYXNjZW5kaW5nVCwgbWF0Y2hlc01lZGlhUXVlcnksIGRlc2NlbmRpbmdUIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYm9uLXZpZGVvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWFyY3ktdmlkZW8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL21hcmN5LXZpZGVvLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbVW5zdWJzY3JpYmVyU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTWFyY3lWaWRlb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHVibGljIHJlYWRvbmx5IE1lZGlhU3RhdHVzID0gTWVkaWFTdGF0dXM7XG4gICAgcHVibGljIHJlYWRvbmx5IE1hcmN5T2JqZWN0Rml0ID0gTWVkaWFPYmplY3RGaXQ7XG5cbiAgICBAVmlld0NoaWxkKCd2aWRlbycpXG4gICAgcHVibGljIHJlYWRvbmx5IHZpZGVvUmVmITogRWxlbWVudFJlZjxIVE1MVmlkZW9FbGVtZW50PjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBpc0xvYWRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5ICRzdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RhdHVzPihNZWRpYVN0YXR1cy5Ob3RTZXQpO1xuICAgIHB1YmxpYyByZWFkb25seSBzcmM6IFZpZGVvU3JjRGlyZWN0aXZlO1xuXG4gICAgcHVibGljIHNvdXJjZT86IE1Db3JlLkZpbGVTcmM8TUNvcmUuVmlkZW9NZXRhPjtcblxuICAgIHByaXZhdGUgX29iamVjdEZpdCA9IE1lZGlhT2JqZWN0Rml0Lk9yaWdpbmFsO1xuXG4gICAgY29uc3RydWN0b3JcbiAgICAgICAgKFxuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IGRldmljZTogRGV2aWNlU2VydmljZUJhc2UsXG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdTogVW5zdWJzY3JpYmVyU2VydmljZSxcbiAgICAgICAgICAgIEBPcHRpb25hbCgpIHNyY0Rpcj86IFZpZGVvU3JjRGlyZWN0aXZlXG4gICAgICAgICkge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IGN0b3InKTtcblxuICAgICAgICBpZiAoc3JjRGlyID09PSB1bmRlZmluZWQgfHwgc3JjRGlyID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke01hcmN5VmlkZW9Db21wb25lbnQubmFtZX0gc2hvdWxkIGhhdmUgW3ZpZHNyY10gZGlyZWN0aXZlIGFzIHNvdXJjZSBvYmplY3RgKTtcblxuICAgICAgICB0aGlzLnNyYyA9IHNyY0RpcjtcblxuICAgICAgICBjZC5kZXRhY2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IG5nT25Jbml0Jyk7XG5cbiAgICAgICAgLy8gYmluZCBsb2FkZWQgZXZlbnRcbiAgICAgICAgdGhpcy4kc3RhdHVzXG4gICAgICAgICAgICAucGlwZVxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHRoaXMuX3UudGFrZVVudGlsRGVzdHJveSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdHVzID0+IHN0YXR1cyA9PT0gTWVkaWFTdGF0dXMuTG9hZGVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzTG9hZGVkLm5leHQoKSk7XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01hcmN5VmlkZW9Db21wb25lbnQgbmdBZnRlclZpZXdJbml0Jyk7XG5cbiAgICAgICAgLy8gYmluZCBzcmMgY2hhbmdlc1xuICAgICAgICB0aGlzLnNyYy5zcmNDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRoaXMuX3UudGFrZVVudGlsRGVzdHJveSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IG9uU3JjQ2hhbmdlJywgdmFsKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU291cmNlcygpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVzdWJzY3JpYmUgYmVjYXVzZSBpdHMgdXBkYXRlZCB3aXRoIHNyY1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9NZWRpYVF1ZXJ5Q2hhbmdlKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMudXBkYXRlU291cmNlcygpO1xuXG4gICAgICAgIC8vIGluaXRpYWwsIGZvciBzcmMgYWRkZWQgYmVmb3JlIGluaXRcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhUXVlcnlDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvTWVkaWFRdWVyeUNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zcmNcbiAgICAgICAgICAgIC53YXRjaE1lZGlhUXVlcmllcygpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCB3YXRjaE1lZGlhUXVlcmllcycpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU291cmNlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTb3VyY2VzKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCB1cGRhdGVTb3VyY2VzJyk7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLmZpbmRNb3JlU3VpdGFibGVTb3VyY2UoKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCBuZXcgc291cmNlJywgdGhpcy5zb3VyY2UpO1xuXG4gICAgICAgIGlmICh0aGlzLiRzdGF0dXMudmFsdWUgPT09IE1lZGlhU3RhdHVzLk5vdFNldCAmJiB0aGlzLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy4kc3RhdHVzLm5leHQoTWVkaWFTdGF0dXMuTm90U2V0KTtcblxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRzdGF0dXMubmV4dChNZWRpYVN0YXR1cy5Ob3RMb2FkZWQpO1xuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBvYmplY3RGaXQodmFsOiBNZWRpYU9iamVjdEZpdCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9vYmplY3RGaXQgPSB2YWwgPz8gTWVkaWFPYmplY3RGaXQuT3JpZ2luYWw7XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvYmplY3RGaXQoKTogTWVkaWFPYmplY3RGaXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0Rml0O1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkxvYWQoKSB7XG4gICAgICAgIHRoaXMuJHN0YXR1cy5uZXh0KE1lZGlhU3RhdHVzLkxvYWRlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kTW9yZVN1aXRhYmxlU291cmNlKCk6IE1Db3JlLkZpbGVTcmM8TUNvcmUuVmlkZW9NZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdza2lwcGluZyBmaW5kTW9yZVN1aXRhYmxlU291cmNlLiB2aWRlb1JlZiBpcyBlbXB0eSBzdGlsbCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlkZW9Tb3VyY2VzID0gdGhpcy5zcmMuZGF0YT8uc291cmNlcyA/PyBbXTtcblxuICAgICAgICBjb25zdCBjdXJyZW50VmlkZW9XaWR0aCA9IHRoaXMudmlkZW9SZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3QgcmVhbFBpeGVsc1ZpZGVvV2lkdGggPSB0aGlzLmRldmljZS5kZXZpY2VQaXhlbFJhdGlvICogY3VycmVudFZpZGVvV2lkdGg7XG5cbiAgICAgICAgY29uc29sZS5sb2coYE1hcmN5VmlkZW9Db21wb25lbnQgY3VycmVudFZpZGVvV2lkdGggJHtjdXJyZW50VmlkZW9XaWR0aH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYE1hcmN5VmlkZW9Db21wb25lbnQgcmVhbFBpeGVsc1ZpZGVvV2lkdGggJHtyZWFsUGl4ZWxzVmlkZW9XaWR0aH1gKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZGVvU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmlkZW9Tb3VyY2UgPSB2aWRlb1NvdXJjZXNbaV07XG5cbiAgICAgICAgICAgIGlmICghbWF0Y2hlc01lZGlhUXVlcnkodmlkZW9Tb3VyY2UubWVkaWFRdWVyeSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFNTUlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZGVvUmVmLm5hdGl2ZUVsZW1lbnQuY2FuUGxheVR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZmlyc3QgbXA0LCBiZWNhdXNlIGFsbCBwbGF5ZXJzIGNhbiBwbGF5IHRoZW1cbiAgICAgICAgICAgICAgICBjb25zdCBtcDRTcmNzID0gdmlkZW9Tb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgLnNyY1NldFxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4geC5taW1lVHlwZSA9PT0gJ3ZpZGVvL21wNCcpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KGRlc2NlbmRpbmdUKHggPT4geC5tZXRhLndpZHRoKSk7IC8vIGJpZ2VzdCB2aWRlb1xuXG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gbXA0U3Jjc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsZVNyY3MgPSB2aWRlb1NvdXJjZVxuICAgICAgICAgICAgICAgIC5zcmNTZXRcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4gdGhpcy52aWRlb1JlZi5uYXRpdmVFbGVtZW50LmNhblBsYXlUeXBlKHgubWltZVR5cGUpKVxuICAgICAgICAgICAgICAgIC5zb3J0KGFzY2VuZGluZ1QoeCA9PiB4Lm1ldGEud2lkdGgpKSAvLyBzbWFsbGVzdCB2aWRlb1xuICAgICAgICAgICAgICAgIC5zb3J0KHggPT4geC5taW1lVHlwZS5pbmNsdWRlcygnd2VibScpID8gMSA6IC0xKTsvLyB3ZWJtIGZpcnN0XG5cbiAgICAgICAgICAgIGlmIChmaWxlU3Jjcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGxldCBiZXN0U3JjID0gZmlsZVNyY3NbMF07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlsZVNyY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlU3JjID0gZmlsZVNyY3NbaV07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RGlmZiA9IGZpbGVTcmMubWV0YS53aWR0aCAtIHJlYWxQaXhlbHNWaWRlb1dpZHRoO1xuXG4gICAgICAgICAgICAgICAgLy8gdG9vIGJpZyB2aWRlbyBzb3VyY2Ugd2lkdGhcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudERpZmYgPiAwKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGJlc3RTcmMgPSBmaWxlU3JjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYmVzdFNyYztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiPGRpdiBbY2xhc3Mua25vd25SYXRpb109XCJzcmMucmF0aW8gPiAwICYmIG9iamVjdEZpdCA9PT0gTWFyY3lPYmplY3RGaXQuT3JpZ2luYWxcIlxuICAgICBbY2xhc3MuY292ZXJdPVwib2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5Db3ZlclwiXG4gICAgIFtjbGFzcy5jb250YWluXT1cIm9iamVjdEZpdCA9PT0gTWFyY3lPYmplY3RGaXQuQ29udGFpblwiXG4gICAgIFtjbGFzcy5sb2FkZWRdPVwiKCRzdGF0dXMgfCBhc3luYykgPT09IE1lZGlhU3RhdHVzLkxvYWRlZFwiXG4gICAgIGNsYXNzPVwidmlkZW8tY29udGFpbmVyXCI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldmljZS5pc1NTUiA7IHRoZW4gc3NyVGVtcGxhdGUgZWxzZSBicm93c2VyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI3ZpZGVvVGVtcGxhdGU+XG4gICAgPHZpZGVvICN2aWRlb1xuICAgICAgICAgICBbc3JjXT1cInNvdXJjZSAhPT0gdW5kZWZpbmVkID8gc291cmNlLnVybCA6JycgXCJcbiAgICAgICAgICAgKGxvYWQpPVwib25Mb2FkKClcIlxuICAgICAgICAgICAoY2FucGxheSk9XCJ2aWRlby5tdXRlZD10cnVlO3ZpZGVvLnBsYXkoKTtcIlxuICAgICAgICAgICBhdXRvcGxheVxuICAgICAgICAgICBsb29wXG4gICAgICAgICAgIG11dGVkPiA8L3ZpZGVvPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjc3NyVGVtcGxhdGU+XG4gICAgPG5vc2NyaXB0ICpuZ0lmPVwiZGV2aWNlLmlzU1NSXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmlkZW9UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbm9zY3JpcHQ+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNicm93c2VyVGVtcGxhdGU+XG4gICAgPGJvbi1pbnRlcnNlY3Rpb24gI2ludGVyc2VjdGlvblpvbmUgW3Nlc3Npb25dPVwic3JjXCIgKGludGVyc2VjdGVkKT1cImNkLmRldGVjdENoYW5nZXMoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpZGVvVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Jvbi1pbnRlcnNlY3Rpb24+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiAqbmdJZj1cInNyYy5yYXRpbyA+IDAgJiYgb2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5PcmlnaW5hbFwiIFtzdHlsZS5wYWRkaW5nLXRvcF09XCIxMDAgLyBzcmMucmF0aW8gKyclJ1wiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { SrcBaseDirective } from '../core/src.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class VideoSrcDirective extends SrcBaseDirective {
5
+ set vidsrc(value) {
6
+ this.data = value;
7
+ console.log('set vidsrc', value);
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: VideoSrcDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
10
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: VideoSrcDirective, selector: "[vidsrc]", inputs: { vidsrc: "vidsrc" }, usesInheritance: true, ngImport: i0 }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: VideoSrcDirective, decorators: [{
13
+ type: Directive,
14
+ args: [{
15
+ selector: '[vidsrc]'
16
+ }]
17
+ }], propDecorators: { vidsrc: [{
18
+ type: Input
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkc3JjLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllL3NyYy9saWIvbWFyY3ktdmlkZW8vdmlkc3JjLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGdCQUE2QjtJQUVoRSxJQUNXLE1BQU0sQ0FBQyxLQUE4QjtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUVsQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDOzhHQVBRLGlCQUFpQjtrR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUg3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxVQUFVO2lCQUN2Qjs4QkFJYyxNQUFNO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCAqIGFzIE1Db3JlIGZyb20gJy4uL2dlbmVyYXRlZCc7XG5cbmltcG9ydCB7IFNyY0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9jb3JlL3NyYy5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t2aWRzcmNdJ1xufSlcbmV4cG9ydCBjbGFzcyBWaWRlb1NyY0RpcmVjdGl2ZSBleHRlbmRzIFNyY0Jhc2VEaXJlY3RpdmU8TUNvcmUuVmlkZW8+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB2aWRzcmModmFsdWU6IE1Db3JlLlZpZGVvIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdzZXQgdmlkc3JjJywgdmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUJvbmVDb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL3NrZWxldG9uL0lCb25lQ29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb25lRGlyZWN0aXZlIH0gZnJvbSBcIi4vYm9uZS5kaXJlY3RpdmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQm9uZUNvbXBvbmVudCB7XG4gIGJkOiBCb25lRGlyZWN0aXZlO1xufVxuIl19
@@ -0,0 +1,41 @@
1
+ import { ChangeDetectorRef, Directive } from '@angular/core';
2
+ import { UnsubscriberService } from '../core/unsubscribe.service';
3
+ import { LocalizeServiceBase } from '../localization/LocalizeServiceBase';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../core/unsubscribe.service";
6
+ import * as i2 from "../localization/LocalizeServiceBase";
7
+ export class BoneDirective {
8
+ constructor(cd, _u, localizationService) {
9
+ this.cd = cd;
10
+ this._u = _u;
11
+ this.localizationService = localizationService;
12
+ this.cd.detach();
13
+ }
14
+ ngOnInit() {
15
+ this.localizationService.locale$
16
+ .pipe(this._u.takeUntilDestroy)
17
+ .subscribe(() => {
18
+ // need to detect changes in our detached components
19
+ this.cd.detectChanges();
20
+ });
21
+ }
22
+ set bone(value) {
23
+ this._bone = value;
24
+ this.cd.detectChanges();
25
+ }
26
+ get bone() {
27
+ if (this._bone === undefined || this._bone === null)
28
+ throw new Error('The property "bone" should be set at least once. For example in skeleton');
29
+ return this._bone;
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: BoneDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UnsubscriberService }, { token: i2.LocalizeServiceBase }], target: i0.ɵɵFactoryTarget.Directive }); }
32
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: BoneDirective, isStandalone: true, selector: "[bonBoneDir]", ngImport: i0 }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: BoneDirective, decorators: [{
35
+ type: Directive,
36
+ args: [{
37
+ selector: '[bonBoneDir]',
38
+ standalone: true
39
+ }]
40
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.UnsubscriberService }, { type: i2.LocalizeServiceBase }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL3NrZWxldG9uL2JvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFNMUUsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFBNkIsRUFBcUIsRUFDL0IsRUFBdUIsRUFDdkIsbUJBQXdDO1FBRjlCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBQ3ZCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDekQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPO2FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2FBQzlCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxvREFBb0Q7WUFDcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxJQUFXLElBQUksQ0FBQyxLQUFRO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztRQUU5RixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs4R0E3QlUsYUFBYTtrR0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvbmUgfSBmcm9tICcuLi9nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgVW5zdWJzY3JpYmVyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdW5zdWJzY3JpYmUuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGl6ZVNlcnZpY2VCYXNlIH0gZnJvbSAnLi4vbG9jYWxpemF0aW9uL0xvY2FsaXplU2VydmljZUJhc2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYm9uQm9uZURpcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEJvbmVEaXJlY3RpdmU8VCBleHRlbmRzIEJvbmUgPSBCb25lPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX2JvbmU/OiBUO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3U6IFVuc3Vic2NyaWJlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6ZVNlcnZpY2VCYXNlKSB7XG4gICAgdGhpcy5jZC5kZXRhY2goKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UubG9jYWxlJFxuICAgICAgLnBpcGUodGhpcy5fdS50YWtlVW50aWxEZXN0cm95KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIG5lZWQgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gb3VyIGRldGFjaGVkIGNvbXBvbmVudHNcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICB9XG5cbiAgcHVibGljIHNldCBib25lKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fYm9uZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJvbmUoKTogVCB7XG4gICAgaWYgKHRoaXMuX2JvbmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9ib25lID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvcGVydHkgXCJib25lXCIgc2hvdWxkIGJlIHNldCBhdCBsZWFzdCBvbmNlLiBGb3IgZXhhbXBsZSBpbiBza2VsZXRvbicpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2JvbmU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export * from './bone.directive';
2
+ export * from './IBoneComponent';
3
+ export * from './skeleton-anchor.directive';
4
+ export * from './skeleton.component';
5
+ export * from './unknown-bone.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL3NrZWxldG9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9uZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9JQm9uZUNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NrZWxldG9uLWFuY2hvci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9za2VsZXRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi91bmtub3duLWJvbmUuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { Directive, ViewContainerRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SkeletonAnchorDirective {
4
+ constructor(viewContainerRef) {
5
+ this.viewContainerRef = viewContainerRef;
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SkeletonAnchorDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: SkeletonAnchorDirective, isStandalone: true, selector: "[bonSkeletonAnchor]", ngImport: i0 }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SkeletonAnchorDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{
13
+ selector: '[bonSkeletonAnchor]',
14
+ standalone: true
15
+ }]
16
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tYW5jaG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllL3NyYy9saWIvc2tlbGV0b24vc2tlbGV0b24tYW5jaG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU01RCxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLFlBQW1CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBQUksQ0FBQzs4R0FEL0MsdUJBQXVCO2tHQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBSm5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tib25Ta2VsZXRvbkFuY2hvcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNrZWxldG9uQW5jaG9yRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHsgfVxufVxuIl19
@@ -0,0 +1,53 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core';
2
+ import { SkeletonAnchorDirective } from './skeleton-anchor.directive';
3
+ import { UnknownBoneComponent } from './unknown-bone.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./skeleton-anchor.directive";
6
+ export class SkeletonComponent {
7
+ constructor(cd) {
8
+ this.cd = cd;
9
+ this._bones = [];
10
+ this.iniailized = false;
11
+ }
12
+ ngOnInit() {
13
+ this.iniailized = true;
14
+ this.fillComponentFromBones();
15
+ }
16
+ set bones(newValue) {
17
+ this._bones.splice(0, this._bones.length);
18
+ this._bones.push(...newValue ?? []);
19
+ this.fillComponentFromBones();
20
+ }
21
+ fillComponentFromBones() {
22
+ if (this.iniailized === false)
23
+ return;
24
+ const viewContainerRef = this.skeletonAnchor.viewContainerRef;
25
+ viewContainerRef.clear();
26
+ if (this.map === undefined || this.map === null)
27
+ throw new Error('add type map with input: [map]="..."');
28
+ for (const bone of this._bones) {
29
+ let componentType = this.map.get(bone.type);
30
+ if (componentType === undefined || componentType === null) {
31
+ console.warn(`Mapping type for ${bone.type} not found`);
32
+ componentType = UnknownBoneComponent;
33
+ }
34
+ const boneComponentRef = viewContainerRef.createComponent(componentType);
35
+ boneComponentRef.instance.bd.bone = bone;
36
+ }
37
+ }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SkeletonComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: SkeletonComponent, selector: "bon-skeleton", inputs: { map: "map", bones: "bones" }, viewQueries: [{ propertyName: "skeletonAnchor", first: true, predicate: SkeletonAnchorDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-template bonSkeletonAnchor></ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.SkeletonAnchorDirective, selector: "[bonSkeletonAnchor]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
+ }
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SkeletonComponent, decorators: [{
42
+ type: Component,
43
+ args: [{ selector: 'bon-skeleton', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template bonSkeletonAnchor></ng-template>\n", styles: [":host{display:block}\n"] }]
44
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { skeletonAnchor: [{
45
+ type: ViewChild,
46
+ args: [SkeletonAnchorDirective, { static: true }]
47
+ }], map: [{
48
+ type: Input,
49
+ args: [{ required: true }]
50
+ }], bones: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUvc3JjL2xpYi9za2VsZXRvbi9za2VsZXRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL3NrZWxldG9uL3NrZWxldG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFnQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQVFoRSxNQUFNLE9BQU8saUJBQWlCO0lBVzVCLFlBQW9CLEVBQXFCO1FBQXJCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBSnhCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFFN0IsZUFBVSxHQUFHLEtBQUssQ0FBQztJQUczQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNXLEtBQUssQ0FBQyxRQUE0QjtRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLO1lBQzNCLE9BQU87UUFFVCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDOUQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUk7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBRTFELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUMsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDO2dCQUN4RCxhQUFhLEdBQUcsb0JBQW9CLENBQUM7YUFDdEM7WUFFRCxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV6RSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDMUM7SUFDSCxDQUFDOzhHQWpEVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw0SUFDakIsdUJBQXVCLDhEQ2JwQyxpREFDQTs7MkZEV2EsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTTtzRkFJeEMsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTdDLEdBQUc7c0JBRFQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBZ0JkLEtBQUs7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBUeXBlLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNrZWxldG9uQW5jaG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9za2VsZXRvbi1hbmNob3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IElCb25lQ29tcG9uZW50IH0gZnJvbSBcIi4vSUJvbmVDb21wb25lbnRcIjtcbmltcG9ydCB7IEJvbmUgfSBmcm9tICcuLi9nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgVW5rbm93bkJvbmVDb21wb25lbnQgfSBmcm9tICcuL3Vua25vd24tYm9uZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdib24tc2tlbGV0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc2tlbGV0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9za2VsZXRvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoU2tlbGV0b25BbmNob3JEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBza2VsZXRvbkFuY2hvciE6IFNrZWxldG9uQW5jaG9yRGlyZWN0aXZlO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBtYXA/OiBNYXA8c3RyaW5nLCBUeXBlPElCb25lQ29tcG9uZW50Pj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYm9uZXM6IEJvbmVbXSA9IFtdO1xuXG4gIHByaXZhdGUgaW5pYWlsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaWFpbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbXBvbmVudEZyb21Cb25lcygpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBib25lcyhuZXdWYWx1ZTogQm9uZVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYm9uZXMuc3BsaWNlKDAsIHRoaXMuX2JvbmVzLmxlbmd0aCk7XG4gICAgdGhpcy5fYm9uZXMucHVzaCguLi5uZXdWYWx1ZSA/PyBbXSk7XG5cbiAgICB0aGlzLmZpbGxDb21wb25lbnRGcm9tQm9uZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbENvbXBvbmVudEZyb21Cb25lcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbmlhaWxpemVkID09PSBmYWxzZSlcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLnNrZWxldG9uQW5jaG9yLnZpZXdDb250YWluZXJSZWY7XG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMubWFwID09PSB1bmRlZmluZWQgfHwgdGhpcy5tYXAgPT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCB0eXBlIG1hcCB3aXRoIGlucHV0OiBbbWFwXT1cIi4uLlwiJyk7XG5cbiAgICBmb3IgKGNvbnN0IGJvbmUgb2YgdGhpcy5fYm9uZXMpIHtcbiAgICAgIGxldCBjb21wb25lbnRUeXBlID0gdGhpcy5tYXAuZ2V0KGJvbmUudHlwZSk7XG5cbiAgICAgIGlmIChjb21wb25lbnRUeXBlID09PSB1bmRlZmluZWQgfHwgY29tcG9uZW50VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYE1hcHBpbmcgdHlwZSBmb3IgJHtib25lLnR5cGV9IG5vdCBmb3VuZGApO1xuICAgICAgICBjb21wb25lbnRUeXBlID0gVW5rbm93bkJvbmVDb21wb25lbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvbmVDb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcblxuICAgICAgYm9uZUNvbXBvbmVudFJlZi5pbnN0YW5jZS5iZC5ib25lID0gYm9uZTtcbiAgICB9XG4gIH1cblxufVxuIiwiPG5nLXRlbXBsYXRlIGJvblNrZWxldG9uQW5jaG9yPjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { ChangeDetectorRef, Component } from '@angular/core';
2
+ import { BoneDirective } from './bone.directive';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./bone.directive";
5
+ import * as i2 from "@angular/common";
6
+ export class UnknownBoneComponent {
7
+ constructor(cd, bd) {
8
+ this.cd = cd;
9
+ this.bd = bd;
10
+ console.log('BoneDirective', bd);
11
+ cd.detach();
12
+ }
13
+ ngOnInit() {
14
+ this.cd.detectChanges();
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: UnknownBoneComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.BoneDirective }], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: UnknownBoneComponent, selector: "bon-unknown-bone", hostDirectives: [{ directive: i1.BoneDirective }], ngImport: i0, template: `<h2>unknown bone {{bd.bone.type}}</h2>
18
+ <div>{{bd.bone | json}}</div>`, isInline: true, styles: [":host{display:block;border:2px solid red;box-sizing:border-box}\n"], dependencies: [{ kind: "pipe", type: i2.JsonPipe, name: "json" }] }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: UnknownBoneComponent, decorators: [{
21
+ type: Component,
22
+ args: [{ selector: 'bon-unknown-bone', hostDirectives: [BoneDirective], template: `<h2>unknown bone {{bd.bone.type}}</h2>
23
+ <div>{{bd.bone | json}}</div>`, styles: [":host{display:block;border:2px solid red;box-sizing:border-box}\n"] }]
24
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.BoneDirective }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5rbm93bi1ib25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllL3NyYy9saWIvc2tlbGV0b24vdW5rbm93bi1ib25lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQWVqRCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQTZCLEVBQXFCLEVBQWtCLEVBQXVCO1FBQTlELE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQWtCLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDOzhHQVJVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDJHQVZyQjsyQ0FDK0I7OzJGQVM5QixvQkFBb0I7a0JBYmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGtCQUNaLENBQUMsYUFBYSxDQUFDLFlBQ3JCOzJDQUMrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCb25lQ29tcG9uZW50IH0gZnJvbSBcIi4vSUJvbmVDb21wb25lbnRcIjtcbmltcG9ydCB7IEJvbmUgfSBmcm9tICcuLi9nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgQm9uZURpcmVjdGl2ZSB9IGZyb20gJy4vYm9uZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdib24tdW5rbm93bi1ib25lJyxcbiAgaG9zdERpcmVjdGl2ZXM6IFtCb25lRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGA8aDI+dW5rbm93biBib25lIHt7YmQuYm9uZS50eXBlfX08L2gyPlxuICAgICAgICAgICAgIDxkaXY+e3tiZC5ib25lIHwganNvbn19PC9kaXY+YCxcbiAgc3R5bGVzOiBbXG4gICAgYDpob3N0e1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgcmVkO1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1gXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVW5rbm93bkJvbmVDb21wb25lbnQgaW1wbGVtZW50cyBJQm9uZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgcmVhZG9ubHkgYmQ6IEJvbmVEaXJlY3RpdmU8Qm9uZT4pIHtcbiAgICBjb25zb2xlLmxvZygnQm9uZURpcmVjdGl2ZScsIGJkKTtcbiAgICBjZC5kZXRhY2goKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG4iXX0=