@candy-kingdom/bonnie-cms 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +7 -0
  2. package/esm2022/candy-kingdom-bonnie-cms.mjs +5 -0
  3. package/esm2022/index.mjs +16 -0
  4. package/esm2022/lib/admin-controls/admin-controls.component.mjs +44 -0
  5. package/esm2022/lib/admin-controls/index.mjs +2 -0
  6. package/esm2022/lib/bone-editors/bone-editor-base.component.mjs +143 -0
  7. package/esm2022/lib/bone-editors/index.mjs +3 -0
  8. package/esm2022/lib/bone-editors/unknown-bone-editor/index.mjs +2 -0
  9. package/esm2022/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.mjs +18 -0
  10. package/esm2022/lib/bonnie-cms.module.mjs +105 -0
  11. package/esm2022/lib/core/DeviceType.mjs +8 -0
  12. package/esm2022/lib/core/DeviceVisibility.mjs +9 -0
  13. package/esm2022/lib/core/MediaType.mjs +2 -0
  14. package/esm2022/lib/core/TextEditorField.mjs +7 -0
  15. package/esm2022/lib/core/Utils.mjs +18 -0
  16. package/esm2022/lib/core/index.mjs +6 -0
  17. package/esm2022/lib/core-components/editable-group.mjs +84 -0
  18. package/esm2022/lib/core-components/editable.directive.mjs +173 -0
  19. package/esm2022/lib/core-components/form-base.component.mjs +34 -0
  20. package/esm2022/lib/core-components/index.mjs +5 -0
  21. package/esm2022/lib/core-components/link-popup/index.mjs +2 -0
  22. package/esm2022/lib/core-components/link-popup/link-popup.component.mjs +73 -0
  23. package/esm2022/lib/form-controls/form-controls.component.mjs +16 -0
  24. package/esm2022/lib/form-controls/index.mjs +2 -0
  25. package/esm2022/lib/generated/i-equatable.mjs +6 -0
  26. package/esm2022/lib/generated/i-setting.mjs +6 -0
  27. package/esm2022/lib/generated/index.mjs +14 -0
  28. package/esm2022/lib/generated/localized-text-setting-data.mjs +6 -0
  29. package/esm2022/lib/generated/setting-base.mjs +6 -0
  30. package/esm2022/lib/generated/setting-data.mjs +6 -0
  31. package/esm2022/lib/generated/setting-group.mjs +6 -0
  32. package/esm2022/lib/generated/setting.mjs +6 -0
  33. package/esm2022/lib/generated/text-setting-data.mjs +6 -0
  34. package/esm2022/lib/generated/text-setting-type.mjs +10 -0
  35. package/esm2022/lib/media-uploader/index.mjs +2 -0
  36. package/esm2022/lib/media-uploader/media-uploader.component.mjs +159 -0
  37. package/esm2022/lib/seo-form/index.mjs +2 -0
  38. package/esm2022/lib/seo-form/seo-form.component.mjs +42 -0
  39. package/esm2022/lib/skeleton-editor/BoneEditorMap.mjs +2 -0
  40. package/esm2022/lib/skeleton-editor/ContentPreset.mjs +9 -0
  41. package/esm2022/lib/skeleton-editor/IBoneEditor.mjs +2 -0
  42. package/esm2022/lib/skeleton-editor/IBoneTemplate.mjs +2 -0
  43. package/esm2022/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.mjs +119 -0
  44. package/esm2022/lib/skeleton-editor/index.mjs +9 -0
  45. package/esm2022/lib/skeleton-editor/skeleton-editor-anchor.directive.mjs +16 -0
  46. package/esm2022/lib/skeleton-editor/skeleton-editor.component.mjs +107 -0
  47. package/esm2022/lib/text-form/TextInputStyle.mjs +7 -0
  48. package/esm2022/lib/text-form/index.mjs +3 -0
  49. package/esm2022/lib/text-form/text-form.component.mjs +33 -0
  50. package/esm2022/lib/translation-form/index.mjs +2 -0
  51. package/esm2022/lib/translation-form/translation-form.component.mjs +32 -0
  52. package/esm2022/lib/translation-input/index.mjs +2 -0
  53. package/esm2022/lib/translation-input/translation-input.component.mjs +42 -0
  54. package/esm2022/lib/translation-textarea/index.mjs +2 -0
  55. package/esm2022/lib/translation-textarea/translation-textarea.component.mjs +66 -0
  56. package/esm2022/lib/unknown-form/index.mjs +2 -0
  57. package/esm2022/lib/unknown-form/unknown-form.component.mjs +23 -0
  58. package/fesm2022/candy-kingdom-bonnie-cms.mjs +1343 -0
  59. package/fesm2022/candy-kingdom-bonnie-cms.mjs.map +1 -0
  60. package/index.d.ts +15 -0
  61. package/lib/admin-controls/admin-controls.component.d.ts +14 -0
  62. package/lib/admin-controls/index.d.ts +1 -0
  63. package/lib/bone-editors/bone-editor-base.component.d.ts +44 -0
  64. package/lib/bone-editors/index.d.ts +2 -0
  65. package/lib/bone-editors/unknown-bone-editor/index.d.ts +1 -0
  66. package/lib/bone-editors/unknown-bone-editor/unknown-bone-editor.component.d.ts +11 -0
  67. package/lib/bonnie-cms.module.d.ts +26 -0
  68. package/lib/core/DeviceType.d.ts +6 -0
  69. package/lib/core/DeviceVisibility.d.ts +7 -0
  70. package/lib/core/MediaType.d.ts +2 -0
  71. package/lib/core/TextEditorField.d.ts +5 -0
  72. package/lib/core/Utils.d.ts +4 -0
  73. package/lib/core/index.d.ts +5 -0
  74. package/lib/core-components/editable-group.d.ts +24 -0
  75. package/lib/core-components/editable.directive.d.ts +43 -0
  76. package/lib/core-components/form-base.component.d.ts +15 -0
  77. package/lib/core-components/index.d.ts +4 -0
  78. package/lib/core-components/link-popup/index.d.ts +1 -0
  79. package/lib/core-components/link-popup/link-popup.component.d.ts +28 -0
  80. package/lib/form-controls/form-controls.component.d.ts +7 -0
  81. package/lib/form-controls/index.d.ts +1 -0
  82. package/lib/generated/i-equatable.d.ts +6 -0
  83. package/lib/generated/i-setting.d.ts +8 -0
  84. package/lib/generated/index.d.ts +13 -0
  85. package/lib/generated/localized-text-setting-data.d.ts +11 -0
  86. package/lib/generated/setting-base.d.ts +8 -0
  87. package/lib/generated/setting-data.d.ts +8 -0
  88. package/lib/generated/setting-group.d.ts +10 -0
  89. package/lib/generated/setting.d.ts +9 -0
  90. package/lib/generated/text-setting-data.d.ts +10 -0
  91. package/lib/generated/text-setting-type.d.ts +8 -0
  92. package/lib/media-uploader/index.d.ts +1 -0
  93. package/lib/media-uploader/media-uploader.component.d.ts +34 -0
  94. package/lib/seo-form/index.d.ts +1 -0
  95. package/lib/seo-form/seo-form.component.d.ts +18 -0
  96. package/lib/skeleton-editor/BoneEditorMap.d.ts +3 -0
  97. package/lib/skeleton-editor/ContentPreset.d.ts +11 -0
  98. package/lib/skeleton-editor/IBoneEditor.d.ts +26 -0
  99. package/lib/skeleton-editor/IBoneTemplate.d.ts +5 -0
  100. package/lib/skeleton-editor/bone-editor-container/bone-editor-container.component.d.ts +32 -0
  101. package/lib/skeleton-editor/index.d.ts +8 -0
  102. package/lib/skeleton-editor/skeleton-editor-anchor.directive.d.ts +8 -0
  103. package/lib/skeleton-editor/skeleton-editor.component.d.ts +31 -0
  104. package/lib/text-form/TextInputStyle.d.ts +5 -0
  105. package/lib/text-form/index.d.ts +2 -0
  106. package/lib/text-form/text-form.component.d.ts +13 -0
  107. package/lib/translation-form/index.d.ts +1 -0
  108. package/lib/translation-form/translation-form.component.d.ts +14 -0
  109. package/lib/translation-input/index.d.ts +1 -0
  110. package/lib/translation-input/translation-input.component.d.ts +17 -0
  111. package/lib/translation-textarea/index.d.ts +1 -0
  112. package/lib/translation-textarea/translation-textarea.component.d.ts +26 -0
  113. package/lib/unknown-form/index.d.ts +1 -0
  114. package/lib/unknown-form/unknown-form.component.d.ts +9 -0
  115. package/package.json +25 -0
  116. package/styles/@candy-kingdom/bonnie/variables.scss +0 -0
  117. package/styles/admin-styles.scss +139 -0
  118. package/styles/admin-variables.scss +445 -0
  119. package/styles/variables.scss +415 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candy-kingdom-bonnie-cms.mjs","sources":["../../../../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/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/setting.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/core/DeviceType.ts","../../../../libs/bonnie-cms/src/lib/core/TextEditorField.ts","../../../../libs/bonnie-cms/src/lib/core/Utils.ts","../../../../libs/bonnie-cms/src/lib/core/DeviceVisibility.ts","../../../../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/admin-controls/admin-controls.component.ts","../../../../libs/bonnie-cms/src/lib/admin-controls/admin-controls.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/media-uploader/media-uploader.component.ts","../../../../libs/bonnie-cms/src/lib/media-uploader/media-uploader.component.html","../../../../libs/bonnie-cms/src/lib/text-form/TextInputStyle.ts","../../../../libs/bonnie-cms/src/lib/text-form/text-form.component.ts","../../../../libs/bonnie-cms/src/lib/text-form/text-form.component.html","../../../../libs/bonnie-cms/src/lib/seo-form/seo-form.component.ts","../../../../libs/bonnie-cms/src/lib/seo-form/seo-form.component.html","../../../../libs/bonnie-cms/src/lib/unknown-form/unknown-form.component.ts","../../../../libs/bonnie-cms/src/lib/unknown-form/unknown-form.component.html","../../../../libs/bonnie-cms/src/lib/translation-form/translation-form.component.ts","../../../../libs/bonnie-cms/src/lib/translation-form/translation-form.component.html","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor-anchor.directive.ts","../../../../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/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/skeleton-editor.component.ts","../../../../libs/bonnie-cms/src/lib/skeleton-editor/skeleton-editor.component.html","../../../../libs/bonnie-cms/src/lib/skeleton-editor/ContentPreset.ts","../../../../libs/bonnie-cms/src/lib/bonnie-cms.module.ts","../../../../libs/bonnie-cms/src/candy-kingdom-bonnie-cms.ts"],"sourcesContent":["/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport interface IEquatable<T> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { SettingData } from \"./setting-data\";\r\n\r\nexport interface ISetting<T extends SettingData> {\r\n data: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { SettingData } from \"./setting-data\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { TextSettingType } from \"./text-setting-type\";\r\nimport { LocalizedString } from \"@candy-kingdom/bonnie\";\r\n\r\nexport interface LocalizedTextSettingData extends SettingData {\r\n text: LocalizedString;\r\n textType: TextSettingType;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface SettingBase {\r\n id: string;\r\n title: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface SettingData {\r\n type: string;\r\n empty: SettingData;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { Setting } from \"./setting\";\r\n\r\nexport interface SettingGroup {\r\n id: string;\r\n title: string;\r\n records: Setting<any>[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { SettingData } from \"./setting-data\";\r\nimport { SettingBase } from \"./setting-base\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { ISetting } from \"./i-setting\";\r\n\r\nexport interface Setting<T extends SettingData> extends SettingBase {\r\n data: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { SettingData } from \"./setting-data\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { TextSettingType } from \"./text-setting-type\";\r\n\r\nexport interface TextSettingData extends SettingData {\r\n text: string;\r\n textType: TextSettingType;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport enum TextSettingType {\r\n SingleLine = 0,\r\n MultiLine = 1,\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport * from './i-equatable';\r\nexport * from './i-setting';\r\nexport * from './localized-text-setting-data';\r\nexport * from './setting-base';\r\nexport * from './setting-data';\r\nexport * from './setting-group';\r\nexport * from './setting';\r\nexport * from './text-setting-data';\r\nexport * from './text-setting-type';\r\n","export enum DeviceType {\r\n NotSet = 0,\r\n Mobile = 1,\r\n Tablet = 2,\r\n Desktop = 3\r\n}\r\n","\r\n\r\n\r\nexport enum TextEditorField {\r\n NotSet = 0,\r\n Input = 1,\r\n Textarea = 2\r\n}\r\n","\r\n// tslint:disable-next-line: max-line-length\r\nexport const regExpIsMobile = new RegExp(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/, 'i');\r\n\r\nexport function isLocalUrlString(url: string): boolean {\r\n if (url === undefined || url === null || url.trim().length === 0)\r\n return true;\r\n\r\n if (url.startsWith('//'))\r\n return false;\r\n\r\n if (url.startsWith('./') || url.startsWith('/'))\r\n return true;\r\n\r\n return false;\r\n}\r\n\r\nexport function hasFlag<T extends number>(value: T, flag: T): boolean {\r\n return (value & flag) === flag;\r\n}\r\n\r\nexport function setOrRemoveFlag<T extends number>(value: T, flag: T, enabled: boolean): T {\r\n return (enabled ? value | flag : value & ~flag) as T;\r\n}\r\n","export enum DeviceVisibility {\r\n None = 0,\r\n Desktop = 1,\r\n Tablet = 2,\r\n Mobile = 4,\r\n All = Desktop | Tablet | Mobile\r\n}\r\n","import { Directive, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n standalone: true,\r\n selector: '[boncEditable]',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EditableDirective), multi: true }]\r\n})\r\nexport class EditableDirective<T = unknown> {\r\n @Output()\r\n public readonly saved = new EventEmitter<T>();\r\n\r\n @Output()\r\n public readonly editModeChange = new EventEmitter<boolean>();\r\n\r\n @Output()\r\n public readonly externalSaveCall = new EventEmitter<void>();\r\n\r\n @Output()\r\n public readonly canceled = new EventEmitter<void>();\r\n\r\n @Output()\r\n public readonly valueChange = new EventEmitter<T>();\r\n\r\n private propagateChange: (newValue: T) => void = () => { };\r\n\r\n private _inEditMode = false;\r\n private _isDirty = false;\r\n\r\n private _value?: T;\r\n private _originalValue?: T;\r\n private _storedData?: string;\r\n\r\n public get inEditMode(): boolean {\r\n return this._inEditMode;\r\n }\r\n\r\n public subscribe\r\n (\r\n params: {\r\n readonly onValueChange?: (x: T) => void,\r\n readonly onEditModeChange?: (x: boolean) => void,\r\n readonly onSaveRequest?: () => void\r\n }\r\n ): Subscription[] {\r\n\r\n const subscriptions: Subscription[] = [];\r\n\r\n if (params.onValueChange !== undefined && params.onValueChange !== null) {\r\n subscriptions.push\r\n (\r\n this.valueChange.subscribe((x: T) => {\r\n if (params.onValueChange)\r\n params.onValueChange(x);\r\n })\r\n );\r\n }\r\n\r\n if (params.onEditModeChange !== undefined) {\r\n subscriptions.push\r\n (\r\n this.editModeChange.subscribe((x: boolean) => {\r\n if (params.onEditModeChange)\r\n params.onEditModeChange(x);\r\n })\r\n );\r\n }\r\n\r\n if (params.onSaveRequest !== undefined) {\r\n subscriptions.push\r\n (\r\n this.externalSaveCall.subscribe(() => {\r\n if (params.onSaveRequest)\r\n params.onSaveRequest();\r\n })\r\n );\r\n }\r\n\r\n return subscriptions;\r\n }\r\n\r\n public requestSave() {\r\n this.externalSaveCall.emit();\r\n }\r\n\r\n public startEditing = (): void => {\r\n if (this._inEditMode) {\r\n this.updateDirty();\r\n return;\r\n }\r\n\r\n this._inEditMode = true;\r\n this.updateDirty();\r\n this.editModeChange.emit(true);\r\n }\r\n\r\n public save(newData?: T): void {\r\n if (!this._inEditMode) {\r\n console.warn('save before edit mode'); //todo: fix that\r\n }\r\n\r\n this.finishEditing();\r\n\r\n const newUnqieNotEmptyData = this.value === newData || newData === undefined\r\n ? JSON.parse(JSON.stringify(this.value))\r\n : newData;\r\n\r\n this.setOriginal(newUnqieNotEmptyData);\r\n this.updateDirty();\r\n\r\n this.saved.emit(newUnqieNotEmptyData);\r\n\r\n this.propagateChange(newUnqieNotEmptyData);\r\n }\r\n\r\n public patchSave(propName: keyof T, newDataParts: T[keyof T]): void {\r\n if (this._originalValue === undefined || this._originalValue === null)\r\n return;\r\n\r\n if (typeof this._originalValue !== \"object\") {\r\n console.warn('patch save called on not object type');\r\n return;\r\n }\r\n\r\n (this._originalValue as any)[propName] = newDataParts;\r\n\r\n this.setOriginal(this._originalValue);\r\n\r\n this.updateDirty();\r\n\r\n if (!this.isDirty)\r\n this.close();\r\n }\r\n\r\n // change model without opening or closing the editor\r\n\r\n public silentPatch(dict: Partial<T>): void {\r\n for (const key in dict) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!dict.hasOwnProperty(key))\r\n continue;\r\n\r\n const propVal = dict[key];\r\n\r\n\r\n if (this._value !== undefined && this._value !== null) {\r\n this._value[key] = propVal as any;\r\n }\r\n\r\n if (this._originalValue !== undefined && this._originalValue !== null) {\r\n this._originalValue[key] = propVal as any;\r\n }\r\n }\r\n this._storedData = JSON.stringify(this._originalValue);\r\n }\r\n\r\n public cancel(): void {\r\n if (!this._inEditMode)\r\n return;\r\n\r\n this.finishEditing();\r\n\r\n // reset value\r\n this.setValue(this._originalValue);\r\n\r\n this.canceled.emit();\r\n }\r\n\r\n public close(): void {\r\n this.finishEditing();\r\n }\r\n\r\n private finishEditing(): void {\r\n if (!this._inEditMode)\r\n return;\r\n\r\n this._inEditMode = false;\r\n this.editModeChange.emit(false);\r\n }\r\n\r\n private setValue(newValue?: T): void {\r\n this._value = (newValue === null || newValue === undefined)\r\n ? undefined\r\n : JSON.parse(JSON.stringify(newValue));\r\n\r\n this.valueChange.emit(this._value);\r\n }\r\n\r\n public set value(newValue: T | undefined) {\r\n this.setValue(newValue);\r\n }\r\n\r\n public get value(): T | undefined {\r\n return this._value;\r\n }\r\n\r\n public updateDirty(): void {\r\n this._isDirty = JSON.stringify(this._value) !== this._storedData;\r\n }\r\n\r\n public markAsDirty(): void {\r\n this._isDirty = true;\r\n }\r\n\r\n public get isDirty(): boolean {\r\n return this._isDirty;\r\n }\r\n\r\n private setOriginal(newOriginalValue: T) {\r\n this._originalValue = newOriginalValue;\r\n this._storedData = JSON.stringify(newOriginalValue);\r\n }\r\n\r\n // #region ngModel\r\n\r\n writeValue(newValue: T): void {\r\n this.finishEditing();\r\n\r\n this.setOriginal(newValue);\r\n this._isDirty = false;\r\n\r\n this.setValue(newValue);\r\n }\r\n\r\n setDisabledState?(): void {\r\n }\r\n\r\n registerOnChange(tellAngularThatSomethingIsChanged: (newValue: T) => void): void {\r\n this.propagateChange = (newValue: T): void => {\r\n tellAngularThatSomethingIsChanged(newValue);\r\n };\r\n }\r\n\r\n registerOnTouched(): void {\r\n }\r\n\r\n // #endregion\r\n}\r\n","import { QueryList, ContentChildren, AfterContentInit, OnDestroy, Output, EventEmitter, Component } from '@angular/core';\r\nimport { Subscription, Subject, debounceTime } from 'rxjs';\r\n\r\nimport { EditableDirective } from './editable.directive';\r\n\r\n@Component({\r\n selector: 'bonc-editable-group',\r\n template: '<ng-content></ng-content>'\r\n})\r\nexport class EditableGroupComponent implements AfterContentInit, OnDestroy {\r\n @Output()\r\n public readonly editModeChange = new EventEmitter<boolean>();\r\n\r\n @Output()\r\n public readonly saved = new EventEmitter<void>();\r\n\r\n @Output()\r\n public readonly requestEditorClose = new EventEmitter<boolean>();\r\n\r\n @ContentChildren(EditableDirective, { descendants: true })\r\n public editables!: QueryList<EditableDirective>;\r\n\r\n private readonly subscriptions: Subscription[] = [];\r\n private _inEditMode = false;\r\n\r\n private readonly saveSubject = new Subject<void>();\r\n\r\n public ngAfterContentInit(): void {\r\n this.saveSubject\r\n .asObservable()\r\n .pipe(debounceTime(100))\r\n .subscribe(() => this.saved.emit());\r\n\r\n this.updateSubscriptions();\r\n\r\n this.editables.changes.subscribe\r\n (\r\n () => {\r\n this.clearSubscribtions();\r\n this.updateSubscriptions();\r\n }\r\n );\r\n }\r\n\r\n public get inEditMode(): boolean {\r\n return this._inEditMode;\r\n }\r\n\r\n public saveAll(): void {\r\n this.editables.forEach(x => x.requestSave());\r\n }\r\n\r\n public cancelAll(): void {\r\n this.editables.forEach(x => x.cancel());\r\n }\r\n\r\n public closeAll(): void {\r\n this.requestEditorClose.emit(true);\r\n this.editables.forEach(x => x.close());\r\n }\r\n\r\n private clearSubscribtions(): void {\r\n this.subscriptions.forEach(x => x.unsubscribe());\r\n this.subscriptions.splice(0, this.subscriptions.length);\r\n }\r\n\r\n private updateSubscriptions(): void {\r\n\r\n this.editables.forEach\r\n (\r\n editable => {\r\n\r\n this.subscriptions.push(\r\n editable.saved.subscribe(\r\n () => this.onSave()\r\n )\r\n );\r\n\r\n this.subscriptions.push(\r\n ...editable.subscribe({\r\n onEditModeChange: this.updateEditMode.bind(this)\r\n })\r\n );\r\n }\r\n );\r\n }\r\n\r\n private onSave(): void {\r\n this.saveSubject.next();\r\n }\r\n\r\n private updateEditMode(): void {\r\n const newEditMode = this.editables\r\n .filter(x => x.inEditMode)\r\n .length > 0;\r\n\r\n if (newEditMode === this._inEditMode)\r\n return;\r\n\r\n this._inEditMode = newEditMode;\r\n\r\n this.editModeChange.next(newEditMode);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.clearSubscribtions();\r\n }\r\n}\r\n","import { Component, Host, Input } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { EditableDirective } from './editable.directive';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class FormBaseComponent<TData = unknown> {\r\n public static readonly inputs = ['locale'];\r\n\r\n protected name = '';\r\n private _locale = '';\r\n\r\n constructor(\r\n @Host() public editable: EditableDirective<TData>,\r\n public readonly http: HttpClient) {\r\n }\r\n\r\n @Input()\r\n public set locale(value: string) {\r\n this._locale = value;\r\n }\r\n\r\n public get locale(): string {\r\n return this._locale;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DeviceType } from '../core';\r\nimport { LocalizedString } from '@candy-kingdom/bonnie';\r\n\r\n@Component({\r\n selector: 'bonc-translation-input',\r\n templateUrl: './translation-input.component.html',\r\n styleUrls: ['./translation-input.component.scss']\r\n})\r\nexport class TranslationInputComponent {\r\n @Input({ required: true })\r\n public text!: LocalizedString;\r\n\r\n @Input({ required: true })\r\n public locale!: string;\r\n\r\n @Input()\r\n public device: DeviceType = DeviceType.NotSet;\r\n\r\n @Output()\r\n public startEditing: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public changed: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public blurred: EventEmitter<void> = new EventEmitter();\r\n\r\n public onClick() {\r\n this.startEditing.emit();\r\n }\r\n\r\n public onKeyPress() {\r\n this.changed.emit();\r\n }\r\n\r\n public onBlur() {\r\n this.blurred.emit();\r\n }\r\n}\r\n","<input [(ngModel)]=\"text[locale]\"\r\n (click)=\"onClick()\"\r\n (keyup)=\"onKeyPress()\"\r\n (blur)=\"onBlur()\" />\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { LocalizedString } from '@candy-kingdom/bonnie';\r\nimport { DeviceType } from '../core';\r\n\r\n@Component({\r\n selector: 'bonc-translation-textarea',\r\n templateUrl: './translation-textarea.component.html',\r\n styleUrls: ['./translation-textarea.component.scss']\r\n})\r\nexport class TranslationTextareaComponent implements OnChanges, AfterViewInit {\r\n @ViewChildren(CdkTextareaAutosize)\r\n public autosizeList!: QueryList<CdkTextareaAutosize>;\r\n\r\n @Input()\r\n public minRows?: number;\r\n\r\n @Input()\r\n public maxRows?: number;\r\n\r\n @Input({ required: true })\r\n public text!: LocalizedString;\r\n\r\n @Input({ required: true })\r\n public locale!: string;\r\n\r\n @Input()\r\n public device: DeviceType = DeviceType.NotSet;\r\n\r\n @Output()\r\n public startEditing: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public changed: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public blurred: EventEmitter<void> = new EventEmitter();\r\n\r\n constructor(\r\n private ngZone: NgZone\r\n ) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(this.triggerResize.bind(this));\r\n }\r\n\r\n ngOnChanges(): void {\r\n setTimeout(this.triggerResize.bind(this), 500);\r\n }\r\n\r\n public onClick() {\r\n this.startEditing.emit();\r\n }\r\n\r\n public onKeyPress() {\r\n this.changed.emit();\r\n }\r\n\r\n public onBlur() {\r\n this.blurred.emit();\r\n }\r\n\r\n private triggerResize() {\r\n // console.log('trigger resize!');\r\n\r\n this.ngZone.onStable.pipe(take(1))\r\n .subscribe(() => {\r\n this.autosizeList.forEach(x => x.resizeToFitContent(true));\r\n });\r\n }\r\n}\r\n","<textarea [(ngModel)]=\"text[locale]\"\r\n [cdkAutosizeMinRows]=\"minRows\"\r\n [cdkAutosizeMaxRows]=\"maxRows\"\r\n (click)=\"onClick()\"\r\n (keyup)=\"onKeyPress()\"\r\n (blur)=\"onBlur()\"\r\n matInput\r\n cdkTextareaAutosize>\r\n</textarea>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { LocalizedString } from '@candy-kingdom/bonnie';\r\nimport { TextEditorField } from '../../core';\r\n\r\n@Component({\r\n selector: 'bonc-link-popup',\r\n templateUrl: './link-popup.component.html',\r\n styleUrl: './link-popup.component.scss'\r\n})\r\nexport class LinkPopupComponent {\r\n public readonly TextEditorField = TextEditorField;\r\n @Output()\r\n public linkChange: EventEmitter<LocalizedString> = new EventEmitter();\r\n\r\n @Output()\r\n public startEditing: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public changed: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public blurred: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public open: EventEmitter<void> = new EventEmitter();\r\n\r\n @Output()\r\n public closed: EventEmitter<void> = new EventEmitter();\r\n\r\n @Input({ required: true })\r\n public field!: TextEditorField;\r\n public LinkPopupField = TextEditorField;\r\n\r\n @Input()\r\n public maxRows?: number;\r\n\r\n @Input()\r\n public minRows?: number;\r\n\r\n @Input({ required: true })\r\n public linkTitle!: LocalizedString; // todo: allready in weblink\r\n\r\n @Input({ required: true })\r\n public locale!: string;\r\n\r\n @Input({ required: true })\r\n public link!: LocalizedString;\r\n\r\n public popupIsShown = false;\r\n\r\n public onClick() {\r\n this.startEditing.emit();\r\n }\r\n\r\n public onChange() {\r\n console.log('change link pop up')\r\n this.changed.emit();\r\n }\r\n\r\n public onBlur() {\r\n this.blurred.emit();\r\n }\r\n\r\n public showPopup(): void {\r\n this.popupIsShown = true;\r\n this.open.emit();\r\n }\r\n\r\n public hidePopup(): void {\r\n this.popupIsShown = false;\r\n this.closed.emit();\r\n }\r\n}\r\n","<bonc-translation-input *ngIf=\"field === TextEditorField.Input\"\r\n (click)=\"showPopup()\"\r\n [text]=\"linkTitle\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"onClick()\"\r\n (changed)=\"onChange()\"\r\n (blurred)=\"onBlur()\">\r\n</bonc-translation-input>\r\n\r\n<bonc-translation-textarea *ngIf=\"field === TextEditorField.Textarea\"\r\n (click)=\"showPopup()\"\r\n [text]=\"linkTitle\"\r\n [locale]=\"locale\"\r\n [minRows]=\"minRows\"\r\n [maxRows]=\"maxRows\"\r\n (startEditing)=\"onClick()\"\r\n (changed)=\"onChange()\"\r\n (blurred)=\"onBlur()\">\r\n</bonc-translation-textarea>\r\n\r\n<div *ngIf=\"popupIsShown\">\r\n <div class=\"popup\">\r\n <a (click)=\"hidePopup()\" class=\"close\">close</a>\r\n\r\n <label>Link\r\n <input [(ngModel)]=\"link[locale]\"\r\n (click)=\"onClick()\"\r\n (keyup)=\"onChange()\"\r\n (blur)=\"onBlur()\">\r\n </label>\r\n\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { DeviceType } from '../core';\r\nimport { EditableGroupComponent } from '../core-components';\r\n\r\n@Component({\r\n selector: 'bonc-admin-controls',\r\n templateUrl: './admin-controls.component.html',\r\n styleUrls: ['./admin-controls.component.scss']\r\n})\r\nexport class AdminControlsComponent {\r\n public readonly DeviceType = DeviceType;\r\n\r\n @Input({ required: true })\r\n public editableGroup!: EditableGroupComponent;\r\n\r\n @Input()\r\n public deviceControls = false;\r\n\r\n public locale = 'en';\r\n public device = this.DeviceType.Desktop;\r\n\r\n public changeLocale(): void {\r\n this.locale = this.locale === 'en' ? 'ru' : 'en';\r\n }\r\n\r\n public changeDevice(): void {\r\n switch (this.device) {\r\n case DeviceType.Desktop:\r\n this.device = DeviceType.Tablet;\r\n return;\r\n\r\n case DeviceType.Tablet:\r\n this.device = DeviceType.Mobile;\r\n return;\r\n\r\n case DeviceType.Mobile:\r\n this.device = DeviceType.Desktop;\r\n return;\r\n\r\n default:\r\n this.device = DeviceType.Desktop;\r\n return;\r\n }\r\n }\r\n}\r\n","<div class=\"page-controls\">\r\n <a (click)=\"changeLocale()\" class=\"locale\">Locale: {{locale}}</a>\r\n\r\n <!-- todo: return this functionality -->\r\n <!-- <a *ngIf=\"deviceControls\" (click)=\"changeDevice()\" class=\"device\">\r\n <span *ngIf=\"device === DeviceType.Desktop\">DESKTOP</span>\r\n <span *ngIf=\"device === DeviceType.Tablet\">TABLET</span>\r\n <span *ngIf=\"device === DeviceType.Mobile\">MOBILE</span>\r\n </a> -->\r\n\r\n <a *ngIf=\"editableGroup && editableGroup.inEditMode\"\r\n (click)=\"editableGroup.saveAll()\"\r\n class=\"save\">Save all</a>\r\n\r\n <a *ngIf=\"editableGroup && editableGroup.inEditMode\"\r\n (click)=\"editableGroup.cancelAll()\"\r\n class=\"cancel\">Cancel all</a>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { EditableDirective } from '../core-components';\r\n\r\n@Component({\r\n selector: 'bonc-form-controls',\r\n templateUrl: './form-controls.component.html',\r\n styleUrls: ['./form-controls.component.scss']\r\n})\r\nexport class FormControlsComponent {\r\n @Input({ required: true })\r\n public editable!: EditableDirective<any>;\r\n}\r\n","<div [class.edit]=\"editable.inEditMode\" class=\"content\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div [class.hidden]=\"!editable.inEditMode\" class=\"controls\">\r\n <a *ngIf=\"!editable.isDirty\" (click)=\"editable.cancel()\" class=\"close\">close</a>\r\n <ng-container *ngIf=\"editable.isDirty\">\r\n <a (click)=\"editable.cancel()\">reset</a>\r\n <a (click)=\"editable.requestSave()\" class=\"apply\">apply</a>\r\n </ng-container>\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\nimport { HttpClient, HttpEvent, HttpEventType, HttpRequest } from '@angular/common/http';\r\nimport { catchError, last, map, Observable } from 'rxjs';\r\n\r\nimport { MediaObjectFit, PixMediaUnion } from '@candy-kingdom/bonnie';\r\nimport { MediaType } from '../core';\r\n\r\nconst imageMimeTypes = ['image/png', 'image/jpeg'];\r\nconst videoMimeTypes = ['video/mp4'];\r\n\r\nconst imageFileTypes = imageMimeTypes.join(',');\r\nconst videoFileTypes = videoMimeTypes.join(',');\r\n\r\nconst allMediaFileTypes = `${imageFileTypes},${videoFileTypes}`;\r\n\r\n@Component({\r\n selector: 'bonc-media-uploader',\r\n templateUrl: './media-uploader.component.html',\r\n styleUrls: ['./media-uploader.component.scss']\r\n})\r\nexport class MediaUploaderComponent {\r\n public readonly MediaObjectFit = MediaObjectFit;\r\n\r\n @ViewChild('fileInput', { static: true })\r\n public fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n @Output()\r\n public srcChange = new EventEmitter<PixMediaUnion>();\r\n\r\n @Input({ required: true })\r\n public uploadUrlMap!: ReadonlyMap<MediaType, string>;\r\n\r\n @Input()\r\n public forceRatio?: number;\r\n\r\n public progress = 0;\r\n public isUploading = false;\r\n\r\n public autoplay = true;\r\n public clipStyle?: SafeStyle;\r\n public fileTypeMask = allMediaFileTypes;\r\n\r\n private _uploadType?: MediaType;\r\n private _src?: PixMediaUnion;\r\n\r\n constructor(private sanitizer: DomSanitizer, private http: HttpClient) {\r\n }\r\n\r\n @Input()\r\n public set src(newSrc: PixMediaUnion | undefined) {\r\n if (this._src === newSrc)\r\n return;\r\n\r\n this._src = newSrc;\r\n }\r\n\r\n public get src(): PixMediaUnion | undefined {\r\n return this._src;\r\n }\r\n\r\n @Input()\r\n public set uploadType(newUploadType: MediaType | undefined) {\r\n switch (newUploadType) {\r\n case \"image\":\r\n this._uploadType = newUploadType;\r\n this.fileTypeMask = imageFileTypes;\r\n break;\r\n\r\n case \"video\":\r\n this._uploadType = newUploadType;\r\n this.fileTypeMask = videoFileTypes;\r\n break;\r\n\r\n case undefined:\r\n default:\r\n this._uploadType = newUploadType;\r\n this.fileTypeMask = allMediaFileTypes;\r\n break;\r\n }\r\n }\r\n\r\n public get uploadType(): MediaType | undefined {\r\n return this._uploadType;\r\n }\r\n\r\n public onFileSelect(fileInput: HTMLInputElement) {\r\n if (fileInput.files === undefined || fileInput.files === null || fileInput.files.length !== 1)\r\n return;\r\n\r\n const file = fileInput.files[0];\r\n\r\n let uploadingMediaType: MediaType;\r\n\r\n if (this._uploadType !== undefined && this._uploadType !== null) {\r\n uploadingMediaType = this._uploadType;\r\n }\r\n else if (imageMimeTypes.includes(file.type)) {\r\n uploadingMediaType = 'image';\r\n }\r\n else if (videoMimeTypes.includes(file.type)) {\r\n uploadingMediaType = 'video';\r\n }\r\n else {\r\n console.error(`unknown media type ${file.type} (${file.name})`);\r\n return;\r\n }\r\n\r\n const uploadUrl = this.uploadUrlMap.get(uploadingMediaType);\r\n\r\n if (uploadUrl === undefined || uploadUrl === null) {\r\n console.error(`upload map doesn't have url for type ${uploadingMediaType}`);\r\n return;\r\n }\r\n\r\n const formData: FormData = new FormData();\r\n\r\n formData.append('file', file);\r\n formData.append('ratio', `${this.forceRatio ?? 0}`);\r\n\r\n this.progress = 0;\r\n this.isUploading = true;\r\n\r\n this.updateClip();\r\n\r\n const request = new HttpRequest('POST', uploadUrl, formData, {\r\n reportProgress: true\r\n });\r\n\r\n this.http\r\n .request<PixMediaUnion>(request)\r\n .pipe\r\n (\r\n map(event => this.getEventMessage(event)),\r\n // tap(message => this.showProgress(message)),\r\n last(), // return last (completed) message to caller\r\n catchError(this.handleError(file))\r\n ).subscribe\r\n (\r\n () => { this.isUploading = false; }\r\n );\r\n }\r\n\r\n public selectFile(event: Event): void {\r\n // ignore buble click on file picker\r\n if (event.target === this.fileInput.nativeElement)\r\n return;\r\n\r\n this.fileInput.nativeElement.click();\r\n }\r\n\r\n private getEventMessage(event: HttpEvent<PixMediaUnion>): void {\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n return;\r\n\r\n case HttpEventType.UploadProgress:\r\n this.progress = event.total === undefined ? 0.5 : event.loaded / event.total;\r\n this.updateClip();\r\n return;\r\n\r\n case HttpEventType.Response:\r\n if (event.body === undefined || event.body === null) {\r\n console.error('media deserialization error. Response body in undefined');\r\n } else {\r\n // remove this\r\n // needed for C# deserialization\r\n const pixmedia = {\r\n $type: event.body.type,\r\n ...event.body as any,\r\n };\r\n\r\n this.srcChange.emit(pixmedia);\r\n }\r\n return;\r\n\r\n default:\r\n return;\r\n }\r\n }\r\n\r\n private updateClip(): void {\r\n this.clipStyle = this.sanitizer.bypassSecurityTrustStyle(`inset(0px 100% 0px 0%)`);\r\n }\r\n\r\n private handleError(file: File): (p1: unknown, p2: Observable<unknown>) => Observable<unknown> {\r\n const func = (error: unknown, p2: Observable<unknown>): Observable<unknown> => {\r\n const message = `error uploadingFile ${file.name}.`;\r\n console.error(message, error, p2);\r\n alert(message);\r\n return new Observable<unknown>();\r\n };\r\n\r\n return func;\r\n }\r\n}\r\n","<bon-media [src]=\"src\" [objectFit]=\"MediaObjectFit.Cover\"></bon-media>\r\n\r\n<div *ngIf=\"src?.sources?.length===0\">NO MEDIA</div>\r\n\r\n<div (click)=\"selectFile($event)\" class=\"media-container\">\r\n\r\n <input #fileInput [accept]=\"fileTypeMask\" (change)=\"onFileSelect(fileInput)\" name=\"media\" type=\"file\" />\r\n <span *ngIf=\"isUploading\"\r\n [style.clip-path]=\"clipStyle\"\r\n [style.-webkit-clip-path]=\"clipStyle\"\r\n class=\"loader\"></span>\r\n\r\n <span *ngIf=\"isUploading\" class=\"loader-text\">\r\n <span *ngIf=\"progress < 1\">{{100 * progress | number: '1.0-0'}}%</span>\r\n <span *ngIf=\"progress >= 1\">converting</span>\r\n </span>\r\n</div>\r\n","\r\nexport enum TextInputStyle {\r\n NotSet = 0,\r\n SingleLine = 1,\r\n MultiLine = 2\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { TextInputStyle } from './TextInputStyle';\r\nimport { FormBaseComponent } from '../core-components/form-base.component';\r\nimport { EditableDirective } from '../core-components';\r\n\r\n@Component({\r\n selector: 'bonc-text-form',\r\n templateUrl: './text-form.component.html',\r\n styleUrls: ['./text-form.component.scss'],\r\n inputs: FormBaseComponent.inputs,\r\n hostDirectives: [EditableDirective]\r\n})\r\nexport class TextFormComponent extends FormBaseComponent<string> implements OnInit {\r\n public readonly TextInputStyle = TextInputStyle;\r\n\r\n @Input()\r\n public label = '';\r\n\r\n @Input()\r\n public type = TextInputStyle.SingleLine;\r\n\r\n ngOnInit(): void {\r\n this.editable.externalSaveCall.subscribe(() => {\r\n this.editable.save();\r\n });\r\n }\r\n}\r\n","<bonc-form-controls [editable]=\"editable\">\r\n <label *ngIf=\"label\">{{label}}</label>\r\n\r\n <input *ngIf=\"editable && type === TextInputStyle.SingleLine\"\r\n [(ngModel)]=\"editable.value\"\r\n (click)=\"editable.startEditing()\"\r\n (keyup)=\"editable.updateDirty()\"\r\n (blur)=\"editable.updateDirty()\" />\r\n\r\n <textarea *ngIf=\"editable && type === TextInputStyle.MultiLine\"\r\n [(ngModel)]=\"editable.value\"\r\n (click)=\"editable.startEditing()\"\r\n (keyup)=\"editable.updateDirty()\"\r\n (blur)=\"editable.updateDirty()\">\r\n </textarea>\r\n</bonc-form-controls>\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { OpenGraphData } from '@candy-kingdom/bonnie';\r\n\r\nimport { EditableDirective, FormBaseComponent } from '../core-components';\r\n\r\n@Component({\r\n selector: 'bonc-seo-form',\r\n templateUrl: './seo-form.component.html',\r\n styleUrls: ['./seo-form.component.scss'],\r\n hostDirectives: [EditableDirective]\r\n})\r\nexport class SeoFormComponent extends FormBaseComponent<OpenGraphData> implements OnInit {\r\n private _pageId = '';\r\n public ogImageUploadUrl = '';\r\n\r\n @Input()\r\n public label = '';\r\n\r\n public ngOnInit(): void {\r\n this.editable.externalSaveCall.subscribe(() => {\r\n this.editable.save();\r\n });\r\n }\r\n\r\n @Input()\r\n public set pageId(value: string) {\r\n this._pageId = value;\r\n this.ogImageUploadUrl = `/api/admin/page/Og-Image?pageId=${this.pageId}`; // todo: replace with link to single image api\r\n }\r\n\r\n public get pageId(): string {\r\n return this._pageId;\r\n }\r\n\r\n public ResToSrc(res: { url: string }): string {\r\n return res.url;\r\n }\r\n}\r\n","<bonc-form-controls *ngIf=\"editable.value\" [editable]=\"editable\">\r\n <h2 *ngIf=\"label\">{{label}}</h2>\r\n\r\n <div class=\"form-group\">\r\n <label>Title</label>\r\n <bonc-translation-input [text]=\"editable.value.title\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-input>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label>Description</label>\r\n <bonc-translation-textarea [text]=\"editable.value.description\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-textarea>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label>Share image | 1200x630px</label>\r\n <!-- <simple-file-uploader *ngIf=\"locale === 'en'\"\r\n [(src)]=\"editable.value.ogImage.en\"\r\n [forceUploadUrl]=\"ogImageUploadUrl\"\r\n [uploadType]=\"MediaType.Image\"\r\n [needDelete]=\"true\"\r\n (deleteFile)=\"deleteOgImage()\"\r\n [ratio]=\"1200/630\"\r\n [resToSrc]=\"ResToSrc\"\r\n (srcChange)=\"editable.startEditing(); editable.patchSave('ogImage',editable.value.ogImage)\">\r\n </simple-file-uploader>\r\n\r\n <simple-file-uploader *ngIf=\"locale === 'ru'\"\r\n [(src)]=\"editable.value.ogImage.ru\"\r\n [forceUploadUrl]=\"ogImageUploadUrl\"\r\n [uploadType]=\"MediaType.Image\"\r\n [needDelete]=\"true\"\r\n (deleteFile)=\"deleteOgImage()\"\r\n [ratio]=\"1200/630\"\r\n [resToSrc]=\"ResToSrc\"\r\n (srcChange)=\"editable.startEditing(); editable.patchSave('ogImage',editable.value.ogImage)\">\r\n </simple-file-uploader> -->\r\n\r\n </div>\r\n\r\n</bonc-form-controls>\r\n\r\n<div *ngIf=\"!editable.value\">Editable Value canot be null or undefined</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormBaseComponent } from '../core-components/form-base.component';\r\n\r\n@Component({\r\n selector: 'bonc-unknown-form',\r\n templateUrl: './unknown-form.component.html',\r\n styleUrls: ['./unknown-form.component.scss'],\r\n inputs: FormBaseComponent.inputs\r\n})\r\nexport class UnknownFormComponent extends FormBaseComponent<string> implements OnInit {\r\n @Input()\r\n public label = '';\r\n\r\n ngOnInit(): void {\r\n this.editable.externalSaveCall.subscribe(() => {\r\n this.editable.save();\r\n });\r\n }\r\n}\r\n","<label>Unknown form:<b>{{label}}</b></label>\r\n<pre><ng-content></ng-content></pre>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { LocalizedString } from '@candy-kingdom/bonnie';\r\n\r\nimport { EditableDirective, FormBaseComponent } from '../core-components';\r\nimport { TextEditorField } from '../core';\r\n\r\n@Component({\r\n selector: 'bonc-translation-form',\r\n templateUrl: './translation-form.component.html',\r\n styleUrls: ['./translation-form.component.scss'],\r\n inputs: FormBaseComponent.inputs,\r\n hostDirectives: [EditableDirective]\r\n})\r\nexport class TranslationFormComponent extends FormBaseComponent<LocalizedString> implements OnInit {\r\n public readonly TextEditorField = TextEditorField;\r\n\r\n @Input({ required: true })\r\n public field!: TextEditorField;\r\n\r\n @Input() label?: string;\r\n\r\n\r\n ngOnInit(): void {\r\n this.editable.externalSaveCall.subscribe(() => {\r\n this.editable.save();\r\n });\r\n }\r\n}\r\n","<bonc-form-controls *ngIf=\"editable.value\" [editable]=\"editable\">\r\n <label *ngIf=\"label\">{{label}}</label>\r\n\r\n <bonc-translation-input *ngIf=\"field === TextEditorField.Input\"\r\n [text]=\"editable.value\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-input>\r\n\r\n\r\n <bonc-translation-textarea *ngIf=\"field === TextEditorField.Textarea\"\r\n [text]=\"editable.value\"\r\n [minRows]=\"2\"\r\n [locale]=\"locale\"\r\n (startEditing)=\"editable.startEditing()\"\r\n (changed)=\"editable.updateDirty()\"\r\n (blurred)=\"editable.updateDirty()\">\r\n </bonc-translation-textarea>\r\n</bonc-form-controls>\r\n\r\n<div *ngIf=\"editable.value===undefined\">Editable value canot be undefined</div>\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[boncSkeletonEditorAnchor]'\r\n})\r\nexport class SkeletonEditorAnchorDirective {\r\n\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}\r\n","import { EventEmitter, HostBinding, Component, Input } from '@angular/core';\r\n\r\nimport { Bone } from '@candy-kingdom/bonnie';\r\n\r\nimport { ContentPreset } from '../skeleton-editor/ContentPreset';\r\nimport { IBoneEditor } from '../skeleton-editor/IBoneEditor';\r\nimport { DeviceType } from '../core';\r\n\r\n@Component({ template: '' })\r\nexport abstract class BoneEditorBaseComponent<TBone extends Bone> implements IBoneEditor<TBone> {\r\n public readonly editing: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n public readonly saved: EventEmitter<Bone> = new EventEmitter<Bone>();\r\n public readonly removed: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public readonly noPresets: boolean;\r\n\r\n @Input({ required: true })\r\n public locale!: string;\r\n public device = DeviceType.NotSet;\r\n\r\n private _bone!: TBone;\r\n private _storedData: string = '';\r\n\r\n private _currentPreset: ContentPreset<TBone> | undefined;\r\n\r\n protected readonly presets: ReadonlyArray<ContentPreset<TBone>>;\r\n private _isDirty = false;\r\n private _isEditing = false;\r\n\r\n public abstract onReset(): void;\r\n public abstract onFinishEditing(): void;\r\n\r\n protected abstract getPresets(): ContentPreset<TBone>[];\r\n\r\n constructor() {\r\n this.presets = this.getPresets();\r\n\r\n if (this.presets === undefined || this.presets === null)\r\n throw new Error('presets cannot be undefined in ContentPreset constructor');\r\n\r\n if (this.presets.length === 0) {\r\n this.presets = [\r\n\r\n {\r\n title: 'default',\r\n isActive: () => true,\r\n transformer: bone => bone,\r\n clean: bone => bone,\r\n }\r\n ];\r\n }\r\n\r\n this.noPresets = this.presets.length === 1;\r\n }\r\n\r\n @HostBinding('class.mobile') get isMobile(): boolean {\r\n return this.device !== undefined && this.device === DeviceType.Mobile;\r\n }\r\n\r\n @HostBinding('class.tablet') get isTablet(): boolean {\r\n return this.device !== undefined && this.device === DeviceType.Tablet;\r\n }\r\n\r\n @HostBinding('class.desktop') get isDesktop(): boolean {\r\n return this.device !== undefined && this.device === DeviceType.Desktop;\r\n }\r\n\r\n public get currentPreset(): ContentPreset<TBone> | undefined {\r\n return this._currentPreset;\r\n }\r\n\r\n public get bone(): TBone {\r\n return this._bone;\r\n }\r\n\r\n @Input({ required: true })\r\n public set bone(newData: TBone) {\r\n this._isDirty = false;\r\n this._storedData = JSON.stringify(newData);\r\n this._bone = JSON.parse(this._storedData);\r\n this.updatePresetByData();\r\n }\r\n\r\n public get isDirty(): boolean {\r\n return this._isDirty;\r\n }\r\n\r\n public get isEditing(): boolean {\r\n return this._isEditing;\r\n }\r\n\r\n public resetData(): void {\r\n this._isEditing = false;\r\n this.bone = JSON.parse(this._storedData);\r\n\r\n if (this.onReset !== undefined)\r\n this.onReset();\r\n\r\n this.editing.emit(false);\r\n }\r\n\r\n public updateDirty(): void {\r\n this._isDirty = JSON.stringify(this._bone) !== this._storedData;\r\n }\r\n\r\n public markAsDirty(): void {\r\n this._isDirty = true;\r\n }\r\n\r\n public remove(): void {\r\n this.removed.next();\r\n }\r\n\r\n public save(): void {\r\n if (!this.isDirty)\r\n return;\r\n\r\n this._isDirty = false;\r\n\r\n this.finishEditing();\r\n\r\n this._storedData = JSON.stringify(this._bone);\r\n\r\n const clonedData: TBone = JSON.parse(this._storedData);\r\n this.saved.emit(clonedData);\r\n }\r\n\r\n public startEditing(): void {\r\n if (this._isEditing) {\r\n this.updateDirty();\r\n return;\r\n }\r\n\r\n this._isEditing = true;\r\n this.updateDirty();\r\n\r\n this.editing.emit(true);\r\n }\r\n\r\n public finishEditing(): void {\r\n if (this._isDirty)\r\n throw new Error('Нельзя закрывать редактирование когда есть изменения. Надо сохранить либо зарезетить.');\r\n\r\n if (this.onFinishEditing !== undefined)\r\n this.onFinishEditing();\r\n\r\n this._isEditing = false;\r\n }\r\n\r\n public nextPreset(): void {\r\n const newIndex = this._currentPreset === undefined ? 0 : this.presets.indexOf(this._currentPreset) + 1;\r\n this.applyPresetAtIndex(newIndex);\r\n }\r\n\r\n private applyPresetAtIndex = (newIndex: number): void => {\r\n newIndex = newIndex < 0 ? 0 : newIndex % this.presets.length;\r\n\r\n const currentIndex = this._currentPreset === undefined ? -1 : this.presets.indexOf(this._currentPreset);\r\n if (currentIndex === newIndex)\r\n return;\r\n\r\n this._currentPreset = this.presets[newIndex];\r\n this._currentPreset.transformer(this._bone);\r\n\r\n this.updateDirty();\r\n }\r\n\r\n private updatePresetByData = (): void => {\r\n const countOfActive = this.presets.map(p => p.isActive(this._bone)).filter(p => p).length;\r\n\r\n if (countOfActive !== 1)\r\n throw new Error(`active preset count should be equal 1, but it was: ${countOfActive}. ${this.constructor.name}`);\r\n\r\n for (let i = 0; this.presets.length; i++) {\r\n const preset = this.presets[i];\r\n\r\n if (preset.isActive(this._bone)) {\r\n this.applyPresetAtIndex(i);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { Bone } from '@candy-kingdom/bonnie';\r\n\r\nimport { ContentPreset } from '../../skeleton-editor/ContentPreset';\r\nimport { BoneEditorBaseComponent } from '../bone-editor-base.component';\r\n\r\n@Component({\r\n selector: 'bonc-unknown-bone-editor',\r\n templateUrl: './unknown-bone-editor.component.html',\r\n styleUrls: ['./unknown-bone-editor.component.scss']\r\n})\r\nexport class UnknownBoneEditorComponent extends BoneEditorBaseComponent<Bone> {\r\n public onFinishEditing(): void { }\r\n public onReset(): void { }\r\n\r\n protected getPresets(): ContentPreset<Bone>[] {\r\n return [];\r\n }\r\n}\r\n","<p>Unknown Bone Editor | bone type: {{bone.type}}</p>\r\n<pre>{{bone | json}}</pre>\r\n","import { Component, ComponentFactoryResolver, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { Bone } from '@candy-kingdom/bonnie';\r\n\r\nimport { SkeletonEditorAnchorDirective } from '../skeleton-editor-anchor.directive';\r\nimport { DeviceType } from '../../core';\r\nimport { IBoneEditor } from '../IBoneEditor';\r\nimport { BoneEditorMap } from '../BoneEditorMap';\r\nimport { UnknownBoneEditorComponent } from '../../bone-editors/unknown-bone-editor/unknown-bone-editor.component';\r\n\r\n// todo: rename class\r\n@Component({\r\n selector: 'bonc-bone-editor-container',\r\n templateUrl: './bone-editor-container.component.html',\r\n styleUrls: ['./bone-editor-container.component.scss']\r\n})\r\nexport class BoneEditorContainerComponent implements OnChanges {\r\n @ViewChild(SkeletonEditorAnchorDirective, { static: true })\r\n public anchor!: SkeletonEditorAnchorDirective;\r\n\r\n @Output()\r\n public removed: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @Output()\r\n public saved: EventEmitter<Bone> = new EventEmitter<Bone>();\r\n\r\n @Output()\r\n public editing: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n public DeviceType = DeviceType;\r\n\r\n public editor!: IBoneEditor;\r\n\r\n public themePopupIsShown = false;\r\n\r\n private _bone!: Bone;\r\n\r\n private removeSubscription?: Subscription;\r\n private saveSubscription?: Subscription;\r\n private changedSubscription?: Subscription;\r\n\r\n @Input({ required: true })\r\n public locale!: string;\r\n\r\n @Input()\r\n public device = DeviceType.NotSet;\r\n\r\n constructor(private readonly componentFactoryResolver: ComponentFactoryResolver) {\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (this.editor === undefined || this.editor === null)\r\n return;\r\n\r\n this.editor.locale = this.locale;\r\n this.editor.device = this.device;\r\n }\r\n\r\n @Input({ required: true })\r\n public map!: BoneEditorMap\r\n\r\n public get bone(): Bone {\r\n return this._bone;\r\n }\r\n\r\n @Input({ required: true })\r\n public set bone(newBone: Bone) {\r\n this._bone = newBone;\r\n\r\n if (this.removeSubscription) {\r\n this.removeSubscription.unsubscribe();\r\n this.removeSubscription = undefined;\r\n }\r\n\r\n if (this.saveSubscription) {\r\n this.saveSubscription.unsubscribe();\r\n this.saveSubscription = undefined;\r\n }\r\n\r\n if (this.changedSubscription) {\r\n this.changedSubscription.unsubscribe();\r\n this.changedSubscription = undefined;\r\n }\r\n\r\n const viewContainerRef = this.anchor.viewContainerRef;\r\n\r\n viewContainerRef.clear();\r\n\r\n const componentType = this.map.get(newBone.type) ?? UnknownBoneEditorComponent;\r\n\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);\r\n const boneEditorRef = viewContainerRef.createComponent(componentFactory);\r\n\r\n this.editor = boneEditorRef.instance;\r\n this.editor.bone = newBone;\r\n\r\n this.removeSubscription = this.editor.removed.subscribe(() => {\r\n this.removed.next();\r\n });\r\n\r\n this.changedSubscription = this.editor.editing.subscribe\r\n (\r\n (isEditing: boolean) => {\r\n this.editing.next(isEditing);\r\n }\r\n );\r\n\r\n this.saveSubscription = this.editor.saved.subscribe(\r\n (newBoneValue: Bone) => {\r\n this.saved.next(newBoneValue);\r\n }\r\n );\r\n\r\n this.ngOnChanges();\r\n }\r\n\r\n public nextPreset = (): void => {\r\n if (this.editor === undefined || this.editor === null)\r\n return;\r\n\r\n this.editor.nextPreset();\r\n }\r\n\r\n // todo: add or remove visibility feature\r\n\r\n // public setDisabled = (disabled: boolean): void => {\r\n // if (this.editor === undefined || this.editor === null)\r\n // return;\r\n\r\n // this.editor.startEditing();\r\n\r\n // if (this.device === DeviceType.Desktop)\r\n // this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Desktop, !disabled);\r\n // else if (this.device === DeviceType.Tablet)\r\n // this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Tablet, !disabled);\r\n // else if (this.device === DeviceType.Mobile)\r\n // this.editor.bone.visibility = setOrRemoveFlag(this.editor.bone.visibility, DeviceVisibility.Mobile, !disabled);\r\n\r\n // this.editor.updateDirty();\r\n // }\r\n\r\n public get disabled(): boolean {\r\n if (this.editor === undefined || this.editor === null)\r\n throw new Error('editor should have been set');\r\n\r\n return false;\r\n // todo: add or remove visibility feature\r\n // const visibility = this.editor.bone.visibility;\r\n\r\n // if (this.device === DeviceType.Desktop && hasFlag(visibility, DeviceVisibility.Desktop))\r\n // return false;\r\n\r\n // if (this.device === DeviceType.Tablet && hasFlag(visibility, DeviceVisibility.Tablet))\r\n // return false;\r\n\r\n // if (this.device === DeviceType.Mobile && hasFlag(visibility, DeviceVisibility.Mobile))\r\n // return false;\r\n\r\n // return true;\r\n }\r\n}\r\n","<div *ngIf=\"editor\" class=\"left bar\" [class.inactive]=\"editor.noPresets\">\r\n <!-- <a *ngFor=\"let control of editor.controls\" (click)=\"control.activate()\">{{control.label}}</a> -->\r\n <!-- <a (click)=\"setDisabled(!disabled)\" class=\"disabled\">block {{disabled ? 'disabled' : 'enabled'}} ({{editor.bone.visibility}})</a> -->\r\n <a *ngIf=\"editor.currentPreset && !editor.noPresets\" (click)=\"nextPreset()\" class=\"preset\">style:<br />{{editor.currentPreset.title}}</a>\r\n</div>\r\n\r\n<div class=\"editor-container\"\r\n [class.disabled]=\"disabled\"\r\n [style.width]=\"\r\n device === DeviceType.Desktop ? '75vw'\r\n : device === DeviceType.Tablet ? '55vw'\r\n : device === DeviceType.Mobile ? '35vw'\r\n : '75vw' \">\r\n <ng-template boncSkeletonEditorAnchor>\r\n </ng-template>\r\n</div>\r\n\r\n<div *ngIf=\"editor\" [class.active]=\"editor.isEditing || editor.isDirty\" class=\"right bar\">\r\n <!-- <a *ngIf=\"!editor.isEditing\" (click)=\"editor.remove()\" class=\"delete\">!!! remove</a> -->\r\n <a *ngIf=\"editor.isDirty\" (click)=\"editor.resetData()\" class=\"reset\">reset</a>\r\n <a *ngIf=\"editor.isEditing && !editor.isDirty\" (click)=\"editor.finishEditing()\" class=\"close\">close</a>\r\n <a *ngIf=\"editor.isDirty\" (click)=\"editor.save()\" class=\"save\">apply</a>\r\n</div>\r\n","import { Component, Host, Input, OnChanges, OnInit, QueryList, ViewChildren } from '@angular/core';\r\n\r\nimport { Bone } from '@candy-kingdom/bonnie';\r\nimport { BoneEditorContainerComponent } from './bone-editor-container/bone-editor-container.component';\r\nimport { EditableDirective } from '../core-components/editable.directive';\r\nimport { DeviceType } from '../core';\r\nimport { IBoneTemplate } from './IBoneTemplate';\r\nimport { BoneEditorMap } from './BoneEditorMap';\r\n\r\n// todo: rename class\r\n@Component({\r\n selector: 'bonc-skeleton-editor',\r\n templateUrl: './skeleton-editor.component.html',\r\n styleUrls: ['./skeleton-editor.component.scss'],\r\n hostDirectives: [EditableDirective]\r\n})\r\nexport class SkeletonEditorComponent implements OnInit, OnChanges {\r\n @ViewChildren('boneEditorContainer')\r\n public boneEditorContainerList!: QueryList<BoneEditorContainerComponent>;\r\n\r\n @Input({ required: true })\r\n public locale!: string;\r\n\r\n @Input()\r\n public device = DeviceType.NotSet;\r\n\r\n public readonly templatesAreShown: boolean[] = [];\r\n\r\n constructor(@Host() public editable: EditableDirective<Bone[]>) {\r\n\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.editable.externalSaveCall.subscribe(() => {\r\n this.boneEditorContainerList.forEach\r\n (\r\n editorContainer => editorContainer.editor?.save()\r\n );\r\n\r\n this.editable.save();\r\n });\r\n\r\n this.editable.canceled.subscribe(() => {\r\n this.boneEditorContainerList.forEach\r\n (\r\n editorContainer => editorContainer.editor?.resetData()\r\n );\r\n\r\n this.editable.save();\r\n });\r\n }\r\n\r\n @Input({ required: true })\r\n public map!: BoneEditorMap;\r\n\r\n public ngOnChanges(): void {\r\n this.templatesAreShown.splice(0, this.templatesAreShown.length);\r\n if (this.bones === undefined)\r\n return;\r\n\r\n this.bones.forEach(() => this.templatesAreShown.push(false));\r\n this.templatesAreShown.push(false);\r\n }\r\n\r\n @Input({ required: true })\r\n public templates!: ReadonlyArray<IBoneTemplate>;\r\n\r\n\r\n public get bones(): Bone[] {\r\n return this.editable?.value ?? [];\r\n }\r\n\r\n public boneEditHandler(isEditing: boolean): void {\r\n if (isEditing)\r\n this.editable.startEditing();\r\n else {\r\n const allClosed = this.boneEditorContainerList\r\n .filter(x => x.editor !== undefined && x.editor.isEditing)\r\n .length === 0;\r\n\r\n this.editable.updateDirty();\r\n\r\n if (!this.editable.isDirty && allClosed)\r\n this.editable.close();\r\n }\r\n }\r\n\r\n public boneChangeHandler(index: number, newBoneValue: Bone): void {\r\n if (Array.isArray(this.editable.value)) {\r\n this.editable.value[index] = newBoneValue;\r\n }\r\n\r\n this.editable.save();\r\n }\r\n\r\n public removeBone(boneIndex: number): void {\r\n if (this.bones === undefined || this.bones === null)\r\n return;\r\n\r\n if (!confirm('Вы уверены, что хотите удалить компонент?'))\r\n return;\r\n\r\n this.bones.splice(boneIndex, 1);\r\n\r\n if (!this.editable.inEditMode)\r\n this.editable.startEditing();\r\n\r\n this.editable.save();\r\n }\r\n\r\n public moveDown(boneIndex: number): void {\r\n if (boneIndex >= this.bones.length - 1)\r\n return;\r\n\r\n this.swapBones(boneIndex, boneIndex + 1);\r\n }\r\n\r\n public moveUp(boneIndex: number): void {\r\n if (boneIndex <= 0)\r\n return;\r\n\r\n this.swapBones(boneIndex - 1, boneIndex);\r\n }\r\n\r\n public createBone(index: number, selectedTemplate: IBoneTemplate): void {\r\n const newBone = selectedTemplate.boneFactory();\r\n\r\n this.bones.splice(index, 0, newBone);\r\n }\r\n\r\n private swapBones(index1: number, index2: number): void {\r\n if (index1 < 0 || index2 < 0 || index1 >= this.bones.length || index2 >= this.bones.length)\r\n throw new Error(`ошибка swapBones. неправильные индексы ${index1} и ${index2}. bone count: ${this.bones.length}`);\r\n\r\n const tempBone = this.bones[index1];\r\n this.bones[index1] = this.bones[index2];\r\n this.bones[index2] = tempBone;\r\n }\r\n}\r\n\r\n\r\n","<ng-template #controls let-index='index'>\r\n <div [class.appearable]=\"index > 0 && index < bones.length\" class=\"controls\">\r\n <div *ngIf=\"index < bones.length\" class=\"up-down\">\r\n <a *ngIf=\"index > 0\" (click)=\"moveDown(index - 1)\" class=\"down\">move down</a>\r\n <a *ngIf=\"index > 0\" (click)=\"moveUp(index)\" class=\"up\">move up</a>\r\n </div>\r\n <a (click)=\"templatesAreShown[index] = true\" class=\"add\">create</a>\r\n <a *ngIf=\"index < bones.length\" (click)=\"removeBone(index)\" class=\"remove\">remove</a>\r\n </div>\r\n\r\n <div *ngIf=\"templatesAreShown[index]\" class=\"templates\">\r\n <a *ngFor=\"let template of templates\" (click)=\"templatesAreShown[index] = false; createBone(index,template);\">{{template.title}}</a>\r\n <a (click)=\"templatesAreShown[index] = false\">Close</a>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- todo: add trackby -->\r\n<ng-container *ngFor=\"let bone of bones; let i = index\">\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"controls; context: {index: i}\"></ng-container>\r\n </ng-container>\r\n\r\n <bonc-bone-editor-container #boneEditorContainer\r\n [map]=\"map\"\r\n [bone]=\"bone\"\r\n [locale]=\"locale\"\r\n [device]=\"device\"\r\n (removed)=\"removeBone(i)\"\r\n (editing)=\"boneEditHandler($event)\"\r\n (saved)=\"boneChangeHandler(i, $event)\">\r\n </bonc-bone-editor-container>\r\n\r\n</ng-container>\r\n\r\n<ng-container *ngTemplateOutlet=\"controls; context: {index: bones.length}\"></ng-container>\r\n","import { Bone } from '@candy-kingdom/bonnie';\r\n\r\nexport interface ContentPreset<out TBone extends Bone> {\r\n title: string;\r\n isActive(data: TBone): boolean;\r\n clean(data: TBone): void;\r\n transformer(bone: TBone): void;\r\n}\r\n\r\nexport function createPreset<TBone extends Bone>(params: { title: string, style: string }): ContentPreset<TBone> {\r\n return {\r\n title: params.title,\r\n isActive: x => x.style === params.style,\r\n transformer: bone => bone.style = params.style,\r\n clean: bone => bone.style = params.style,\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\r\n\r\nimport { AdminControlsComponent } from './admin-controls/';\r\nimport { EditableDirective, LinkPopupComponent } from './core-components';\r\nimport { TextFormComponent } from './text-form';\r\nimport { EditableGroupComponent } from './core-components';\r\nimport { FormControlsComponent } from './form-controls';\r\nimport { UnknownFormComponent } from './unknown-form';\r\nimport { SeoFormComponent } from './seo-form';\r\nimport { TranslationTextareaComponent } from './translation-textarea';\r\nimport { TranslationInputComponent } from './translation-input';\r\nimport { TranslationFormComponent } from './translation-form';\r\nimport { BoneEditorContainerComponent, SkeletonEditorAnchorDirective, SkeletonEditorComponent } from './skeleton-editor';\r\nimport { UnknownBoneEditorComponent } from './bone-editors/unknown-bone-editor/unknown-bone-editor.component';\r\nimport { BonnieModule } from '@candy-kingdom/bonnie';\r\nimport { MediaUploaderComponent } from './media-uploader/media-uploader.component';\r\n\r\nconst components = [\r\n TranslationInputComponent,\r\n TranslationTextareaComponent,\r\n AdminControlsComponent,\r\n EditableGroupComponent,\r\n FormControlsComponent,\r\n TranslationFormComponent,\r\n TextFormComponent,\r\n SeoFormComponent,\r\n UnknownFormComponent,\r\n SkeletonEditorComponent,\r\n SkeletonEditorAnchorDirective,\r\n BoneEditorContainerComponent,\r\n UnknownBoneEditorComponent,\r\n MediaUploaderComponent,\r\n LinkPopupComponent\r\n];\r\n\r\nconst standaloneDirectives = [\r\n EditableDirective\r\n];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ],\r\n providers:\r\n [\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n CdkTextareaAutosize,\r\n BonnieModule,\r\n ...standaloneDirectives\r\n ],\r\n exports: [\r\n CommonModule,\r\n FormsModule,\r\n BonnieModule,\r\n ...components,\r\n ...standaloneDirectives\r\n ]\r\n})\r\nexport class BonnieCmsModule { } // todo: move to standalone\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EditableDirective","i2","i1","i3.TranslationInputComponent","i4.TranslationTextareaComponent","i3","i4.FormControlsComponent","i5.FormControlsComponent","i2.SkeletonEditorAnchorDirective","i3.BoneEditorContainerComponent"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export * from './lib/generated';
2
+ export * from './lib/core';
3
+ export * from './lib/core-components';
4
+ export * from './lib/admin-controls';
5
+ export * from './lib/form-controls';
6
+ export * from './lib/media-uploader';
7
+ export * from './lib/text-form';
8
+ export * from './lib/seo-form';
9
+ export * from './lib/unknown-form';
10
+ export * from './lib/translation-form';
11
+ export * from './lib/translation-input';
12
+ export * from './lib/translation-textarea';
13
+ export * from './lib/skeleton-editor';
14
+ export * from './lib/bone-editors';
15
+ export * from './lib/bonnie-cms.module';
@@ -0,0 +1,14 @@
1
+ import { DeviceType } from '../core';
2
+ import { EditableGroupComponent } from '../core-components';
3
+ import * as i0 from "@angular/core";
4
+ export declare class AdminControlsComponent {
5
+ readonly DeviceType: typeof DeviceType;
6
+ editableGroup: EditableGroupComponent;
7
+ deviceControls: boolean;
8
+ locale: string;
9
+ device: DeviceType;
10
+ changeLocale(): void;
11
+ changeDevice(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminControlsComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminControlsComponent, "bonc-admin-controls", never, { "editableGroup": { "alias": "editableGroup"; "required": true; }; "deviceControls": { "alias": "deviceControls"; "required": false; }; }, {}, never, never, false, never>;
14
+ }
@@ -0,0 +1 @@
1
+ export * from './admin-controls.component';
@@ -0,0 +1,44 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { Bone } from '@candy-kingdom/bonnie';
3
+ import { ContentPreset } from '../skeleton-editor/ContentPreset';
4
+ import { IBoneEditor } from '../skeleton-editor/IBoneEditor';
5
+ import { DeviceType } from '../core';
6
+ import * as i0 from "@angular/core";
7
+ export declare abstract class BoneEditorBaseComponent<TBone extends Bone> implements IBoneEditor<TBone> {
8
+ readonly editing: EventEmitter<boolean>;
9
+ readonly saved: EventEmitter<Bone>;
10
+ readonly removed: EventEmitter<void>;
11
+ readonly noPresets: boolean;
12
+ locale: string;
13
+ device: DeviceType;
14
+ private _bone;
15
+ private _storedData;
16
+ private _currentPreset;
17
+ protected readonly presets: ReadonlyArray<ContentPreset<TBone>>;
18
+ private _isDirty;
19
+ private _isEditing;
20
+ abstract onReset(): void;
21
+ abstract onFinishEditing(): void;
22
+ protected abstract getPresets(): ContentPreset<TBone>[];
23
+ constructor();
24
+ get isMobile(): boolean;
25
+ get isTablet(): boolean;
26
+ get isDesktop(): boolean;
27
+ get currentPreset(): ContentPreset<TBone> | undefined;
28
+ get bone(): TBone;
29
+ set bone(newData: TBone);
30
+ get isDirty(): boolean;
31
+ get isEditing(): boolean;
32
+ resetData(): void;
33
+ updateDirty(): void;
34
+ markAsDirty(): void;
35
+ remove(): void;
36
+ save(): void;
37
+ startEditing(): void;
38
+ finishEditing(): void;
39
+ nextPreset(): void;
40
+ private applyPresetAtIndex;
41
+ private updatePresetByData;
42
+ static ɵfac: i0.ɵɵFactoryDeclaration<BoneEditorBaseComponent<any>, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<BoneEditorBaseComponent<any>, "ng-component", never, { "locale": { "alias": "locale"; "required": true; }; "bone": { "alias": "bone"; "required": true; }; }, {}, never, never, false, never>;
44
+ }
@@ -0,0 +1,2 @@
1
+ export * from './unknown-bone-editor';
2
+ export * from './bone-editor-base.component';
@@ -0,0 +1 @@
1
+ export * from './unknown-bone-editor.component';
@@ -0,0 +1,11 @@
1
+ import { Bone } from '@candy-kingdom/bonnie';
2
+ import { ContentPreset } from '../../skeleton-editor/ContentPreset';
3
+ import { BoneEditorBaseComponent } from '../bone-editor-base.component';
4
+ import * as i0 from "@angular/core";
5
+ export declare class UnknownBoneEditorComponent extends BoneEditorBaseComponent<Bone> {
6
+ onFinishEditing(): void;
7
+ onReset(): void;
8
+ protected getPresets(): ContentPreset<Bone>[];
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnknownBoneEditorComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<UnknownBoneEditorComponent, "bonc-unknown-bone-editor", never, {}, {}, never, never, false, never>;
11
+ }
@@ -0,0 +1,26 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./translation-input/translation-input.component";
3
+ import * as i2 from "./translation-textarea/translation-textarea.component";
4
+ import * as i3 from "./admin-controls/admin-controls.component";
5
+ import * as i4 from "./core-components/editable-group";
6
+ import * as i5 from "./form-controls/form-controls.component";
7
+ import * as i6 from "./translation-form/translation-form.component";
8
+ import * as i7 from "./text-form/text-form.component";
9
+ import * as i8 from "./seo-form/seo-form.component";
10
+ import * as i9 from "./unknown-form/unknown-form.component";
11
+ import * as i10 from "./skeleton-editor/skeleton-editor.component";
12
+ import * as i11 from "./skeleton-editor/skeleton-editor-anchor.directive";
13
+ import * as i12 from "./skeleton-editor/bone-editor-container/bone-editor-container.component";
14
+ import * as i13 from "./bone-editors/unknown-bone-editor/unknown-bone-editor.component";
15
+ import * as i14 from "./media-uploader/media-uploader.component";
16
+ import * as i15 from "./core-components/link-popup/link-popup.component";
17
+ import * as i16 from "@angular/common";
18
+ import * as i17 from "@angular/forms";
19
+ import * as i18 from "@angular/cdk/text-field";
20
+ import * as i19 from "@candy-kingdom/bonnie";
21
+ import * as i20 from "./core-components/editable.directive";
22
+ export declare class BonnieCmsModule {
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<BonnieCmsModule, never>;
24
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BonnieCmsModule, [typeof i1.TranslationInputComponent, typeof i2.TranslationTextareaComponent, typeof i3.AdminControlsComponent, typeof i4.EditableGroupComponent, typeof i5.FormControlsComponent, typeof i6.TranslationFormComponent, typeof i7.TextFormComponent, typeof i8.SeoFormComponent, typeof i9.UnknownFormComponent, typeof i10.SkeletonEditorComponent, typeof i11.SkeletonEditorAnchorDirective, typeof i12.BoneEditorContainerComponent, typeof i13.UnknownBoneEditorComponent, typeof i14.MediaUploaderComponent, typeof i15.LinkPopupComponent], [typeof i16.CommonModule, typeof i17.FormsModule, typeof i18.CdkTextareaAutosize, typeof i19.BonnieModule, typeof i20.EditableDirective], [typeof i16.CommonModule, typeof i17.FormsModule, typeof i19.BonnieModule, typeof i1.TranslationInputComponent, typeof i2.TranslationTextareaComponent, typeof i3.AdminControlsComponent, typeof i4.EditableGroupComponent, typeof i5.FormControlsComponent, typeof i6.TranslationFormComponent, typeof i7.TextFormComponent, typeof i8.SeoFormComponent, typeof i9.UnknownFormComponent, typeof i10.SkeletonEditorComponent, typeof i11.SkeletonEditorAnchorDirective, typeof i12.BoneEditorContainerComponent, typeof i13.UnknownBoneEditorComponent, typeof i14.MediaUploaderComponent, typeof i15.LinkPopupComponent, typeof i20.EditableDirective]>;
25
+ static ɵinj: i0.ɵɵInjectorDeclaration<BonnieCmsModule>;
26
+ }
@@ -0,0 +1,6 @@
1
+ export declare enum DeviceType {
2
+ NotSet = 0,
3
+ Mobile = 1,
4
+ Tablet = 2,
5
+ Desktop = 3
6
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum DeviceVisibility {
2
+ None = 0,
3
+ Desktop = 1,
4
+ Tablet = 2,
5
+ Mobile = 4,
6
+ All = 7
7
+ }
@@ -0,0 +1,2 @@
1
+ import { PixMediaUnion } from "@candy-kingdom/bonnie";
2
+ export type MediaType = PixMediaUnion["type"];
@@ -0,0 +1,5 @@
1
+ export declare enum TextEditorField {
2
+ NotSet = 0,
3
+ Input = 1,
4
+ Textarea = 2
5
+ }
@@ -0,0 +1,4 @@
1
+ export declare const regExpIsMobile: RegExp;
2
+ export declare function isLocalUrlString(url: string): boolean;
3
+ export declare function hasFlag<T extends number>(value: T, flag: T): boolean;
4
+ export declare function setOrRemoveFlag<T extends number>(value: T, flag: T, enabled: boolean): T;
@@ -0,0 +1,5 @@
1
+ export * from './DeviceType';
2
+ export * from './MediaType';
3
+ export * from './TextEditorField';
4
+ export * from './Utils';
5
+ export * from './DeviceVisibility';
@@ -0,0 +1,24 @@
1
+ import { QueryList, AfterContentInit, OnDestroy, EventEmitter } from '@angular/core';
2
+ import { EditableDirective } from './editable.directive';
3
+ import * as i0 from "@angular/core";
4
+ export declare class EditableGroupComponent implements AfterContentInit, OnDestroy {
5
+ readonly editModeChange: EventEmitter<boolean>;
6
+ readonly saved: EventEmitter<void>;
7
+ readonly requestEditorClose: EventEmitter<boolean>;
8
+ editables: QueryList<EditableDirective>;
9
+ private readonly subscriptions;
10
+ private _inEditMode;
11
+ private readonly saveSubject;
12
+ ngAfterContentInit(): void;
13
+ get inEditMode(): boolean;
14
+ saveAll(): void;
15
+ cancelAll(): void;
16
+ closeAll(): void;
17
+ private clearSubscribtions;
18
+ private updateSubscriptions;
19
+ private onSave;
20
+ private updateEditMode;
21
+ ngOnDestroy(): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditableGroupComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditableGroupComponent, "bonc-editable-group", never, {}, { "editModeChange": "editModeChange"; "saved": "saved"; "requestEditorClose": "requestEditorClose"; }, ["editables"], ["*"], false, never>;
24
+ }
@@ -0,0 +1,43 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { Subscription } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export declare class EditableDirective<T = unknown> {
5
+ readonly saved: EventEmitter<T>;
6
+ readonly editModeChange: EventEmitter<boolean>;
7
+ readonly externalSaveCall: EventEmitter<void>;
8
+ readonly canceled: EventEmitter<void>;
9
+ readonly valueChange: EventEmitter<T>;
10
+ private propagateChange;
11
+ private _inEditMode;
12
+ private _isDirty;
13
+ private _value?;
14
+ private _originalValue?;
15
+ private _storedData?;
16
+ get inEditMode(): boolean;
17
+ subscribe(params: {
18
+ readonly onValueChange?: (x: T) => void;
19
+ readonly onEditModeChange?: (x: boolean) => void;
20
+ readonly onSaveRequest?: () => void;
21
+ }): Subscription[];
22
+ requestSave(): void;
23
+ startEditing: () => void;
24
+ save(newData?: T): void;
25
+ patchSave(propName: keyof T, newDataParts: T[keyof T]): void;
26
+ silentPatch(dict: Partial<T>): void;
27
+ cancel(): void;
28
+ close(): void;
29
+ private finishEditing;
30
+ private setValue;
31
+ set value(newValue: T | undefined);
32
+ get value(): T | undefined;
33
+ updateDirty(): void;
34
+ markAsDirty(): void;
35
+ get isDirty(): boolean;
36
+ private setOriginal;
37
+ writeValue(newValue: T): void;
38
+ setDisabledState?(): void;
39
+ registerOnChange(tellAngularThatSomethingIsChanged: (newValue: T) => void): void;
40
+ registerOnTouched(): void;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditableDirective<any>, never>;
42
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EditableDirective<any>, "[boncEditable]", never, {}, { "saved": "saved"; "editModeChange": "editModeChange"; "externalSaveCall": "externalSaveCall"; "canceled": "canceled"; "valueChange": "valueChange"; }, never, never, true, never>;
43
+ }
@@ -0,0 +1,15 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { EditableDirective } from './editable.directive';
3
+ import * as i0 from "@angular/core";
4
+ export declare abstract class FormBaseComponent<TData = unknown> {
5
+ editable: EditableDirective<TData>;
6
+ readonly http: HttpClient;
7
+ static readonly inputs: string[];
8
+ protected name: string;
9
+ private _locale;
10
+ constructor(editable: EditableDirective<TData>, http: HttpClient);
11
+ set locale(value: string);
12
+ get locale(): string;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormBaseComponent<any>, [{ host: true; }, null]>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormBaseComponent<any>, "ng-component", never, { "locale": { "alias": "locale"; "required": false; }; }, {}, never, never, false, never>;
15
+ }
@@ -0,0 +1,4 @@
1
+ export * from './editable-group';
2
+ export * from './editable.directive';
3
+ export * from './form-base.component';
4
+ export * from './link-popup';
@@ -0,0 +1 @@
1
+ export * from './link-popup.component';
@@ -0,0 +1,28 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { LocalizedString } from '@candy-kingdom/bonnie';
3
+ import { TextEditorField } from '../../core';
4
+ import * as i0 from "@angular/core";
5
+ export declare class LinkPopupComponent {
6
+ readonly TextEditorField: typeof TextEditorField;
7
+ linkChange: EventEmitter<LocalizedString>;
8
+ startEditing: EventEmitter<void>;
9
+ changed: EventEmitter<void>;
10
+ blurred: EventEmitter<void>;
11
+ open: EventEmitter<void>;
12
+ closed: EventEmitter<void>;
13
+ field: TextEditorField;
14
+ LinkPopupField: typeof TextEditorField;
15
+ maxRows?: number;
16
+ minRows?: number;
17
+ linkTitle: LocalizedString;
18
+ locale: string;
19
+ link: LocalizedString;
20
+ popupIsShown: boolean;
21
+ onClick(): void;
22
+ onChange(): void;
23
+ onBlur(): void;
24
+ showPopup(): void;
25
+ hidePopup(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkPopupComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<LinkPopupComponent, "bonc-link-popup", never, { "field": { "alias": "field"; "required": true; }; "maxRows": { "alias": "maxRows"; "required": false; }; "minRows": { "alias": "minRows"; "required": false; }; "linkTitle": { "alias": "linkTitle"; "required": true; }; "locale": { "alias": "locale"; "required": true; }; "link": { "alias": "link"; "required": true; }; }, { "linkChange": "linkChange"; "startEditing": "startEditing"; "changed": "changed"; "blurred": "blurred"; "open": "open"; "closed": "closed"; }, never, never, false, never>;
28
+ }
@@ -0,0 +1,7 @@
1
+ import { EditableDirective } from '../core-components';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FormControlsComponent {
4
+ editable: EditableDirective<any>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormControlsComponent, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormControlsComponent, "bonc-form-controls", never, { "editable": { "alias": "editable"; "required": true; }; }, {}, never, ["*"], false, never>;
7
+ }
@@ -0,0 +1 @@
1
+ export * from './form-controls.component';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * This is a TypeGen auto-generated file.
3
+ * Any changes made to this file can be lost when this file is regenerated.
4
+ */
5
+ export interface IEquatable<T> {
6
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * This is a TypeGen auto-generated file.
3
+ * Any changes made to this file can be lost when this file is regenerated.
4
+ */
5
+ import { SettingData } from "./setting-data";
6
+ export interface ISetting<T extends SettingData> {
7
+ data: T;
8
+ }