@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.
- package/README.md +7 -0
- package/esm2022/candy-kingdom-bonnie-cms.mjs +5 -0
- package/esm2022/index.mjs +16 -0
- package/esm2022/lib/admin-controls/admin-controls.component.mjs +44 -0
- package/esm2022/lib/admin-controls/index.mjs +2 -0
- package/esm2022/lib/bone-editors/bone-editor-base.component.mjs +143 -0
- package/esm2022/lib/bone-editors/index.mjs +3 -0
- package/esm2022/lib/bone-editors/unknown-bone-editor/index.mjs +2 -0
- package/esm2022/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.mjs +18 -0
- package/esm2022/lib/bonnie-cms.module.mjs +105 -0
- package/esm2022/lib/core/DeviceType.mjs +8 -0
- package/esm2022/lib/core/DeviceVisibility.mjs +9 -0
- package/esm2022/lib/core/MediaType.mjs +2 -0
- package/esm2022/lib/core/TextEditorField.mjs +7 -0
- package/esm2022/lib/core/Utils.mjs +18 -0
- package/esm2022/lib/core/index.mjs +6 -0
- package/esm2022/lib/core-components/editable-group.mjs +84 -0
- package/esm2022/lib/core-components/editable.directive.mjs +173 -0
- package/esm2022/lib/core-components/form-base.component.mjs +34 -0
- package/esm2022/lib/core-components/index.mjs +5 -0
- package/esm2022/lib/core-components/link-popup/index.mjs +2 -0
- package/esm2022/lib/core-components/link-popup/link-popup.component.mjs +73 -0
- package/esm2022/lib/form-controls/form-controls.component.mjs +16 -0
- package/esm2022/lib/form-controls/index.mjs +2 -0
- package/esm2022/lib/generated/i-equatable.mjs +6 -0
- package/esm2022/lib/generated/i-setting.mjs +6 -0
- package/esm2022/lib/generated/index.mjs +14 -0
- package/esm2022/lib/generated/localized-text-setting-data.mjs +6 -0
- package/esm2022/lib/generated/setting-base.mjs +6 -0
- package/esm2022/lib/generated/setting-data.mjs +6 -0
- package/esm2022/lib/generated/setting-group.mjs +6 -0
- package/esm2022/lib/generated/setting.mjs +6 -0
- package/esm2022/lib/generated/text-setting-data.mjs +6 -0
- package/esm2022/lib/generated/text-setting-type.mjs +10 -0
- package/esm2022/lib/media-uploader/index.mjs +2 -0
- package/esm2022/lib/media-uploader/media-uploader.component.mjs +159 -0
- package/esm2022/lib/seo-form/index.mjs +2 -0
- package/esm2022/lib/seo-form/seo-form.component.mjs +42 -0
- package/esm2022/lib/skeleton-editor/BoneEditorMap.mjs +2 -0
- package/esm2022/lib/skeleton-editor/ContentPreset.mjs +9 -0
- package/esm2022/lib/skeleton-editor/IBoneEditor.mjs +2 -0
- package/esm2022/lib/skeleton-editor/IBoneTemplate.mjs +2 -0
- package/esm2022/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.mjs +119 -0
- package/esm2022/lib/skeleton-editor/index.mjs +9 -0
- package/esm2022/lib/skeleton-editor/skeleton-editor-anchor.directive.mjs +16 -0
- package/esm2022/lib/skeleton-editor/skeleton-editor.component.mjs +107 -0
- package/esm2022/lib/text-form/TextInputStyle.mjs +7 -0
- package/esm2022/lib/text-form/index.mjs +3 -0
- package/esm2022/lib/text-form/text-form.component.mjs +33 -0
- package/esm2022/lib/translation-form/index.mjs +2 -0
- package/esm2022/lib/translation-form/translation-form.component.mjs +32 -0
- package/esm2022/lib/translation-input/index.mjs +2 -0
- package/esm2022/lib/translation-input/translation-input.component.mjs +42 -0
- package/esm2022/lib/translation-textarea/index.mjs +2 -0
- package/esm2022/lib/translation-textarea/translation-textarea.component.mjs +66 -0
- package/esm2022/lib/unknown-form/index.mjs +2 -0
- package/esm2022/lib/unknown-form/unknown-form.component.mjs +23 -0
- package/fesm2022/candy-kingdom-bonnie-cms.mjs +1343 -0
- package/fesm2022/candy-kingdom-bonnie-cms.mjs.map +1 -0
- package/index.d.ts +15 -0
- package/lib/admin-controls/admin-controls.component.d.ts +14 -0
- package/lib/admin-controls/index.d.ts +1 -0
- package/lib/bone-editors/bone-editor-base.component.d.ts +44 -0
- package/lib/bone-editors/index.d.ts +2 -0
- package/lib/bone-editors/unknown-bone-editor/index.d.ts +1 -0
- package/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.d.ts +11 -0
- package/lib/bonnie-cms.module.d.ts +26 -0
- package/lib/core/DeviceType.d.ts +6 -0
- package/lib/core/DeviceVisibility.d.ts +7 -0
- package/lib/core/MediaType.d.ts +2 -0
- package/lib/core/TextEditorField.d.ts +5 -0
- package/lib/core/Utils.d.ts +4 -0
- package/lib/core/index.d.ts +5 -0
- package/lib/core-components/editable-group.d.ts +24 -0
- package/lib/core-components/editable.directive.d.ts +43 -0
- package/lib/core-components/form-base.component.d.ts +15 -0
- package/lib/core-components/index.d.ts +4 -0
- package/lib/core-components/link-popup/index.d.ts +1 -0
- package/lib/core-components/link-popup/link-popup.component.d.ts +28 -0
- package/lib/form-controls/form-controls.component.d.ts +7 -0
- package/lib/form-controls/index.d.ts +1 -0
- package/lib/generated/i-equatable.d.ts +6 -0
- package/lib/generated/i-setting.d.ts +8 -0
- package/lib/generated/index.d.ts +13 -0
- package/lib/generated/localized-text-setting-data.d.ts +11 -0
- package/lib/generated/setting-base.d.ts +8 -0
- package/lib/generated/setting-data.d.ts +8 -0
- package/lib/generated/setting-group.d.ts +10 -0
- package/lib/generated/setting.d.ts +9 -0
- package/lib/generated/text-setting-data.d.ts +10 -0
- package/lib/generated/text-setting-type.d.ts +8 -0
- package/lib/media-uploader/index.d.ts +1 -0
- package/lib/media-uploader/media-uploader.component.d.ts +34 -0
- package/lib/seo-form/index.d.ts +1 -0
- package/lib/seo-form/seo-form.component.d.ts +18 -0
- package/lib/skeleton-editor/BoneEditorMap.d.ts +3 -0
- package/lib/skeleton-editor/ContentPreset.d.ts +11 -0
- package/lib/skeleton-editor/IBoneEditor.d.ts +26 -0
- package/lib/skeleton-editor/IBoneTemplate.d.ts +5 -0
- package/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.d.ts +32 -0
- package/lib/skeleton-editor/index.d.ts +8 -0
- package/lib/skeleton-editor/skeleton-editor-anchor.directive.d.ts +8 -0
- package/lib/skeleton-editor/skeleton-editor.component.d.ts +31 -0
- package/lib/text-form/TextInputStyle.d.ts +5 -0
- package/lib/text-form/index.d.ts +2 -0
- package/lib/text-form/text-form.component.d.ts +13 -0
- package/lib/translation-form/index.d.ts +1 -0
- package/lib/translation-form/translation-form.component.d.ts +14 -0
- package/lib/translation-input/index.d.ts +1 -0
- package/lib/translation-input/translation-input.component.d.ts +17 -0
- package/lib/translation-textarea/index.d.ts +1 -0
- package/lib/translation-textarea/translation-textarea.component.d.ts +26 -0
- package/lib/unknown-form/index.d.ts +1 -0
- package/lib/unknown-form/unknown-form.component.d.ts +9 -0
- package/package.json +25 -0
- package/styles/@candy-kingdom/bonnie/variables.scss +0 -0
- package/styles/admin-styles.scss +139 -0
- package/styles/admin-variables.scss +445 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtdXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUtY21zL3NyYy9saWIvbWVkaWEtdXBsb2FkZXIvbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUtY21zL3NyYy9saWIvbWVkaWEtdXBsb2FkZXIvbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFhLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUd0RSxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNuRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXJDLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVoRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsY0FBYyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBT2hFLE1BQU0sT0FBTyxzQkFBc0I7SUF5QmpDLFlBQW9CLFNBQXVCLEVBQVUsSUFB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OzJGRElhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxxQkFBcUI7MEdBUXhCLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlqQyxTQUFTO3NCQURmLE1BQU07Z0JBSUEsWUFBWTtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSWxCLFVBQVU7c0JBRGhCLEtBQUs7Z0JBaUJLLEdBQUc7c0JBRGIsS0FBSztnQkFhSyxVQUFVO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBsYXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE1lZGlhT2JqZWN0Rml0LCBQaXhNZWRpYVVuaW9uIH0gZnJvbSAnQGNhbmR5LWtpbmdkb20vYm9ubmllJztcclxuaW1wb3J0IHsgTWVkaWFUeXBlIH0gZnJvbSAnLi4vY29yZSc7XHJcblxyXG5jb25zdCBpbWFnZU1pbWVUeXBlcyA9IFsnaW1hZ2UvcG5nJywgJ2ltYWdlL2pwZWcnXTtcclxuY29uc3QgdmlkZW9NaW1lVHlwZXMgPSBbJ3ZpZGVvL21wNCddO1xyXG5cclxuY29uc3QgaW1hZ2VGaWxlVHlwZXMgPSBpbWFnZU1pbWVUeXBlcy5qb2luKCcsJyk7XHJcbmNvbnN0IHZpZGVvRmlsZVR5cGVzID0gdmlkZW9NaW1lVHlwZXMuam9pbignLCcpO1xyXG5cclxuY29uc3QgYWxsTWVkaWFGaWxlVHlwZXMgPSBgJHtpbWFnZUZpbGVUeXBlc30sJHt2aWRlb0ZpbGVUeXBlc31gO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdib25jLW1lZGlhLXVwbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lZGlhLXVwbG9hZGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lZGlhVXBsb2FkZXJDb21wb25lbnQge1xyXG4gIHB1YmxpYyByZWFkb25seSBNZWRpYU9iamVjdEZpdCA9IE1lZGlhT2JqZWN0Rml0O1xyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+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
|