@candy-kingdom/bonnie-cms 0.27.2 → 0.27.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,6 @@ import { Subject, debounceTime, map, last, catchError, Observable, of, combineLa
8
8
  import { CdkTextareaAutosize } from '@angular/cdk/text-field';
9
9
  import { HttpClient, HttpRequest, HttpEventType } from '@angular/common/http';
10
10
  import { DomSanitizer } from '@angular/platform-browser';
11
- import { LottieComponent } from 'ngx-lottie';
12
11
  import { MediaObjectFit, MarcyMediaComponent } from '@candy-kingdom/bonnie';
13
12
 
14
13
  var DeviceType;
@@ -704,36 +703,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
704
703
  args: [{ selector: "bonc-file-form", imports: [FormControlsComponent, FileUploaderComponent], hostDirectives: [EditableDirective], template: "<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", styles: [":host{display:block}a{color:silver}\n"] }]
705
704
  }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], uploadTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadTypes", required: true }] }], uploadMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadMap", required: true }] }] } });
706
705
 
707
- class LottieFormComponent extends FormBaseComponent {
708
- LottieMimeType = "application/json";
709
- // todo: convert to signal
710
- animOptions;
711
- label = input("", ...(ngDevMode ? [{ debugName: "label" }] : []));
712
- uploadMap = input.required(...(ngDevMode ? [{ debugName: "uploadMap" }] : []));
713
- constructor() {
714
- super();
715
- this.editable.externalSaveCall.subscribe(() => {
716
- this.editable.save();
717
- });
718
- this.editable.valueChange.subscribe((x) => {
719
- const url = x?.url ?? "";
720
- this.animOptions = url.length === 0 ? undefined : { path: url };
721
- });
722
- }
723
- onFileUploaded(fileSrc) {
724
- this.editable.startEditing();
725
- const svgSrc = fileSrc;
726
- this.editable.value = svgSrc;
727
- this.editable.updateDirty();
728
- }
729
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LottieFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
730
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: LottieFormComponent, isStandalone: true, selector: "bonc-lottie-form", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, uploadMap: { classPropertyName: "uploadMap", publicName: "uploadMap", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, hostDirectives: [{ directive: EditableDirective }], ngImport: i0, template: "<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", styles: [":host{display:block;max-width:600px}a{color:silver}ng-lottie{background-image:linear-gradient(45deg,#808080 25%,transparent 25%),linear-gradient(-45deg,#808080 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#808080 75%),linear-gradient(-45deg,transparent 75%,#808080 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px;display:block}\n"], dependencies: [{ kind: "component", type: FormControlsComponent, selector: "bonc-form-controls", inputs: ["editable"] }, { kind: "component", type: FileUploaderComponent, selector: "bonc-file-uploader", inputs: ["uploadUrlMap", "src", "uploadTypes"], outputs: ["srcChange"] }, { kind: "component", type: LottieComponent, selector: "ng-lottie", inputs: ["width", "height"] }] });
731
- }
732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LottieFormComponent, decorators: [{
733
- type: Component,
734
- args: [{ selector: "bonc-lottie-form", imports: [FormControlsComponent, FileUploaderComponent, LottieComponent], hostDirectives: [EditableDirective], template: "<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", styles: [":host{display:block;max-width:600px}a{color:silver}ng-lottie{background-image:linear-gradient(45deg,#808080 25%,transparent 25%),linear-gradient(-45deg,#808080 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#808080 75%),linear-gradient(-45deg,transparent 75%,#808080 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px;display:block}\n"] }]
735
- }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], uploadMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadMap", required: true }] }] } });
736
-
737
706
  const DefaultImageMimeTypes = ["image/png", "image/jpeg"];
738
707
  class OneImageFormComponent extends FormBaseComponent {
739
708
  label = input("", ...(ngDevMode ? [{ debugName: "label" }] : []));
@@ -945,11 +914,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
945
914
  * Any changes made to this file can be lost when this file is regenerated.
946
915
  */
947
916
 
948
- /**
949
- * This is a TypeGen auto-generated file.
950
- * Any changes made to this file can be lost when this file is regenerated.
951
- */
952
-
953
917
  /**
954
918
  * This is a TypeGen auto-generated file.
955
919
  * Any changes made to this file can be lost when this file is regenerated.
@@ -1412,5 +1376,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
1412
1376
  * Generated bundle index. Do not edit.
1413
1377
  */
1414
1378
 
1415
- export { API_BASE_URL, AdminControlsComponent, AdminDataService, BoneEditorBaseComponent, BoneEditorContainerComponent, DataService, DeviceType, DeviceVisibility, EditableDirective, EditableGroupComponent, FileFormComponent, FileUploaderComponent, FormBaseComponent, FormControlsComponent, LinkPopupComponent, LottieFormComponent, MediaUploaderComponent, OneImageFormComponent, SeoFormComponent, SkeletonEditorAnchorDirective, SkeletonEditorComponent, SvgFormComponent, TextEditorField, TextFormComponent, TextInputStyle, TextSettingType, TranslationFormComponent, TranslationInputComponent, TranslationTextareaComponent, UnknownBoneEditorComponent, UnknownFormComponent, createPreset, hasFlag, isLocalUrlString, regExpIsMobile, setOrRemoveFlag };
1379
+ export { API_BASE_URL, AdminControlsComponent, AdminDataService, BoneEditorBaseComponent, BoneEditorContainerComponent, DataService, DeviceType, DeviceVisibility, EditableDirective, EditableGroupComponent, FileFormComponent, FileUploaderComponent, FormBaseComponent, FormControlsComponent, LinkPopupComponent, MediaUploaderComponent, OneImageFormComponent, SeoFormComponent, SkeletonEditorAnchorDirective, SkeletonEditorComponent, SvgFormComponent, TextEditorField, TextFormComponent, TextInputStyle, TextSettingType, TranslationFormComponent, TranslationInputComponent, TranslationTextareaComponent, UnknownBoneEditorComponent, UnknownFormComponent, createPreset, hasFlag, isLocalUrlString, regExpIsMobile, setOrRemoveFlag };
1416
1380
  //# sourceMappingURL=candy-kingdom-bonnie-cms.mjs.map
@@ -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) {\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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"}
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/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/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, 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 { 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 \"./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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@candy-kingdom/bonnie-cms",
3
- "version": "0.27.2",
3
+ "version": "0.27.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ulmer-morozov/candy-kingdom.git",
@@ -11,8 +11,7 @@
11
11
  "@angular/common": "^21.0.0",
12
12
  "@angular/core": "^21.0.0",
13
13
  "@angular/forms": "^21.0.0",
14
- "@angular/platform-browser": "^21.0.0",
15
- "ngx-lottie": ">=12.0.0"
14
+ "@angular/platform-browser": "^21.0.0"
16
15
  },
17
16
  "sideEffects": false,
18
17
  "module": "fesm2022/candy-kingdom-bonnie-cms.mjs",
@@ -2,7 +2,6 @@ import * as _angular_core from '@angular/core';
2
2
  import { ModelSignal, InputSignal, Signal, OutputEmitterRef, ElementRef, InjectionToken, Type, ViewContainerRef } from '@angular/core';
3
3
  import { PixMediaUnion, LocalizedString, Bone, FileSrc, FileMeta, ImageMeta, OpenGraphData, SvgMeta, FileSrcFileMeta, FileFormat, FileSrcImageMeta, MediaObjectFit, PageBase } from '@candy-kingdom/bonnie';
4
4
  import { SafeStyle } from '@angular/platform-browser';
5
- import { AnimationOptions } from 'ngx-lottie';
6
5
  import { Observable } from 'rxjs';
7
6
  import { CdkTextareaAutosize } from '@angular/cdk/text-field';
8
7
 
@@ -253,17 +252,6 @@ declare class FileFormComponent extends FormBaseComponent<FileSrc<FileMeta>> {
253
252
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileFormComponent, "bonc-file-form", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "uploadTypes": { "alias": "uploadTypes"; "required": true; "isSignal": true; }; "uploadMap": { "alias": "uploadMap"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof EditableDirective; inputs: {}; outputs: {}; }]>;
254
253
  }
255
254
 
256
- declare class LottieFormComponent extends FormBaseComponent<FileSrc<FileMeta>> {
257
- readonly LottieMimeType = "application/json";
258
- animOptions?: AnimationOptions;
259
- readonly label: _angular_core.InputSignal<string>;
260
- readonly uploadMap: _angular_core.InputSignal<Map<string, string>>;
261
- constructor();
262
- onFileUploaded(fileSrc: FileSrc<FileMeta>): void;
263
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<LottieFormComponent, never>;
264
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LottieFormComponent, "bonc-lottie-form", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "uploadMap": { "alias": "uploadMap"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof EditableDirective; inputs: {}; outputs: {}; }]>;
265
- }
266
-
267
255
  declare class OneImageFormComponent extends FormBaseComponent<FileSrc<ImageMeta>> {
268
256
  readonly label: _angular_core.InputSignal<string>;
269
257
  readonly uploadUrl: _angular_core.InputSignal<string>;
@@ -387,15 +375,6 @@ interface LocalizedTextSettingData extends SettingData {
387
375
  textType: TextSettingType;
388
376
  }
389
377
 
390
- /**
391
- * This is a TypeGen auto-generated file.
392
- * Any changes made to this file can be lost when this file is regenerated.
393
- */
394
-
395
- interface LottieSettingData extends SettingData {
396
- src: FileSrcFileMeta;
397
- }
398
-
399
378
  /**
400
379
  * This is a TypeGen auto-generated file.
401
380
  * Any changes made to this file can be lost when this file is regenerated.
@@ -601,5 +580,5 @@ declare class TranslationTextareaComponent {
601
580
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TranslationTextareaComponent, "bonc-translation-textarea", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "device": { "alias": "device"; "required": false; "isSignal": true; }; }, { "startEditing": "startEditing"; "changed": "changed"; "blurred": "blurred"; }, never, never, true, never>;
602
581
  }
603
582
 
604
- export { API_BASE_URL, AdminControlsComponent, AdminDataService, BoneEditorBaseComponent, BoneEditorContainerComponent, DataService, DeviceType, DeviceVisibility, EditableDirective, EditableGroupComponent, FileFormComponent, FileUploaderComponent, FormBaseComponent, FormControlsComponent, LinkPopupComponent, LottieFormComponent, MediaUploaderComponent, OneImageFormComponent, SeoFormComponent, SkeletonEditorAnchorDirective, SkeletonEditorComponent, SvgFormComponent, TextEditorField, TextFormComponent, TextInputStyle, TextSettingType, TranslationFormComponent, TranslationInputComponent, TranslationTextareaComponent, UnknownBoneEditorComponent, UnknownFormComponent, createPreset, hasFlag, isLocalUrlString, regExpIsMobile, setOrRemoveFlag };
605
- export type { BoneEditorMap, ContentPreset, FileSettingData, IBoneEditor, IBoneTemplate, IEquatable, ISetting, LocalizedTextSettingData, LottieSettingData, MediaType, OneImageSettingData, Setting, SettingBase, SettingData, SettingDataDict, SettingGroup, SvgSettingData, TextSettingData };
583
+ export { API_BASE_URL, AdminControlsComponent, AdminDataService, BoneEditorBaseComponent, BoneEditorContainerComponent, DataService, DeviceType, DeviceVisibility, EditableDirective, EditableGroupComponent, FileFormComponent, FileUploaderComponent, FormBaseComponent, FormControlsComponent, LinkPopupComponent, MediaUploaderComponent, OneImageFormComponent, SeoFormComponent, SkeletonEditorAnchorDirective, SkeletonEditorComponent, SvgFormComponent, TextEditorField, TextFormComponent, TextInputStyle, TextSettingType, TranslationFormComponent, TranslationInputComponent, TranslationTextareaComponent, UnknownBoneEditorComponent, UnknownFormComponent, createPreset, hasFlag, isLocalUrlString, regExpIsMobile, setOrRemoveFlag };
584
+ export type { BoneEditorMap, ContentPreset, FileSettingData, IBoneEditor, IBoneTemplate, IEquatable, ISetting, LocalizedTextSettingData, MediaType, OneImageSettingData, Setting, SettingBase, SettingData, SettingDataDict, SettingGroup, SvgSettingData, TextSettingData };