@candy-kingdom/bonnie-cms 0.1.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.
Files changed (119) hide show
  1. package/README.md +7 -0
  2. package/esm2022/candy-kingdom-bonnie-cms.mjs +5 -0
  3. package/esm2022/index.mjs +16 -0
  4. package/esm2022/lib/admin-controls/admin-controls.component.mjs +44 -0
  5. package/esm2022/lib/admin-controls/index.mjs +2 -0
  6. package/esm2022/lib/bone-editors/bone-editor-base.component.mjs +143 -0
  7. package/esm2022/lib/bone-editors/index.mjs +3 -0
  8. package/esm2022/lib/bone-editors/unknown-bone-editor/index.mjs +2 -0
  9. package/esm2022/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.mjs +18 -0
  10. package/esm2022/lib/bonnie-cms.module.mjs +105 -0
  11. package/esm2022/lib/core/DeviceType.mjs +8 -0
  12. package/esm2022/lib/core/DeviceVisibility.mjs +9 -0
  13. package/esm2022/lib/core/MediaType.mjs +2 -0
  14. package/esm2022/lib/core/TextEditorField.mjs +7 -0
  15. package/esm2022/lib/core/Utils.mjs +18 -0
  16. package/esm2022/lib/core/index.mjs +6 -0
  17. package/esm2022/lib/core-components/editable-group.mjs +84 -0
  18. package/esm2022/lib/core-components/editable.directive.mjs +173 -0
  19. package/esm2022/lib/core-components/form-base.component.mjs +34 -0
  20. package/esm2022/lib/core-components/index.mjs +5 -0
  21. package/esm2022/lib/core-components/link-popup/index.mjs +2 -0
  22. package/esm2022/lib/core-components/link-popup/link-popup.component.mjs +73 -0
  23. package/esm2022/lib/form-controls/form-controls.component.mjs +16 -0
  24. package/esm2022/lib/form-controls/index.mjs +2 -0
  25. package/esm2022/lib/generated/i-equatable.mjs +6 -0
  26. package/esm2022/lib/generated/i-setting.mjs +6 -0
  27. package/esm2022/lib/generated/index.mjs +14 -0
  28. package/esm2022/lib/generated/localized-text-setting-data.mjs +6 -0
  29. package/esm2022/lib/generated/setting-base.mjs +6 -0
  30. package/esm2022/lib/generated/setting-data.mjs +6 -0
  31. package/esm2022/lib/generated/setting-group.mjs +6 -0
  32. package/esm2022/lib/generated/setting.mjs +6 -0
  33. package/esm2022/lib/generated/text-setting-data.mjs +6 -0
  34. package/esm2022/lib/generated/text-setting-type.mjs +10 -0
  35. package/esm2022/lib/media-uploader/index.mjs +2 -0
  36. package/esm2022/lib/media-uploader/media-uploader.component.mjs +159 -0
  37. package/esm2022/lib/seo-form/index.mjs +2 -0
  38. package/esm2022/lib/seo-form/seo-form.component.mjs +42 -0
  39. package/esm2022/lib/skeleton-editor/BoneEditorMap.mjs +2 -0
  40. package/esm2022/lib/skeleton-editor/ContentPreset.mjs +9 -0
  41. package/esm2022/lib/skeleton-editor/IBoneEditor.mjs +2 -0
  42. package/esm2022/lib/skeleton-editor/IBoneTemplate.mjs +2 -0
  43. package/esm2022/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.mjs +119 -0
  44. package/esm2022/lib/skeleton-editor/index.mjs +9 -0
  45. package/esm2022/lib/skeleton-editor/skeleton-editor-anchor.directive.mjs +16 -0
  46. package/esm2022/lib/skeleton-editor/skeleton-editor.component.mjs +107 -0
  47. package/esm2022/lib/text-form/TextInputStyle.mjs +7 -0
  48. package/esm2022/lib/text-form/index.mjs +3 -0
  49. package/esm2022/lib/text-form/text-form.component.mjs +33 -0
  50. package/esm2022/lib/translation-form/index.mjs +2 -0
  51. package/esm2022/lib/translation-form/translation-form.component.mjs +32 -0
  52. package/esm2022/lib/translation-input/index.mjs +2 -0
  53. package/esm2022/lib/translation-input/translation-input.component.mjs +42 -0
  54. package/esm2022/lib/translation-textarea/index.mjs +2 -0
  55. package/esm2022/lib/translation-textarea/translation-textarea.component.mjs +66 -0
  56. package/esm2022/lib/unknown-form/index.mjs +2 -0
  57. package/esm2022/lib/unknown-form/unknown-form.component.mjs +23 -0
  58. package/fesm2022/candy-kingdom-bonnie-cms.mjs +1343 -0
  59. package/fesm2022/candy-kingdom-bonnie-cms.mjs.map +1 -0
  60. package/index.d.ts +15 -0
  61. package/lib/admin-controls/admin-controls.component.d.ts +14 -0
  62. package/lib/admin-controls/index.d.ts +1 -0
  63. package/lib/bone-editors/bone-editor-base.component.d.ts +44 -0
  64. package/lib/bone-editors/index.d.ts +2 -0
  65. package/lib/bone-editors/unknown-bone-editor/index.d.ts +1 -0
  66. package/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.d.ts +11 -0
  67. package/lib/bonnie-cms.module.d.ts +26 -0
  68. package/lib/core/DeviceType.d.ts +6 -0
  69. package/lib/core/DeviceVisibility.d.ts +7 -0
  70. package/lib/core/MediaType.d.ts +2 -0
  71. package/lib/core/TextEditorField.d.ts +5 -0
  72. package/lib/core/Utils.d.ts +4 -0
  73. package/lib/core/index.d.ts +5 -0
  74. package/lib/core-components/editable-group.d.ts +24 -0
  75. package/lib/core-components/editable.directive.d.ts +43 -0
  76. package/lib/core-components/form-base.component.d.ts +15 -0
  77. package/lib/core-components/index.d.ts +4 -0
  78. package/lib/core-components/link-popup/index.d.ts +1 -0
  79. package/lib/core-components/link-popup/link-popup.component.d.ts +28 -0
  80. package/lib/form-controls/form-controls.component.d.ts +7 -0
  81. package/lib/form-controls/index.d.ts +1 -0
  82. package/lib/generated/i-equatable.d.ts +6 -0
  83. package/lib/generated/i-setting.d.ts +8 -0
  84. package/lib/generated/index.d.ts +13 -0
  85. package/lib/generated/localized-text-setting-data.d.ts +11 -0
  86. package/lib/generated/setting-base.d.ts +8 -0
  87. package/lib/generated/setting-data.d.ts +8 -0
  88. package/lib/generated/setting-group.d.ts +10 -0
  89. package/lib/generated/setting.d.ts +9 -0
  90. package/lib/generated/text-setting-data.d.ts +10 -0
  91. package/lib/generated/text-setting-type.d.ts +8 -0
  92. package/lib/media-uploader/index.d.ts +1 -0
  93. package/lib/media-uploader/media-uploader.component.d.ts +34 -0
  94. package/lib/seo-form/index.d.ts +1 -0
  95. package/lib/seo-form/seo-form.component.d.ts +18 -0
  96. package/lib/skeleton-editor/BoneEditorMap.d.ts +3 -0
  97. package/lib/skeleton-editor/ContentPreset.d.ts +11 -0
  98. package/lib/skeleton-editor/IBoneEditor.d.ts +26 -0
  99. package/lib/skeleton-editor/IBoneTemplate.d.ts +5 -0
  100. package/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.d.ts +32 -0
  101. package/lib/skeleton-editor/index.d.ts +8 -0
  102. package/lib/skeleton-editor/skeleton-editor-anchor.directive.d.ts +8 -0
  103. package/lib/skeleton-editor/skeleton-editor.component.d.ts +31 -0
  104. package/lib/text-form/TextInputStyle.d.ts +5 -0
  105. package/lib/text-form/index.d.ts +2 -0
  106. package/lib/text-form/text-form.component.d.ts +13 -0
  107. package/lib/translation-form/index.d.ts +1 -0
  108. package/lib/translation-form/translation-form.component.d.ts +14 -0
  109. package/lib/translation-input/index.d.ts +1 -0
  110. package/lib/translation-input/translation-input.component.d.ts +17 -0
  111. package/lib/translation-textarea/index.d.ts +1 -0
  112. package/lib/translation-textarea/translation-textarea.component.d.ts +26 -0
  113. package/lib/unknown-form/index.d.ts +1 -0
  114. package/lib/unknown-form/unknown-form.component.d.ts +9 -0
  115. package/package.json +25 -0
  116. package/styles/@candy-kingdom/bonnie/variables.scss +0 -0
  117. package/styles/admin-styles.scss +139 -0
  118. package/styles/admin-variables.scss +445 -0
  119. package/styles/variables.scss +415 -0
@@ -0,0 +1,159 @@
1
+ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { HttpClient, HttpEventType, HttpRequest } from '@angular/common/http';
4
+ import { catchError, last, map, Observable } from 'rxjs';
5
+ import { MediaObjectFit } from '@candy-kingdom/bonnie';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/platform-browser";
8
+ import * as i2 from "@angular/common/http";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "@candy-kingdom/bonnie";
11
+ const imageMimeTypes = ['image/png', 'image/jpeg'];
12
+ const videoMimeTypes = ['video/mp4'];
13
+ const imageFileTypes = imageMimeTypes.join(',');
14
+ const videoFileTypes = videoMimeTypes.join(',');
15
+ const allMediaFileTypes = `${imageFileTypes},${videoFileTypes}`;
16
+ export class MediaUploaderComponent {
17
+ constructor(sanitizer, http) {
18
+ this.sanitizer = sanitizer;
19
+ this.http = http;
20
+ this.MediaObjectFit = MediaObjectFit;
21
+ this.srcChange = new EventEmitter();
22
+ this.progress = 0;
23
+ this.isUploading = false;
24
+ this.autoplay = true;
25
+ this.fileTypeMask = allMediaFileTypes;
26
+ }
27
+ set src(newSrc) {
28
+ if (this._src === newSrc)
29
+ return;
30
+ this._src = newSrc;
31
+ }
32
+ get src() {
33
+ return this._src;
34
+ }
35
+ set uploadType(newUploadType) {
36
+ switch (newUploadType) {
37
+ case "image":
38
+ this._uploadType = newUploadType;
39
+ this.fileTypeMask = imageFileTypes;
40
+ break;
41
+ case "video":
42
+ this._uploadType = newUploadType;
43
+ this.fileTypeMask = videoFileTypes;
44
+ break;
45
+ case undefined:
46
+ default:
47
+ this._uploadType = newUploadType;
48
+ this.fileTypeMask = allMediaFileTypes;
49
+ break;
50
+ }
51
+ }
52
+ get uploadType() {
53
+ return this._uploadType;
54
+ }
55
+ onFileSelect(fileInput) {
56
+ if (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1)
57
+ return;
58
+ const file = fileInput.files[0];
59
+ let uploadingMediaType;
60
+ if (this._uploadType !== undefined && this._uploadType !== null) {
61
+ uploadingMediaType = this._uploadType;
62
+ }
63
+ else if (imageMimeTypes.includes(file.type)) {
64
+ uploadingMediaType = 'image';
65
+ }
66
+ else if (videoMimeTypes.includes(file.type)) {
67
+ uploadingMediaType = 'video';
68
+ }
69
+ else {
70
+ console.error(`unknown media type ${file.type} (${file.name})`);
71
+ return;
72
+ }
73
+ const uploadUrl = this.uploadUrlMap.get(uploadingMediaType);
74
+ if (uploadUrl === undefined || uploadUrl === null) {
75
+ console.error(`upload map doesn't have url for type ${uploadingMediaType}`);
76
+ return;
77
+ }
78
+ const formData = new FormData();
79
+ formData.append('file', file);
80
+ formData.append('ratio', `${this.forceRatio ?? 0}`);
81
+ this.progress = 0;
82
+ this.isUploading = true;
83
+ this.updateClip();
84
+ const request = new HttpRequest('POST', uploadUrl, formData, {
85
+ reportProgress: true
86
+ });
87
+ this.http
88
+ .request(request)
89
+ .pipe(map(event => this.getEventMessage(event)),
90
+ // tap(message => this.showProgress(message)),
91
+ last(), // return last (completed) message to caller
92
+ catchError(this.handleError(file))).subscribe(() => { this.isUploading = false; });
93
+ }
94
+ selectFile(event) {
95
+ // ignore buble click on file picker
96
+ if (event.target === this.fileInput.nativeElement)
97
+ return;
98
+ this.fileInput.nativeElement.click();
99
+ }
100
+ getEventMessage(event) {
101
+ switch (event.type) {
102
+ case HttpEventType.Sent:
103
+ return;
104
+ case HttpEventType.UploadProgress:
105
+ this.progress = event.total === undefined ? 0.5 : event.loaded / event.total;
106
+ this.updateClip();
107
+ return;
108
+ case HttpEventType.Response:
109
+ if (event.body === undefined || event.body === null) {
110
+ console.error('media deserialization error. Response body in undefined');
111
+ }
112
+ else {
113
+ // remove this
114
+ // needed for C# deserialization
115
+ const pixmedia = {
116
+ $type: event.body.type,
117
+ ...event.body,
118
+ };
119
+ this.srcChange.emit(pixmedia);
120
+ }
121
+ return;
122
+ default:
123
+ return;
124
+ }
125
+ }
126
+ updateClip() {
127
+ this.clipStyle = this.sanitizer.bypassSecurityTrustStyle(`inset(0px 100% 0px 0%)`);
128
+ }
129
+ handleError(file) {
130
+ const func = (error, p2) => {
131
+ const message = `error uploadingFile ${file.name}.`;
132
+ console.error(message, error, p2);
133
+ alert(message);
134
+ return new Observable();
135
+ };
136
+ return func;
137
+ }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MediaUploaderComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: MediaUploaderComponent, selector: "bonc-media-uploader", inputs: { uploadUrlMap: "uploadUrlMap", forceRatio: "forceRatio", src: "src", uploadType: "uploadType" }, outputs: { srcChange: "srcChange" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<bon-media [src]=\"src\" [objectFit]=\"MediaObjectFit.Cover\"></bon-media>\r\n\r\n<div *ngIf=\"src?.sources?.length===0\">NO MEDIA</div>\r\n\r\n<div (click)=\"selectFile($event)\" class=\"media-container\">\r\n\r\n <input #fileInput [accept]=\"fileTypeMask\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\r\n <span *ngIf=\"isUploading\"\r\n [style.clip-path]=\"clipStyle\"\r\n [style.-webkit-clip-path]=\"clipStyle\"\r\n class=\"loader\"></span>\r\n\r\n <span *ngIf=\"isUploading\" class=\"loader-text\">\r\n <span *ngIf=\"progress < 1\">{{100 * progress | number: '1.0-0'}}%</span>\r\n <span *ngIf=\"progress >= 1\">converting</span>\r\n </span>\r\n</div>\r\n", styles: [":host{display:block;background-color:#000;position:relative}.media-container{display:block;position:absolute;inset:0;cursor:pointer}.media-container:hover:hover:after{display:flex;justify-content:center;align-items:center;content:\"\";position:absolute;color:silver;inset:0;font-weight:700;font-size:50pt;pointer-events:none;background-color:#ccff00b3}.media-container img,.media-container video{display:block;position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}input[type=file]{display:none}.loader{position:absolute;inset:0;background-color:#cf0}.loader-text{background-color:#000;position:absolute;top:50%;left:0;right:0;text-align:center;font-size:20pt;margin-top:-10pt;color:#fff}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MarcyMediaComponent, selector: "bon-media", inputs: ["src", "objectFit"], outputs: ["isLoaded"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }] }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MediaUploaderComponent, decorators: [{
142
+ type: Component,
143
+ args: [{ selector: 'bonc-media-uploader', template: "<bon-media [src]=\"src\" [objectFit]=\"MediaObjectFit.Cover\"></bon-media>\r\n\r\n<div *ngIf=\"src?.sources?.length===0\">NO MEDIA</div>\r\n\r\n<div (click)=\"selectFile($event)\" class=\"media-container\">\r\n\r\n <input #fileInput [accept]=\"fileTypeMask\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\r\n <span *ngIf=\"isUploading\"\r\n [style.clip-path]=\"clipStyle\"\r\n [style.-webkit-clip-path]=\"clipStyle\"\r\n class=\"loader\"></span>\r\n\r\n <span *ngIf=\"isUploading\" class=\"loader-text\">\r\n <span *ngIf=\"progress < 1\">{{100 * progress | number: '1.0-0'}}%</span>\r\n <span *ngIf=\"progress >= 1\">converting</span>\r\n </span>\r\n</div>\r\n", styles: [":host{display:block;background-color:#000;position:relative}.media-container{display:block;position:absolute;inset:0;cursor:pointer}.media-container:hover:hover:after{display:flex;justify-content:center;align-items:center;content:\"\";position:absolute;color:silver;inset:0;font-weight:700;font-size:50pt;pointer-events:none;background-color:#ccff00b3}.media-container img,.media-container video{display:block;position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}input[type=file]{display:none}.loader{position:absolute;inset:0;background-color:#cf0}.loader-text{background-color:#000;position:absolute;top:50%;left:0;right:0;text-align:center;font-size:20pt;margin-top:-10pt;color:#fff}\n"] }]
144
+ }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.HttpClient }], propDecorators: { fileInput: [{
145
+ type: ViewChild,
146
+ args: ['fileInput', { static: true }]
147
+ }], srcChange: [{
148
+ type: Output
149
+ }], uploadUrlMap: [{
150
+ type: Input,
151
+ args: [{ required: true }]
152
+ }], forceRatio: [{
153
+ type: Input
154
+ }], src: [{
155
+ type: Input
156
+ }], uploadType: [{
157
+ type: Input
158
+ }] } });
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtdXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUtY21zL3NyYy9saWIvbWVkaWEtdXBsb2FkZXIvbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUtY21zL3NyYy9saWIvbWVkaWEtdXBsb2FkZXIvbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFhLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUd0RSxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNuRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXJDLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVoRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsY0FBYyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBT2hFLE1BQU0sT0FBTyxzQkFBc0I7SUF5QmpDLFlBQW9CLFNBQXVCLEVBQVUsSUFBZ0I7UUFBakQsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUF4QnJELG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBTXpDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQVE5QyxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUVoQixpQkFBWSxHQUFHLGlCQUFpQixDQUFDO0lBTXhDLENBQUM7SUFFRCxJQUNXLEdBQUcsQ0FBQyxNQUFpQztRQUM5QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUN0QixPQUFPO1FBRVQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFDVyxVQUFVLENBQUMsYUFBb0M7UUFDeEQsUUFBUSxhQUFhLEVBQUU7WUFDckIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztnQkFDbkMsTUFBTTtZQUVSLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUM7Z0JBQ25DLE1BQU07WUFFUixLQUFLLFNBQVMsQ0FBQztZQUNmO2dCQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDO2dCQUN0QyxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU0sWUFBWSxDQUFDLFNBQTJCO1FBQzdDLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUMzRixPQUFPO1FBRVQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFJLGtCQUE2QixDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDL0Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN2QzthQUNJLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0Msa0JBQWtCLEdBQUcsT0FBTyxDQUFDO1NBQzlCO2FBQ0ksSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQyxrQkFBa0IsR0FBRyxPQUFPLENBQUM7U0FDOUI7YUFDSTtZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDaEUsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU1RCxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtZQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDNUUsT0FBTztTQUNSO1FBRUQsTUFBTSxRQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUUxQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QixRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUU7WUFDM0QsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUk7YUFDTixPQUFPLENBQWdCLE9BQU8sQ0FBQzthQUMvQixJQUFJLENBRUgsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6Qyw4Q0FBOEM7UUFDOUMsSUFBSSxFQUFFLEVBQUUsNENBQTRDO1FBQ3BELFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ25DLENBQUMsU0FBUyxDQUVULEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNwQyxDQUFDO0lBQ04sQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFZO1FBQzVCLG9DQUFvQztRQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO1lBQy9DLE9BQU87UUFFVCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQStCO1FBQ3JELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLGFBQWEsQ0FBQyxJQUFJO2dCQUNyQixPQUFPO1lBRVQsS0FBSyxhQUFhLENBQUMsY0FBYztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsT0FBTztZQUVULEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7b0JBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztpQkFDMUU7cUJBQU07b0JBQ0wsY0FBYztvQkFDZCxnQ0FBZ0M7b0JBQ2hDLE1BQU0sUUFBUSxHQUFHO3dCQUNmLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7d0JBQ3RCLEdBQUcsS0FBSyxDQUFDLElBQVc7cUJBQ3JCLENBQUM7b0JBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQy9CO2dCQUNELE9BQU87WUFFVDtnQkFDRSxPQUFPO1NBQ1Y7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVU7UUFDNUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBdUIsRUFBdUIsRUFBRTtZQUM1RSxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDZixPQUFPLElBQUksVUFBVSxFQUFXLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQTdLVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixnVUNyQm5DLDRzQkFpQkE7OzJGRElhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxxQkFBcUI7MEdBUXhCLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlqQyxTQUFTO3NCQURmLE1BQU07Z0JBSUEsWUFBWTtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSWxCLFVBQVU7c0JBRGhCLEtBQUs7Z0JBaUJLLEdBQUc7c0JBRGIsS0FBSztnQkFhSyxVQUFVO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBsYXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE1lZGlhT2JqZWN0Rml0LCBQaXhNZWRpYVVuaW9uIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuaW1wb3J0IHsgTWVkaWFUeXBlIH0gZnJvbSAnLi4vY29yZSc7XHJcblxyXG5jb25zdCBpbWFnZU1pbWVUeXBlcyA9IFsnaW1hZ2UvcG5nJywgJ2ltYWdlL2pwZWcnXTtcclxuY29uc3QgdmlkZW9NaW1lVHlwZXMgPSBbJ3ZpZGVvL21wNCddO1xyXG5cclxuY29uc3QgaW1hZ2VGaWxlVHlwZXMgPSBpbWFnZU1pbWVUeXBlcy5qb2luKCcsJyk7XHJcbmNvbnN0IHZpZGVvRmlsZVR5cGVzID0gdmlkZW9NaW1lVHlwZXMuam9pbignLCcpO1xyXG5cclxuY29uc3QgYWxsTWVkaWFGaWxlVHlwZXMgPSBgJHtpbWFnZUZpbGVUeXBlc30sJHt2aWRlb0ZpbGVUeXBlc31gO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdib25jLW1lZGlhLXVwbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lZGlhLXVwbG9hZGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lZGlhVXBsb2FkZXJDb21wb25lbnQge1xyXG4gIHB1YmxpYyByZWFkb25seSBNZWRpYU9iamVjdEZpdCA9IE1lZGlhT2JqZWN0Rml0O1xyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc3JjQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQaXhNZWRpYVVuaW9uPigpO1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHB1YmxpYyB1cGxvYWRVcmxNYXAhOiBSZWFkb25seU1hcDxNZWRpYVR5cGUsIHN0cmluZz47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZvcmNlUmF0aW8/OiBudW1iZXI7XHJcblxyXG4gIHB1YmxpYyBwcm9ncmVzcyA9IDA7XHJcbiAgcHVibGljIGlzVXBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBhdXRvcGxheSA9IHRydWU7XHJcbiAgcHVibGljIGNsaXBTdHlsZT86IFNhZmVTdHlsZTtcclxuICBwdWJsaWMgZmlsZVR5cGVNYXNrID0gYWxsTWVkaWFGaWxlVHlwZXM7XHJcblxyXG4gIHByaXZhdGUgX3VwbG9hZFR5cGU/OiBNZWRpYVR5cGU7XHJcbiAgcHJpdmF0ZSBfc3JjPzogUGl4TWVkaWFVbmlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciwgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc3JjKG5ld1NyYzogUGl4TWVkaWFVbmlvbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3NyYyA9PT0gbmV3U3JjKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fc3JjID0gbmV3U3JjO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzcmMoKTogUGl4TWVkaWFVbmlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3JjO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHVwbG9hZFR5cGUobmV3VXBsb2FkVHlwZTogTWVkaWFUeXBlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBzd2l0Y2ggKG5ld1VwbG9hZFR5cGUpIHtcclxuICAgICAgY2FzZSBcImltYWdlXCI6XHJcbiAgICAgICAgdGhpcy5fdXBsb2FkVHlwZSA9IG5ld1VwbG9hZFR5cGU7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZU1hc2sgPSBpbWFnZUZpbGVUeXBlcztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJ2aWRlb1wiOlxyXG4gICAgICAgIHRoaXMuX3VwbG9hZFR5cGUgPSBuZXdVcGxvYWRUeXBlO1xyXG4gICAgICAgIHRoaXMuZmlsZVR5cGVNYXNrID0gdmlkZW9GaWxlVHlwZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIHVuZGVmaW5lZDpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLl91cGxvYWRUeXBlID0gbmV3VXBsb2FkVHlwZTtcclxuICAgICAgICB0aGlzLmZpbGVUeXBlTWFzayA9IGFsbE1lZGlhRmlsZVR5cGVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB1cGxvYWRUeXBlKCk6IE1lZGlhVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBsb2FkVHlwZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZpbGVTZWxlY3QoZmlsZUlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICBpZiAoZmlsZUlucHV0LmZpbGVzID09PSB1bmRlZmluZWQgfHwgZmlsZUlucHV0LmZpbGVzID09PSBudWxsIHx8IGZpbGVJbnB1dC5maWxlcy5sZW5ndGggIT09IDEpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmaWxlID0gZmlsZUlucHV0LmZpbGVzWzBdO1xyXG5cclxuICAgIGxldCB1cGxvYWRpbmdNZWRpYVR5cGU6IE1lZGlhVHlwZTtcclxuXHJcbiAgICBpZiAodGhpcy5fdXBsb2FkVHlwZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3VwbG9hZFR5cGUgIT09IG51bGwpIHtcclxuICAgICAgdXBsb2FkaW5nTWVkaWFUeXBlID0gdGhpcy5fdXBsb2FkVHlwZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGltYWdlTWltZVR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcclxuICAgICAgdXBsb2FkaW5nTWVkaWFUeXBlID0gJ2ltYWdlJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZpZGVvTWltZVR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcclxuICAgICAgdXBsb2FkaW5nTWVkaWFUeXBlID0gJ3ZpZGVvJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGB1bmtub3duIG1lZGlhIHR5cGUgJHtmaWxlLnR5cGV9ICgke2ZpbGUubmFtZX0pYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cGxvYWRVcmwgPSB0aGlzLnVwbG9hZFVybE1hcC5nZXQodXBsb2FkaW5nTWVkaWFUeXBlKTtcclxuXHJcbiAgICBpZiAodXBsb2FkVXJsID09PSB1bmRlZmluZWQgfHwgdXBsb2FkVXJsID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYHVwbG9hZCBtYXAgZG9lc24ndCBoYXZlIHVybCBmb3IgdHlwZSAke3VwbG9hZGluZ01lZGlhVHlwZX1gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdyYXRpbycsIGAke3RoaXMuZm9yY2VSYXRpbyA/PyAwfWApO1xyXG5cclxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG4gICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDbGlwKCk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIHVwbG9hZFVybCwgZm9ybURhdGEsIHtcclxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaHR0cFxyXG4gICAgICAucmVxdWVzdDxQaXhNZWRpYVVuaW9uPihyZXF1ZXN0KVxyXG4gICAgICAucGlwZVxyXG4gICAgICAoXHJcbiAgICAgICAgbWFwKGV2ZW50ID0+IHRoaXMuZ2V0RXZlbnRNZXNzYWdlKGV2ZW50KSksXHJcbiAgICAgICAgLy8gdGFwKG1lc3NhZ2UgPT4gdGhpcy5zaG93UHJvZ3Jlc3MobWVzc2FnZSkpLFxyXG4gICAgICAgIGxhc3QoKSwgLy8gcmV0dXJuIGxhc3QgKGNvbXBsZXRlZCkgbWVzc2FnZSB0byBjYWxsZXJcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoZmlsZSkpXHJcbiAgICAgICkuc3Vic2NyaWJlXHJcbiAgICAgIChcclxuICAgICAgICAoKSA9PiB7IHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTsgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdEZpbGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBpZ25vcmUgYnVibGUgY2xpY2sgb24gZmlsZSBwaWNrZXJcclxuICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV2ZW50TWVzc2FnZShldmVudDogSHR0cEV2ZW50PFBpeE1lZGlhVW5pb24+KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBldmVudC50b3RhbCA9PT0gdW5kZWZpbmVkID8gMC41IDogZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWw7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDbGlwKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxyXG4gICAgICAgIGlmIChldmVudC5ib2R5ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuYm9keSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignbWVkaWEgZGVzZXJpYWxpemF0aW9uIGVycm9yLiBSZXNwb25zZSBib2R5IGluIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyByZW1vdmUgdGhpc1xyXG4gICAgICAgICAgLy8gbmVlZGVkIGZvciBDIyBkZXNlcmlhbGl6YXRpb25cclxuICAgICAgICAgIGNvbnN0IHBpeG1lZGlhID0ge1xyXG4gICAgICAgICAgICAkdHlwZTogZXZlbnQuYm9keS50eXBlLFxyXG4gICAgICAgICAgICAuLi5ldmVudC5ib2R5IGFzIGFueSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5zcmNDaGFuZ2UuZW1pdChwaXhtZWRpYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDbGlwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGlwU3R5bGUgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYGluc2V0KDBweCAxMDAlIDBweCAwJSlgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZmlsZTogRmlsZSk6IChwMTogdW5rbm93biwgcDI6IE9ic2VydmFibGU8dW5rbm93bj4pID0+IE9ic2VydmFibGU8dW5rbm93bj4ge1xyXG4gICAgY29uc3QgZnVuYyA9IChlcnJvcjogdW5rbm93biwgcDI6IE9ic2VydmFibGU8dW5rbm93bj4pOiBPYnNlcnZhYmxlPHVua25vd24+ID0+IHtcclxuICAgICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvciB1cGxvYWRpbmdGaWxlICR7ZmlsZS5uYW1lfS5gO1xyXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGVycm9yLCBwMik7XHJcbiAgICAgIGFsZXJ0KG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dW5rbm93bj4oKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGZ1bmM7XHJcbiAgfVxyXG59XHJcbiIsIjxib24tbWVkaWEgW3NyY109XCJzcmNcIiBbb2JqZWN0Rml0XT1cIk1lZGlhT2JqZWN0Rml0LkNvdmVyXCI+PC9ib24tbWVkaWE+XHJcblxyXG48ZGl2ICpuZ0lmPVwic3JjPy5zb3VyY2VzPy5sZW5ndGg9PT0wXCI+Tk8gTUVESUE8L2Rpdj5cclxuXHJcbjxkaXYgKGNsaWNrKT1cInNlbGVjdEZpbGUoJGV2ZW50KVwiIGNsYXNzPVwibWVkaWEtY29udGFpbmVyXCI+XHJcblxyXG4gIDxpbnB1dCAjZmlsZUlucHV0IFthY2NlcHRdPVwiZmlsZVR5cGVNYXNrXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3QoZmlsZUlucHV0KVwiIG5hbWU9XCJtZWRpYVwiIHR5cGU9XCJmaWxlXCIgLz5cclxuICA8c3BhbiAqbmdJZj1cImlzVXBsb2FkaW5nXCJcclxuICAgICAgICBbc3R5bGUuY2xpcC1wYXRoXT1cImNsaXBTdHlsZVwiXHJcbiAgICAgICAgW3N0eWxlLi13ZWJraXQtY2xpcC1wYXRoXT1cImNsaXBTdHlsZVwiXHJcbiAgICAgICAgY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+XHJcblxyXG4gIDxzcGFuICpuZ0lmPVwiaXNVcGxvYWRpbmdcIiBjbGFzcz1cImxvYWRlci10ZXh0XCI+XHJcbiAgICA8c3BhbiAqbmdJZj1cInByb2dyZXNzIDwgMVwiPnt7MTAwICogcHJvZ3Jlc3MgfCBudW1iZXI6ICcxLjAtMCd9fSU8L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cInByb2dyZXNzID49IDFcIj5jb252ZXJ0aW5nPC9zcGFuPlxyXG4gIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './seo-form.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS1jbXMvc3JjL2xpYi9zZW8tZm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zZW8tZm9ybS5jb21wb25lbnQnO1xyXG4iXX0=
@@ -0,0 +1,42 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { EditableDirective, FormBaseComponent } from '../core-components';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../core-components/editable.directive";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../translation-input/translation-input.component";
7
+ import * as i4 from "../translation-textarea/translation-textarea.component";
8
+ import * as i5 from "../form-controls/form-controls.component";
9
+ export class SeoFormComponent extends FormBaseComponent {
10
+ constructor() {
11
+ super(...arguments);
12
+ this._pageId = '';
13
+ this.ogImageUploadUrl = '';
14
+ this.label = '';
15
+ }
16
+ ngOnInit() {
17
+ this.editable.externalSaveCall.subscribe(() => {
18
+ this.editable.save();
19
+ });
20
+ }
21
+ set pageId(value) {
22
+ this._pageId = value;
23
+ this.ogImageUploadUrl = `/api/admin/page/Og-Image?pageId=${this.pageId}`; // todo: replace with link to single image api
24
+ }
25
+ get pageId() {
26
+ return this._pageId;
27
+ }
28
+ ResToSrc(res) {
29
+ return res.url;
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SeoFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: SeoFormComponent, selector: "bonc-seo-form", inputs: { label: "label", pageId: "pageId" }, usesInheritance: true, hostDirectives: [{ directive: i1.EditableDirective }], ngImport: i0, template: "<bonc-form-controls *ngIf=\"editable.value\" [editable]=\"editable\">\r\n <h2 *ngIf=\"label\">{{label}}</h2>\r\n\r\n <div class=\"form-group\">\r\n <label>Title</label>\r\n <bonc-translation-input [text]=\"editable.value.title\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-input>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label>Description</label>\r\n <bonc-translation-textarea [text]=\"editable.value.description\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-textarea>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label>Share image | 1200x630px</label>\r\n <!-- <simple-file-uploader *ngIf=\"locale === 'en'\"\r\n [(src)]=\"editable.value.ogImage.en\"\r\n [forceUploadUrl]=\"ogImageUploadUrl\"\r\n [uploadType]=\"MediaType.Image\"\r\n [needDelete]=\"true\"\r\n (deleteFile)=\"deleteOgImage()\"\r\n [ratio]=\"1200/630\"\r\n [resToSrc]=\"ResToSrc\"\r\n (srcChange)=\"editable.startEditing(); editable.patchSave('ogImage',editable.value.ogImage)\">\r\n </simple-file-uploader>\r\n\r\n <simple-file-uploader *ngIf=\"locale === 'ru'\"\r\n [(src)]=\"editable.value.ogImage.ru\"\r\n [forceUploadUrl]=\"ogImageUploadUrl\"\r\n [uploadType]=\"MediaType.Image\"\r\n [needDelete]=\"true\"\r\n (deleteFile)=\"deleteOgImage()\"\r\n [ratio]=\"1200/630\"\r\n [resToSrc]=\"ResToSrc\"\r\n (srcChange)=\"editable.startEditing(); editable.patchSave('ogImage',editable.value.ogImage)\">\r\n </simple-file-uploader> -->\r\n\r\n </div>\r\n\r\n</bonc-form-controls>\r\n\r\n<div *ngIf=\"!editable.value\">Editable Value canot be null or undefined</div>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TranslationInputComponent, selector: "bonc-translation-input", inputs: ["text", "locale", "device"], outputs: ["startEditing", "changed", "blurred"] }, { kind: "component", type: i4.TranslationTextareaComponent, selector: "bonc-translation-textarea", inputs: ["minRows", "maxRows", "text", "locale", "device"], outputs: ["startEditing", "changed", "blurred"] }, { kind: "component", type: i5.FormControlsComponent, selector: "bonc-form-controls", inputs: ["editable"] }] }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SeoFormComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ selector: 'bonc-seo-form', hostDirectives: [EditableDirective], template: "<bonc-form-controls *ngIf=\"editable.value\" [editable]=\"editable\">\r\n <h2 *ngIf=\"label\">{{label}}</h2>\r\n\r\n <div class=\"form-group\">\r\n <label>Title</label>\r\n <bonc-translation-input [text]=\"editable.value.title\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-input>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label>Description</label>\r\n <bonc-translation-textarea [text]=\"editable.value.description\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-textarea>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label>Share image | 1200x630px</label>\r\n <!-- <simple-file-uploader *ngIf=\"locale === 'en'\"\r\n [(src)]=\"editable.value.ogImage.en\"\r\n [forceUploadUrl]=\"ogImageUploadUrl\"\r\n [uploadType]=\"MediaType.Image\"\r\n [needDelete]=\"true\"\r\n (deleteFile)=\"deleteOgImage()\"\r\n [ratio]=\"1200/630\"\r\n [resToSrc]=\"ResToSrc\"\r\n (srcChange)=\"editable.startEditing(); editable.patchSave('ogImage',editable.value.ogImage)\">\r\n </simple-file-uploader>\r\n\r\n <simple-file-uploader *ngIf=\"locale === 'ru'\"\r\n [(src)]=\"editable.value.ogImage.ru\"\r\n [forceUploadUrl]=\"ogImageUploadUrl\"\r\n [uploadType]=\"MediaType.Image\"\r\n [needDelete]=\"true\"\r\n (deleteFile)=\"deleteOgImage()\"\r\n [ratio]=\"1200/630\"\r\n [resToSrc]=\"ResToSrc\"\r\n (srcChange)=\"editable.startEditing(); editable.patchSave('ogImage',editable.value.ogImage)\">\r\n </simple-file-uploader> -->\r\n\r\n </div>\r\n\r\n</bonc-form-controls>\r\n\r\n<div *ngIf=\"!editable.value\">Editable Value canot be null or undefined</div>\r\n", styles: [":host{display:block}\n"] }]
37
+ }], propDecorators: { label: [{
38
+ type: Input
39
+ }], pageId: [{
40
+ type: Input
41
+ }] } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUtY21zL3NyYy9saWIvc2VvLWZvcm0vc2VvLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUtY21zL3NyYy9saWIvc2VvLWZvcm0vc2VvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFnQztJQU50RTs7UUFPVSxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2QscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBR3RCLFVBQUssR0FBRyxFQUFFLENBQUM7S0FxQm5CO0lBbkJRLFFBQVE7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUNXLE1BQU0sQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxtQ0FBbUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsOENBQThDO0lBQzFILENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFvQjtRQUNsQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDakIsQ0FBQzs4R0F6QlUsZ0JBQWdCO2tHQUFoQixnQkFBZ0IsaUxDWDdCLG83RUFvREE7OzJGRHpDYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsZUFBZSxrQkFHVCxDQUFDLGlCQUFpQixDQUFDOzhCQU81QixLQUFLO3NCQURYLEtBQUs7Z0JBVUssTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPcGVuR3JhcGhEYXRhIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuXHJcbmltcG9ydCB7IEVkaXRhYmxlRGlyZWN0aXZlLCBGb3JtQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtY29tcG9uZW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JvbmMtc2VvLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZW8tZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VvLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxuICBob3N0RGlyZWN0aXZlczogW0VkaXRhYmxlRGlyZWN0aXZlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VvRm9ybUNvbXBvbmVudCBleHRlbmRzIEZvcm1CYXNlQ29tcG9uZW50PE9wZW5HcmFwaERhdGE+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIF9wYWdlSWQgPSAnJztcclxuICBwdWJsaWMgb2dJbWFnZVVwbG9hZFVybCA9ICcnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbCA9ICcnO1xyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRhYmxlLmV4dGVybmFsU2F2ZUNhbGwuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5lZGl0YWJsZS5zYXZlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBwYWdlSWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGFnZUlkID0gdmFsdWU7XHJcbiAgICB0aGlzLm9nSW1hZ2VVcGxvYWRVcmwgPSBgL2FwaS9hZG1pbi9wYWdlL09nLUltYWdlP3BhZ2VJZD0ke3RoaXMucGFnZUlkfWA7IC8vIHRvZG86IHJlcGxhY2Ugd2l0aCBsaW5rIHRvIHNpbmdsZSBpbWFnZSBhcGlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcGFnZUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFnZUlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc1RvU3JjKHJlczogeyB1cmw6IHN0cmluZyB9KTogc3RyaW5nIHtcclxuICAgIHJldHVybiByZXMudXJsO1xyXG4gIH1cclxufVxyXG4iLCI8Ym9uYy1mb3JtLWNvbnRyb2xzICpuZ0lmPVwiZWRpdGFibGUudmFsdWVcIiBbZWRpdGFibGVdPVwiZWRpdGFibGVcIj5cclxuICA8aDIgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvaDI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWw+VGl0bGU8L2xhYmVsPlxyXG4gICAgPGJvbmMtdHJhbnNsYXRpb24taW5wdXQgW3RleHRdPVwiZWRpdGFibGUudmFsdWUudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0RWRpdGluZyk9XCJlZGl0YWJsZS5zdGFydEVkaXRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZCk9XCJlZGl0YWJsZS51cGRhdGVEaXJ0eSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVycmVkKT1cImVkaXRhYmxlLnVwZGF0ZURpcnR5KClcIj5cclxuICAgIDwvYm9uYy10cmFuc2xhdGlvbi1pbnB1dD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbD5EZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICA8Ym9uYy10cmFuc2xhdGlvbi10ZXh0YXJlYSBbdGV4dF09XCJlZGl0YWJsZS52YWx1ZS5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnRFZGl0aW5nKT1cImVkaXRhYmxlLnN0YXJ0RWRpdGluZygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT1cImVkaXRhYmxlLnVwZGF0ZURpcnR5KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXJyZWQpPVwiZWRpdGFibGUudXBkYXRlRGlydHkoKVwiPlxyXG4gICAgPC9ib25jLXRyYW5zbGF0aW9uLXRleHRhcmVhPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgPGxhYmVsPlNoYXJlIGltYWdlIHwgMTIwMHg2MzBweDwvbGFiZWw+XHJcbiAgICA8IS0tIDxzaW1wbGUtZmlsZS11cGxvYWRlciAqbmdJZj1cImxvY2FsZSA9PT0gJ2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzcmMpXT1cImVkaXRhYmxlLnZhbHVlLm9nSW1hZ2UuZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JjZVVwbG9hZFVybF09XCJvZ0ltYWdlVXBsb2FkVXJsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdXBsb2FkVHlwZV09XCJNZWRpYVR5cGUuSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZWVkRGVsZXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVGaWxlKT1cImRlbGV0ZU9nSW1hZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JhdGlvXT1cIjEyMDAvNjMwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzVG9TcmNdPVwiUmVzVG9TcmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzcmNDaGFuZ2UpPVwiZWRpdGFibGUuc3RhcnRFZGl0aW5nKCk7IGVkaXRhYmxlLnBhdGNoU2F2ZSgnb2dJbWFnZScsZWRpdGFibGUudmFsdWUub2dJbWFnZSlcIj5cclxuICAgIDwvc2ltcGxlLWZpbGUtdXBsb2FkZXI+XHJcblxyXG4gICAgPHNpbXBsZS1maWxlLXVwbG9hZGVyICpuZ0lmPVwibG9jYWxlID09PSAncnUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNyYyldPVwiZWRpdGFibGUudmFsdWUub2dJbWFnZS5ydVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvcmNlVXBsb2FkVXJsXT1cIm9nSW1hZ2VVcGxvYWRVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt1cGxvYWRUeXBlXT1cIk1lZGlhVHlwZS5JbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25lZWREZWxldGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUZpbGUpPVwiZGVsZXRlT2dJbWFnZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcmF0aW9dPVwiMTIwMC82MzBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNUb1NyY109XCJSZXNUb1NyY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyY0NoYW5nZSk9XCJlZGl0YWJsZS5zdGFydEVkaXRpbmcoKTsgZWRpdGFibGUucGF0Y2hTYXZlKCdvZ0ltYWdlJyxlZGl0YWJsZS52YWx1ZS5vZ0ltYWdlKVwiPlxyXG4gICAgPC9zaW1wbGUtZmlsZS11cGxvYWRlcj4gLS0+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuPC9ib25jLWZvcm0tY29udHJvbHM+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIWVkaXRhYmxlLnZhbHVlXCI+RWRpdGFibGUgVmFsdWUgY2Fub3QgYmUgbnVsbCBvciB1bmRlZmluZWQ8L2Rpdj5cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZUVkaXRvck1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllLWNtcy9zcmMvbGliL3NrZWxldG9uLWVkaXRvci9Cb25lRWRpdG9yTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElCb25lRWRpdG9yIH0gZnJvbSAnLi9JQm9uZUVkaXRvcic7XHJcblxyXG5leHBvcnQgdHlwZSBCb25lRWRpdG9yTWFwID0gUmVhZG9ubHlNYXA8c3RyaW5nLCBUeXBlPElCb25lRWRpdG9yPj47XHJcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export function createPreset(params) {
2
+ return {
3
+ title: params.title,
4
+ isActive: x => x.style === params.style,
5
+ transformer: bone => bone.style = params.style,
6
+ clean: bone => bone.style = params.style,
7
+ };
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGVudFByZXNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllLWNtcy9zcmMvbGliL3NrZWxldG9uLWVkaXRvci9Db250ZW50UHJlc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sVUFBVSxZQUFZLENBQXFCLE1BQXdDO0lBQ3ZGLE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSztRQUN2QyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLO1FBQzlDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUs7S0FDekMsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb25lIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFByZXNldDxvdXQgVEJvbmUgZXh0ZW5kcyBCb25lPiB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBpc0FjdGl2ZShkYXRhOiBUQm9uZSk6IGJvb2xlYW47XHJcbiAgY2xlYW4oZGF0YTogVEJvbmUpOiB2b2lkO1xyXG4gIHRyYW5zZm9ybWVyKGJvbmU6IFRCb25lKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByZXNldDxUQm9uZSBleHRlbmRzIEJvbmU+KHBhcmFtczogeyB0aXRsZTogc3RyaW5nLCBzdHlsZTogc3RyaW5nIH0pOiBDb250ZW50UHJlc2V0PFRCb25lPiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXHJcbiAgICBpc0FjdGl2ZTogeCA9PiB4LnN0eWxlID09PSBwYXJhbXMuc3R5bGUsXHJcbiAgICB0cmFuc2Zvcm1lcjogYm9uZSA9PiBib25lLnN0eWxlID0gcGFyYW1zLnN0eWxlLFxyXG4gICAgY2xlYW46IGJvbmUgPT4gYm9uZS5zdHlsZSA9IHBhcmFtcy5zdHlsZSxcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUJvbmVFZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS1jbXMvc3JjL2xpYi9za2VsZXRvbi1lZGl0b3IvSUJvbmVFZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCb25lIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuaW1wb3J0IHsgRGV2aWNlVHlwZSB9IGZyb20gJy4uL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250ZW50UHJlc2V0IH0gZnJvbSAnLi9Db250ZW50UHJlc2V0JztcclxuXHJcbi8vIHRvZG86IG1heSBiZSB0aG9zZSBzaG91bGRudCBiZSBnZW5lcmljP1xyXG5leHBvcnQgaW50ZXJmYWNlIElCb25lRWRpdG9yPG91dCBUQm9uZSBleHRlbmRzIEJvbmUgPSBCb25lPiB7XHJcbiAgYm9uZTogVEJvbmU7XHJcbiAgbG9jYWxlOiBzdHJpbmc7XHJcbiAgZGV2aWNlOiBEZXZpY2VUeXBlO1xyXG5cclxuICByZWFkb25seSBzYXZlZDogRXZlbnRFbWl0dGVyPEJvbmU+O1xyXG4gIHJlYWRvbmx5IHJlbW92ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuICByZWFkb25seSBlZGl0aW5nOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gIHJlYWRvbmx5IGlzRGlydHk6IGJvb2xlYW47XHJcbiAgcmVhZG9ubHkgaXNFZGl0aW5nOiBib29sZWFuO1xyXG5cclxuICBjdXJyZW50UHJlc2V0PzogQ29udGVudFByZXNldDxUQm9uZT47XHJcbiAgbm9QcmVzZXRzOiBib29sZWFuO1xyXG5cclxuICBzYXZlKCk6IHZvaWQ7XHJcbiAgcmVtb3ZlKCk6IHZvaWQ7XHJcbiAgcmVzZXREYXRhKCk6IHZvaWQ7XHJcblxyXG4gIHN0YXJ0RWRpdGluZygpOiB2b2lkO1xyXG4gIGZpbmlzaEVkaXRpbmcoKTogdm9pZDtcclxuXHJcbiAgbWFya0FzRGlydHkoKTogdm9pZDtcclxuICB1cGRhdGVEaXJ0eSgpOiB2b2lkO1xyXG5cclxuICBuZXh0UHJlc2V0KCk6IHZvaWQ7XHJcblxyXG4gIG9uUmVzZXQoKTogdm9pZDtcclxuICBvbkZpbmlzaEVkaXRpbmcoKTogdm9pZDtcclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUJvbmVUZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllLWNtcy9zcmMvbGliL3NrZWxldG9uLWVkaXRvci9JQm9uZVRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb25lIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJvbmVUZW1wbGF0ZSB7XHJcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcclxuICByZWFkb25seSBib25lRmFjdG9yeTogKCkgPT4gQm9uZTtcclxufVxyXG4iXX0=
@@ -0,0 +1,119 @@
1
+ import { Component, ComponentFactoryResolver, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { SkeletonEditorAnchorDirective } from '../skeleton-editor-anchor.directive';
3
+ import { DeviceType } from '../../core';
4
+ import { UnknownBoneEditorComponent } from '../../bone-editors/unknown-bone-editor/unknown-bone-editor.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../skeleton-editor-anchor.directive";
8
+ // todo: rename class
9
+ export class BoneEditorContainerComponent {
10
+ constructor(componentFactoryResolver) {
11
+ this.componentFactoryResolver = componentFactoryResolver;
12
+ this.removed = new EventEmitter();
13
+ this.saved = new EventEmitter();
14
+ this.editing = new EventEmitter();
15
+ this.DeviceType = DeviceType;
16
+ this.themePopupIsShown = false;
17
+ this.device = DeviceType.NotSet;
18
+ this.nextPreset = () => {
19
+ if (this.editor === undefined || this.editor === null)
20
+ return;
21
+ this.editor.nextPreset();
22
+ };
23
+ }
24
+ ngOnChanges() {
25
+ if (this.editor === undefined || this.editor === null)
26
+ return;
27
+ this.editor.locale = this.locale;
28
+ this.editor.device = this.device;
29
+ }
30
+ get bone() {
31
+ return this._bone;
32
+ }
33
+ set bone(newBone) {
34
+ this._bone = newBone;
35
+ if (this.removeSubscription) {
36
+ this.removeSubscription.unsubscribe();
37
+ this.removeSubscription = undefined;
38
+ }
39
+ if (this.saveSubscription) {
40
+ this.saveSubscription.unsubscribe();
41
+ this.saveSubscription = undefined;
42
+ }
43
+ if (this.changedSubscription) {
44
+ this.changedSubscription.unsubscribe();
45
+ this.changedSubscription = undefined;
46
+ }
47
+ const viewContainerRef = this.anchor.viewContainerRef;
48
+ viewContainerRef.clear();
49
+ const componentType = this.map.get(newBone.type) ?? UnknownBoneEditorComponent;
50
+ const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);
51
+ const boneEditorRef = viewContainerRef.createComponent(componentFactory);
52
+ this.editor = boneEditorRef.instance;
53
+ this.editor.bone = newBone;
54
+ this.removeSubscription = this.editor.removed.subscribe(() => {
55
+ this.removed.next();
56
+ });
57
+ this.changedSubscription = this.editor.editing.subscribe((isEditing) => {
58
+ this.editing.next(isEditing);
59
+ });
60
+ this.saveSubscription = this.editor.saved.subscribe((newBoneValue) => {
61
+ this.saved.next(newBoneValue);
62
+ });
63
+ this.ngOnChanges();
64
+ }
65
+ // todo: add or remove visibility feature
66
+ // public setDisabled = (disabled: boolean): void => {
67
+ // if (this.editor === undefined || this.editor === null)
68
+ // return;
69
+ // this.editor.startEditing();
70
+ // if (this.device === DeviceType.Desktop)
71
+ // this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Desktop, !disabled);
72
+ // else if (this.device === DeviceType.Tablet)
73
+ // this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Tablet, !disabled);
74
+ // else if (this.device === DeviceType.Mobile)
75
+ // this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Mobile, !disabled);
76
+ // this.editor.updateDirty();
77
+ // }
78
+ get disabled() {
79
+ if (this.editor === undefined || this.editor === null)
80
+ throw new Error('editor should have been set');
81
+ return false;
82
+ // todo: add or remove visibility feature
83
+ // const visibility = this.editor.bone.visibility;
84
+ // if (this.device === DeviceType.Desktop && hasFlag(visibility, DeviceVisibility.Desktop))
85
+ // return false;
86
+ // if (this.device === DeviceType.Tablet && hasFlag(visibility, DeviceVisibility.Tablet))
87
+ // return false;
88
+ // if (this.device === DeviceType.Mobile && hasFlag(visibility, DeviceVisibility.Mobile))
89
+ // return false;
90
+ // return true;
91
+ }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: BoneEditorContainerComponent, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: BoneEditorContainerComponent, selector: "bonc-bone-editor-container", inputs: { locale: "locale", device: "device", map: "map", bone: "bone" }, outputs: { removed: "removed", saved: "saved", editing: "editing" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: SkeletonEditorAnchorDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"editor\" class=\"left bar\" [class.inactive]=\"editor.noPresets\">\r\n <!-- <a *ngFor=\"let control of editor.controls\" (click)=\"control.activate()\">{{control.label}}</a> -->\r\n <!-- <a (click)=\"setDisabled(!disabled)\" class=\"disabled\">block {{disabled ? 'disabled' : 'enabled'}} ({{editor.bone.visibility}})</a> -->\r\n <a *ngIf=\"editor.currentPreset && !editor.noPresets\" (click)=\"nextPreset()\" class=\"preset\">style:<br />{{editor.currentPreset.title}}</a>\r\n</div>\r\n\r\n<div class=\"editor-container\"\r\n [class.disabled]=\"disabled\"\r\n [style.width]=\"\r\n device === DeviceType.Desktop ? '75vw'\r\n : device === DeviceType.Tablet ? '55vw'\r\n : device === DeviceType.Mobile ? '35vw'\r\n : '75vw' \">\r\n <ng-template boncSkeletonEditorAnchor>\r\n </ng-template>\r\n</div>\r\n\r\n<div *ngIf=\"editor\" [class.active]=\"editor.isEditing || editor.isDirty\" class=\"right bar\">\r\n <!-- <a *ngIf=\"!editor.isEditing\" (click)=\"editor.remove()\" class=\"delete\">!!! remove</a> -->\r\n <a *ngIf=\"editor.isDirty\" (click)=\"editor.resetData()\" class=\"reset\">reset</a>\r\n <a *ngIf=\"editor.isEditing && !editor.isDirty\" (click)=\"editor.finishEditing()\" class=\"close\">close</a>\r\n <a *ngIf=\"editor.isDirty\" (click)=\"editor.save()\" class=\"save\">apply</a>\r\n</div>\r\n", styles: [":host{display:flex}.editor-container{background-color:var(--bg-color)}.editor-container.disabled{opacity:.1;pointer-events:none}.editor-container.mobile{width:350px}.preset{white-space:pre-line}.bar{width:120px;display:flex;flex-direction:column;pointer-events:all}.bar.left:hover,.bar.active{background-color:#111}.bar.hidden{opacity:.2}.bar.left{position:relative;border-right:none}.bar.right{border-left:none;text-align:right}.bar.right .delete{display:none}.bar.right .delete:hover{color:#ff355e}.bar.right.active .delete,.bar.right:hover .delete{display:block}.left.bar.inactive a:hover{cursor:initial;color:#444}.popup{position:absolute;top:0;right:-350px;display:flex;flex-direction:column;width:350px;padding:20px;color:#222;background-color:#fff;border:2px solid black;box-sizing:border-box;z-index:3}.popup a{padding:0!important;cursor:pointer!important}.popup a.close{position:absolute;top:10px;right:10px;color:#666}.popup a.close:hover{background-color:#cf0!important}.popup a.reset{align-self:flex-start;margin-top:30px}.popup a.reset:hover{background-color:#cf0!important}.color-group{display:flex}.color-group:first-of-type{margin-top:20px}.color-group label{flex:1}.color-group input{border:1px solid #222;padding:6px;cursor:pointer}.color-group input:hover,.color-group input:focus{outline:none}.color-group+.color-group{margin-top:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.SkeletonEditorAnchorDirective, selector: "[boncSkeletonEditorAnchor]" }] }); }
94
+ }
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: BoneEditorContainerComponent, decorators: [{
96
+ type: Component,
97
+ args: [{ selector: 'bonc-bone-editor-container', template: "<div *ngIf=\"editor\" class=\"left bar\" [class.inactive]=\"editor.noPresets\">\r\n <!-- <a *ngFor=\"let control of editor.controls\" (click)=\"control.activate()\">{{control.label}}</a> -->\r\n <!-- <a (click)=\"setDisabled(!disabled)\" class=\"disabled\">block {{disabled ? 'disabled' : 'enabled'}} ({{editor.bone.visibility}})</a> -->\r\n <a *ngIf=\"editor.currentPreset && !editor.noPresets\" (click)=\"nextPreset()\" class=\"preset\">style:<br />{{editor.currentPreset.title}}</a>\r\n</div>\r\n\r\n<div class=\"editor-container\"\r\n [class.disabled]=\"disabled\"\r\n [style.width]=\"\r\n device === DeviceType.Desktop ? '75vw'\r\n : device === DeviceType.Tablet ? '55vw'\r\n : device === DeviceType.Mobile ? '35vw'\r\n : '75vw' \">\r\n <ng-template boncSkeletonEditorAnchor>\r\n </ng-template>\r\n</div>\r\n\r\n<div *ngIf=\"editor\" [class.active]=\"editor.isEditing || editor.isDirty\" class=\"right bar\">\r\n <!-- <a *ngIf=\"!editor.isEditing\" (click)=\"editor.remove()\" class=\"delete\">!!! remove</a> -->\r\n <a *ngIf=\"editor.isDirty\" (click)=\"editor.resetData()\" class=\"reset\">reset</a>\r\n <a *ngIf=\"editor.isEditing && !editor.isDirty\" (click)=\"editor.finishEditing()\" class=\"close\">close</a>\r\n <a *ngIf=\"editor.isDirty\" (click)=\"editor.save()\" class=\"save\">apply</a>\r\n</div>\r\n", styles: [":host{display:flex}.editor-container{background-color:var(--bg-color)}.editor-container.disabled{opacity:.1;pointer-events:none}.editor-container.mobile{width:350px}.preset{white-space:pre-line}.bar{width:120px;display:flex;flex-direction:column;pointer-events:all}.bar.left:hover,.bar.active{background-color:#111}.bar.hidden{opacity:.2}.bar.left{position:relative;border-right:none}.bar.right{border-left:none;text-align:right}.bar.right .delete{display:none}.bar.right .delete:hover{color:#ff355e}.bar.right.active .delete,.bar.right:hover .delete{display:block}.left.bar.inactive a:hover{cursor:initial;color:#444}.popup{position:absolute;top:0;right:-350px;display:flex;flex-direction:column;width:350px;padding:20px;color:#222;background-color:#fff;border:2px solid black;box-sizing:border-box;z-index:3}.popup a{padding:0!important;cursor:pointer!important}.popup a.close{position:absolute;top:10px;right:10px;color:#666}.popup a.close:hover{background-color:#cf0!important}.popup a.reset{align-self:flex-start;margin-top:30px}.popup a.reset:hover{background-color:#cf0!important}.color-group{display:flex}.color-group:first-of-type{margin-top:20px}.color-group label{flex:1}.color-group input{border:1px solid #222;padding:6px;cursor:pointer}.color-group input:hover,.color-group input:focus{outline:none}.color-group+.color-group{margin-top:10px}\n"] }]
98
+ }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }], propDecorators: { anchor: [{
99
+ type: ViewChild,
100
+ args: [SkeletonEditorAnchorDirective, { static: true }]
101
+ }], removed: [{
102
+ type: Output
103
+ }], saved: [{
104
+ type: Output
105
+ }], editing: [{
106
+ type: Output
107
+ }], locale: [{
108
+ type: Input,
109
+ args: [{ required: true }]
110
+ }], device: [{
111
+ type: Input
112
+ }], map: [{
113
+ type: Input,
114
+ args: [{ required: true }]
115
+ }], bone: [{
116
+ type: Input,
117
+ args: [{ required: true }]
118
+ }] } });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uZS1lZGl0b3ItY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllLWNtcy9zcmMvbGliL3NrZWxldG9uLWVkaXRvci9ib25lLWVkaXRvci1jb250YWluZXIvYm9uZS1lZGl0b3ItY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYm9ubmllLWNtcy9zcmMvbGliL3NrZWxldG9uLWVkaXRvci9ib25lLWVkaXRvci1jb250YWluZXIvYm9uZS1lZGl0b3ItY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3ZILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7Ozs7QUFFbEgscUJBQXFCO0FBTXJCLE1BQU0sT0FBTyw0QkFBNEI7SUErQnZDLFlBQTZCLHdCQUFrRDtRQUFsRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBMUJ4RSxZQUFPLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFHdkQsVUFBSyxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBR3JELFlBQU8sR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU3RCxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBSXhCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQVkxQixXQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQXVFM0IsZUFBVSxHQUFHLEdBQVMsRUFBRTtZQUM3QixJ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NUMsdUhBQXVIO0lBQ3ZILGdEQUFnRDtJQUNoRCxzSEFBc0g7SUFDdEgsZ0RBQWdEO0lBQ2hELHNIQUFzSDtJQUV0SCwrQkFBK0I7SUFDL0IsSUFBSTtJQUVKLElBQVcsUUFBUTtRQUNqQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSTtZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFFakQsT0FBTyxLQUFLLENBQUM7UUFDYix5Q0FBeUM7UUFDekMsa0RBQWtEO1FBRWxELDJGQUEyRjtRQUMzRixrQkFBa0I7UUFFbEIseUZBQXlGO1FBQ3pGLGtCQUFrQjtRQUVsQix5RkFBeUY7UUFDekYsa0JBQWtCO1FBRWxCLGVBQWU7SUFDakIsQ0FBQzs4R0EvSVUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIseVBBQzVCLDZCQUE2QixtRkNsQjFDLDQ0Q0F1QkE7OzJGRE5hLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSw0QkFBNEI7NkZBTS9CLE1BQU07c0JBRFosU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSW5ELE9BQU87c0JBRGIsTUFBTTtnQkFJQSxLQUFLO3NCQURYLE1BQU07Z0JBSUEsT0FBTztzQkFEYixNQUFNO2dCQWdCQSxNQUFNO3NCQURaLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlsQixNQUFNO3NCQURaLEtBQUs7Z0JBZUMsR0FBRztzQkFEVCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFRZCxJQUFJO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBCb25lIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuXHJcbmltcG9ydCB7IFNrZWxldG9uRWRpdG9yQW5jaG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2tlbGV0b24tZWRpdG9yLWFuY2hvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEZXZpY2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZSc7XHJcbmltcG9ydCB7IElCb25lRWRpdG9yIH0gZnJvbSAnLi4vSUJvbmVFZGl0b3InO1xyXG5pbXBvcnQgeyBCb25lRWRpdG9yTWFwIH0gZnJvbSAnLi4vQm9uZUVkaXRvck1hcCc7XHJcbmltcG9ydCB7IFVua25vd25Cb25lRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYm9uZS1lZGl0b3JzL3Vua25vd24tYm9uZS1lZGl0b3IvdW5rbm93bi1ib25lLWVkaXRvci5jb21wb25lbnQnO1xyXG5cclxuLy8gdG9kbzogcmVuYW1lIGNsYXNzXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYm9uYy1ib25lLWVkaXRvci1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ib25lLWVkaXRvci1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2JvbmUtZWRpdG9yLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb25lRWRpdG9yQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKFNrZWxldG9uRWRpdG9yQW5jaG9yRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBhbmNob3IhOiBTa2VsZXRvbkVkaXRvckFuY2hvckRpcmVjdGl2ZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlbW92ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNhdmVkOiBFdmVudEVtaXR0ZXI8Qm9uZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEJvbmU+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBlZGl0aW5nOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIHB1YmxpYyBEZXZpY2VUeXBlID0gRGV2aWNlVHlwZTtcclxuXHJcbiAgcHVibGljIGVkaXRvciE6IElCb25lRWRpdG9yO1xyXG5cclxuICBwdWJsaWMgdGhlbWVQb3B1cElzU2hvd24gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfYm9uZSE6IEJvbmU7XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgc2F2ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGNoYW5nZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHVibGljIGxvY2FsZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGV2aWNlID0gRGV2aWNlVHlwZS5Ob3RTZXQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5lZGl0b3IgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmVkaXRvci5sb2NhbGUgPSB0aGlzLmxvY2FsZTtcclxuICAgIHRoaXMuZWRpdG9yLmRldmljZSA9IHRoaXMuZGV2aWNlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwdWJsaWMgbWFwITogQm9uZUVkaXRvck1hcFxyXG5cclxuICBwdWJsaWMgZ2V0IGJvbmUoKTogQm9uZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9uZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHVibGljIHNldCBib25lKG5ld0JvbmU6IEJvbmUpIHtcclxuICAgIHRoaXMuX2JvbmUgPSBuZXdCb25lO1xyXG5cclxuICAgIGlmICh0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zYXZlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnNhdmVTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhbmdlZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmNoYW5nZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmFuY2hvci52aWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5tYXAuZ2V0KG5ld0JvbmUudHlwZSkgPz8gVW5rbm93bkJvbmVFZGl0b3JDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudFR5cGUpO1xyXG4gICAgY29uc3QgYm9uZUVkaXRvclJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yID0gYm9uZUVkaXRvclJlZi5pbnN0YW5jZTtcclxuICAgIHRoaXMuZWRpdG9yLmJvbmUgPSBuZXdCb25lO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlU3Vic2NyaXB0aW9uID0gdGhpcy5lZGl0b3IucmVtb3ZlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZWQubmV4dCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy5lZGl0b3IuZWRpdGluZy5zdWJzY3JpYmVcclxuICAgICAgKFxyXG4gICAgICAgIChpc0VkaXRpbmc6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIHRoaXMuZWRpdGluZy5uZXh0KGlzRWRpdGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZWRpdG9yLnNhdmVkLnN1YnNjcmliZShcclxuICAgICAgKG5ld0JvbmVWYWx1ZTogQm9uZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZWQubmV4dChuZXdCb25lVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0UHJlc2V0ID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5lZGl0b3IgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmVkaXRvci5uZXh0UHJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICAvLyB0b2RvOiBhZGQgb3IgcmVtb3ZlIHZpc2liaWxpdHkgZmVhdHVyZVxyXG5cclxuICAvLyBwdWJsaWMgc2V0RGlzYWJsZWQgPSAoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcclxuICAvLyAgIGlmICh0aGlzLmVkaXRvciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZWRpdG9yID09PSBudWxsKVxyXG4gIC8vICAgICByZXR1cm47XHJcblxyXG4gIC8vICAgdGhpcy5lZGl0b3Iuc3RhcnRFZGl0aW5nKCk7XHJcblxyXG4gIC8vICAgaWYgKHRoaXMuZGV2aWNlID09PSBEZXZpY2VUeXBlLkRlc2t0b3ApXHJcbiAgLy8gICAgIHRoaXMuZWRpdG9yLmJvbmUudmlzaWJpbGl0eSA9IHNldE9yUmVtb3ZlRmxhZyh0aGlzLmVkaXRvci5ib25lLnZpc2liaWxpdHksIERldmljZVZpc2liaWxpdHkuRGVza3RvcCwgIWRpc2FibGVkKTtcclxuICAvLyAgIGVsc2UgaWYgKHRoaXMuZGV2aWNlID09PSBEZXZpY2VUeXBlLlRhYmxldClcclxuICAvLyAgICAgdGhpcy5lZGl0b3IuYm9uZS52aXNpYmlsaXR5ID0gc2V0T3JSZW1vdmVGbGFnKHRoaXMuZWRpdG9yLmJvbmUudmlzaWJpbGl0eSwgRGV2aWNlVmlzaWJpbGl0eS5UYWJsZXQsICFkaXNhYmxlZCk7XHJcbiAgLy8gICBlbHNlIGlmICh0aGlzLmRldmljZSA9PT0gRGV2aWNlVHlwZS5Nb2JpbGUpXHJcbiAgLy8gICAgIHRoaXMuZWRpdG9yLmJvbmUudmlzaWJpbGl0eSA9IHNldE9yUmVtb3ZlRmxhZyh0aGlzLmVkaXRvci5ib25lLnZpc2liaWxpdHksIERldmljZVZpc2liaWxpdHkuTW9iaWxlLCAhZGlzYWJsZWQpO1xyXG5cclxuICAvLyAgIHRoaXMuZWRpdG9yLnVwZGF0ZURpcnR5KCk7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5lZGl0b3IgPT09IG51bGwpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignZWRpdG9yIHNob3VsZCBoYXZlIGJlZW4gc2V0Jyk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gdG9kbzogYWRkIG9yIHJlbW92ZSB2aXNpYmlsaXR5IGZlYXR1cmVcclxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSB0aGlzLmVkaXRvci5ib25lLnZpc2liaWxpdHk7XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuZGV2aWNlID09PSBEZXZpY2VUeXBlLkRlc2t0b3AgJiYgaGFzRmxhZyh2aXNpYmlsaXR5LCBEZXZpY2VWaXNpYmlsaXR5LkRlc2t0b3ApKVxyXG4gICAgLy8gICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuZGV2aWNlID09PSBEZXZpY2VUeXBlLlRhYmxldCAmJiBoYXNGbGFnKHZpc2liaWxpdHksIERldmljZVZpc2liaWxpdHkuVGFibGV0KSlcclxuICAgIC8vICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vIGlmICh0aGlzLmRldmljZSA9PT0gRGV2aWNlVHlwZS5Nb2JpbGUgJiYgaGFzRmxhZyh2aXNpYmlsaXR5LCBEZXZpY2VWaXNpYmlsaXR5Lk1vYmlsZSkpXHJcbiAgICAvLyAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImVkaXRvclwiIGNsYXNzPVwibGVmdCBiYXJcIiBbY2xhc3MuaW5hY3RpdmVdPVwiZWRpdG9yLm5vUHJlc2V0c1wiPlxyXG4gIDwhLS0gPGEgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2YgZWRpdG9yLmNvbnRyb2xzXCIgKGNsaWNrKT1cImNvbnRyb2wuYWN0aXZhdGUoKVwiPnt7Y29udHJvbC5sYWJlbH19PC9hPiAtLT5cclxuICA8IS0tIDxhIChjbGljayk9XCJzZXREaXNhYmxlZCghZGlzYWJsZWQpXCIgY2xhc3M9XCJkaXNhYmxlZFwiPmJsb2NrIHt7ZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJ2VuYWJsZWQnfX0gKHt7ZWRpdG9yLmJvbmUudmlzaWJpbGl0eX19KTwvYT4gLS0+XHJcbiAgPGEgKm5nSWY9XCJlZGl0b3IuY3VycmVudFByZXNldCAmJiAhZWRpdG9yLm5vUHJlc2V0c1wiIChjbGljayk9XCJuZXh0UHJlc2V0KClcIiBjbGFzcz1cInByZXNldFwiPnN0eWxlOjxiciAvPnt7ZWRpdG9yLmN1cnJlbnRQcmVzZXQudGl0bGV9fTwvYT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiXHJcbiAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICBbc3R5bGUud2lkdGhdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPT09IERldmljZVR5cGUuRGVza3RvcCA/ICc3NXZ3J1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiBkZXZpY2UgPT09IERldmljZVR5cGUuVGFibGV0ID8gJzU1dncnXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IGRldmljZSA9PT0gRGV2aWNlVHlwZS5Nb2JpbGUgPyAnMzV2dydcclxuICAgICAgICAgICAgICAgICAgICAgIDogJzc1dncnIFwiPlxyXG4gIDxuZy10ZW1wbGF0ZSBib25jU2tlbGV0b25FZGl0b3JBbmNob3I+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZWRpdG9yXCIgW2NsYXNzLmFjdGl2ZV09XCJlZGl0b3IuaXNFZGl0aW5nIHx8IGVkaXRvci5pc0RpcnR5XCIgY2xhc3M9XCJyaWdodCBiYXJcIj5cclxuICA8IS0tIDxhICpuZ0lmPVwiIWVkaXRvci5pc0VkaXRpbmdcIiAoY2xpY2spPVwiZWRpdG9yLnJlbW92ZSgpXCIgY2xhc3M9XCJkZWxldGVcIj4hISEgcmVtb3ZlPC9hPiAtLT5cclxuICA8YSAqbmdJZj1cImVkaXRvci5pc0RpcnR5XCIgKGNsaWNrKT1cImVkaXRvci5yZXNldERhdGEoKVwiIGNsYXNzPVwicmVzZXRcIj5yZXNldDwvYT5cclxuICA8YSAqbmdJZj1cImVkaXRvci5pc0VkaXRpbmcgJiYgIWVkaXRvci5pc0RpcnR5XCIgKGNsaWNrKT1cImVkaXRvci5maW5pc2hFZGl0aW5nKClcIiBjbGFzcz1cImNsb3NlXCI+Y2xvc2U8L2E+XHJcbiAgPGEgKm5nSWY9XCJlZGl0b3IuaXNEaXJ0eVwiIChjbGljayk9XCJlZGl0b3Iuc2F2ZSgpXCIgY2xhc3M9XCJzYXZlXCI+YXBwbHk8L2E+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,9 @@
1
+ export * from './skeleton-editor-anchor.directive';
2
+ export * from './skeleton-editor.component';
3
+ export * from './BoneEditorMap';
4
+ export * from './IBoneTemplate';
5
+ export * from './IBoneEditor';
6
+ export * from './ContentPreset';
7
+ export * from './skeleton-editor.component';
8
+ export * from './bone-editor-container/bone-editor-container.component';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS1jbXMvc3JjL2xpYi9za2VsZXRvbi1lZGl0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5REFBeUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2tlbGV0b24tZWRpdG9yLWFuY2hvci5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NrZWxldG9uLWVkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0JvbmVFZGl0b3JNYXAnO1xyXG5leHBvcnQgKiBmcm9tICcuL0lCb25lVGVtcGxhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0lCb25lRWRpdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db250ZW50UHJlc2V0JztcclxuZXhwb3J0ICogZnJvbSAnLi9za2VsZXRvbi1lZGl0b3IuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9ib25lLWVkaXRvci1jb250YWluZXIvYm9uZS1lZGl0b3ItY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { Directive, ViewContainerRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SkeletonEditorAnchorDirective {
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: SkeletonEditorAnchorDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: SkeletonEditorAnchorDirective, selector: "[boncSkeletonEditorAnchor]", ngImport: i0 }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SkeletonEditorAnchorDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{
13
+ selector: '[boncSkeletonEditorAnchor]'
14
+ }]
15
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tZWRpdG9yLWFuY2hvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS1jbXMvc3JjL2xpYi9za2VsZXRvbi1lZGl0b3Ivc2tlbGV0b24tZWRpdG9yLWFuY2hvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLNUQsTUFBTSxPQUFPLDZCQUE2QjtJQUV4QyxZQUFtQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFJLENBQUM7OEdBRi9DLDZCQUE2QjtrR0FBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7aUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tib25jU2tlbGV0b25FZGl0b3JBbmNob3JdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2tlbGV0b25FZGl0b3JBbmNob3JEaXJlY3RpdmUge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikgeyB9XHJcbn1cclxuIl19