@candy-kingdom/bonnie-cms 0.27.0 → 0.27.2
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.
|
@@ -38,12 +38,15 @@ var TextEditorField;
|
|
|
38
38
|
// tslint:disable-next-line: max-line-length
|
|
39
39
|
const regExpIsMobile = new RegExp(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/, "i");
|
|
40
40
|
function isLocalUrlString(url) {
|
|
41
|
-
if (url === undefined || url === null || url.trim().length === 0)
|
|
41
|
+
if (url === undefined || url === null || url.trim().length === 0) {
|
|
42
42
|
return true;
|
|
43
|
-
|
|
43
|
+
}
|
|
44
|
+
if (url.startsWith("//")) {
|
|
44
45
|
return false;
|
|
45
|
-
|
|
46
|
+
}
|
|
47
|
+
if (url.startsWith("./") || url.startsWith("/")) {
|
|
46
48
|
return true;
|
|
49
|
+
}
|
|
47
50
|
return false;
|
|
48
51
|
}
|
|
49
52
|
function hasFlag(value, flag) {
|
|
@@ -139,8 +142,9 @@ class BoneEditorBaseComponent {
|
|
|
139
142
|
this._isEditing.set(false);
|
|
140
143
|
this.boneEtalon.set(JSON.parse(this._storedBoneJson));
|
|
141
144
|
this.updatePresetByData();
|
|
142
|
-
if (this.onReset !== undefined)
|
|
145
|
+
if (this.onReset !== undefined) {
|
|
143
146
|
this.onReset();
|
|
147
|
+
}
|
|
144
148
|
this.editing.emit(false);
|
|
145
149
|
}
|
|
146
150
|
updateDirty() {
|
|
@@ -153,8 +157,9 @@ class BoneEditorBaseComponent {
|
|
|
153
157
|
this.removed.emit();
|
|
154
158
|
}
|
|
155
159
|
save() {
|
|
156
|
-
if (!this.isDirty())
|
|
160
|
+
if (!this.isDirty()) {
|
|
157
161
|
return;
|
|
162
|
+
}
|
|
158
163
|
this._isDirty.set(false);
|
|
159
164
|
this.finishEditing();
|
|
160
165
|
this._storedBoneJson = JSON.stringify(this.bone());
|
|
@@ -171,10 +176,12 @@ class BoneEditorBaseComponent {
|
|
|
171
176
|
this.editing.emit(true);
|
|
172
177
|
}
|
|
173
178
|
finishEditing() {
|
|
174
|
-
if (this._isDirty())
|
|
179
|
+
if (this._isDirty()) {
|
|
175
180
|
throw new Error("Нельзя закрывать редактирование когда есть изменения. Надо сохранить либо зарезетить.");
|
|
176
|
-
|
|
181
|
+
}
|
|
182
|
+
if (this.onFinishEditing !== undefined) {
|
|
177
183
|
this.onFinishEditing();
|
|
184
|
+
}
|
|
178
185
|
this._isEditing.set(false);
|
|
179
186
|
}
|
|
180
187
|
nextPreset() {
|
|
@@ -186,8 +193,9 @@ class BoneEditorBaseComponent {
|
|
|
186
193
|
newIndex = newIndex < 0 ? 0 : newIndex % this.presets().length;
|
|
187
194
|
const currentPreset = this.currentPreset();
|
|
188
195
|
const currentIndex = currentPreset === undefined ? -1 : this.presets().indexOf(currentPreset);
|
|
189
|
-
if (currentIndex === newIndex)
|
|
196
|
+
if (currentIndex === newIndex) {
|
|
190
197
|
return;
|
|
198
|
+
}
|
|
191
199
|
const newPreset = this.presets()[newIndex];
|
|
192
200
|
this._currentPreset.set(newPreset);
|
|
193
201
|
newPreset.transformer(this.bone());
|
|
@@ -197,8 +205,9 @@ class BoneEditorBaseComponent {
|
|
|
197
205
|
const countOfActive = this.presets()
|
|
198
206
|
.map((p) => p.isActive(this.bone()))
|
|
199
207
|
.filter((p) => p).length;
|
|
200
|
-
if (countOfActive !== 1)
|
|
208
|
+
if (countOfActive !== 1) {
|
|
201
209
|
throw new Error(`active preset count should be equal 1, but it was: ${countOfActive}. ${this.constructor.name}`);
|
|
210
|
+
}
|
|
202
211
|
for (let i = 0; i < this.presets().length; i++) {
|
|
203
212
|
const preset = this.presets()[i];
|
|
204
213
|
if (preset.isActive(this.bone())) {
|
|
@@ -283,8 +292,9 @@ class EditableDirective {
|
|
|
283
292
|
this.propagateChange(newUnqieNotEmptyData);
|
|
284
293
|
}
|
|
285
294
|
patchSave(propName, newDataParts) {
|
|
286
|
-
if (this._originalValue === undefined || this._originalValue === null)
|
|
295
|
+
if (this._originalValue === undefined || this._originalValue === null) {
|
|
287
296
|
return;
|
|
297
|
+
}
|
|
288
298
|
if (typeof this._originalValue !== "object") {
|
|
289
299
|
console.warn("patch save called on not object type");
|
|
290
300
|
return;
|
|
@@ -292,14 +302,16 @@ class EditableDirective {
|
|
|
292
302
|
this._originalValue[propName] = newDataParts;
|
|
293
303
|
this.setOriginal(this._originalValue);
|
|
294
304
|
this.updateDirty();
|
|
295
|
-
if (!this.isDirty())
|
|
305
|
+
if (!this.isDirty()) {
|
|
296
306
|
this.close();
|
|
307
|
+
}
|
|
297
308
|
}
|
|
298
309
|
// change model without opening or closing the editor
|
|
299
310
|
silentPatch(dict) {
|
|
300
311
|
for (const key in dict) {
|
|
301
|
-
if (!Object.hasOwn(dict, key))
|
|
312
|
+
if (!Object.hasOwn(dict, key)) {
|
|
302
313
|
continue;
|
|
314
|
+
}
|
|
303
315
|
const propVal = dict[key];
|
|
304
316
|
if (this._value !== undefined && this._value !== null) {
|
|
305
317
|
this._value[key] = propVal;
|
|
@@ -311,8 +323,9 @@ class EditableDirective {
|
|
|
311
323
|
this._storedData = JSON.stringify(this._originalValue);
|
|
312
324
|
}
|
|
313
325
|
cancel() {
|
|
314
|
-
if (!this.inEditMode())
|
|
326
|
+
if (!this.inEditMode()) {
|
|
315
327
|
return;
|
|
328
|
+
}
|
|
316
329
|
this.finishEditing();
|
|
317
330
|
// reset value
|
|
318
331
|
this.setValue(this._originalValue);
|
|
@@ -322,8 +335,9 @@ class EditableDirective {
|
|
|
322
335
|
this.finishEditing();
|
|
323
336
|
}
|
|
324
337
|
finishEditing() {
|
|
325
|
-
if (!this.inEditMode())
|
|
338
|
+
if (!this.inEditMode()) {
|
|
326
339
|
return;
|
|
340
|
+
}
|
|
327
341
|
this._inEditMode.set(false);
|
|
328
342
|
this.editModeChange.emit(false);
|
|
329
343
|
}
|
|
@@ -429,8 +443,9 @@ class EditableGroupComponent {
|
|
|
429
443
|
}
|
|
430
444
|
updateEditMode() {
|
|
431
445
|
const newEditMode = this.editables().filter((x) => x.inEditMode()).length > 0;
|
|
432
|
-
if (newEditMode === this.inEditMode())
|
|
446
|
+
if (newEditMode === this.inEditMode()) {
|
|
433
447
|
return;
|
|
448
|
+
}
|
|
434
449
|
this.inEditMode.set(newEditMode);
|
|
435
450
|
this.editModeChange.emit(newEditMode);
|
|
436
451
|
}
|
|
@@ -583,8 +598,9 @@ class FileUploaderComponent {
|
|
|
583
598
|
sanitizer = inject(DomSanitizer);
|
|
584
599
|
http = inject(HttpClient);
|
|
585
600
|
onFileSelect(fileInput) {
|
|
586
|
-
if (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1)
|
|
601
|
+
if (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1) {
|
|
587
602
|
return;
|
|
603
|
+
}
|
|
588
604
|
const file = fileInput.files[0];
|
|
589
605
|
const uploadUrl = this.uploadUrlMap().get(file.type) ?? this.uploadUrlMap().get("");
|
|
590
606
|
if (uploadUrl === undefined || uploadUrl === null) {
|
|
@@ -610,8 +626,9 @@ class FileUploaderComponent {
|
|
|
610
626
|
});
|
|
611
627
|
}
|
|
612
628
|
selectFile(event) {
|
|
613
|
-
if (event.target === this.fileInput().nativeElement)
|
|
629
|
+
if (event.target === this.fileInput().nativeElement) {
|
|
614
630
|
return;
|
|
631
|
+
}
|
|
615
632
|
this.fileInput().nativeElement.click();
|
|
616
633
|
}
|
|
617
634
|
getEventMessage(event) {
|
|
@@ -624,7 +641,7 @@ class FileUploaderComponent {
|
|
|
624
641
|
break;
|
|
625
642
|
case HttpEventType.Response:
|
|
626
643
|
if (event.body === null || event.body === undefined) {
|
|
627
|
-
console.warn(
|
|
644
|
+
console.warn("empty body from uploader");
|
|
628
645
|
break;
|
|
629
646
|
}
|
|
630
647
|
this.srcChange.emit(event.body);
|
|
@@ -634,7 +651,7 @@ class FileUploaderComponent {
|
|
|
634
651
|
}
|
|
635
652
|
}
|
|
636
653
|
updateClip() {
|
|
637
|
-
this.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle(
|
|
654
|
+
this.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle("inset(0px 100% 0px 0%)"));
|
|
638
655
|
}
|
|
639
656
|
handleError(file) {
|
|
640
657
|
const func = (error, p2) => {
|
|
@@ -977,8 +994,9 @@ class MediaUploaderComponent {
|
|
|
977
994
|
sanitizer = inject(DomSanitizer);
|
|
978
995
|
http = inject(HttpClient);
|
|
979
996
|
onFileSelect(fileInput) {
|
|
980
|
-
if (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1)
|
|
997
|
+
if (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1) {
|
|
981
998
|
return;
|
|
999
|
+
}
|
|
982
1000
|
const file = fileInput.files[0];
|
|
983
1001
|
let uploadingMediaType;
|
|
984
1002
|
const uploadType = this.uploadType();
|
|
@@ -1020,8 +1038,9 @@ class MediaUploaderComponent {
|
|
|
1020
1038
|
});
|
|
1021
1039
|
}
|
|
1022
1040
|
selectFile(event) {
|
|
1023
|
-
if (event.target === this.fileInput().nativeElement)
|
|
1041
|
+
if (event.target === this.fileInput().nativeElement) {
|
|
1024
1042
|
return;
|
|
1043
|
+
}
|
|
1025
1044
|
this.fileInput().nativeElement.click();
|
|
1026
1045
|
}
|
|
1027
1046
|
getEventMessage(event) {
|
|
@@ -1051,7 +1070,7 @@ class MediaUploaderComponent {
|
|
|
1051
1070
|
}
|
|
1052
1071
|
}
|
|
1053
1072
|
updateClip() {
|
|
1054
|
-
this.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle(
|
|
1073
|
+
this.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle("inset(0px 100% 0px 0%)"));
|
|
1055
1074
|
}
|
|
1056
1075
|
handleError(file) {
|
|
1057
1076
|
const func = (error, p2) => {
|
|
@@ -1115,7 +1134,7 @@ class DataService {
|
|
|
1115
1134
|
}
|
|
1116
1135
|
getSettings(ids) {
|
|
1117
1136
|
const pageOb = this.http.get(`${this.baseHref}api/settings`, {
|
|
1118
|
-
params: { ids
|
|
1137
|
+
params: { ids },
|
|
1119
1138
|
});
|
|
1120
1139
|
return pageOb;
|
|
1121
1140
|
}
|
|
@@ -1148,11 +1167,13 @@ class DataService {
|
|
|
1148
1167
|
for (const bone of x.page.bones) {
|
|
1149
1168
|
if (!("dataRoute" in bone) ||
|
|
1150
1169
|
typeof bone.dataRoute !== "string" ||
|
|
1151
|
-
bone.dataRoute.length === 0)
|
|
1170
|
+
bone.dataRoute.length === 0) {
|
|
1152
1171
|
continue;
|
|
1172
|
+
}
|
|
1153
1173
|
const data = x.data[bone.dataRoute];
|
|
1154
|
-
if (data === undefined || data === null)
|
|
1174
|
+
if (data === undefined || data === null) {
|
|
1155
1175
|
throw new Error(`Data ${bone.dataRoute} have not been preloaded`);
|
|
1176
|
+
}
|
|
1156
1177
|
bone.data = data; // todo: fix
|
|
1157
1178
|
}
|
|
1158
1179
|
return x.page;
|
|
@@ -1239,8 +1260,9 @@ class BoneEditorContainerComponent {
|
|
|
1239
1260
|
});
|
|
1240
1261
|
}
|
|
1241
1262
|
nextPreset = () => {
|
|
1242
|
-
if (this.editor === undefined || this.editor === null)
|
|
1263
|
+
if (this.editor === undefined || this.editor === null) {
|
|
1243
1264
|
return;
|
|
1265
|
+
}
|
|
1244
1266
|
this.editor.nextPreset();
|
|
1245
1267
|
};
|
|
1246
1268
|
// todo: add or remove visibility feature
|
|
@@ -1324,13 +1346,15 @@ class SkeletonEditorComponent {
|
|
|
1324
1346
|
return this.editable?.value ?? [];
|
|
1325
1347
|
}
|
|
1326
1348
|
boneEditHandler(isEditing) {
|
|
1327
|
-
if (isEditing)
|
|
1349
|
+
if (isEditing) {
|
|
1328
1350
|
this.editable.startEditing();
|
|
1351
|
+
}
|
|
1329
1352
|
else {
|
|
1330
1353
|
const allClosed = this.boneEditorContainerList().filter((x) => x.editor?.isEditing).length === 0;
|
|
1331
1354
|
this.editable.updateDirty();
|
|
1332
|
-
if (!this.editable.isDirty() && allClosed)
|
|
1355
|
+
if (!this.editable.isDirty() && allClosed) {
|
|
1333
1356
|
this.editable.close();
|
|
1357
|
+
}
|
|
1334
1358
|
}
|
|
1335
1359
|
}
|
|
1336
1360
|
boneChangeHandler(index, newBoneValue) {
|
|
@@ -1340,23 +1364,28 @@ class SkeletonEditorComponent {
|
|
|
1340
1364
|
this.editable.save();
|
|
1341
1365
|
}
|
|
1342
1366
|
removeBone(boneIndex) {
|
|
1343
|
-
if (this.bones === undefined || this.bones === null)
|
|
1367
|
+
if (this.bones === undefined || this.bones === null) {
|
|
1344
1368
|
return;
|
|
1345
|
-
|
|
1369
|
+
}
|
|
1370
|
+
if (!confirm("Вы уверены, что хотите удалить компонент?")) {
|
|
1346
1371
|
return;
|
|
1372
|
+
}
|
|
1347
1373
|
this.bones.splice(boneIndex, 1);
|
|
1348
|
-
if (!this.editable.inEditMode())
|
|
1374
|
+
if (!this.editable.inEditMode()) {
|
|
1349
1375
|
this.editable.startEditing();
|
|
1376
|
+
}
|
|
1350
1377
|
this.editable.save();
|
|
1351
1378
|
}
|
|
1352
1379
|
moveDown(boneIndex) {
|
|
1353
|
-
if (boneIndex >= this.bones.length - 1)
|
|
1380
|
+
if (boneIndex >= this.bones.length - 1) {
|
|
1354
1381
|
return;
|
|
1382
|
+
}
|
|
1355
1383
|
this.swapBones(boneIndex, boneIndex + 1);
|
|
1356
1384
|
}
|
|
1357
1385
|
moveUp(boneIndex) {
|
|
1358
|
-
if (boneIndex <= 0)
|
|
1386
|
+
if (boneIndex <= 0) {
|
|
1359
1387
|
return;
|
|
1388
|
+
}
|
|
1360
1389
|
this.swapBones(boneIndex - 1, boneIndex);
|
|
1361
1390
|
}
|
|
1362
1391
|
createBone(index, selectedTemplate) {
|
|
@@ -1364,8 +1393,9 @@ class SkeletonEditorComponent {
|
|
|
1364
1393
|
this.bones.splice(index, 0, newBone);
|
|
1365
1394
|
}
|
|
1366
1395
|
swapBones(index1, index2) {
|
|
1367
|
-
if (index1 < 0 || index2 < 0 || index1 >= this.bones.length || index2 >= this.bones.length)
|
|
1396
|
+
if (index1 < 0 || index2 < 0 || index1 >= this.bones.length || index2 >= this.bones.length) {
|
|
1368
1397
|
throw new Error(`ошибка swapBones. неправильные индексы ${index1} и ${index2}. bone count: ${this.bones.length}`);
|
|
1398
|
+
}
|
|
1369
1399
|
const tempBone = this.bones[index1];
|
|
1370
1400
|
this.bones[index1] = this.bones[index2];
|
|
1371
1401
|
this.bones[index2] = tempBone;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candy-kingdom-bonnie-cms.mjs","sources":["../../../../libs/bonnie-cms/src/lib/core/DeviceType.ts","../../../../libs/bonnie-cms/src/lib/core/DeviceVisibility.ts","../../../../libs/bonnie-cms/src/lib/core/TextEditorField.ts","../../../../libs/bonnie-cms/src/lib/core/Utils.ts","../../../../libs/bonnie-cms/src/lib/admin-controls/admin-controls.component.ts","../../../../libs/bonnie-cms/src/lib/admin-controls/admin-controls.component.html","../../../../libs/bonnie-cms/src/lib/bone-editors/bone-editor-base.component.ts","../../../../libs/bonnie-cms/src/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.ts","../../../../libs/bonnie-cms/src/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.html","../../../../libs/bonnie-cms/src/lib/core-components/editable.directive.ts","../../../../libs/bonnie-cms/src/lib/core-components/editable-group.ts","../../../../libs/bonnie-cms/src/lib/core-components/form-base.component.ts","../../../../libs/bonnie-cms/src/lib/translation-input/translation-input.component.ts","../../../../libs/bonnie-cms/src/lib/translation-input/translation-input.component.html","../../../../libs/bonnie-cms/src/lib/translation-textarea/translation-textarea.component.ts","../../../../libs/bonnie-cms/src/lib/translation-textarea/translation-textarea.component.html","../../../../libs/bonnie-cms/src/lib/core-components/link-popup/link-popup.component.ts","../../../../libs/bonnie-cms/src/lib/core-components/link-popup/link-popup.component.html","../../../../libs/bonnie-cms/src/lib/file-uploader/file-uploader.component.ts","../../../../libs/bonnie-cms/src/lib/file-uploader/file-uploader.component.html","../../../../libs/bonnie-cms/src/lib/form-controls/form-controls.component.ts","../../../../libs/bonnie-cms/src/lib/form-controls/form-controls.component.html","../../../../libs/bonnie-cms/src/lib/forms/file-form/file-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/file-form/file-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/lottie-form/lottie-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/lottie-form/lottie-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/one-image-form/one-image-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/one-image-form/one-image-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/seo-form/seo-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/seo-form/seo-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/svg-form/svg-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/svg-form/svg-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/text-form/TextInputStyle.ts","../../../../libs/bonnie-cms/src/lib/forms/text-form/text-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/text-form/text-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/translation-form/translation-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/translation-form/translation-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/unknown-form/unknown-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/unknown-form/unknown-form.component.html","../../../../libs/bonnie-cms/src/lib/generated/file-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/i-equatable.ts","../../../../libs/bonnie-cms/src/lib/generated/i-setting.ts","../../../../libs/bonnie-cms/src/lib/generated/localized-text-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/lottie-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/one-image-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/setting.ts","../../../../libs/bonnie-cms/src/lib/generated/setting-base.ts","../../../../libs/bonnie-cms/src/lib/generated/setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/setting-group.ts","../../../../libs/bonnie-cms/src/lib/generated/svg-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/text-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/text-setting-type.ts","../../../../libs/bonnie-cms/src/lib/generated/index.ts","../../../../libs/bonnie-cms/src/lib/media-uploader/media-uploader.component.ts","../../../../libs/bonnie-cms/src/lib/media-uploader/media-uploader.component.html","../../../../libs/bonnie-cms/src/lib/services/API_BASE_URL.ts","../../../../libs/bonnie-cms/src/lib/services/admin-data.service.ts","../../../../libs/bonnie-cms/src/lib/services/data.service.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor-anchor.directive.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.html","../../../../libs/bonnie-cms/src/lib/skeleton-editor/ContentPreset.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor.component.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor.component.html","../../../../libs/bonnie-cms/src/candy-kingdom-bonnie-cms.ts"],"sourcesContent":["export enum DeviceType {\n\tNotSet = 0,\n\tMobile = 1,\n\tTablet = 2,\n\tDesktop = 3,\n}\n","export enum DeviceVisibility {\n\tNone = 0,\n\tDesktop = 1,\n\tTablet = 2,\n\tMobile = 4,\n\tAll = Desktop | Tablet | Mobile,\n}\n","export enum TextEditorField {\n\tNotSet = 0,\n\tInput = 1,\n\tTextarea = 2,\n}\n","// tslint:disable-next-line: max-line-length\nexport const regExpIsMobile = new RegExp(\n\t/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/,\n\t\"i\",\n);\n\nexport function isLocalUrlString(url: string): boolean {\n\tif (url === undefined || url === null || url.trim().length === 0) return true;\n\n\tif (url.startsWith(\"//\")) return false;\n\n\tif (url.startsWith(\"./\") || url.startsWith(\"/\")) return true;\n\n\treturn false;\n}\n\nexport function hasFlag<T extends number>(value: T, flag: T): boolean {\n\treturn (value & flag) === flag;\n}\n\nexport function setOrRemoveFlag<T extends number>(value: T, flag: T, enabled: boolean): T {\n\treturn (enabled ? value | flag : value & ~flag) as T;\n}\n","import { Component, input } from \"@angular/core\";\n\nimport { DeviceType } from \"../core\";\nimport type { EditableGroupComponent } from \"../core-components\";\n\n@Component({\n\tselector: \"bonc-admin-controls\",\n\n\ttemplateUrl: \"./admin-controls.component.html\",\n\tstyleUrl: \"./admin-controls.component.scss\",\n})\nexport class AdminControlsComponent {\n\tpublic readonly DeviceType = DeviceType;\n\n\tpublic readonly editableGroup = input.required<EditableGroupComponent>();\n\n\tpublic readonly deviceControls = input(false);\n\n\tpublic locale = \"en\";\n\tpublic device = this.DeviceType.Desktop;\n\n\tpublic changeLocale(): void {\n\t\tthis.locale = this.locale === \"en\" ? \"ru\" : \"en\"; // move locales to CMS config\n\t}\n\n\tpublic changeDevice(): void {\n\t\tswitch (this.device) {\n\t\t\tcase DeviceType.Desktop:\n\t\t\t\tthis.device = DeviceType.Tablet;\n\t\t\t\treturn;\n\n\t\t\tcase DeviceType.Tablet:\n\t\t\t\tthis.device = DeviceType.Mobile;\n\t\t\t\treturn;\n\n\t\t\tcase DeviceType.Mobile:\n\t\t\t\tthis.device = DeviceType.Desktop;\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\tthis.device = DeviceType.Desktop;\n\t\t\t\treturn;\n\t\t}\n\t}\n}\n","<div class=\"page-controls\">\n <a (click)=\"changeLocale()\" class=\"locale\">Locale: {{locale}}</a>\n\n <!-- todo: return this functionality -->\n <!-- <a *ngIf=\"deviceControls\" (click)=\"changeDevice()\" class=\"device\">\n <span *ngIf=\"device === DeviceType.Desktop\">DESKTOP</span>\n <span *ngIf=\"device === DeviceType.Tablet\">TABLET</span>\n <span *ngIf=\"device === DeviceType.Mobile\">MOBILE</span>\n </a> -->\n\n @if (editableGroup() && editableGroup().inEditMode()) {\n <a (click)=\"editableGroup().saveAll()\"\n class=\"save\">Save all</a>\n\n <a (click)=\"editableGroup().cancelAll()\"\n class=\"cancel\">Cancel all</a>\n }\n</div>\n","import {\n\tComponent,\n\tcomputed,\n\teffect,\n\tHostBinding,\n\tinput,\n\tmodel,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\nimport type { ContentPreset } from \"../skeleton-editor/ContentPreset\";\nimport type { IBoneEditor } from \"../skeleton-editor/IBoneEditor\";\n\n@Component({ template: \"\" })\nexport abstract class BoneEditorBaseComponent<TBone extends Bone> implements IBoneEditor<TBone> {\n\tpublic readonly editing = output<boolean>();\n\tpublic readonly saved = output<Bone>();\n\tpublic readonly removed = output<void>();\n\n\tpublic readonly boneEtalon = model.required<TBone>();\n\n\tpublic readonly locale = input.required<string>();\n\tpublic readonly device = input<DeviceType>(DeviceType.NotSet);\n\n\tprivate readonly _presets = signal<ContentPreset<TBone>[]>([]);\n\tpublic readonly presets = this._presets.asReadonly();\n\n\tprivate readonly _currentPreset = signal<ContentPreset<TBone> | undefined>(undefined);\n\tpublic readonly currentPreset = this._currentPreset.asReadonly();\n\n\tprivate readonly _isDirty = signal(false);\n\tpublic readonly isDirty = this._isDirty.asReadonly();\n\n\tprivate readonly _isEditing = signal(false);\n\tpublic readonly isEditing = this._isEditing.asReadonly();\n\n\tpublic readonly noPresets = computed(() => this.presets().length === 0);\n\n\t// effect gonna fix this undefined value\n\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\tprotected readonly bone = signal<TBone>(undefined!);\n\n\tprivate _storedBoneJson = \"\";\n\n\tpublic abstract onReset(): void;\n\tpublic abstract onFinishEditing(): void;\n\n\tprotected abstract getPresets(): ContentPreset<TBone>[];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst newData = this.boneEtalon();\n\t\t\tthis._isDirty.set(false);\n\t\t\tthis._storedBoneJson = JSON.stringify(newData);\n\t\t\tthis.bone.set(JSON.parse(this._storedBoneJson));\n\t\t\tthis.updatePresetByData();\n\t\t});\n\n\t\tconst presets = this.getPresets();\n\n\t\tif (presets.length === 0) {\n\t\t\tpresets.push({\n\t\t\t\ttitle: \"default\",\n\t\t\t\tisActive: () => true,\n\t\t\t\ttransformer: (bone) => bone,\n\t\t\t\tclean: (bone) => bone,\n\t\t\t});\n\t\t}\n\n\t\t// todo: remove this, use just regular presets\n\t\tthis._presets.set(presets);\n\t}\n\n\t@HostBinding(\"class.mobile\") get isMobile(): boolean {\n\t\treturn this.device() === DeviceType.Mobile;\n\t}\n\n\t@HostBinding(\"class.tablet\") get isTablet(): boolean {\n\t\treturn this.device() === DeviceType.Tablet;\n\t}\n\n\t@HostBinding(\"class.desktop\") get isDesktop(): boolean {\n\t\treturn this.device() === DeviceType.Desktop;\n\t}\n\n\tpublic resetData(): void {\n\t\tthis._isEditing.set(false);\n\n\t\tthis.boneEtalon.set(JSON.parse(this._storedBoneJson));\n\t\tthis.updatePresetByData();\n\n\t\tif (this.onReset !== undefined) this.onReset();\n\n\t\tthis.editing.emit(false);\n\t}\n\n\tpublic updateDirty(): void {\n\t\tthis._isDirty.set(JSON.stringify(this.bone()) !== this._storedBoneJson);\n\t}\n\n\tpublic markAsDirty(): void {\n\t\tthis._isDirty.set(true);\n\t}\n\n\tpublic remove(): void {\n\t\tthis.removed.emit();\n\t}\n\n\tpublic save(): void {\n\t\tif (!this.isDirty()) return;\n\n\t\tthis._isDirty.set(false);\n\n\t\tthis.finishEditing();\n\n\t\tthis._storedBoneJson = JSON.stringify(this.bone());\n\n\t\tconst clonedData: TBone = JSON.parse(this._storedBoneJson);\n\t\tthis.saved.emit(clonedData);\n\t}\n\n\tpublic startEditing(): void {\n\t\tif (this.isEditing()) {\n\t\t\tthis.updateDirty();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isEditing.set(true);\n\t\tthis.updateDirty();\n\n\t\tthis.editing.emit(true);\n\t}\n\n\tpublic finishEditing(): void {\n\t\tif (this._isDirty())\n\t\t\tthrow new Error(\n\t\t\t\t\"Нельзя закрывать редактирование когда есть изменения. Надо сохранить либо зарезетить.\",\n\t\t\t);\n\n\t\tif (this.onFinishEditing !== undefined) this.onFinishEditing();\n\n\t\tthis._isEditing.set(false);\n\t}\n\n\tpublic nextPreset(): void {\n\t\tconst currentPreset = this.currentPreset();\n\t\tconst newIndex = currentPreset === undefined ? 0 : this.presets().indexOf(currentPreset) + 1;\n\n\t\tthis.applyPresetAtIndex(newIndex);\n\t}\n\n\tprivate applyPresetAtIndex = (newIndex: number): void => {\n\t\tnewIndex = newIndex < 0 ? 0 : newIndex % this.presets().length;\n\n\t\tconst currentPreset = this.currentPreset();\n\n\t\tconst currentIndex = currentPreset === undefined ? -1 : this.presets().indexOf(currentPreset);\n\t\tif (currentIndex === newIndex) return;\n\n\t\tconst newPreset = this.presets()[newIndex];\n\n\t\tthis._currentPreset.set(newPreset);\n\t\tnewPreset.transformer(this.bone());\n\n\t\tthis.updateDirty();\n\t};\n\n\tprivate updatePresetByData = (): void => {\n\t\tconst countOfActive = this.presets()\n\t\t\t.map((p) => p.isActive(this.bone()))\n\t\t\t.filter((p) => p).length;\n\n\t\tif (countOfActive !== 1)\n\t\t\tthrow new Error(\n\t\t\t\t`active preset count should be equal 1, but it was: ${countOfActive}. ${this.constructor.name}`,\n\t\t\t);\n\n\t\tfor (let i = 0; i < this.presets().length; i++) {\n\t\t\tconst preset = this.presets()[i];\n\n\t\t\tif (preset.isActive(this.bone())) {\n\t\t\t\tthis.applyPresetAtIndex(i);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n}\n","import { JsonPipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport type { ContentPreset } from \"../../skeleton-editor/ContentPreset\";\nimport { BoneEditorBaseComponent } from \"../bone-editor-base.component\";\n\n@Component({\n\tselector: \"bonc-unknown-bone-editor\",\n\n\timports: [JsonPipe],\n\ttemplateUrl: \"./unknown-bone-editor.component.html\",\n\tstyleUrl: \"./unknown-bone-editor.component.scss\",\n})\nexport class UnknownBoneEditorComponent extends BoneEditorBaseComponent<Bone> {\n\tpublic onFinishEditing(): void {\n\t\t// no-op for unknown bone type\n\t}\n\tpublic onReset(): void {\n\t\t// no-op for unknown bone type\n\t}\n\n\tprotected getPresets(): ContentPreset<Bone>[] {\n\t\treturn [];\n\t}\n}\n","<p>Unknown Bone Editor | bone type: {{bone().type}}</p>\n<pre>{{bone() | json}}</pre>\n","import { Directive, forwardRef, output, signal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Directive({\n\tselector: \"[boncEditable]\",\n\tproviders: [\n\t\t{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EditableDirective), multi: true },\n\t],\n})\nexport class EditableDirective<T = unknown> {\n\tpublic readonly saved = output<T>();\n\tpublic readonly editModeChange = output<boolean>();\n\tpublic readonly externalSaveCall = output<void>();\n\tpublic readonly canceled = output<void>();\n\tpublic readonly valueChange = output<T | undefined>();\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate propagateChange: (newValue: T) => void = () => {};\n\n\tprivate readonly _inEditMode = signal(false);\n\tpublic readonly inEditMode = this._inEditMode.asReadonly();\n\n\tprivate readonly _isDirty = signal(false);\n\tpublic readonly isDirty = this._isDirty.asReadonly();\n\n\tprivate _value?: T;\n\tprivate _originalValue?: T;\n\tprivate _storedData?: string;\n\n\tpublic requestSave() {\n\t\tthis.externalSaveCall.emit();\n\t}\n\n\tpublic startEditing = (): void => {\n\t\tif (this.inEditMode()) {\n\t\t\tthis.updateDirty();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._inEditMode.set(true);\n\t\tthis.updateDirty();\n\t\tthis.editModeChange.emit(true);\n\t};\n\n\tpublic save(newData?: T): void {\n\t\tif (!this.inEditMode()) {\n\t\t\tconsole.warn(\"save before edit mode\"); //todo: fix that\n\t\t}\n\n\t\tthis.finishEditing();\n\n\t\tconst newUnqieNotEmptyData =\n\t\t\tthis.value === newData || newData === undefined\n\t\t\t\t? JSON.parse(JSON.stringify(this.value))\n\t\t\t\t: newData;\n\n\t\tthis.setOriginal(newUnqieNotEmptyData);\n\t\tthis.updateDirty();\n\n\t\tthis.saved.emit(newUnqieNotEmptyData);\n\n\t\tthis.propagateChange(newUnqieNotEmptyData);\n\t}\n\n\tpublic patchSave(propName: keyof T, newDataParts: T[keyof T]): void {\n\t\tif (this._originalValue === undefined || this._originalValue === null) return;\n\n\t\tif (typeof this._originalValue !== \"object\") {\n\t\t\tconsole.warn(\"patch save called on not object type\");\n\t\t\treturn;\n\t\t}\n\n\t\t(this._originalValue as any)[propName] = newDataParts;\n\n\t\tthis.setOriginal(this._originalValue);\n\n\t\tthis.updateDirty();\n\n\t\tif (!this.isDirty()) this.close();\n\t}\n\n\t// change model without opening or closing the editor\n\n\tpublic silentPatch(dict: Partial<T>): void {\n\t\tfor (const key in dict) {\n\t\t\tif (!Object.hasOwn(dict, key)) continue;\n\n\t\t\tconst propVal = dict[key];\n\n\t\t\tif (this._value !== undefined && this._value !== null) {\n\t\t\t\tthis._value[key] = propVal as any;\n\t\t\t}\n\n\t\t\tif (this._originalValue !== undefined && this._originalValue !== null) {\n\t\t\t\tthis._originalValue[key] = propVal as any;\n\t\t\t}\n\t\t}\n\t\tthis._storedData = JSON.stringify(this._originalValue);\n\t}\n\n\tpublic cancel(): void {\n\t\tif (!this.inEditMode()) return;\n\n\t\tthis.finishEditing();\n\n\t\t// reset value\n\t\tthis.setValue(this._originalValue);\n\n\t\tthis.canceled.emit();\n\t}\n\n\tpublic close(): void {\n\t\tthis.finishEditing();\n\t}\n\n\tprivate finishEditing(): void {\n\t\tif (!this.inEditMode()) return;\n\n\t\tthis._inEditMode.set(false);\n\t\tthis.editModeChange.emit(false);\n\t}\n\n\tprivate setValue(newValue?: T): void {\n\t\tthis._value =\n\t\t\tnewValue === null || newValue === undefined\n\t\t\t\t? undefined\n\t\t\t\t: JSON.parse(JSON.stringify(newValue));\n\n\t\tthis.valueChange.emit(this._value);\n\t}\n\n\tpublic set value(newValue: T | undefined) {\n\t\tthis.setValue(newValue);\n\t}\n\n\tpublic get value(): T | undefined {\n\t\treturn this._value;\n\t}\n\n\tpublic updateDirty(): void {\n\t\tthis._isDirty.set(JSON.stringify(this._value) !== this._storedData);\n\t}\n\n\tpublic markAsDirty(): void {\n\t\tthis._isDirty.set(true);\n\t}\n\n\tprivate setOriginal(newOriginalValue: T) {\n\t\tthis._originalValue = newOriginalValue;\n\t\tthis._storedData = JSON.stringify(newOriginalValue);\n\t}\n\n\t// #region ngModel\n\n\twriteValue(newValue: T): void {\n\t\tthis.finishEditing();\n\n\t\tthis.setOriginal(newValue);\n\t\tthis._isDirty.set(false);\n\n\t\tthis.setValue(newValue);\n\t}\n\n\tsetDisabledState?(): void {\n\t\t// required by ControlValueAccessor\n\t}\n\n\tregisterOnChange(tellAngularThatSomethingIsChanged: (newValue: T) => void): void {\n\t\tthis.propagateChange = (newValue: T): void => {\n\t\t\ttellAngularThatSomethingIsChanged(newValue);\n\t\t};\n\t}\n\n\tregisterOnTouched(): void {\n\t\t// required by ControlValueAccessor\n\t}\n\n\t// #endregion\n}\n","import {\n\tComponent,\n\tcontentChildren,\n\tDestroyRef,\n\teffect,\n\tinject,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\n\nimport { debounceTime, Subject, type Unsubscribable } from \"rxjs\";\n\nimport { EditableDirective } from \"./editable.directive\";\n\n@Component({\n\tselector: \"bonc-editable-group\",\n\ttemplate: \"<ng-content></ng-content>\",\n})\nexport class EditableGroupComponent {\n\tpublic readonly editModeChange = output<boolean>();\n\tpublic readonly saved = output<void>();\n\tpublic readonly requestEditorClose = output<boolean>();\n\n\tpublic readonly editables = contentChildren(EditableDirective, { descendants: true });\n\n\tprivate readonly _subscriptions: Unsubscribable[] = [];\n\tpublic readonly inEditMode = signal(false);\n\n\tprivate readonly _saveSubject = new Subject<void>(); // todo: use signal\n\n\tconstructor() {\n\t\tconst saveSubscription = this._saveSubject\n\t\t\t.asObservable()\n\t\t\t.pipe(debounceTime(100), takeUntilDestroyed())\n\t\t\t.subscribe(() => this.saved.emit(undefined));\n\n\t\teffect(() => {\n\t\t\tthis.clearSubscriptions();\n\t\t\tthis.updateSubscriptions();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tsaveSubscription.unsubscribe();\n\t\t\tthis.clearSubscriptions();\n\t\t});\n\t}\n\n\tpublic saveAll(): void {\n\t\tthis.editables().forEach((x) => x.requestSave());\n\t}\n\n\tpublic cancelAll(): void {\n\t\tthis.editables().forEach((x) => x.cancel());\n\t}\n\n\tpublic closeAll(): void {\n\t\tthis.requestEditorClose.emit(true);\n\t\tthis.editables().forEach((x) => x.close());\n\t}\n\n\tprivate clearSubscriptions(): void {\n\t\tthis._subscriptions.forEach((x) => x.unsubscribe());\n\t\tthis._subscriptions.splice(0, this._subscriptions.length);\n\t}\n\n\tprivate updateSubscriptions(): void {\n\t\tthis.editables().forEach((editable) => {\n\t\t\tthis._subscriptions.push(\n\t\t\t\teditable.saved.subscribe(this.onSave.bind(this)),\n\t\t\t\teditable.editModeChange.subscribe(this.updateEditMode.bind(this)),\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate onSave(): void {\n\t\tthis._saveSubject.next();\n\t}\n\n\tprivate updateEditMode(): void {\n\t\tconst newEditMode = this.editables().filter((x) => x.inEditMode()).length > 0;\n\n\t\tif (newEditMode === this.inEditMode()) return;\n\n\t\tthis.inEditMode.set(newEditMode);\n\n\t\tthis.editModeChange.emit(newEditMode);\n\t}\n}\n","import { Component, inject, input } from \"@angular/core\";\n\nimport { EditableDirective } from \"./editable.directive\";\n\n@Component({\n\ttemplate: \"\",\n})\nexport abstract class FormBaseComponent<TData = unknown> {\n\tprotected name = \"\";\n\n\tpublic readonly editable = inject(EditableDirective<TData>, { host: true });\n\n\tpublic readonly locale = input(\"\");\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\n\n@Component({\n\tselector: \"bonc-translation-input\",\n\n\timports: [FormsModule],\n\ttemplateUrl: \"./translation-input.component.html\",\n\tstyleUrl: \"./translation-input.component.scss\",\n})\nexport class TranslationInputComponent {\n\tpublic readonly text = input.required<LocalizedString>();\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly device = input<DeviceType>(DeviceType.NotSet);\n\n\tpublic readonly startEditing = output<void>();\n\tpublic readonly changed = output<void>();\n\tpublic readonly blurred = output<void>();\n\n\tpublic onClick() {\n\t\tthis.startEditing.emit();\n\t}\n\n\tpublic onKeyPress() {\n\t\tthis.changed.emit();\n\t}\n\n\tpublic onBlur() {\n\t\tthis.blurred.emit();\n\t}\n}\n","<input [(ngModel)]=\"text()[locale()]\"\n (click)=\"onClick()\"\n (keyup)=\"onKeyPress()\"\n (blur)=\"onBlur()\" />\n","import { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, effect, input, output, viewChildren } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\n\n@Component({\n\tselector: \"bonc-translation-textarea\",\n\n\timports: [FormsModule, CdkTextareaAutosize],\n\ttemplateUrl: \"./translation-textarea.component.html\",\n\tstyleUrl: \"./translation-textarea.component.scss\",\n})\nexport class TranslationTextareaComponent {\n\tpublic readonly autosizeList = viewChildren(CdkTextareaAutosize);\n\n\tpublic readonly text = input.required<LocalizedString>();\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly minRows = input<number>();\n\tpublic readonly maxRows = input<number>();\n\tpublic readonly device = input<DeviceType>(DeviceType.NotSet);\n\n\tpublic readonly startEditing = output<void>();\n\tpublic readonly changed = output<void>();\n\tpublic readonly blurred = output<void>();\n\n\tconstructor() {\n\t\t// todo: check if it still necessary\n\t\teffect((onCleanup) => {\n\t\t\tthis.text();\n\t\t\tthis.locale();\n\t\t\tthis.minRows();\n\t\t\tthis.maxRows();\n\t\t\tconst timer = setTimeout(() => this.triggerResize(), 500);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic onClick() {\n\t\tthis.startEditing.emit();\n\t}\n\n\tpublic onKeyPress() {\n\t\tthis.changed.emit();\n\t}\n\n\tpublic onBlur() {\n\t\tthis.blurred.emit();\n\t}\n\n\tprivate triggerResize() {\n\t\tthis.autosizeList().forEach((x) => x.resizeToFitContent(true));\n\t}\n}\n","<textarea [(ngModel)]=\"text()[locale()]\"\n [cdkAutosizeMinRows]=\"minRows()\"\n [cdkAutosizeMaxRows]=\"maxRows()\"\n (click)=\"onClick()\"\n (keyup)=\"onKeyPress()\"\n (blur)=\"onBlur()\"\n matInput\n cdkTextareaAutosize>\n</textarea>\n","import { Component, input, output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { TextEditorField } from \"../../core\";\nimport { TranslationInputComponent } from \"../../translation-input/translation-input.component\";\nimport { TranslationTextareaComponent } from \"../../translation-textarea/translation-textarea.component\";\n\n@Component({\n\tselector: \"bonc-link-popup\",\n\n\timports: [FormsModule, TranslationInputComponent, TranslationTextareaComponent],\n\ttemplateUrl: \"./link-popup.component.html\",\n\tstyleUrl: \"./link-popup.component.scss\",\n})\nexport class LinkPopupComponent {\n\tpublic readonly TextEditorField = TextEditorField;\n\tpublic readonly LinkPopupField = TextEditorField;\n\n\tpublic readonly linkChange = output<LocalizedString>();\n\n\tpublic readonly startEditing = output<void>();\n\n\tpublic readonly changed = output<void>();\n\n\tpublic readonly blurred = output<void>();\n\n\tpublic readonly open = output<void>();\n\n\tpublic readonly closed = output<void>();\n\n\tpublic readonly field = input.required<TextEditorField>();\n\n\tpublic readonly maxRows = input<number>();\n\n\tpublic readonly minRows = input<number>();\n\n\tpublic readonly linkTitle = input.required<LocalizedString>();\n\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly link = input.required<LocalizedString>();\n\n\tpublic popupIsShown = false;\n\n\tpublic onClick() {\n\t\tthis.startEditing.emit();\n\t}\n\n\tpublic onChange() {\n\t\tthis.changed.emit();\n\t}\n\n\tpublic onBlur() {\n\t\tthis.blurred.emit();\n\t}\n\n\tpublic showPopup(): void {\n\t\tthis.popupIsShown = true;\n\t\tthis.open.emit();\n\t}\n\n\tpublic hidePopup(): void {\n\t\tthis.popupIsShown = false;\n\t\tthis.closed.emit();\n\t}\n}\n","@switch (field()) {\n @case (TextEditorField.Input) {\n <bonc-translation-input (click)=\"showPopup()\"\n [text]=\"linkTitle()\"\n [locale]=\"locale()\"\n (startEditing)=\"onClick()\"\n (changed)=\"onChange()\"\n (blurred)=\"onBlur()\">\n </bonc-translation-input>\n }\n @case (TextEditorField.Textarea) {\n <bonc-translation-textarea (click)=\"showPopup()\"\n [text]=\"linkTitle()\"\n [locale]=\"locale()\"\n [minRows]=\"minRows()\"\n [maxRows]=\"maxRows()\"\n (startEditing)=\"onClick()\"\n (changed)=\"onChange()\"\n (blurred)=\"onBlur()\">\n </bonc-translation-textarea>\n }\n}\n\n@if (popupIsShown) {\n <div>\n <div class=\"popup\">\n <a (click)=\"hidePopup()\" class=\"close\">close</a>\n\n <label>Link\n <input [(ngModel)]=\"link()[locale()]\"\n (click)=\"onClick()\"\n (keyup)=\"onChange()\"\n (blur)=\"onBlur()\">\n </label>\n\n </div>\n </div>\n}\n","import { DecimalPipe } from \"@angular/common\";\nimport { HttpClient, type HttpEvent, HttpEventType, HttpRequest } from \"@angular/common/http\";\nimport {\n\tComponent,\n\tcomputed,\n\ttype ElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\nimport { DomSanitizer, type SafeStyle } from \"@angular/platform-browser\";\n\nimport { catchError, last, map, Observable } from \"rxjs\";\n\nimport type { FileMeta, FileSrc } from \"@candy-kingdom/bonnie\";\n\n@Component({\n\tselector: \"bonc-file-uploader\",\n\n\timports: [DecimalPipe],\n\ttemplateUrl: \"./file-uploader.component.html\",\n\tstyleUrl: \"./file-uploader.component.scss\",\n})\nexport class FileUploaderComponent {\n\tpublic readonly fileInput = viewChild.required<ElementRef<HTMLInputElement>>(\"fileInput\");\n\n\tpublic readonly srcChange = output<FileSrc<FileMeta>>();\n\n\tpublic readonly uploadUrlMap = input.required<ReadonlyMap<string, string>>();\n\n\tpublic readonly src = input<FileSrc<FileMeta> | undefined>();\n\n\tpublic readonly uploadTypes = input<string[]>([]);\n\n\tpublic readonly fileTypeMask = computed(() => {\n\t\tconst types = this.uploadTypes();\n\t\treturn types.length === 0 ? undefined : types.join(\",\");\n\t});\n\n\tpublic readonly progress = signal(0);\n\tpublic readonly isUploading = signal(false);\n\tpublic readonly clipStyle = signal<SafeStyle | undefined>(undefined);\n\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\tprivate readonly http = inject(HttpClient);\n\n\tpublic onFileSelect(fileInput: HTMLInputElement) {\n\t\tif (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1)\n\t\t\treturn;\n\n\t\tconst file = fileInput.files[0];\n\n\t\tconst uploadUrl = this.uploadUrlMap().get(file.type) ?? this.uploadUrlMap().get(\"\");\n\n\t\tif (uploadUrl === undefined || uploadUrl === null) {\n\t\t\tconsole.error(`upload map doesn't have url for type '${file.type}'`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst formData: FormData = new FormData();\n\n\t\tformData.append(\"file\", file);\n\n\t\tthis.progress.set(0);\n\t\tthis.isUploading.set(true);\n\n\t\tthis.updateClip();\n\n\t\tconst request = new HttpRequest(\"POST\", uploadUrl, formData, {\n\t\t\treportProgress: true,\n\t\t});\n\n\t\tthis.http\n\t\t\t.request<FileSrc<FileMeta>>(request)\n\t\t\t.pipe(\n\t\t\t\tmap((event) => this.getEventMessage(event)),\n\t\t\t\t// tap(message => this.showProgress(message)),\n\t\t\t\tlast(), // return last (completed) message to caller\n\t\t\t\tcatchError(this.handleError(file)),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.isUploading.set(false);\n\t\t\t});\n\t}\n\n\tpublic selectFile(event: Event): void {\n\t\tif (event.target === this.fileInput().nativeElement) return;\n\n\t\tthis.fileInput().nativeElement.click();\n\t}\n\n\tprivate getEventMessage(event: HttpEvent<FileSrc<FileMeta>>): void {\n\t\tswitch (event.type) {\n\t\t\tcase HttpEventType.Sent:\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.UploadProgress:\n\t\t\t\tthis.progress.set(event.total === undefined ? 0.5 : event.loaded / event.total);\n\t\t\t\tthis.updateClip();\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.Response:\n\t\t\t\tif (event.body === null || event.body === undefined) {\n\t\t\t\t\tconsole.warn(`empty body from uploader`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.srcChange.emit(event.body);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate updateClip(): void {\n\t\tthis.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle(`inset(0px 100% 0px 0%)`));\n\t}\n\n\tprivate handleError(file: File): (p1: unknown, p2: Observable<unknown>) => Observable<unknown> {\n\t\tconst func = (error: unknown, p2: Observable<unknown>): Observable<unknown> => {\n\t\t\tconst message = `error uploadingFile ${file.name}.`;\n\t\t\tconsole.error(message, error, p2);\n\t\t\talert(message);\n\t\t\treturn new Observable<unknown>();\n\t\t};\n\n\t\treturn func;\n\t}\n}\n","@if (src() === undefined || src()?.url === undefined || src()?.url?.length === 0) {\n <div>Upload file</div>\n}\n\n<ng-content></ng-content>\n\n<div (click)=\"selectFile($event)\" (keydown.enter)=\"selectFile($event)\" role=\"button\" tabindex=\"0\" class=\"media-container\">\n <input #fileInput [accept]=\"fileTypeMask()\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\n @if (isUploading()) {\n <span [style.clip-path]=\"clipStyle()\"\n [style.-webkit-clip-path]=\"clipStyle()\"\n class=\"loader\"></span>\n <span class=\"loader-text\">\n @if (progress() < 1) {\n <span>{{100 * progress() | number: '1.0-0'}}%</span>\n } @else {\n <span>converting</span>\n }\n </span>\n }\n</div>\n","import { Component, input } from \"@angular/core\";\n\nimport type { EditableDirective } from \"../core-components\";\n\n@Component({\n\tselector: \"bonc-form-controls\",\n\n\ttemplateUrl: \"./form-controls.component.html\",\n\tstyleUrl: \"./form-controls.component.scss\",\n})\nexport class FormControlsComponent {\n\tpublic readonly editable = input.required<EditableDirective<any>>();\n}\n","<div [class.edit]=\"editable().inEditMode()\" class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<div [class.hidden]=\"!editable().inEditMode()\" class=\"controls\">\n @if (!editable().isDirty()) {\n <a (click)=\"editable().cancel()\" class=\"close\">close</a>\n } @else {\n <a (click)=\"editable().cancel()\">reset</a>\n <a (click)=\"editable().requestSave()\" class=\"apply\">apply</a>\n }\n</div>\n","import { Component, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, SvgMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\n@Component({\n\tselector: \"bonc-file-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent],\n\ttemplateUrl: \"./file-form.component.html\",\n\tstyleUrl: \"./file-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class FileFormComponent extends FormBaseComponent<FileSrc<FileMeta>> {\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadTypes = input.required<string[]>();\n\n\tpublic readonly uploadMap = input.required<Map<string, string>>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<SvgMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{ label() }}</label>\n }\n <bonc-file-uploader\n [src]=\"editable.value\"\n [uploadTypes]=\"uploadTypes()\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\"\n >\n @let url = editable.value?.url;\n @if (url) {\n <div>{{ url }}</div>\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n</bonc-form-controls>\n","import { Component, input } from \"@angular/core\";\n\nimport { type AnimationOptions, LottieComponent } from \"ngx-lottie\";\n\nimport type { FileMeta, FileSrc, SvgMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\n@Component({\n\tselector: \"bonc-lottie-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent, LottieComponent],\n\ttemplateUrl: \"./lottie-form.component.html\",\n\tstyleUrl: \"./lottie-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class LottieFormComponent extends FormBaseComponent<FileSrc<FileMeta>> {\n\tpublic readonly LottieMimeType = \"application/json\";\n\n\t// todo: convert to signal\n\tpublic animOptions?: AnimationOptions;\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadMap = input.required<Map<string, string>>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\n\t\tthis.editable.valueChange.subscribe((x) => {\n\t\t\tconst url = x?.url ?? \"\";\n\t\t\tthis.animOptions = url.length === 0 ? undefined : { path: url };\n\t\t});\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<SvgMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{ label() }}</label>\n }\n <bonc-file-uploader\n [src]=\"editable.value\"\n [uploadTypes]=\"[LottieMimeType]\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\"\n >\n @if (animOptions) {\n <ng-lottie [options]=\"animOptions\"></ng-lottie>\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n</bonc-form-controls>\n","import { Component, computed, DestroyRef, inject, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, ImageMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\nconst DefaultImageMimeTypes = [\"image/png\", \"image/jpeg\"];\n\n@Component({\n\tselector: \"bonc-one-image-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent],\n\ttemplateUrl: \"./one-image-form.component.html\",\n\tstyleUrl: \"./one-image-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class OneImageFormComponent extends FormBaseComponent<FileSrc<ImageMeta>> {\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadUrl = input(\"/api/admin/upload/image\");\n\n\tpublic readonly mimeTypes = input(DefaultImageMimeTypes);\n\n\tpublic readonly uploadMap = computed(() => {\n\t\tconst m = new Map<string, string>();\n\t\tm.set(\"\", this.uploadUrl());\n\t\treturn m;\n\t});\n\n\tprivate readonly destroyRef = inject(DestroyRef);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst sub = this.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t\tthis.destroyRef.onDestroy(() => sub.unsubscribe());\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<ImageMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{ label() }}</label>\n }\n <bonc-file-uploader\n [src]=\"editable.value\"\n [uploadTypes]=\"mimeTypes()\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\"\n >\n @let url = editable.value?.url;\n @if (url) {\n <img [src]=\"url\" />\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n</bonc-form-controls>\n","import { Component, computed, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, ImageMeta, OpenGraphData } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective, FormBaseComponent } from \"../../core-components\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\nimport { TranslationInputComponent } from \"../../translation-input/translation-input.component\";\nimport { TranslationTextareaComponent } from \"../../translation-textarea/translation-textarea.component\";\n\nconst defaultUploadMap = new Map<string, string>();\ndefaultUploadMap.set(\"\", `/api/admin/upload/image?width=${1200}&height=${630}&format=image/jpeg`);\n\n@Component({\n\tselector: \"bonc-seo-form\",\n\n\timports: [\n\t\tFormControlsComponent,\n\t\tTranslationInputComponent,\n\t\tTranslationTextareaComponent,\n\t\tFileUploaderComponent,\n\t],\n\ttemplateUrl: \"./seo-form.component.html\",\n\tstyleUrl: \"./seo-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class SeoFormComponent extends FormBaseComponent<OpenGraphData> {\n\tpublic readonly uploadMap = defaultUploadMap;\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly pageId = input(\"\");\n\n\tpublic readonly ogImageUploadUrl = computed(\n\t\t() => `/api/admin/page/Og-Image?pageId=${this.pageId()}`,\n\t);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic ResToSrc(res: { url: string }): string {\n\t\treturn res.url;\n\t}\n\n\tpublic replaceImage($event: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tif (this.editable.value !== undefined) {\n\t\t\tthis.editable.value.image[this.locale()] = $event as FileSrc<ImageMeta>;\n\t\t}\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","@if (editable.value !== undefined && editable.value !== null) {\n <bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <h2>{{label()}}</h2>\n }\n\n <div class=\"form-group\">\n <label>Title</label>\n <bonc-translation-input [text]=\"editable.value.title\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-input>\n </div>\n\n <div class=\"form-group\">\n <label>Description</label>\n <bonc-translation-textarea [text]=\"editable.value.description\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Share image | 1200x630</label>\n\n <bonc-file-uploader [src]=\"editable.value.image[locale()]\"\n [uploadTypes]=\"['image/png', 'image/jpeg']\"\n [uploadUrlMap]=\"uploadMap\"\n (srcChange)=\"replaceImage($event)\">\n @let imageUrl = editable.value.image[locale()]?.url;\n @if (imageUrl) {\n <img [src]=\"imageUrl\" />\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value.image[locale()]?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n </div>\n\n </bonc-form-controls>\n} @else {\n <div>Editable Value canot be null or undefined</div>\n}\n","import { Component, computed, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, SvgMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\n@Component({\n\tselector: \"bonc-svg-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent],\n\ttemplateUrl: \"./svg-form.component.html\",\n\tstyleUrl: \"./svg-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class SvgFormComponent extends FormBaseComponent<FileSrc<SvgMeta>> {\n\tpublic readonly SvgMime = \"image/svg+xml\";\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadUrl = input(\"/api/admin/upload/image/svg\");\n\n\tpublic readonly uploadMap = computed(() => {\n\t\tconst m = new Map<string, string>();\n\t\tm.set(this.SvgMime, this.uploadUrl());\n\t\treturn m;\n\t});\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<SvgMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{label()}}</label>\n }\n <bonc-file-uploader [src]=\"editable.value\"\n [uploadTypes]=\"[SvgMime]\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\">\n @let url = editable.value?.url;\n @if (url) {\n <img [src]=\"url\" alt=\"\" />\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n\n</bonc-form-controls>\n","export enum TextInputStyle {\n\tNotSet = 0,\n\tSingleLine = 1,\n\tMultiLine = 2,\n}\n","import { Component, input } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { EditableDirective } from \"../../core-components\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\nimport { TextInputStyle } from \"./TextInputStyle\";\n\n@Component({\n\tselector: \"bonc-text-form\",\n\n\timports: [FormsModule, FormControlsComponent],\n\ttemplateUrl: \"./text-form.component.html\",\n\tstyleUrl: \"./text-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class TextFormComponent extends FormBaseComponent<string> {\n\tpublic readonly TextInputStyle = TextInputStyle;\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly type = input(TextInputStyle.SingleLine);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{label()}}</label>\n }\n @if (editable) {\n @switch (type()) {\n @case (TextInputStyle.SingleLine) {\n <input [(ngModel)]=\"editable.value\"\n [attr.aria-label]=\"label()\"\n (click)=\"editable.startEditing()\"\n (keyup)=\"editable.updateDirty()\"\n (blur)=\"editable.updateDirty()\" />\n }\n @case (TextInputStyle.MultiLine) {\n <textarea [(ngModel)]=\"editable.value\"\n [attr.aria-label]=\"label()\"\n (click)=\"editable.startEditing()\"\n (keyup)=\"editable.updateDirty()\"\n (blur)=\"editable.updateDirty()\">\n </textarea>\n }\n }\n }\n</bonc-form-controls>\n","import { Component, input } from \"@angular/core\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { TextEditorField } from \"../../core\";\nimport { EditableDirective, FormBaseComponent } from \"../../core-components\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\nimport { TranslationInputComponent } from \"../../translation-input/translation-input.component\";\nimport { TranslationTextareaComponent } from \"../../translation-textarea/translation-textarea.component\";\n\n@Component({\n\tselector: \"bonc-translation-form\",\n\n\timports: [FormControlsComponent, TranslationInputComponent, TranslationTextareaComponent],\n\ttemplateUrl: \"./translation-form.component.html\",\n\tstyleUrl: \"./translation-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class TranslationFormComponent extends FormBaseComponent<LocalizedString> {\n\tpublic readonly TextEditorField = TextEditorField;\n\n\tpublic readonly field = input.required<TextEditorField>();\n\n\tpublic readonly label = input<string | undefined>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n}\n","@if (editable.value) {\n <bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{label()}}</label>\n }\n\n @switch (field()) {\n @case (TextEditorField.Input) {\n <bonc-translation-input [text]=\"editable.value\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-input>\n }\n @case (TextEditorField.Textarea) {\n <bonc-translation-textarea [text]=\"editable.value\"\n [minRows]=\"2\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-textarea>\n }\n }\n </bonc-form-controls>\n} @else {\n <div>Editable value canot be undefined</div>\n}\n","import { Component, input } from \"@angular/core\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\n\n@Component({\n\tselector: \"bonc-unknown-form\",\n\n\ttemplateUrl: \"./unknown-form.component.html\",\n\tstyleUrl: \"./unknown-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class UnknownFormComponent extends FormBaseComponent<string> {\n\tpublic readonly label = input(\"\");\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n}\n","<label>Unknown form:<b>{{label()}}</b></label>\n<pre><ng-content></ng-content></pre>\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcFileMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface FileSettingData extends SettingData {\n\tallowedMimeTypes: string[];\n\tsrc: FileSrcFileMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport type IEquatable<_T> = {};\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface ISetting<T extends SettingData> {\n\tid: string;\n\ttitle: string;\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\nimport type { TextSettingType } from \"./text-setting-type\";\n\nexport interface LocalizedTextSettingData extends SettingData {\n\ttext: LocalizedString;\n\ttextType: TextSettingType;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcFileMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface LottieSettingData extends SettingData {\n\tsrc: FileSrcFileMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileFormat, FileSrcImageMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface OneImageSettingData extends SettingData {\n\twidth: number;\n\theight: number;\n\tformat: FileFormat;\n\tallowedMimeTypes: string[];\n\tsrc: FileSrcImageMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SettingBase } from \"./setting-base\";\nimport type { SettingData } from \"./setting-data\";\n\nexport interface Setting<T extends SettingData> extends SettingBase {\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface SettingBase {\n\tid: string;\n\torder: number;\n\ttitle: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface SettingData {\n\ttype: string;\n\tempty: SettingData;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Setting } from \"./setting\";\n\nexport interface SettingGroup {\n\tid: string;\n\torder: number;\n\ttitle: string;\n\trecords: Setting<any>[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcImageMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface SvgSettingData extends SettingData {\n\tsrc: FileSrcImageMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SettingData } from \"./setting-data\";\nimport type { TextSettingType } from \"./text-setting-type\";\n\nexport interface TextSettingData extends SettingData {\n\ttext: string;\n\ttextType: TextSettingType;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport enum TextSettingType {\n\tSingleLine = 0,\n\tMultiLine = 1,\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport * from \"./file-setting-data\";\nexport * from \"./i-equatable\";\nexport * from \"./i-setting\";\nexport * from \"./localized-text-setting-data\";\nexport * from \"./lottie-setting-data\";\nexport * from \"./one-image-setting-data\";\nexport * from \"./setting\";\nexport * from \"./setting-base\";\nexport * from \"./setting-data\";\nexport * from \"./setting-group\";\nexport * from \"./svg-setting-data\";\nexport * from \"./text-setting-data\";\nexport * from \"./text-setting-type\";\n","import { DecimalPipe } from \"@angular/common\";\nimport { HttpClient, type HttpEvent, HttpEventType, HttpRequest } from \"@angular/common/http\";\nimport {\n\tComponent,\n\tcomputed,\n\ttype ElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\nimport { DomSanitizer, type SafeStyle } from \"@angular/platform-browser\";\n\nimport { catchError, last, map, Observable } from \"rxjs\";\n\nimport { MarcyMediaComponent, MediaObjectFit, type PixMediaUnion } from \"@candy-kingdom/bonnie\";\n\nimport type { MediaType } from \"../core\";\n\nconst imageMimeTypes = [\"image/png\", \"image/jpeg\"];\nconst videoMimeTypes = [\"video/mp4\"];\n\nconst imageFileTypes = imageMimeTypes.join(\",\");\nconst videoFileTypes = videoMimeTypes.join(\",\");\n\nconst allMediaFileTypes = `${imageFileTypes},${videoFileTypes}`;\n\n@Component({\n\tselector: \"bonc-media-uploader\",\n\n\timports: [DecimalPipe, MarcyMediaComponent],\n\ttemplateUrl: \"./media-uploader.component.html\",\n\tstyleUrl: \"./media-uploader.component.scss\",\n})\nexport class MediaUploaderComponent {\n\tpublic readonly MediaObjectFit = MediaObjectFit;\n\n\tpublic readonly fileInput = viewChild.required<ElementRef<HTMLInputElement>>(\"fileInput\");\n\n\tpublic readonly srcChange = output<PixMediaUnion>();\n\n\tpublic readonly uploadUrlMap = input.required<ReadonlyMap<MediaType, string>>();\n\n\tpublic readonly forceRatio = input<number>();\n\n\tpublic readonly src = input<PixMediaUnion | undefined>();\n\n\tpublic readonly uploadType = input<MediaType | undefined>();\n\n\tpublic readonly fileTypeMask = computed(() => {\n\t\tswitch (this.uploadType()) {\n\t\t\tcase \"image\":\n\t\t\t\treturn imageFileTypes;\n\t\t\tcase \"video\":\n\t\t\t\treturn videoFileTypes;\n\t\t\tdefault:\n\t\t\t\treturn allMediaFileTypes;\n\t\t}\n\t});\n\n\tpublic readonly progress = signal(0);\n\tpublic readonly isUploading = signal(false);\n\tpublic readonly clipStyle = signal<SafeStyle | undefined>(undefined);\n\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\tprivate readonly http = inject(HttpClient);\n\n\tpublic onFileSelect(fileInput: HTMLInputElement) {\n\t\tif (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1)\n\t\t\treturn;\n\n\t\tconst file = fileInput.files[0];\n\n\t\tlet uploadingMediaType: MediaType;\n\n\t\tconst uploadType = this.uploadType();\n\n\t\tif (uploadType !== undefined && uploadType !== null) {\n\t\t\tuploadingMediaType = uploadType;\n\t\t} else if (imageMimeTypes.includes(file.type)) {\n\t\t\tuploadingMediaType = \"image\";\n\t\t} else if (videoMimeTypes.includes(file.type)) {\n\t\t\tuploadingMediaType = \"video\";\n\t\t} else {\n\t\t\tconsole.error(`unknown media type ${file.type} (${file.name})`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst uploadUrl = this.uploadUrlMap().get(uploadingMediaType);\n\n\t\tif (uploadUrl === undefined || uploadUrl === null) {\n\t\t\tconsole.error(`upload map doesn't have url for type ${uploadingMediaType}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst formData: FormData = new FormData();\n\n\t\tformData.append(\"file\", file);\n\t\tformData.append(\"ratio\", `${this.forceRatio() ?? 0}`);\n\n\t\tthis.progress.set(0);\n\t\tthis.isUploading.set(true);\n\n\t\tthis.updateClip();\n\n\t\tconst request = new HttpRequest(\"POST\", uploadUrl, formData, {\n\t\t\treportProgress: true,\n\t\t});\n\n\t\tthis.http\n\t\t\t.request<PixMediaUnion>(request)\n\t\t\t.pipe(\n\t\t\t\tmap((event) => this.getEventMessage(event)),\n\t\t\t\t// tap(message => this.showProgress(message)),\n\t\t\t\tlast(), // return last (completed) message to caller\n\t\t\t\tcatchError(this.handleError(file)),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.isUploading.set(false);\n\t\t\t});\n\t}\n\n\tpublic selectFile(event: Event): void {\n\t\tif (event.target === this.fileInput().nativeElement) return;\n\n\t\tthis.fileInput().nativeElement.click();\n\t}\n\n\tprivate getEventMessage(event: HttpEvent<PixMediaUnion>): void {\n\t\tswitch (event.type) {\n\t\t\tcase HttpEventType.Sent:\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.UploadProgress:\n\t\t\t\tthis.progress.set(event.total === undefined ? 0.5 : event.loaded / event.total);\n\t\t\t\tthis.updateClip();\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.Response:\n\t\t\t\tif (event.body === undefined || event.body === null) {\n\t\t\t\t\tconsole.error(\"media deserialization error. Response body in undefined\");\n\t\t\t\t} else {\n\t\t\t\t\t// remove this\n\t\t\t\t\t// needed for C# deserialization\n\t\t\t\t\tconst pixmedia = {\n\t\t\t\t\t\t$type: event.body.type,\n\t\t\t\t\t\t...(event.body as any),\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.srcChange.emit(pixmedia);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate updateClip(): void {\n\t\tthis.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle(`inset(0px 100% 0px 0%)`));\n\t}\n\n\tprivate handleError(file: File): (p1: unknown, p2: Observable<unknown>) => Observable<unknown> {\n\t\tconst func = (error: unknown, p2: Observable<unknown>): Observable<unknown> => {\n\t\t\tconst message = `error uploadingFile ${file.name}.`;\n\t\t\tconsole.error(message, error, p2);\n\t\t\talert(message);\n\t\t\treturn new Observable<unknown>();\n\t\t};\n\n\t\treturn func;\n\t}\n}\n","<bon-media [src]=\"src()\" [objectFit]=\"MediaObjectFit.Cover\"></bon-media>\n\n@if (src()?.sources?.length===0) {\n <div>Upload media</div>\n}\n\n<div (click)=\"selectFile($event)\" (keydown.enter)=\"selectFile($event)\" role=\"button\" tabindex=\"0\" class=\"media-container\">\n <input #fileInput [accept]=\"fileTypeMask()\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\n @if (isUploading()) {\n <span [style.clip-path]=\"clipStyle()\"\n [style.-webkit-clip-path]=\"clipStyle()\"\n class=\"loader\"></span>\n <span class=\"loader-text\">\n @if (progress() < 1) {\n <span>{{100 * progress() | number: '1.0-0'}}%</span>\n } @else {\n <span>converting</span>\n }\n </span>\n }\n</div>\n","import { InjectionToken } from \"@angular/core\";\n\nexport const API_BASE_URL = new InjectionToken<string>(\"ApiBaseUrl\");\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\n\nimport type { Observable } from \"rxjs\";\n\nimport type { PageBase } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingBase, SettingGroup } from \"../generated\";\nimport { API_BASE_URL } from \"./API_BASE_URL\";\n\n@Injectable()\nexport class AdminDataService {\n\tprivate readonly _http = inject(HttpClient);\n\tprivate readonly _baseHref = inject(API_BASE_URL);\n\n\tconstructor() {\n\t\tconsole.log(`baseHref: ${this._baseHref}`);\n\t}\n\n\tpublic getSettingGroups(): Observable<SettingGroup[]> {\n\t\tconst pageOb = this._http.get<SettingGroup[]>(`${this._baseHref}api/admin/settings`);\n\t\treturn pageOb;\n\t}\n\n\tpublic getPage(url: string): Observable<SettingGroup[]> {\n\t\tconst pageOb = this._http.get<SettingGroup[]>(`${this._baseHref}api/admin/pages/${url}`);\n\t\treturn pageOb;\n\t}\n\n\tpublic storePage(page: PageBase): Observable<void> {\n\t\tconst ob = this._http.post<void>(`${this._baseHref}api/admin/pages`, page);\n\t\treturn ob;\n\t}\n\n\tpublic updateSettings(settings: SettingBase[]): Observable<void> {\n\t\tconst ob = this._http.post<void>(`${this._baseHref}api/admin/settings`, settings);\n\t\treturn ob;\n\t}\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\n\nimport { combineLatest, map, merge, mergeMap, type Observable, of } from \"rxjs\";\n\nimport type { PageBase, View } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"../generated\";\nimport { API_BASE_URL } from \"./API_BASE_URL\";\n\ntype DataDictionary = { [n: string]: Observable<unknown> };\n\nexport type SettingDataDict = { [id: string]: SettingData };\n\n@Injectable()\nexport class DataService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseHref = inject(API_BASE_URL);\n\n\tpublic getView(viewCode: string): Observable<Readonly<PageBase>> {\n\t\tconst pageOb = this.getSkeleton<PageBase>(`${this.baseHref}api/views/${viewCode}`);\n\t\treturn pageOb;\n\t}\n\n\tpublic getPage(pageRoute: string): Observable<Readonly<PageBase>> {\n\t\tconst pageUrl = `/${pageRoute}`;\n\n\t\tconst pageOb = this.getSkeleton<PageBase>(\n\t\t\t`${this.baseHref}api/pages/?url=${encodeURIComponent(pageUrl)}`,\n\t\t);\n\t\treturn pageOb;\n\t}\n\n\tpublic getSettings(ids: string[]): Observable<Readonly<SettingDataDict>> {\n\t\tconst pageOb = this.http.get<SettingDataDict>(`${this.baseHref}api/settings`, {\n\t\t\tparams: { ids: ids },\n\t\t});\n\n\t\treturn pageOb;\n\t}\n\n\tprivate getSkeleton<T extends PageBase | View>(url: string): Observable<Readonly<T>> {\n\t\tconst skeletonOb = this.http.get<T>(url);\n\n\t\tconst routeDataObs = skeletonOb.pipe(\n\t\t\tmap((x) => {\n\t\t\t\tconst notEmptyDataRoutes = x.bones\n\t\t\t\t\t.map((b) => (\"dataRoute\" in b && typeof b.dataRoute === \"string\" ? b.dataRoute : \"\"))\n\t\t\t\t\t.filter((x) => x.length > 0);\n\n\t\t\t\tif (notEmptyDataRoutes.length === 0) {\n\t\t\t\t\tconst emptyData: DataDictionary = {};\n\t\t\t\t\treturn { page: of(x), data: of(emptyData) };\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tpage: of(x),\n\t\t\t\t\tdata: combineLatest(\n\t\t\t\t\t\tnotEmptyDataRoutes\n\t\t\t\t\t\t\t.map((dataRoute) => {\n\t\t\t\t\t\t\t\tconst url = `${this.baseHref}api/Pages/Children/?url=${dataRoute}`;\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\troute: dataRoute,\n\t\t\t\t\t\t\t\t\tjson: this.http.get(url),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.reduce((prev, curr) => {\n\t\t\t\t\t\t\t\tprev[curr.route] = curr.json;\n\t\t\t\t\t\t\t\treturn prev;\n\t\t\t\t\t\t\t}, {} as DataDictionary),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}),\n\t\t\tmap((x) => combineLatest(x)),\n\t\t\tmergeMap((res) => merge(res)),\n\t\t\tmap((x) => {\n\t\t\t\tfor (const bone of x.page.bones) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\"dataRoute\" in bone) ||\n\t\t\t\t\t\ttypeof bone.dataRoute !== \"string\" ||\n\t\t\t\t\t\tbone.dataRoute.length === 0\n\t\t\t\t\t)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tconst data = x.data[bone.dataRoute];\n\n\t\t\t\t\tif (data === undefined || data === null)\n\t\t\t\t\t\tthrow new Error(`Data ${bone.dataRoute} have not been preloaded`);\n\n\t\t\t\t\t(bone as any).data = data; // todo: fix\n\t\t\t\t}\n\n\t\t\t\treturn x.page;\n\t\t\t}),\n\t\t);\n\n\t\treturn routeDataObs;\n\t}\n}\n","import { Directive, inject, ViewContainerRef } from \"@angular/core\";\n\n@Directive({\n\tselector: \"[boncSkeletonEditorAnchor]\",\n})\nexport class SkeletonEditorAnchorDirective {\n\tpublic readonly viewContainerRef = inject(ViewContainerRef);\n}\n","import {\n\tafterNextRender,\n\tComponent,\n\ttype ComponentRef,\n\teffect,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\n\nimport type { Unsubscribable } from \"rxjs\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport { UnknownBoneEditorComponent } from \"../../bone-editors/unknown-bone-editor/unknown-bone-editor.component\";\nimport { DeviceType } from \"../../core\";\nimport type { BoneEditorMap } from \"../BoneEditorMap\";\nimport type { IBoneEditor } from \"../IBoneEditor\";\nimport { SkeletonEditorAnchorDirective } from \"../skeleton-editor-anchor.directive\";\n\n@Component({\n\tselector: \"bonc-bone-editor-container\",\n\n\timports: [SkeletonEditorAnchorDirective],\n\ttemplateUrl: \"./bone-editor-container.component.html\",\n\tstyleUrl: \"./bone-editor-container.component.scss\",\n})\nexport class BoneEditorContainerComponent {\n\tpublic readonly anchor = viewChild.required(SkeletonEditorAnchorDirective);\n\n\tpublic readonly removed = output<void>();\n\tpublic readonly saved = output<Bone>();\n\tpublic readonly editing = output<boolean>();\n\n\tpublic DeviceType = DeviceType;\n\n\tpublic editor!: IBoneEditor;\n\n\tpublic themePopupIsShown = false;\n\n\tpublic readonly bone = input.required<Bone>();\n\tpublic readonly locale = input.required<string>();\n\tpublic readonly device = input(DeviceType.NotSet);\n\tpublic readonly map = input.required<BoneEditorMap>();\n\n\tprivate boneEditorRef?: ComponentRef<IBoneEditor<Bone>>;\n\tprivate removeSubscription?: Unsubscribable;\n\tprivate saveSubscription?: Unsubscribable;\n\tprivate changedSubscription?: Unsubscribable;\n\n\tprivate readonly viewReady = signal(false);\n\n\tconstructor() {\n\t\tafterNextRender(() => this.viewReady.set(true));\n\n\t\teffect(() => {\n\t\t\tif (!this.viewReady()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newBone = this.bone();\n\t\t\tconst editorMap = this.map();\n\n\t\t\tif (this.removeSubscription) {\n\t\t\t\tthis.removeSubscription.unsubscribe();\n\t\t\t\tthis.removeSubscription = undefined;\n\t\t\t}\n\t\t\tif (this.saveSubscription) {\n\t\t\t\tthis.saveSubscription.unsubscribe();\n\t\t\t\tthis.saveSubscription = undefined;\n\t\t\t}\n\t\t\tif (this.changedSubscription) {\n\t\t\t\tthis.changedSubscription.unsubscribe();\n\t\t\t\tthis.changedSubscription = undefined;\n\t\t\t}\n\n\t\t\tconst viewContainerRef = this.anchor().viewContainerRef;\n\t\t\tviewContainerRef.clear();\n\n\t\t\tconst componentType = editorMap.get(newBone.type) ?? UnknownBoneEditorComponent;\n\t\t\tthis.boneEditorRef = viewContainerRef.createComponent(componentType);\n\n\t\t\tthis.editor = this.boneEditorRef.instance;\n\n\t\t\tthis.boneEditorRef.setInput(\"boneEtalon\", newBone);\n\t\t\tthis.boneEditorRef.setInput(\"locale\", this.locale());\n\t\t\tthis.boneEditorRef.setInput(\"device\", this.device());\n\n\t\t\tthis.removeSubscription = this.editor.removed.subscribe(() => {\n\t\t\t\tthis.removed.emit();\n\t\t\t});\n\t\t\tthis.changedSubscription = this.editor.editing.subscribe((isEditing: boolean) =>\n\t\t\t\tthis.editing.emit(isEditing),\n\t\t\t);\n\t\t\tthis.saveSubscription = this.editor.saved.subscribe((newBoneValue: Bone) =>\n\t\t\t\tthis.saved.emit(newBoneValue),\n\t\t\t);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst locale = this.locale();\n\t\t\tconst device = this.device();\n\t\t\tif (this.boneEditorRef) {\n\t\t\t\tthis.boneEditorRef.setInput(\"locale\", locale);\n\t\t\t\tthis.boneEditorRef.setInput(\"device\", device);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic nextPreset = (): void => {\n\t\tif (this.editor === undefined || this.editor === null) return;\n\n\t\tthis.editor.nextPreset();\n\t};\n\n\t// todo: add or remove visibility feature\n\n\t// public setDisabled = (disabled: boolean): void => {\n\t// if (this.editor === undefined || this.editor === null)\n\t// return;\n\n\t// this.editor.startEditing();\n\n\t// if (this.device === DeviceType.Desktop)\n\t// this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Desktop, !disabled);\n\t// else if (this.device === DeviceType.Tablet)\n\t// this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Tablet, !disabled);\n\t// else if (this.device === DeviceType.Mobile)\n\t// this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Mobile, !disabled);\n\n\t// this.editor.updateDirty();\n\t// }\n\n // todo: use this feature\n // its not working now\n\tpublic get disabled(): boolean {\n\t\tif (this.editor === undefined || this.editor === null) {\n\t\t\tconsole.warn(\"editor should have been set before disabled is called\");\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t\t// todo: add or remove visibility feature\n\t\t// const visibility = this.editor.bone.visibility;\n\n\t\t// if (this.device === DeviceType.Desktop && hasFlag(visibility, DeviceVisibility.Desktop))\n\t\t// return false;\n\n\t\t// if (this.device === DeviceType.Tablet && hasFlag(visibility, DeviceVisibility.Tablet))\n\t\t// return false;\n\n\t\t// if (this.device === DeviceType.Mobile && hasFlag(visibility, DeviceVisibility.Mobile))\n\t\t// return false;\n\n\t\t// return true;\n\t}\n}\n","@if (editor) {\n <div class=\"left bar\" [class.inactive]=\"editor.noPresets()\">\n <!-- <a *ngFor=\"let control of editor.controls\" (click)=\"control.activate()\">{{control.label}}</a> -->\n <!-- <a (click)=\"setDisabled(!disabled)\" class=\"disabled\">block {{disabled ? 'disabled' : 'enabled'}} ({{editor.bone.visibility}})</a> -->\n @if (editor.currentPreset() && !editor.noPresets()) {\n <a (click)=\"nextPreset()\" class=\"preset\">style:<br />{{editor.currentPreset()?.title}}</a>\n }\n </div>\n}@else {\n EDITOR COMPONENTS IS NOT DEFINED\n}\n\n<div class=\"editor-container\"\n [class.disabled]=\"disabled\"\n [style.width]=\"\n device() === DeviceType.Desktop ? '75vw'\n : device() === DeviceType.Tablet ? '55vw'\n : device() === DeviceType.Mobile ? '35vw'\n : '75vw' \">\n <ng-template boncSkeletonEditorAnchor>\n </ng-template>\n</div>\n\n@if (editor) {\n <div [class.active]=\"editor.isEditing() || editor.isDirty()\" class=\"right bar\">\n <!-- <a *ngIf=\"!editor.isEditing\" (click)=\"editor.remove()\" class=\"delete\">!!! remove</a> -->\n @if (editor.isDirty()) {\n <a (click)=\"editor.resetData()\" class=\"reset\">reset</a>\n <a (click)=\"editor.save()\" class=\"save\">apply</a>\n } @else if (editor.isEditing()) {\n <a (click)=\"editor.finishEditing()\" class=\"close\">close</a>\n }\n </div>\n}\n","import type { Bone } from \"@candy-kingdom/bonnie\";\n\nexport interface ContentPreset<out TBone extends Bone> {\n\ttitle: string;\n\tisActive(data: TBone): boolean;\n\tclean(data: TBone): void;\n\ttransformer(bone: TBone): void;\n}\n\nexport function createPreset<TBone extends Bone>(params: {\n\ttitle: string;\n\tstyle: string;\n}): ContentPreset<TBone> {\n\treturn {\n\t\ttitle: params.title,\n\t\tisActive: (x) => x.style === params.style,\n\t\ttransformer: (bone) => (bone.style = params.style),\n\t\tclean: (bone) => (bone.style = params.style),\n\t};\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, effect, inject, input, viewChildren } from \"@angular/core\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\nimport { EditableDirective } from \"../core-components/editable.directive\";\nimport type { BoneEditorMap } from \"./BoneEditorMap\";\nimport { BoneEditorContainerComponent } from \"./bone-editor-container/bone-editor-container.component\";\nimport type { IBoneTemplate } from \"./IBoneTemplate\";\n\n@Component({\n\tselector: \"bonc-skeleton-editor\",\n\n\timports: [NgTemplateOutlet, BoneEditorContainerComponent],\n\ttemplateUrl: \"./skeleton-editor.component.html\",\n\tstyleUrl: \"./skeleton-editor.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class SkeletonEditorComponent {\n\tpublic readonly boneEditorContainerList =\n\t\tviewChildren<BoneEditorContainerComponent>(\"boneEditorContainer\");\n\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly device = input(DeviceType.NotSet);\n\n\tpublic readonly map = input.required<BoneEditorMap>();\n\n\tpublic readonly templates = input.required<ReadonlyArray<IBoneTemplate>>();\n\n\tpublic readonly templatesAreShown: boolean[] = [];\n\n\tpublic readonly editable = inject(EditableDirective<Bone[]>, { host: true });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.map();\n\t\t\tthis.templates();\n\t\t\tthis.templatesAreShown.splice(0, this.templatesAreShown.length);\n\t\t\tconst bones = this.editable.value ?? [];\n\n\t\t\tif (bones === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbones.forEach(() => this.templatesAreShown.push(false));\n\t\t\tthis.templatesAreShown.push(false);\n\t\t});\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.boneEditorContainerList().forEach((editorContainer) => editorContainer.editor?.save());\n\n\t\t\tthis.editable.save();\n\t\t});\n\n\t\tthis.editable.canceled.subscribe(() => {\n\t\t\tthis.boneEditorContainerList().forEach((editorContainer) =>\n\t\t\t\teditorContainer.editor?.resetData(),\n\t\t\t);\n\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic get bones(): Bone[] {\n\t\treturn this.editable?.value ?? [];\n\t}\n\n\tpublic boneEditHandler(isEditing: boolean): void {\n\t\tif (isEditing) this.editable.startEditing();\n\t\telse {\n\t\t\tconst allClosed =\n\t\t\t\tthis.boneEditorContainerList().filter((x) => x.editor?.isEditing).length === 0;\n\n\t\t\tthis.editable.updateDirty();\n\n\t\t\tif (!this.editable.isDirty() && allClosed) this.editable.close();\n\t\t}\n\t}\n\n\tpublic boneChangeHandler(index: number, newBoneValue: Bone): void {\n\t\tif (Array.isArray(this.editable.value)) {\n\t\t\tthis.editable.value[index] = newBoneValue;\n\t\t}\n\n\t\tthis.editable.save();\n\t}\n\n\tpublic removeBone(boneIndex: number): void {\n\t\tif (this.bones === undefined || this.bones === null) return;\n\n\t\tif (!confirm(\"Вы уверены, что хотите удалить компонент?\")) return;\n\n\t\tthis.bones.splice(boneIndex, 1);\n\n\t\tif (!this.editable.inEditMode()) this.editable.startEditing();\n\n\t\tthis.editable.save();\n\t}\n\n\tpublic moveDown(boneIndex: number): void {\n\t\tif (boneIndex >= this.bones.length - 1) return;\n\n\t\tthis.swapBones(boneIndex, boneIndex + 1);\n\t}\n\n\tpublic moveUp(boneIndex: number): void {\n\t\tif (boneIndex <= 0) return;\n\n\t\tthis.swapBones(boneIndex - 1, boneIndex);\n\t}\n\n\tpublic createBone(index: number, selectedTemplate: IBoneTemplate): void {\n\t\tconst newBone = selectedTemplate.boneFactory();\n\n\t\tthis.bones.splice(index, 0, newBone);\n\t}\n\n\tprivate swapBones(index1: number, index2: number): void {\n\t\tif (index1 < 0 || index2 < 0 || index1 >= this.bones.length || index2 >= this.bones.length)\n\t\t\tthrow new Error(\n\t\t\t\t`ошибка swapBones. неправильные индексы ${index1} и ${index2}. bone count: ${this.bones.length}`,\n\t\t\t);\n\n\t\tconst tempBone = this.bones[index1];\n\t\tthis.bones[index1] = this.bones[index2];\n\t\tthis.bones[index2] = tempBone;\n\t}\n}\n","<ng-template #controls let-index='index'>\n <div [class.appearable]=\"index > 0 && index < bones.length\" class=\"controls\">\n @if (index < bones.length) {\n <div class=\"up-down\">\n @if (index > 0) {\n <a (click)=\"moveDown(index - 1)\" class=\"down\">move down</a>\n <a (click)=\"moveUp(index)\" class=\"up\">move up</a>\n }\n </div>\n }\n <a (click)=\"templatesAreShown[index] = true\" class=\"add\">create</a>\n @if (index < bones.length) {\n <a (click)=\"removeBone(index)\" class=\"remove\">remove</a>\n }\n </div>\n\n @if (templatesAreShown[index]) {\n <div class=\"templates\">\n @for (template of templates(); track template.title) {\n <a (click)=\"templatesAreShown[index] = false; createBone(index,template);\">{{template.title}}</a>\n }\n <a (click)=\"templatesAreShown[index] = false\">Close</a>\n </div>\n }\n</ng-template>\n\n<!-- todo: add trackby -->\n@for (bone of bones; track $index) {\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controls; context: {index: $index}\"></ng-container>\n </ng-container>\n\n <bonc-bone-editor-container #boneEditorContainer\n [map]=\"map()\"\n [bone]=\"bone\"\n [locale]=\"locale()\"\n [device]=\"device()\"\n (removed)=\"removeBone($index)\"\n (editing)=\"boneEditHandler($event)\"\n (saved)=\"boneChangeHandler($index, $event)\">\n </bonc-bone-editor-container>\n}\n\n<ng-container *ngTemplateOutlet=\"controls; context: {index: bones.length}\"></ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EditableDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"candy-kingdom-bonnie-cms.mjs","sources":["../../../../libs/bonnie-cms/src/lib/core/DeviceType.ts","../../../../libs/bonnie-cms/src/lib/core/DeviceVisibility.ts","../../../../libs/bonnie-cms/src/lib/core/TextEditorField.ts","../../../../libs/bonnie-cms/src/lib/core/Utils.ts","../../../../libs/bonnie-cms/src/lib/admin-controls/admin-controls.component.ts","../../../../libs/bonnie-cms/src/lib/admin-controls/admin-controls.component.html","../../../../libs/bonnie-cms/src/lib/bone-editors/bone-editor-base.component.ts","../../../../libs/bonnie-cms/src/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.ts","../../../../libs/bonnie-cms/src/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.html","../../../../libs/bonnie-cms/src/lib/core-components/editable.directive.ts","../../../../libs/bonnie-cms/src/lib/core-components/editable-group.ts","../../../../libs/bonnie-cms/src/lib/core-components/form-base.component.ts","../../../../libs/bonnie-cms/src/lib/translation-input/translation-input.component.ts","../../../../libs/bonnie-cms/src/lib/translation-input/translation-input.component.html","../../../../libs/bonnie-cms/src/lib/translation-textarea/translation-textarea.component.ts","../../../../libs/bonnie-cms/src/lib/translation-textarea/translation-textarea.component.html","../../../../libs/bonnie-cms/src/lib/core-components/link-popup/link-popup.component.ts","../../../../libs/bonnie-cms/src/lib/core-components/link-popup/link-popup.component.html","../../../../libs/bonnie-cms/src/lib/file-uploader/file-uploader.component.ts","../../../../libs/bonnie-cms/src/lib/file-uploader/file-uploader.component.html","../../../../libs/bonnie-cms/src/lib/form-controls/form-controls.component.ts","../../../../libs/bonnie-cms/src/lib/form-controls/form-controls.component.html","../../../../libs/bonnie-cms/src/lib/forms/file-form/file-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/file-form/file-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/lottie-form/lottie-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/lottie-form/lottie-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/one-image-form/one-image-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/one-image-form/one-image-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/seo-form/seo-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/seo-form/seo-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/svg-form/svg-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/svg-form/svg-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/text-form/TextInputStyle.ts","../../../../libs/bonnie-cms/src/lib/forms/text-form/text-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/text-form/text-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/translation-form/translation-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/translation-form/translation-form.component.html","../../../../libs/bonnie-cms/src/lib/forms/unknown-form/unknown-form.component.ts","../../../../libs/bonnie-cms/src/lib/forms/unknown-form/unknown-form.component.html","../../../../libs/bonnie-cms/src/lib/generated/file-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/i-equatable.ts","../../../../libs/bonnie-cms/src/lib/generated/i-setting.ts","../../../../libs/bonnie-cms/src/lib/generated/localized-text-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/lottie-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/one-image-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/setting.ts","../../../../libs/bonnie-cms/src/lib/generated/setting-base.ts","../../../../libs/bonnie-cms/src/lib/generated/setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/setting-group.ts","../../../../libs/bonnie-cms/src/lib/generated/svg-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/text-setting-data.ts","../../../../libs/bonnie-cms/src/lib/generated/text-setting-type.ts","../../../../libs/bonnie-cms/src/lib/generated/index.ts","../../../../libs/bonnie-cms/src/lib/media-uploader/media-uploader.component.ts","../../../../libs/bonnie-cms/src/lib/media-uploader/media-uploader.component.html","../../../../libs/bonnie-cms/src/lib/services/API_BASE_URL.ts","../../../../libs/bonnie-cms/src/lib/services/admin-data.service.ts","../../../../libs/bonnie-cms/src/lib/services/data.service.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor-anchor.directive.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.html","../../../../libs/bonnie-cms/src/lib/skeleton-editor/ContentPreset.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor.component.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor.component.html","../../../../libs/bonnie-cms/src/candy-kingdom-bonnie-cms.ts"],"sourcesContent":["export enum DeviceType {\n\tNotSet = 0,\n\tMobile = 1,\n\tTablet = 2,\n\tDesktop = 3,\n}\n","export enum DeviceVisibility {\n\tNone = 0,\n\tDesktop = 1,\n\tTablet = 2,\n\tMobile = 4,\n\tAll = Desktop | Tablet | Mobile,\n}\n","export enum TextEditorField {\n\tNotSet = 0,\n\tInput = 1,\n\tTextarea = 2,\n}\n","// tslint:disable-next-line: max-line-length\nexport const regExpIsMobile = new RegExp(\n\t/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/,\n\t\"i\",\n);\n\nexport function isLocalUrlString(url: string): boolean {\n\tif (url === undefined || url === null || url.trim().length === 0) {\n\t\treturn true;\n\t}\n\n\tif (url.startsWith(\"//\")) {\n\t\treturn false;\n\t}\n\n\tif (url.startsWith(\"./\") || url.startsWith(\"/\")) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function hasFlag<T extends number>(value: T, flag: T): boolean {\n\treturn (value & flag) === flag;\n}\n\nexport function setOrRemoveFlag<T extends number>(value: T, flag: T, enabled: boolean): T {\n\treturn (enabled ? value | flag : value & ~flag) as T;\n}\n","import { Component, input } from \"@angular/core\";\n\nimport { DeviceType } from \"../core\";\nimport type { EditableGroupComponent } from \"../core-components\";\n\n@Component({\n\tselector: \"bonc-admin-controls\",\n\n\ttemplateUrl: \"./admin-controls.component.html\",\n\tstyleUrl: \"./admin-controls.component.scss\",\n})\nexport class AdminControlsComponent {\n\tpublic readonly DeviceType = DeviceType;\n\n\tpublic readonly editableGroup = input.required<EditableGroupComponent>();\n\n\tpublic readonly deviceControls = input(false);\n\n\tpublic locale = \"en\";\n\tpublic device = this.DeviceType.Desktop;\n\n\tpublic changeLocale(): void {\n\t\tthis.locale = this.locale === \"en\" ? \"ru\" : \"en\"; // move locales to CMS config\n\t}\n\n\tpublic changeDevice(): void {\n\t\tswitch (this.device) {\n\t\t\tcase DeviceType.Desktop:\n\t\t\t\tthis.device = DeviceType.Tablet;\n\t\t\t\treturn;\n\n\t\t\tcase DeviceType.Tablet:\n\t\t\t\tthis.device = DeviceType.Mobile;\n\t\t\t\treturn;\n\n\t\t\tcase DeviceType.Mobile:\n\t\t\t\tthis.device = DeviceType.Desktop;\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\tthis.device = DeviceType.Desktop;\n\t\t\t\treturn;\n\t\t}\n\t}\n}\n","<div class=\"page-controls\">\n <a (click)=\"changeLocale()\" class=\"locale\">Locale: {{locale}}</a>\n\n <!-- todo: return this functionality -->\n <!-- <a *ngIf=\"deviceControls\" (click)=\"changeDevice()\" class=\"device\">\n <span *ngIf=\"device === DeviceType.Desktop\">DESKTOP</span>\n <span *ngIf=\"device === DeviceType.Tablet\">TABLET</span>\n <span *ngIf=\"device === DeviceType.Mobile\">MOBILE</span>\n </a> -->\n\n @if (editableGroup() && editableGroup().inEditMode()) {\n <a (click)=\"editableGroup().saveAll()\"\n class=\"save\">Save all</a>\n\n <a (click)=\"editableGroup().cancelAll()\"\n class=\"cancel\">Cancel all</a>\n }\n</div>\n","import {\n\tComponent,\n\tcomputed,\n\teffect,\n\tHostBinding,\n\tinput,\n\tmodel,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\nimport type { ContentPreset } from \"../skeleton-editor/ContentPreset\";\nimport type { IBoneEditor } from \"../skeleton-editor/IBoneEditor\";\n\n@Component({ template: \"\" })\nexport abstract class BoneEditorBaseComponent<TBone extends Bone> implements IBoneEditor<TBone> {\n\tpublic readonly editing = output<boolean>();\n\tpublic readonly saved = output<Bone>();\n\tpublic readonly removed = output<void>();\n\n\tpublic readonly boneEtalon = model.required<TBone>();\n\n\tpublic readonly locale = input.required<string>();\n\tpublic readonly device = input<DeviceType>(DeviceType.NotSet);\n\n\tprivate readonly _presets = signal<ContentPreset<TBone>[]>([]);\n\tpublic readonly presets = this._presets.asReadonly();\n\n\tprivate readonly _currentPreset = signal<ContentPreset<TBone> | undefined>(undefined);\n\tpublic readonly currentPreset = this._currentPreset.asReadonly();\n\n\tprivate readonly _isDirty = signal(false);\n\tpublic readonly isDirty = this._isDirty.asReadonly();\n\n\tprivate readonly _isEditing = signal(false);\n\tpublic readonly isEditing = this._isEditing.asReadonly();\n\n\tpublic readonly noPresets = computed(() => this.presets().length === 0);\n\n\t// effect gonna fix this undefined value\n\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\tprotected readonly bone = signal<TBone>(undefined!);\n\n\tprivate _storedBoneJson = \"\";\n\n\tpublic abstract onReset(): void;\n\tpublic abstract onFinishEditing(): void;\n\n\tprotected abstract getPresets(): ContentPreset<TBone>[];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst newData = this.boneEtalon();\n\t\t\tthis._isDirty.set(false);\n\t\t\tthis._storedBoneJson = JSON.stringify(newData);\n\t\t\tthis.bone.set(JSON.parse(this._storedBoneJson));\n\t\t\tthis.updatePresetByData();\n\t\t});\n\n\t\tconst presets = this.getPresets();\n\n\t\tif (presets.length === 0) {\n\t\t\tpresets.push({\n\t\t\t\ttitle: \"default\",\n\t\t\t\tisActive: () => true,\n\t\t\t\ttransformer: (bone) => bone,\n\t\t\t\tclean: (bone) => bone,\n\t\t\t});\n\t\t}\n\n\t\t// todo: remove this, use just regular presets\n\t\tthis._presets.set(presets);\n\t}\n\n\t@HostBinding(\"class.mobile\") get isMobile(): boolean {\n\t\treturn this.device() === DeviceType.Mobile;\n\t}\n\n\t@HostBinding(\"class.tablet\") get isTablet(): boolean {\n\t\treturn this.device() === DeviceType.Tablet;\n\t}\n\n\t@HostBinding(\"class.desktop\") get isDesktop(): boolean {\n\t\treturn this.device() === DeviceType.Desktop;\n\t}\n\n\tpublic resetData(): void {\n\t\tthis._isEditing.set(false);\n\n\t\tthis.boneEtalon.set(JSON.parse(this._storedBoneJson));\n\t\tthis.updatePresetByData();\n\n\t\tif (this.onReset !== undefined) {\n\t\t\tthis.onReset();\n\t\t}\n\n\t\tthis.editing.emit(false);\n\t}\n\n\tpublic updateDirty(): void {\n\t\tthis._isDirty.set(JSON.stringify(this.bone()) !== this._storedBoneJson);\n\t}\n\n\tpublic markAsDirty(): void {\n\t\tthis._isDirty.set(true);\n\t}\n\n\tpublic remove(): void {\n\t\tthis.removed.emit();\n\t}\n\n\tpublic save(): void {\n\t\tif (!this.isDirty()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isDirty.set(false);\n\n\t\tthis.finishEditing();\n\n\t\tthis._storedBoneJson = JSON.stringify(this.bone());\n\n\t\tconst clonedData: TBone = JSON.parse(this._storedBoneJson);\n\t\tthis.saved.emit(clonedData);\n\t}\n\n\tpublic startEditing(): void {\n\t\tif (this.isEditing()) {\n\t\t\tthis.updateDirty();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isEditing.set(true);\n\t\tthis.updateDirty();\n\n\t\tthis.editing.emit(true);\n\t}\n\n\tpublic finishEditing(): void {\n\t\tif (this._isDirty()) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Нельзя закрывать редактирование когда есть изменения. Надо сохранить либо зарезетить.\",\n\t\t\t);\n\t\t}\n\n\t\tif (this.onFinishEditing !== undefined) {\n\t\t\tthis.onFinishEditing();\n\t\t}\n\n\t\tthis._isEditing.set(false);\n\t}\n\n\tpublic nextPreset(): void {\n\t\tconst currentPreset = this.currentPreset();\n\t\tconst newIndex = currentPreset === undefined ? 0 : this.presets().indexOf(currentPreset) + 1;\n\n\t\tthis.applyPresetAtIndex(newIndex);\n\t}\n\n\tprivate readonly applyPresetAtIndex = (newIndex: number): void => {\n\t\tnewIndex = newIndex < 0 ? 0 : newIndex % this.presets().length;\n\n\t\tconst currentPreset = this.currentPreset();\n\n\t\tconst currentIndex = currentPreset === undefined ? -1 : this.presets().indexOf(currentPreset);\n\t\tif (currentIndex === newIndex) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newPreset = this.presets()[newIndex];\n\n\t\tthis._currentPreset.set(newPreset);\n\t\tnewPreset.transformer(this.bone());\n\n\t\tthis.updateDirty();\n\t};\n\n\tprivate readonly updatePresetByData = (): void => {\n\t\tconst countOfActive = this.presets()\n\t\t\t.map((p) => p.isActive(this.bone()))\n\t\t\t.filter((p) => p).length;\n\n\t\tif (countOfActive !== 1) {\n\t\t\tthrow new Error(\n\t\t\t\t`active preset count should be equal 1, but it was: ${countOfActive}. ${this.constructor.name}`,\n\t\t\t);\n\t\t}\n\n\t\tfor (let i = 0; i < this.presets().length; i++) {\n\t\t\tconst preset = this.presets()[i];\n\n\t\t\tif (preset.isActive(this.bone())) {\n\t\t\t\tthis.applyPresetAtIndex(i);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n}\n","import { JsonPipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport type { ContentPreset } from \"../../skeleton-editor/ContentPreset\";\nimport { BoneEditorBaseComponent } from \"../bone-editor-base.component\";\n\n@Component({\n\tselector: \"bonc-unknown-bone-editor\",\n\n\timports: [JsonPipe],\n\ttemplateUrl: \"./unknown-bone-editor.component.html\",\n\tstyleUrl: \"./unknown-bone-editor.component.scss\",\n})\nexport class UnknownBoneEditorComponent extends BoneEditorBaseComponent<Bone> {\n\tpublic onFinishEditing(): void {\n\t\t// no-op for unknown bone type\n\t}\n\tpublic onReset(): void {\n\t\t// no-op for unknown bone type\n\t}\n\n\tprotected getPresets(): ContentPreset<Bone>[] {\n\t\treturn [];\n\t}\n}\n","<p>Unknown Bone Editor | bone type: {{bone().type}}</p>\n<pre>{{bone() | json}}</pre>\n","import { Directive, forwardRef, output, signal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Directive({\n\tselector: \"[boncEditable]\",\n\tproviders: [\n\t\t{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EditableDirective), multi: true },\n\t],\n})\nexport class EditableDirective<T = unknown> {\n\tpublic readonly saved = output<T>();\n\tpublic readonly editModeChange = output<boolean>();\n\tpublic readonly externalSaveCall = output<void>();\n\tpublic readonly canceled = output<void>();\n\tpublic readonly valueChange = output<T | undefined>();\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate propagateChange: (newValue: T) => void = () => {};\n\n\tprivate readonly _inEditMode = signal(false);\n\tpublic readonly inEditMode = this._inEditMode.asReadonly();\n\n\tprivate readonly _isDirty = signal(false);\n\tpublic readonly isDirty = this._isDirty.asReadonly();\n\n\tprivate _value?: T;\n\tprivate _originalValue?: T;\n\tprivate _storedData?: string;\n\n\tpublic requestSave() {\n\t\tthis.externalSaveCall.emit();\n\t}\n\n\tpublic startEditing = (): void => {\n\t\tif (this.inEditMode()) {\n\t\t\tthis.updateDirty();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._inEditMode.set(true);\n\t\tthis.updateDirty();\n\t\tthis.editModeChange.emit(true);\n\t};\n\n\tpublic save(newData?: T): void {\n\t\tif (!this.inEditMode()) {\n\t\t\tconsole.warn(\"save before edit mode\"); //todo: fix that\n\t\t}\n\n\t\tthis.finishEditing();\n\n\t\tconst newUnqieNotEmptyData =\n\t\t\tthis.value === newData || newData === undefined\n\t\t\t\t? JSON.parse(JSON.stringify(this.value))\n\t\t\t\t: newData;\n\n\t\tthis.setOriginal(newUnqieNotEmptyData);\n\t\tthis.updateDirty();\n\n\t\tthis.saved.emit(newUnqieNotEmptyData);\n\n\t\tthis.propagateChange(newUnqieNotEmptyData);\n\t}\n\n\tpublic patchSave(propName: keyof T, newDataParts: T[keyof T]): void {\n\t\tif (this._originalValue === undefined || this._originalValue === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof this._originalValue !== \"object\") {\n\t\t\tconsole.warn(\"patch save called on not object type\");\n\t\t\treturn;\n\t\t}\n\n\t\t(this._originalValue as any)[propName] = newDataParts;\n\n\t\tthis.setOriginal(this._originalValue);\n\n\t\tthis.updateDirty();\n\n\t\tif (!this.isDirty()) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t// change model without opening or closing the editor\n\n\tpublic silentPatch(dict: Partial<T>): void {\n\t\tfor (const key in dict) {\n\t\t\tif (!Object.hasOwn(dict, key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst propVal = dict[key];\n\n\t\t\tif (this._value !== undefined && this._value !== null) {\n\t\t\t\tthis._value[key] = propVal as any;\n\t\t\t}\n\n\t\t\tif (this._originalValue !== undefined && this._originalValue !== null) {\n\t\t\t\tthis._originalValue[key] = propVal as any;\n\t\t\t}\n\t\t}\n\t\tthis._storedData = JSON.stringify(this._originalValue);\n\t}\n\n\tpublic cancel(): void {\n\t\tif (!this.inEditMode()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.finishEditing();\n\n\t\t// reset value\n\t\tthis.setValue(this._originalValue);\n\n\t\tthis.canceled.emit();\n\t}\n\n\tpublic close(): void {\n\t\tthis.finishEditing();\n\t}\n\n\tprivate finishEditing(): void {\n\t\tif (!this.inEditMode()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._inEditMode.set(false);\n\t\tthis.editModeChange.emit(false);\n\t}\n\n\tprivate setValue(newValue?: T): void {\n\t\tthis._value =\n\t\t\tnewValue === null || newValue === undefined\n\t\t\t\t? undefined\n\t\t\t\t: JSON.parse(JSON.stringify(newValue));\n\n\t\tthis.valueChange.emit(this._value);\n\t}\n\n\tpublic set value(newValue: T | undefined) {\n\t\tthis.setValue(newValue);\n\t}\n\n\tpublic get value(): T | undefined {\n\t\treturn this._value;\n\t}\n\n\tpublic updateDirty(): void {\n\t\tthis._isDirty.set(JSON.stringify(this._value) !== this._storedData);\n\t}\n\n\tpublic markAsDirty(): void {\n\t\tthis._isDirty.set(true);\n\t}\n\n\tprivate setOriginal(newOriginalValue: T) {\n\t\tthis._originalValue = newOriginalValue;\n\t\tthis._storedData = JSON.stringify(newOriginalValue);\n\t}\n\n\t// #region ngModel\n\n\twriteValue(newValue: T): void {\n\t\tthis.finishEditing();\n\n\t\tthis.setOriginal(newValue);\n\t\tthis._isDirty.set(false);\n\n\t\tthis.setValue(newValue);\n\t}\n\n\tsetDisabledState?(): void {\n\t\t// required by ControlValueAccessor\n\t}\n\n\tregisterOnChange(tellAngularThatSomethingIsChanged: (newValue: T) => void): void {\n\t\tthis.propagateChange = (newValue: T): void => {\n\t\t\ttellAngularThatSomethingIsChanged(newValue);\n\t\t};\n\t}\n\n\tregisterOnTouched(): void {\n\t\t// required by ControlValueAccessor\n\t}\n\n\t// #endregion\n}\n","import {\n\tComponent,\n\tcontentChildren,\n\tDestroyRef,\n\teffect,\n\tinject,\n\toutput,\n\tsignal,\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\n\nimport { debounceTime, Subject, type Unsubscribable } from \"rxjs\";\n\nimport { EditableDirective } from \"./editable.directive\";\n\n@Component({\n\tselector: \"bonc-editable-group\",\n\ttemplate: \"<ng-content></ng-content>\",\n})\nexport class EditableGroupComponent {\n\tpublic readonly editModeChange = output<boolean>();\n\tpublic readonly saved = output<void>();\n\tpublic readonly requestEditorClose = output<boolean>();\n\n\tpublic readonly editables = contentChildren(EditableDirective, { descendants: true });\n\n\tprivate readonly _subscriptions: Unsubscribable[] = [];\n\tpublic readonly inEditMode = signal(false);\n\n\tprivate readonly _saveSubject = new Subject<void>(); // todo: use signal\n\n\tconstructor() {\n\t\tconst saveSubscription = this._saveSubject\n\t\t\t.asObservable()\n\t\t\t.pipe(debounceTime(100), takeUntilDestroyed())\n\t\t\t.subscribe(() => this.saved.emit(undefined));\n\n\t\teffect(() => {\n\t\t\tthis.clearSubscriptions();\n\t\t\tthis.updateSubscriptions();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tsaveSubscription.unsubscribe();\n\t\t\tthis.clearSubscriptions();\n\t\t});\n\t}\n\n\tpublic saveAll(): void {\n\t\tthis.editables().forEach((x) => x.requestSave());\n\t}\n\n\tpublic cancelAll(): void {\n\t\tthis.editables().forEach((x) => x.cancel());\n\t}\n\n\tpublic closeAll(): void {\n\t\tthis.requestEditorClose.emit(true);\n\t\tthis.editables().forEach((x) => x.close());\n\t}\n\n\tprivate clearSubscriptions(): void {\n\t\tthis._subscriptions.forEach((x) => x.unsubscribe());\n\t\tthis._subscriptions.splice(0, this._subscriptions.length);\n\t}\n\n\tprivate updateSubscriptions(): void {\n\t\tthis.editables().forEach((editable) => {\n\t\t\tthis._subscriptions.push(\n\t\t\t\teditable.saved.subscribe(this.onSave.bind(this)),\n\t\t\t\teditable.editModeChange.subscribe(this.updateEditMode.bind(this)),\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate onSave(): void {\n\t\tthis._saveSubject.next();\n\t}\n\n\tprivate updateEditMode(): void {\n\t\tconst newEditMode = this.editables().filter((x) => x.inEditMode()).length > 0;\n\n\t\tif (newEditMode === this.inEditMode()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.inEditMode.set(newEditMode);\n\n\t\tthis.editModeChange.emit(newEditMode);\n\t}\n}\n","import { Component, inject, input } from \"@angular/core\";\n\nimport { EditableDirective } from \"./editable.directive\";\n\n@Component({\n\ttemplate: \"\",\n})\nexport abstract class FormBaseComponent<TData = unknown> {\n\tprotected name = \"\";\n\n\tpublic readonly editable = inject(EditableDirective<TData>, { host: true });\n\n\tpublic readonly locale = input(\"\");\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\n\n@Component({\n\tselector: \"bonc-translation-input\",\n\n\timports: [FormsModule],\n\ttemplateUrl: \"./translation-input.component.html\",\n\tstyleUrl: \"./translation-input.component.scss\",\n})\nexport class TranslationInputComponent {\n\tpublic readonly text = input.required<LocalizedString>();\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly device = input<DeviceType>(DeviceType.NotSet);\n\n\tpublic readonly startEditing = output<void>();\n\tpublic readonly changed = output<void>();\n\tpublic readonly blurred = output<void>();\n\n\tpublic onClick() {\n\t\tthis.startEditing.emit();\n\t}\n\n\tpublic onKeyPress() {\n\t\tthis.changed.emit();\n\t}\n\n\tpublic onBlur() {\n\t\tthis.blurred.emit();\n\t}\n}\n","<input [(ngModel)]=\"text()[locale()]\"\n (click)=\"onClick()\"\n (keyup)=\"onKeyPress()\"\n (blur)=\"onBlur()\" />\n","import { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, effect, input, output, viewChildren } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\n\n@Component({\n\tselector: \"bonc-translation-textarea\",\n\n\timports: [FormsModule, CdkTextareaAutosize],\n\ttemplateUrl: \"./translation-textarea.component.html\",\n\tstyleUrl: \"./translation-textarea.component.scss\",\n})\nexport class TranslationTextareaComponent {\n\tpublic readonly autosizeList = viewChildren(CdkTextareaAutosize);\n\n\tpublic readonly text = input.required<LocalizedString>();\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly minRows = input<number>();\n\tpublic readonly maxRows = input<number>();\n\tpublic readonly device = input<DeviceType>(DeviceType.NotSet);\n\n\tpublic readonly startEditing = output<void>();\n\tpublic readonly changed = output<void>();\n\tpublic readonly blurred = output<void>();\n\n\tconstructor() {\n\t\t// todo: check if it still necessary\n\t\teffect((onCleanup) => {\n\t\t\tthis.text();\n\t\t\tthis.locale();\n\t\t\tthis.minRows();\n\t\t\tthis.maxRows();\n\t\t\tconst timer = setTimeout(() => this.triggerResize(), 500);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic onClick() {\n\t\tthis.startEditing.emit();\n\t}\n\n\tpublic onKeyPress() {\n\t\tthis.changed.emit();\n\t}\n\n\tpublic onBlur() {\n\t\tthis.blurred.emit();\n\t}\n\n\tprivate triggerResize() {\n\t\tthis.autosizeList().forEach((x) => x.resizeToFitContent(true));\n\t}\n}\n","<textarea [(ngModel)]=\"text()[locale()]\"\n [cdkAutosizeMinRows]=\"minRows()\"\n [cdkAutosizeMaxRows]=\"maxRows()\"\n (click)=\"onClick()\"\n (keyup)=\"onKeyPress()\"\n (blur)=\"onBlur()\"\n matInput\n cdkTextareaAutosize>\n</textarea>\n","import { Component, input, output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { TextEditorField } from \"../../core\";\nimport { TranslationInputComponent } from \"../../translation-input/translation-input.component\";\nimport { TranslationTextareaComponent } from \"../../translation-textarea/translation-textarea.component\";\n\n@Component({\n\tselector: \"bonc-link-popup\",\n\n\timports: [FormsModule, TranslationInputComponent, TranslationTextareaComponent],\n\ttemplateUrl: \"./link-popup.component.html\",\n\tstyleUrl: \"./link-popup.component.scss\",\n})\nexport class LinkPopupComponent {\n\tpublic readonly TextEditorField = TextEditorField;\n\tpublic readonly LinkPopupField = TextEditorField;\n\n\tpublic readonly linkChange = output<LocalizedString>();\n\n\tpublic readonly startEditing = output<void>();\n\n\tpublic readonly changed = output<void>();\n\n\tpublic readonly blurred = output<void>();\n\n\tpublic readonly open = output<void>();\n\n\tpublic readonly closed = output<void>();\n\n\tpublic readonly field = input.required<TextEditorField>();\n\n\tpublic readonly maxRows = input<number>();\n\n\tpublic readonly minRows = input<number>();\n\n\tpublic readonly linkTitle = input.required<LocalizedString>();\n\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly link = input.required<LocalizedString>();\n\n\tpublic popupIsShown = false;\n\n\tpublic onClick() {\n\t\tthis.startEditing.emit();\n\t}\n\n\tpublic onChange() {\n\t\tthis.changed.emit();\n\t}\n\n\tpublic onBlur() {\n\t\tthis.blurred.emit();\n\t}\n\n\tpublic showPopup(): void {\n\t\tthis.popupIsShown = true;\n\t\tthis.open.emit();\n\t}\n\n\tpublic hidePopup(): void {\n\t\tthis.popupIsShown = false;\n\t\tthis.closed.emit();\n\t}\n}\n","@switch (field()) {\n @case (TextEditorField.Input) {\n <bonc-translation-input (click)=\"showPopup()\"\n [text]=\"linkTitle()\"\n [locale]=\"locale()\"\n (startEditing)=\"onClick()\"\n (changed)=\"onChange()\"\n (blurred)=\"onBlur()\">\n </bonc-translation-input>\n }\n @case (TextEditorField.Textarea) {\n <bonc-translation-textarea (click)=\"showPopup()\"\n [text]=\"linkTitle()\"\n [locale]=\"locale()\"\n [minRows]=\"minRows()\"\n [maxRows]=\"maxRows()\"\n (startEditing)=\"onClick()\"\n (changed)=\"onChange()\"\n (blurred)=\"onBlur()\">\n </bonc-translation-textarea>\n }\n}\n\n@if (popupIsShown) {\n <div>\n <div class=\"popup\">\n <a (click)=\"hidePopup()\" class=\"close\">close</a>\n\n <label>Link\n <input [(ngModel)]=\"link()[locale()]\"\n (click)=\"onClick()\"\n (keyup)=\"onChange()\"\n (blur)=\"onBlur()\">\n </label>\n\n </div>\n </div>\n}\n","import { DecimalPipe } from \"@angular/common\";\nimport { HttpClient, type HttpEvent, HttpEventType, HttpRequest } from \"@angular/common/http\";\nimport {\n\tComponent,\n\tcomputed,\n\ttype ElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\nimport { DomSanitizer, type SafeStyle } from \"@angular/platform-browser\";\n\nimport { catchError, last, map, Observable } from \"rxjs\";\n\nimport type { FileMeta, FileSrc } from \"@candy-kingdom/bonnie\";\n\n@Component({\n\tselector: \"bonc-file-uploader\",\n\n\timports: [DecimalPipe],\n\ttemplateUrl: \"./file-uploader.component.html\",\n\tstyleUrl: \"./file-uploader.component.scss\",\n})\nexport class FileUploaderComponent {\n\tpublic readonly fileInput = viewChild.required<ElementRef<HTMLInputElement>>(\"fileInput\");\n\n\tpublic readonly srcChange = output<FileSrc<FileMeta>>();\n\n\tpublic readonly uploadUrlMap = input.required<ReadonlyMap<string, string>>();\n\n\tpublic readonly src = input<FileSrc<FileMeta> | undefined>();\n\n\tpublic readonly uploadTypes = input<string[]>([]);\n\n\tpublic readonly fileTypeMask = computed(() => {\n\t\tconst types = this.uploadTypes();\n\t\treturn types.length === 0 ? undefined : types.join(\",\");\n\t});\n\n\tpublic readonly progress = signal(0);\n\tpublic readonly isUploading = signal(false);\n\tpublic readonly clipStyle = signal<SafeStyle | undefined>(undefined);\n\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\tprivate readonly http = inject(HttpClient);\n\n\tpublic onFileSelect(fileInput: HTMLInputElement) {\n\t\tif (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = fileInput.files[0];\n\n\t\tconst uploadUrl = this.uploadUrlMap().get(file.type) ?? this.uploadUrlMap().get(\"\");\n\n\t\tif (uploadUrl === undefined || uploadUrl === null) {\n\t\t\tconsole.error(`upload map doesn't have url for type '${file.type}'`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst formData: FormData = new FormData();\n\n\t\tformData.append(\"file\", file);\n\n\t\tthis.progress.set(0);\n\t\tthis.isUploading.set(true);\n\n\t\tthis.updateClip();\n\n\t\tconst request = new HttpRequest(\"POST\", uploadUrl, formData, {\n\t\t\treportProgress: true,\n\t\t});\n\n\t\tthis.http\n\t\t\t.request<FileSrc<FileMeta>>(request)\n\t\t\t.pipe(\n\t\t\t\tmap((event) => this.getEventMessage(event)),\n\t\t\t\t// tap(message => this.showProgress(message)),\n\t\t\t\tlast(), // return last (completed) message to caller\n\t\t\t\tcatchError(this.handleError(file)),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.isUploading.set(false);\n\t\t\t});\n\t}\n\n\tpublic selectFile(event: Event): void {\n\t\tif (event.target === this.fileInput().nativeElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fileInput().nativeElement.click();\n\t}\n\n\tprivate getEventMessage(event: HttpEvent<FileSrc<FileMeta>>): void {\n\t\tswitch (event.type) {\n\t\t\tcase HttpEventType.Sent:\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.UploadProgress:\n\t\t\t\tthis.progress.set(event.total === undefined ? 0.5 : event.loaded / event.total);\n\t\t\t\tthis.updateClip();\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.Response:\n\t\t\t\tif (event.body === null || event.body === undefined) {\n\t\t\t\t\tconsole.warn(\"empty body from uploader\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.srcChange.emit(event.body);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate updateClip(): void {\n\t\tthis.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle(\"inset(0px 100% 0px 0%)\"));\n\t}\n\n\tprivate handleError(file: File): (p1: unknown, p2: Observable<unknown>) => Observable<unknown> {\n\t\tconst func = (error: unknown, p2: Observable<unknown>): Observable<unknown> => {\n\t\t\tconst message = `error uploadingFile ${file.name}.`;\n\t\t\tconsole.error(message, error, p2);\n\t\t\talert(message);\n\t\t\treturn new Observable<unknown>();\n\t\t};\n\n\t\treturn func;\n\t}\n}\n","@if (src() === undefined || src()?.url === undefined || src()?.url?.length === 0) {\n <div>Upload file</div>\n}\n\n<ng-content></ng-content>\n\n<div (click)=\"selectFile($event)\" (keydown.enter)=\"selectFile($event)\" role=\"button\" tabindex=\"0\" class=\"media-container\">\n <input #fileInput [accept]=\"fileTypeMask()\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\n @if (isUploading()) {\n <span [style.clip-path]=\"clipStyle()\"\n [style.-webkit-clip-path]=\"clipStyle()\"\n class=\"loader\"></span>\n <span class=\"loader-text\">\n @if (progress() < 1) {\n <span>{{100 * progress() | number: '1.0-0'}}%</span>\n } @else {\n <span>converting</span>\n }\n </span>\n }\n</div>\n","import { Component, input } from \"@angular/core\";\n\nimport type { EditableDirective } from \"../core-components\";\n\n@Component({\n\tselector: \"bonc-form-controls\",\n\n\ttemplateUrl: \"./form-controls.component.html\",\n\tstyleUrl: \"./form-controls.component.scss\",\n})\nexport class FormControlsComponent {\n\tpublic readonly editable = input.required<EditableDirective<any>>();\n}\n","<div [class.edit]=\"editable().inEditMode()\" class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<div [class.hidden]=\"!editable().inEditMode()\" class=\"controls\">\n @if (!editable().isDirty()) {\n <a (click)=\"editable().cancel()\" class=\"close\">close</a>\n } @else {\n <a (click)=\"editable().cancel()\">reset</a>\n <a (click)=\"editable().requestSave()\" class=\"apply\">apply</a>\n }\n</div>\n","import { Component, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, SvgMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\n@Component({\n\tselector: \"bonc-file-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent],\n\ttemplateUrl: \"./file-form.component.html\",\n\tstyleUrl: \"./file-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class FileFormComponent extends FormBaseComponent<FileSrc<FileMeta>> {\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadTypes = input.required<string[]>();\n\n\tpublic readonly uploadMap = input.required<Map<string, string>>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<SvgMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{ label() }}</label>\n }\n <bonc-file-uploader\n [src]=\"editable.value\"\n [uploadTypes]=\"uploadTypes()\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\"\n >\n @let url = editable.value?.url;\n @if (url) {\n <div>{{ url }}</div>\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n</bonc-form-controls>\n","import { Component, input } from \"@angular/core\";\n\nimport { type AnimationOptions, LottieComponent } from \"ngx-lottie\";\n\nimport type { FileMeta, FileSrc, SvgMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\n@Component({\n\tselector: \"bonc-lottie-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent, LottieComponent],\n\ttemplateUrl: \"./lottie-form.component.html\",\n\tstyleUrl: \"./lottie-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class LottieFormComponent extends FormBaseComponent<FileSrc<FileMeta>> {\n\tpublic readonly LottieMimeType = \"application/json\";\n\n\t// todo: convert to signal\n\tpublic animOptions?: AnimationOptions;\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadMap = input.required<Map<string, string>>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\n\t\tthis.editable.valueChange.subscribe((x) => {\n\t\t\tconst url = x?.url ?? \"\";\n\t\t\tthis.animOptions = url.length === 0 ? undefined : { path: url };\n\t\t});\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<SvgMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{ label() }}</label>\n }\n <bonc-file-uploader\n [src]=\"editable.value\"\n [uploadTypes]=\"[LottieMimeType]\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\"\n >\n @if (animOptions) {\n <ng-lottie [options]=\"animOptions\"></ng-lottie>\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n</bonc-form-controls>\n","import { Component, computed, DestroyRef, inject, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, ImageMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\nconst DefaultImageMimeTypes = [\"image/png\", \"image/jpeg\"];\n\n@Component({\n\tselector: \"bonc-one-image-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent],\n\ttemplateUrl: \"./one-image-form.component.html\",\n\tstyleUrl: \"./one-image-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class OneImageFormComponent extends FormBaseComponent<FileSrc<ImageMeta>> {\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadUrl = input(\"/api/admin/upload/image\");\n\n\tpublic readonly mimeTypes = input(DefaultImageMimeTypes);\n\n\tpublic readonly uploadMap = computed(() => {\n\t\tconst m = new Map<string, string>();\n\t\tm.set(\"\", this.uploadUrl());\n\t\treturn m;\n\t});\n\n\tprivate readonly destroyRef = inject(DestroyRef);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst sub = this.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t\tthis.destroyRef.onDestroy(() => sub.unsubscribe());\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<ImageMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{ label() }}</label>\n }\n <bonc-file-uploader\n [src]=\"editable.value\"\n [uploadTypes]=\"mimeTypes()\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\"\n >\n @let url = editable.value?.url;\n @if (url) {\n <img [src]=\"url\" />\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n</bonc-form-controls>\n","import { Component, computed, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, ImageMeta, OpenGraphData } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective, FormBaseComponent } from \"../../core-components\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\nimport { TranslationInputComponent } from \"../../translation-input/translation-input.component\";\nimport { TranslationTextareaComponent } from \"../../translation-textarea/translation-textarea.component\";\n\nconst defaultUploadMap = new Map<string, string>();\ndefaultUploadMap.set(\"\", `/api/admin/upload/image?width=${1200}&height=${630}&format=image/jpeg`);\n\n@Component({\n\tselector: \"bonc-seo-form\",\n\n\timports: [\n\t\tFormControlsComponent,\n\t\tTranslationInputComponent,\n\t\tTranslationTextareaComponent,\n\t\tFileUploaderComponent,\n\t],\n\ttemplateUrl: \"./seo-form.component.html\",\n\tstyleUrl: \"./seo-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class SeoFormComponent extends FormBaseComponent<OpenGraphData> {\n\tpublic readonly uploadMap = defaultUploadMap;\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly pageId = input(\"\");\n\n\tpublic readonly ogImageUploadUrl = computed(\n\t\t() => `/api/admin/page/Og-Image?pageId=${this.pageId()}`,\n\t);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic ResToSrc(res: { url: string }): string {\n\t\treturn res.url;\n\t}\n\n\tpublic replaceImage($event: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tif (this.editable.value !== undefined) {\n\t\t\tthis.editable.value.image[this.locale()] = $event as FileSrc<ImageMeta>;\n\t\t}\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","@if (editable.value !== undefined && editable.value !== null) {\n <bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <h2>{{label()}}</h2>\n }\n\n <div class=\"form-group\">\n <label>Title</label>\n <bonc-translation-input [text]=\"editable.value.title\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-input>\n </div>\n\n <div class=\"form-group\">\n <label>Description</label>\n <bonc-translation-textarea [text]=\"editable.value.description\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Share image | 1200x630</label>\n\n <bonc-file-uploader [src]=\"editable.value.image[locale()]\"\n [uploadTypes]=\"['image/png', 'image/jpeg']\"\n [uploadUrlMap]=\"uploadMap\"\n (srcChange)=\"replaceImage($event)\">\n @let imageUrl = editable.value.image[locale()]?.url;\n @if (imageUrl) {\n <img [src]=\"imageUrl\" />\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value.image[locale()]?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n </div>\n\n </bonc-form-controls>\n} @else {\n <div>Editable Value canot be null or undefined</div>\n}\n","import { Component, computed, input } from \"@angular/core\";\n\nimport type { FileMeta, FileSrc, SvgMeta } from \"@candy-kingdom/bonnie\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FileUploaderComponent } from \"../../file-uploader/file-uploader.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\n\n@Component({\n\tselector: \"bonc-svg-form\",\n\n\timports: [FormControlsComponent, FileUploaderComponent],\n\ttemplateUrl: \"./svg-form.component.html\",\n\tstyleUrl: \"./svg-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class SvgFormComponent extends FormBaseComponent<FileSrc<SvgMeta>> {\n\tpublic readonly SvgMime = \"image/svg+xml\";\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly uploadUrl = input(\"/api/admin/upload/image/svg\");\n\n\tpublic readonly uploadMap = computed(() => {\n\t\tconst m = new Map<string, string>();\n\t\tm.set(this.SvgMime, this.uploadUrl());\n\t\treturn m;\n\t});\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic onFileUploaded(fileSrc: FileSrc<FileMeta>): void {\n\t\tthis.editable.startEditing();\n\n\t\tconst svgSrc = fileSrc as FileSrc<SvgMeta>;\n\n\t\tthis.editable.value = svgSrc;\n\n\t\tthis.editable.updateDirty();\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{label()}}</label>\n }\n <bonc-file-uploader [src]=\"editable.value\"\n [uploadTypes]=\"[SvgMime]\"\n [uploadUrlMap]=\"uploadMap()\"\n (srcChange)=\"onFileUploaded($event)\">\n @let url = editable.value?.url;\n @if (url) {\n <img [src]=\"url\" alt=\"\" />\n }\n </bonc-file-uploader>\n\n @let downloadUrl = editable.value?.url;\n @if (downloadUrl) {\n <a [href]=\"downloadUrl\" download target=\"_blank\">Download</a>\n }\n\n</bonc-form-controls>\n","export enum TextInputStyle {\n\tNotSet = 0,\n\tSingleLine = 1,\n\tMultiLine = 2,\n}\n","import { Component, input } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { EditableDirective } from \"../../core-components\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\nimport { TextInputStyle } from \"./TextInputStyle\";\n\n@Component({\n\tselector: \"bonc-text-form\",\n\n\timports: [FormsModule, FormControlsComponent],\n\ttemplateUrl: \"./text-form.component.html\",\n\tstyleUrl: \"./text-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class TextFormComponent extends FormBaseComponent<string> {\n\tpublic readonly TextInputStyle = TextInputStyle;\n\n\tpublic readonly label = input(\"\");\n\n\tpublic readonly type = input(TextInputStyle.SingleLine);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n}\n","<bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{label()}}</label>\n }\n @if (editable) {\n @switch (type()) {\n @case (TextInputStyle.SingleLine) {\n <input [(ngModel)]=\"editable.value\"\n [attr.aria-label]=\"label()\"\n (click)=\"editable.startEditing()\"\n (keyup)=\"editable.updateDirty()\"\n (blur)=\"editable.updateDirty()\" />\n }\n @case (TextInputStyle.MultiLine) {\n <textarea [(ngModel)]=\"editable.value\"\n [attr.aria-label]=\"label()\"\n (click)=\"editable.startEditing()\"\n (keyup)=\"editable.updateDirty()\"\n (blur)=\"editable.updateDirty()\">\n </textarea>\n }\n }\n }\n</bonc-form-controls>\n","import { Component, input } from \"@angular/core\";\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport { TextEditorField } from \"../../core\";\nimport { EditableDirective, FormBaseComponent } from \"../../core-components\";\nimport { FormControlsComponent } from \"../../form-controls/form-controls.component\";\nimport { TranslationInputComponent } from \"../../translation-input/translation-input.component\";\nimport { TranslationTextareaComponent } from \"../../translation-textarea/translation-textarea.component\";\n\n@Component({\n\tselector: \"bonc-translation-form\",\n\n\timports: [FormControlsComponent, TranslationInputComponent, TranslationTextareaComponent],\n\ttemplateUrl: \"./translation-form.component.html\",\n\tstyleUrl: \"./translation-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class TranslationFormComponent extends FormBaseComponent<LocalizedString> {\n\tpublic readonly TextEditorField = TextEditorField;\n\n\tpublic readonly field = input.required<TextEditorField>();\n\n\tpublic readonly label = input<string | undefined>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n}\n","@if (editable.value) {\n <bonc-form-controls [editable]=\"editable\">\n @if (label()) {\n <label>{{label()}}</label>\n }\n\n @switch (field()) {\n @case (TextEditorField.Input) {\n <bonc-translation-input [text]=\"editable.value\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-input>\n }\n @case (TextEditorField.Textarea) {\n <bonc-translation-textarea [text]=\"editable.value\"\n [minRows]=\"2\"\n [locale]=\"locale()\"\n (startEditing)=\"editable.startEditing()\"\n (changed)=\"editable.updateDirty()\"\n (blurred)=\"editable.updateDirty()\">\n </bonc-translation-textarea>\n }\n }\n </bonc-form-controls>\n} @else {\n <div>Editable value canot be undefined</div>\n}\n","import { Component, input } from \"@angular/core\";\n\nimport { EditableDirective } from \"../../core-components/editable.directive\";\nimport { FormBaseComponent } from \"../../core-components/form-base.component\";\n\n@Component({\n\tselector: \"bonc-unknown-form\",\n\n\ttemplateUrl: \"./unknown-form.component.html\",\n\tstyleUrl: \"./unknown-form.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class UnknownFormComponent extends FormBaseComponent<string> {\n\tpublic readonly label = input(\"\");\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n}\n","<label>Unknown form:<b>{{label()}}</b></label>\n<pre><ng-content></ng-content></pre>\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcFileMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface FileSettingData extends SettingData {\n\tallowedMimeTypes: string[];\n\tsrc: FileSrcFileMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport type IEquatable<_T> = {};\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface ISetting<T extends SettingData> {\n\tid: string;\n\ttitle: string;\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { LocalizedString } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\nimport type { TextSettingType } from \"./text-setting-type\";\n\nexport interface LocalizedTextSettingData extends SettingData {\n\ttext: LocalizedString;\n\ttextType: TextSettingType;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcFileMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface LottieSettingData extends SettingData {\n\tsrc: FileSrcFileMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileFormat, FileSrcImageMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface OneImageSettingData extends SettingData {\n\twidth: number;\n\theight: number;\n\tformat: FileFormat;\n\tallowedMimeTypes: string[];\n\tsrc: FileSrcImageMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SettingBase } from \"./setting-base\";\nimport type { SettingData } from \"./setting-data\";\n\nexport interface Setting<T extends SettingData> extends SettingBase {\n\tdata: T;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface SettingBase {\n\tid: string;\n\torder: number;\n\ttitle: string;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport interface SettingData {\n\ttype: string;\n\tempty: SettingData;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { Setting } from \"./setting\";\n\nexport interface SettingGroup {\n\tid: string;\n\torder: number;\n\ttitle: string;\n\trecords: Setting<any>[];\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { FileSrcImageMeta } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"./setting-data\";\n\nexport interface SvgSettingData extends SettingData {\n\tsrc: FileSrcImageMeta;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nimport type { SettingData } from \"./setting-data\";\nimport type { TextSettingType } from \"./text-setting-type\";\n\nexport interface TextSettingData extends SettingData {\n\ttext: string;\n\ttextType: TextSettingType;\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport enum TextSettingType {\n\tSingleLine = 0,\n\tMultiLine = 1,\n}\n","/**\n * This is a TypeGen auto-generated file.\n * Any changes made to this file can be lost when this file is regenerated.\n */\n\nexport * from \"./file-setting-data\";\nexport * from \"./i-equatable\";\nexport * from \"./i-setting\";\nexport * from \"./localized-text-setting-data\";\nexport * from \"./lottie-setting-data\";\nexport * from \"./one-image-setting-data\";\nexport * from \"./setting\";\nexport * from \"./setting-base\";\nexport * from \"./setting-data\";\nexport * from \"./setting-group\";\nexport * from \"./svg-setting-data\";\nexport * from \"./text-setting-data\";\nexport * from \"./text-setting-type\";\n","import { DecimalPipe } from \"@angular/common\";\nimport { HttpClient, type HttpEvent, HttpEventType, HttpRequest } from \"@angular/common/http\";\nimport {\n\tComponent,\n\tcomputed,\n\ttype ElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\nimport { DomSanitizer, type SafeStyle } from \"@angular/platform-browser\";\n\nimport { catchError, last, map, Observable } from \"rxjs\";\n\nimport { MarcyMediaComponent, MediaObjectFit, type PixMediaUnion } from \"@candy-kingdom/bonnie\";\n\nimport type { MediaType } from \"../core\";\n\nconst imageMimeTypes = [\"image/png\", \"image/jpeg\"];\nconst videoMimeTypes = [\"video/mp4\"];\n\nconst imageFileTypes = imageMimeTypes.join(\",\");\nconst videoFileTypes = videoMimeTypes.join(\",\");\n\nconst allMediaFileTypes = `${imageFileTypes},${videoFileTypes}`;\n\n@Component({\n\tselector: \"bonc-media-uploader\",\n\n\timports: [DecimalPipe, MarcyMediaComponent],\n\ttemplateUrl: \"./media-uploader.component.html\",\n\tstyleUrl: \"./media-uploader.component.scss\",\n})\nexport class MediaUploaderComponent {\n\tpublic readonly MediaObjectFit = MediaObjectFit;\n\n\tpublic readonly fileInput = viewChild.required<ElementRef<HTMLInputElement>>(\"fileInput\");\n\n\tpublic readonly srcChange = output<PixMediaUnion>();\n\n\tpublic readonly uploadUrlMap = input.required<ReadonlyMap<MediaType, string>>();\n\n\tpublic readonly forceRatio = input<number>();\n\n\tpublic readonly src = input<PixMediaUnion | undefined>();\n\n\tpublic readonly uploadType = input<MediaType | undefined>();\n\n\tpublic readonly fileTypeMask = computed(() => {\n\t\tswitch (this.uploadType()) {\n\t\t\tcase \"image\":\n\t\t\t\treturn imageFileTypes;\n\t\t\tcase \"video\":\n\t\t\t\treturn videoFileTypes;\n\t\t\tdefault:\n\t\t\t\treturn allMediaFileTypes;\n\t\t}\n\t});\n\n\tpublic readonly progress = signal(0);\n\tpublic readonly isUploading = signal(false);\n\tpublic readonly clipStyle = signal<SafeStyle | undefined>(undefined);\n\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\tprivate readonly http = inject(HttpClient);\n\n\tpublic onFileSelect(fileInput: HTMLInputElement) {\n\t\tif (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = fileInput.files[0];\n\n\t\tlet uploadingMediaType: MediaType;\n\n\t\tconst uploadType = this.uploadType();\n\n\t\tif (uploadType !== undefined && uploadType !== null) {\n\t\t\tuploadingMediaType = uploadType;\n\t\t} else if (imageMimeTypes.includes(file.type)) {\n\t\t\tuploadingMediaType = \"image\";\n\t\t} else if (videoMimeTypes.includes(file.type)) {\n\t\t\tuploadingMediaType = \"video\";\n\t\t} else {\n\t\t\tconsole.error(`unknown media type ${file.type} (${file.name})`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst uploadUrl = this.uploadUrlMap().get(uploadingMediaType);\n\n\t\tif (uploadUrl === undefined || uploadUrl === null) {\n\t\t\tconsole.error(`upload map doesn't have url for type ${uploadingMediaType}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst formData: FormData = new FormData();\n\n\t\tformData.append(\"file\", file);\n\t\tformData.append(\"ratio\", `${this.forceRatio() ?? 0}`);\n\n\t\tthis.progress.set(0);\n\t\tthis.isUploading.set(true);\n\n\t\tthis.updateClip();\n\n\t\tconst request = new HttpRequest(\"POST\", uploadUrl, formData, {\n\t\t\treportProgress: true,\n\t\t});\n\n\t\tthis.http\n\t\t\t.request<PixMediaUnion>(request)\n\t\t\t.pipe(\n\t\t\t\tmap((event) => this.getEventMessage(event)),\n\t\t\t\t// tap(message => this.showProgress(message)),\n\t\t\t\tlast(), // return last (completed) message to caller\n\t\t\t\tcatchError(this.handleError(file)),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.isUploading.set(false);\n\t\t\t});\n\t}\n\n\tpublic selectFile(event: Event): void {\n\t\tif (event.target === this.fileInput().nativeElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fileInput().nativeElement.click();\n\t}\n\n\tprivate getEventMessage(event: HttpEvent<PixMediaUnion>): void {\n\t\tswitch (event.type) {\n\t\t\tcase HttpEventType.Sent:\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.UploadProgress:\n\t\t\t\tthis.progress.set(event.total === undefined ? 0.5 : event.loaded / event.total);\n\t\t\t\tthis.updateClip();\n\t\t\t\tbreak;\n\n\t\t\tcase HttpEventType.Response:\n\t\t\t\tif (event.body === undefined || event.body === null) {\n\t\t\t\t\tconsole.error(\"media deserialization error. Response body in undefined\");\n\t\t\t\t} else {\n\t\t\t\t\t// remove this\n\t\t\t\t\t// needed for C# deserialization\n\t\t\t\t\tconst pixmedia = {\n\t\t\t\t\t\t$type: event.body.type,\n\t\t\t\t\t\t...(event.body as any),\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.srcChange.emit(pixmedia);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate updateClip(): void {\n\t\tthis.clipStyle.set(this.sanitizer.bypassSecurityTrustStyle(\"inset(0px 100% 0px 0%)\"));\n\t}\n\n\tprivate handleError(file: File): (p1: unknown, p2: Observable<unknown>) => Observable<unknown> {\n\t\tconst func = (error: unknown, p2: Observable<unknown>): Observable<unknown> => {\n\t\t\tconst message = `error uploadingFile ${file.name}.`;\n\t\t\tconsole.error(message, error, p2);\n\t\t\talert(message);\n\t\t\treturn new Observable<unknown>();\n\t\t};\n\n\t\treturn func;\n\t}\n}\n","<bon-media [src]=\"src()\" [objectFit]=\"MediaObjectFit.Cover\"></bon-media>\n\n@if (src()?.sources?.length===0) {\n <div>Upload media</div>\n}\n\n<div (click)=\"selectFile($event)\" (keydown.enter)=\"selectFile($event)\" role=\"button\" tabindex=\"0\" class=\"media-container\">\n <input #fileInput [accept]=\"fileTypeMask()\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\n @if (isUploading()) {\n <span [style.clip-path]=\"clipStyle()\"\n [style.-webkit-clip-path]=\"clipStyle()\"\n class=\"loader\"></span>\n <span class=\"loader-text\">\n @if (progress() < 1) {\n <span>{{100 * progress() | number: '1.0-0'}}%</span>\n } @else {\n <span>converting</span>\n }\n </span>\n }\n</div>\n","import { InjectionToken } from \"@angular/core\";\n\nexport const API_BASE_URL = new InjectionToken<string>(\"ApiBaseUrl\");\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\n\nimport type { Observable } from \"rxjs\";\n\nimport type { PageBase } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingBase, SettingGroup } from \"../generated\";\nimport { API_BASE_URL } from \"./API_BASE_URL\";\n\n@Injectable()\nexport class AdminDataService {\n\tprivate readonly _http = inject(HttpClient);\n\tprivate readonly _baseHref = inject(API_BASE_URL);\n\n\tconstructor() {\n\t\tconsole.log(`baseHref: ${this._baseHref}`);\n\t}\n\n\tpublic getSettingGroups(): Observable<SettingGroup[]> {\n\t\tconst pageOb = this._http.get<SettingGroup[]>(`${this._baseHref}api/admin/settings`);\n\t\treturn pageOb;\n\t}\n\n\tpublic getPage(url: string): Observable<SettingGroup[]> {\n\t\tconst pageOb = this._http.get<SettingGroup[]>(`${this._baseHref}api/admin/pages/${url}`);\n\t\treturn pageOb;\n\t}\n\n\tpublic storePage(page: PageBase): Observable<void> {\n\t\tconst ob = this._http.post<void>(`${this._baseHref}api/admin/pages`, page);\n\t\treturn ob;\n\t}\n\n\tpublic updateSettings(settings: SettingBase[]): Observable<void> {\n\t\tconst ob = this._http.post<void>(`${this._baseHref}api/admin/settings`, settings);\n\t\treturn ob;\n\t}\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\n\nimport { combineLatest, map, merge, mergeMap, type Observable, of } from \"rxjs\";\n\nimport type { PageBase, View } from \"@candy-kingdom/bonnie\";\n\nimport type { SettingData } from \"../generated\";\nimport { API_BASE_URL } from \"./API_BASE_URL\";\n\ninterface DataDictionary {\n\t[n: string]: Observable<unknown>;\n}\n\nexport interface SettingDataDict {\n\t[id: string]: SettingData;\n}\n\n@Injectable()\nexport class DataService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseHref = inject(API_BASE_URL);\n\n\tpublic getView(viewCode: string): Observable<Readonly<PageBase>> {\n\t\tconst pageOb = this.getSkeleton<PageBase>(`${this.baseHref}api/views/${viewCode}`);\n\t\treturn pageOb;\n\t}\n\n\tpublic getPage(pageRoute: string): Observable<Readonly<PageBase>> {\n\t\tconst pageUrl = `/${pageRoute}`;\n\n\t\tconst pageOb = this.getSkeleton<PageBase>(\n\t\t\t`${this.baseHref}api/pages/?url=${encodeURIComponent(pageUrl)}`,\n\t\t);\n\t\treturn pageOb;\n\t}\n\n\tpublic getSettings(ids: string[]): Observable<Readonly<SettingDataDict>> {\n\t\tconst pageOb = this.http.get<SettingDataDict>(`${this.baseHref}api/settings`, {\n\t\t\tparams: { ids },\n\t\t});\n\n\t\treturn pageOb;\n\t}\n\n\tprivate getSkeleton<T extends PageBase | View>(url: string): Observable<Readonly<T>> {\n\t\tconst skeletonOb = this.http.get<T>(url);\n\n\t\tconst routeDataObs = skeletonOb.pipe(\n\t\t\tmap((x) => {\n\t\t\t\tconst notEmptyDataRoutes = x.bones\n\t\t\t\t\t.map((b) => (\"dataRoute\" in b && typeof b.dataRoute === \"string\" ? b.dataRoute : \"\"))\n\t\t\t\t\t.filter((x) => x.length > 0);\n\n\t\t\t\tif (notEmptyDataRoutes.length === 0) {\n\t\t\t\t\tconst emptyData: DataDictionary = {};\n\t\t\t\t\treturn { page: of(x), data: of(emptyData) };\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tpage: of(x),\n\t\t\t\t\tdata: combineLatest(\n\t\t\t\t\t\tnotEmptyDataRoutes\n\t\t\t\t\t\t\t.map((dataRoute) => {\n\t\t\t\t\t\t\t\tconst url = `${this.baseHref}api/Pages/Children/?url=${dataRoute}`;\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\troute: dataRoute,\n\t\t\t\t\t\t\t\t\tjson: this.http.get(url),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.reduce((prev, curr) => {\n\t\t\t\t\t\t\t\tprev[curr.route] = curr.json;\n\t\t\t\t\t\t\t\treturn prev;\n\t\t\t\t\t\t\t}, {} as DataDictionary),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}),\n\t\t\tmap((x) => combineLatest(x)),\n\t\t\tmergeMap((res) => merge(res)),\n\t\t\tmap((x) => {\n\t\t\t\tfor (const bone of x.page.bones) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\"dataRoute\" in bone) ||\n\t\t\t\t\t\ttypeof bone.dataRoute !== \"string\" ||\n\t\t\t\t\t\tbone.dataRoute.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst data = x.data[bone.dataRoute];\n\n\t\t\t\t\tif (data === undefined || data === null) {\n\t\t\t\t\t\tthrow new Error(`Data ${bone.dataRoute} have not been preloaded`);\n\t\t\t\t\t}\n\n\t\t\t\t\t(bone as any).data = data; // todo: fix\n\t\t\t\t}\n\n\t\t\t\treturn x.page;\n\t\t\t}),\n\t\t);\n\n\t\treturn routeDataObs;\n\t}\n}\n","import { Directive, inject, ViewContainerRef } from \"@angular/core\";\n\n@Directive({\n\tselector: \"[boncSkeletonEditorAnchor]\",\n})\nexport class SkeletonEditorAnchorDirective {\n\tpublic readonly viewContainerRef = inject(ViewContainerRef);\n}\n","import {\n\tafterNextRender,\n\tComponent,\n\ttype ComponentRef,\n\teffect,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from \"@angular/core\";\n\nimport type { Unsubscribable } from \"rxjs\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport { UnknownBoneEditorComponent } from \"../../bone-editors/unknown-bone-editor/unknown-bone-editor.component\";\nimport { DeviceType } from \"../../core\";\nimport type { BoneEditorMap } from \"../BoneEditorMap\";\nimport type { IBoneEditor } from \"../IBoneEditor\";\nimport { SkeletonEditorAnchorDirective } from \"../skeleton-editor-anchor.directive\";\n\n@Component({\n\tselector: \"bonc-bone-editor-container\",\n\n\timports: [SkeletonEditorAnchorDirective],\n\ttemplateUrl: \"./bone-editor-container.component.html\",\n\tstyleUrl: \"./bone-editor-container.component.scss\",\n})\nexport class BoneEditorContainerComponent {\n\tpublic readonly anchor = viewChild.required(SkeletonEditorAnchorDirective);\n\n\tpublic readonly removed = output<void>();\n\tpublic readonly saved = output<Bone>();\n\tpublic readonly editing = output<boolean>();\n\n\tpublic DeviceType = DeviceType;\n\n\tpublic editor!: IBoneEditor;\n\n\tpublic themePopupIsShown = false;\n\n\tpublic readonly bone = input.required<Bone>();\n\tpublic readonly locale = input.required<string>();\n\tpublic readonly device = input(DeviceType.NotSet);\n\tpublic readonly map = input.required<BoneEditorMap>();\n\n\tprivate boneEditorRef?: ComponentRef<IBoneEditor<Bone>>;\n\tprivate removeSubscription?: Unsubscribable;\n\tprivate saveSubscription?: Unsubscribable;\n\tprivate changedSubscription?: Unsubscribable;\n\n\tprivate readonly viewReady = signal(false);\n\n\tconstructor() {\n\t\tafterNextRender(() => this.viewReady.set(true));\n\n\t\teffect(() => {\n\t\t\tif (!this.viewReady()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newBone = this.bone();\n\t\t\tconst editorMap = this.map();\n\n\t\t\tif (this.removeSubscription) {\n\t\t\t\tthis.removeSubscription.unsubscribe();\n\t\t\t\tthis.removeSubscription = undefined;\n\t\t\t}\n\t\t\tif (this.saveSubscription) {\n\t\t\t\tthis.saveSubscription.unsubscribe();\n\t\t\t\tthis.saveSubscription = undefined;\n\t\t\t}\n\t\t\tif (this.changedSubscription) {\n\t\t\t\tthis.changedSubscription.unsubscribe();\n\t\t\t\tthis.changedSubscription = undefined;\n\t\t\t}\n\n\t\t\tconst viewContainerRef = this.anchor().viewContainerRef;\n\t\t\tviewContainerRef.clear();\n\n\t\t\tconst componentType = editorMap.get(newBone.type) ?? UnknownBoneEditorComponent;\n\t\t\tthis.boneEditorRef = viewContainerRef.createComponent(componentType);\n\n\t\t\tthis.editor = this.boneEditorRef.instance;\n\n\t\t\tthis.boneEditorRef.setInput(\"boneEtalon\", newBone);\n\t\t\tthis.boneEditorRef.setInput(\"locale\", this.locale());\n\t\t\tthis.boneEditorRef.setInput(\"device\", this.device());\n\n\t\t\tthis.removeSubscription = this.editor.removed.subscribe(() => {\n\t\t\t\tthis.removed.emit();\n\t\t\t});\n\t\t\tthis.changedSubscription = this.editor.editing.subscribe((isEditing: boolean) =>\n\t\t\t\tthis.editing.emit(isEditing),\n\t\t\t);\n\t\t\tthis.saveSubscription = this.editor.saved.subscribe((newBoneValue: Bone) =>\n\t\t\t\tthis.saved.emit(newBoneValue),\n\t\t\t);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst locale = this.locale();\n\t\t\tconst device = this.device();\n\t\t\tif (this.boneEditorRef) {\n\t\t\t\tthis.boneEditorRef.setInput(\"locale\", locale);\n\t\t\t\tthis.boneEditorRef.setInput(\"device\", device);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic nextPreset = (): void => {\n\t\tif (this.editor === undefined || this.editor === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editor.nextPreset();\n\t};\n\n\t// todo: add or remove visibility feature\n\n\t// public setDisabled = (disabled: boolean): void => {\n\t// if (this.editor === undefined || this.editor === null)\n\t// return;\n\n\t// this.editor.startEditing();\n\n\t// if (this.device === DeviceType.Desktop)\n\t// this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Desktop, !disabled);\n\t// else if (this.device === DeviceType.Tablet)\n\t// this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Tablet, !disabled);\n\t// else if (this.device === DeviceType.Mobile)\n\t// this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Mobile, !disabled);\n\n\t// this.editor.updateDirty();\n\t// }\n\n\t// todo: use this feature\n\t// its not working now\n\tpublic get disabled(): boolean {\n\t\tif (this.editor === undefined || this.editor === null) {\n\t\t\tconsole.warn(\"editor should have been set before disabled is called\");\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t\t// todo: add or remove visibility feature\n\t\t// const visibility = this.editor.bone.visibility;\n\n\t\t// if (this.device === DeviceType.Desktop && hasFlag(visibility, DeviceVisibility.Desktop))\n\t\t// return false;\n\n\t\t// if (this.device === DeviceType.Tablet && hasFlag(visibility, DeviceVisibility.Tablet))\n\t\t// return false;\n\n\t\t// if (this.device === DeviceType.Mobile && hasFlag(visibility, DeviceVisibility.Mobile))\n\t\t// return false;\n\n\t\t// return true;\n\t}\n}\n","@if (editor) {\n <div class=\"left bar\" [class.inactive]=\"editor.noPresets()\">\n <!-- <a *ngFor=\"let control of editor.controls\" (click)=\"control.activate()\">{{control.label}}</a> -->\n <!-- <a (click)=\"setDisabled(!disabled)\" class=\"disabled\">block {{disabled ? 'disabled' : 'enabled'}} ({{editor.bone.visibility}})</a> -->\n @if (editor.currentPreset() && !editor.noPresets()) {\n <a (click)=\"nextPreset()\" class=\"preset\">style:<br />{{editor.currentPreset()?.title}}</a>\n }\n </div>\n}@else {\n EDITOR COMPONENTS IS NOT DEFINED\n}\n\n<div class=\"editor-container\"\n [class.disabled]=\"disabled\"\n [style.width]=\"\n device() === DeviceType.Desktop ? '75vw'\n : device() === DeviceType.Tablet ? '55vw'\n : device() === DeviceType.Mobile ? '35vw'\n : '75vw' \">\n <ng-template boncSkeletonEditorAnchor>\n </ng-template>\n</div>\n\n@if (editor) {\n <div [class.active]=\"editor.isEditing() || editor.isDirty()\" class=\"right bar\">\n <!-- <a *ngIf=\"!editor.isEditing\" (click)=\"editor.remove()\" class=\"delete\">!!! remove</a> -->\n @if (editor.isDirty()) {\n <a (click)=\"editor.resetData()\" class=\"reset\">reset</a>\n <a (click)=\"editor.save()\" class=\"save\">apply</a>\n } @else if (editor.isEditing()) {\n <a (click)=\"editor.finishEditing()\" class=\"close\">close</a>\n }\n </div>\n}\n","import type { Bone } from \"@candy-kingdom/bonnie\";\n\nexport interface ContentPreset<out TBone extends Bone> {\n\ttitle: string;\n\tisActive(data: TBone): boolean;\n\tclean(data: TBone): void;\n\ttransformer(bone: TBone): void;\n}\n\nexport function createPreset<TBone extends Bone>(params: {\n\ttitle: string;\n\tstyle: string;\n}): ContentPreset<TBone> {\n\treturn {\n\t\ttitle: params.title,\n\t\tisActive: (x) => x.style === params.style,\n\t\ttransformer: (bone) => (bone.style = params.style),\n\t\tclean: (bone) => (bone.style = params.style),\n\t};\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, effect, inject, input, viewChildren } from \"@angular/core\";\n\nimport type { Bone } from \"@candy-kingdom/bonnie\";\n\nimport { DeviceType } from \"../core\";\nimport { EditableDirective } from \"../core-components/editable.directive\";\nimport type { BoneEditorMap } from \"./BoneEditorMap\";\nimport { BoneEditorContainerComponent } from \"./bone-editor-container/bone-editor-container.component\";\nimport type { IBoneTemplate } from \"./IBoneTemplate\";\n\n@Component({\n\tselector: \"bonc-skeleton-editor\",\n\n\timports: [NgTemplateOutlet, BoneEditorContainerComponent],\n\ttemplateUrl: \"./skeleton-editor.component.html\",\n\tstyleUrl: \"./skeleton-editor.component.scss\",\n\thostDirectives: [EditableDirective],\n})\nexport class SkeletonEditorComponent {\n\tpublic readonly boneEditorContainerList =\n\t\tviewChildren<BoneEditorContainerComponent>(\"boneEditorContainer\");\n\n\tpublic readonly locale = input.required<string>();\n\n\tpublic readonly device = input(DeviceType.NotSet);\n\n\tpublic readonly map = input.required<BoneEditorMap>();\n\n\tpublic readonly templates = input.required<readonly IBoneTemplate[]>();\n\n\tpublic readonly templatesAreShown: boolean[] = [];\n\n\tpublic readonly editable = inject(EditableDirective<Bone[]>, { host: true });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.map();\n\t\t\tthis.templates();\n\t\t\tthis.templatesAreShown.splice(0, this.templatesAreShown.length);\n\t\t\tconst bones = this.editable.value ?? [];\n\n\t\t\tif (bones === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbones.forEach(() => this.templatesAreShown.push(false));\n\t\t\tthis.templatesAreShown.push(false);\n\t\t});\n\n\t\tthis.editable.externalSaveCall.subscribe(() => {\n\t\t\tthis.boneEditorContainerList().forEach((editorContainer) => editorContainer.editor?.save());\n\n\t\t\tthis.editable.save();\n\t\t});\n\n\t\tthis.editable.canceled.subscribe(() => {\n\t\t\tthis.boneEditorContainerList().forEach((editorContainer) =>\n\t\t\t\teditorContainer.editor?.resetData(),\n\t\t\t);\n\n\t\t\tthis.editable.save();\n\t\t});\n\t}\n\n\tpublic get bones(): Bone[] {\n\t\treturn this.editable?.value ?? [];\n\t}\n\n\tpublic boneEditHandler(isEditing: boolean): void {\n\t\tif (isEditing) {\n\t\t\tthis.editable.startEditing();\n\t\t} else {\n\t\t\tconst allClosed =\n\t\t\t\tthis.boneEditorContainerList().filter((x) => x.editor?.isEditing).length === 0;\n\n\t\t\tthis.editable.updateDirty();\n\n\t\t\tif (!this.editable.isDirty() && allClosed) {\n\t\t\t\tthis.editable.close();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic boneChangeHandler(index: number, newBoneValue: Bone): void {\n\t\tif (Array.isArray(this.editable.value)) {\n\t\t\tthis.editable.value[index] = newBoneValue;\n\t\t}\n\n\t\tthis.editable.save();\n\t}\n\n\tpublic removeBone(boneIndex: number): void {\n\t\tif (this.bones === undefined || this.bones === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!confirm(\"Вы уверены, что хотите удалить компонент?\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.bones.splice(boneIndex, 1);\n\n\t\tif (!this.editable.inEditMode()) {\n\t\t\tthis.editable.startEditing();\n\t\t}\n\n\t\tthis.editable.save();\n\t}\n\n\tpublic moveDown(boneIndex: number): void {\n\t\tif (boneIndex >= this.bones.length - 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.swapBones(boneIndex, boneIndex + 1);\n\t}\n\n\tpublic moveUp(boneIndex: number): void {\n\t\tif (boneIndex <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.swapBones(boneIndex - 1, boneIndex);\n\t}\n\n\tpublic createBone(index: number, selectedTemplate: IBoneTemplate): void {\n\t\tconst newBone = selectedTemplate.boneFactory();\n\n\t\tthis.bones.splice(index, 0, newBone);\n\t}\n\n\tprivate swapBones(index1: number, index2: number): void {\n\t\tif (index1 < 0 || index2 < 0 || index1 >= this.bones.length || index2 >= this.bones.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`ошибка swapBones. неправильные индексы ${index1} и ${index2}. bone count: ${this.bones.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst tempBone = this.bones[index1];\n\t\tthis.bones[index1] = this.bones[index2];\n\t\tthis.bones[index2] = tempBone;\n\t}\n}\n","<ng-template #controls let-index='index'>\n <div [class.appearable]=\"index > 0 && index < bones.length\" class=\"controls\">\n @if (index < bones.length) {\n <div class=\"up-down\">\n @if (index > 0) {\n <a (click)=\"moveDown(index - 1)\" class=\"down\">move down</a>\n <a (click)=\"moveUp(index)\" class=\"up\">move up</a>\n }\n </div>\n }\n <a (click)=\"templatesAreShown[index] = true\" class=\"add\">create</a>\n @if (index < bones.length) {\n <a (click)=\"removeBone(index)\" class=\"remove\">remove</a>\n }\n </div>\n\n @if (templatesAreShown[index]) {\n <div class=\"templates\">\n @for (template of templates(); track template.title) {\n <a (click)=\"templatesAreShown[index] = false; createBone(index,template);\">{{template.title}}</a>\n }\n <a (click)=\"templatesAreShown[index] = false\">Close</a>\n </div>\n }\n</ng-template>\n\n<!-- todo: add trackby -->\n@for (bone of bones; track $index) {\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controls; context: {index: $index}\"></ng-container>\n </ng-container>\n\n <bonc-bone-editor-container #boneEditorContainer\n [map]=\"map()\"\n [bone]=\"bone\"\n [locale]=\"locale()\"\n [device]=\"device()\"\n (removed)=\"removeBone($index)\"\n (editing)=\"boneEditHandler($event)\"\n (saved)=\"boneChangeHandler($index, $event)\">\n </bonc-bone-editor-container>\n}\n\n<ng-container *ngTemplateOutlet=\"controls; context: {index: bones.length}\"></ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EditableDirective"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -202,8 +202,8 @@ declare abstract class BoneEditorBaseComponent<TBone extends Bone> implements IB
|
|
|
202
202
|
startEditing(): void;
|
|
203
203
|
finishEditing(): void;
|
|
204
204
|
nextPreset(): void;
|
|
205
|
-
private applyPresetAtIndex;
|
|
206
|
-
private updatePresetByData;
|
|
205
|
+
private readonly applyPresetAtIndex;
|
|
206
|
+
private readonly updatePresetByData;
|
|
207
207
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BoneEditorBaseComponent<any>, never>;
|
|
208
208
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BoneEditorBaseComponent<any>, "ng-component", never, { "boneEtalon": { "alias": "boneEtalon"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "device": { "alias": "device"; "required": false; "isSignal": true; }; }, { "editing": "editing"; "saved": "saved"; "removed": "removed"; "boneEtalon": "boneEtalonChange"; }, never, never, true, never>;
|
|
209
209
|
}
|
|
@@ -496,9 +496,9 @@ declare class AdminDataService {
|
|
|
496
496
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AdminDataService>;
|
|
497
497
|
}
|
|
498
498
|
|
|
499
|
-
|
|
499
|
+
interface SettingDataDict {
|
|
500
500
|
[id: string]: SettingData;
|
|
501
|
-
}
|
|
501
|
+
}
|
|
502
502
|
declare class DataService {
|
|
503
503
|
private readonly http;
|
|
504
504
|
private readonly baseHref;
|