@sd-angular/core 19.0.0-beta.96 → 19.0.0-beta.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +2 -2
- package/components/document-builder/src/document-builder.model.d.ts +6 -2
- package/components/editor/src/editor.component.d.ts +8 -0
- package/components/editor/src/models/image-upload.plugin.model.d.ts +33 -0
- package/components/editor/src/plugins/image-upload/utils/style.utils.d.ts +1 -0
- package/components/table/index.d.ts +1 -0
- package/components/table/src/models/index.d.ts +1 -0
- package/components/table/src/models/table-item.model.d.ts +10 -0
- package/components/table/src/models/table-option-style.model.d.ts +6 -1
- package/components/table/src/models/table-option-tree.model.d.ts +12 -0
- package/components/table/src/models/table-option.model.d.ts +6 -0
- package/components/table/src/pipes/index.d.ts +1 -0
- package/components/table/src/pipes/sd-tree.pipe.d.ts +9 -0
- package/components/table/src/services/tree/tree.util.d.ts +14 -0
- package/components/table/src/table.component.d.ts +3 -0
- package/fesm2022/sd-angular-core-components-document-builder.mjs +9 -4
- package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-editor.mjs +222 -97
- package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab-router.mjs +57 -15
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +325 -41
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +172 -37
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +8 -1
- package/modules/layout/configurations/layout.configuration.d.ts +8 -0
- package/modules/layout/services/storage/storage.service.d.ts +2 -0
- package/package.json +70 -70
- package/sd-angular-core-19.0.0-beta.97.tgz +0 -0
- package/sd-angular-core-19.0.0-beta.96.tgz +0 -0
|
@@ -212,6 +212,54 @@ const countTextLength = (content) => {
|
|
|
212
212
|
doc.querySelectorAll('img, figure').forEach(el => el.remove());
|
|
213
213
|
return doc.body.textContent?.length ?? 0;
|
|
214
214
|
};
|
|
215
|
+
const imageInlineStylesToClasses = (html) => {
|
|
216
|
+
if (!html)
|
|
217
|
+
return html;
|
|
218
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
219
|
+
doc.querySelectorAll('figure.image').forEach(figure => {
|
|
220
|
+
const styleMap = parseStyle(figure.getAttribute('style') || '');
|
|
221
|
+
const floatVal = styleMap.get('float') || '';
|
|
222
|
+
const marginVal = styleMap.get('margin') || '';
|
|
223
|
+
const widthVal = styleMap.get('width') || '';
|
|
224
|
+
const hasNumericWidth = /\d/.test(widthVal) && widthVal !== 'fit-content';
|
|
225
|
+
styleMap.delete('display');
|
|
226
|
+
styleMap.delete('max-width');
|
|
227
|
+
styleMap.delete('float');
|
|
228
|
+
styleMap.delete('margin');
|
|
229
|
+
if (widthVal === 'fit-content')
|
|
230
|
+
styleMap.delete('width');
|
|
231
|
+
figure.classList.remove('image-style-align-left', 'image-style-align-right', 'image-style-block-align-left', 'image-style-block-align-right');
|
|
232
|
+
if (floatVal === 'left') {
|
|
233
|
+
figure.classList.add('image-style-align-left');
|
|
234
|
+
}
|
|
235
|
+
else if (floatVal === 'right') {
|
|
236
|
+
figure.classList.add('image-style-align-right');
|
|
237
|
+
}
|
|
238
|
+
else if (marginVal === '0 auto 0 0') {
|
|
239
|
+
figure.classList.add(hasNumericWidth ? 'image-style-align-left' : 'image-style-block-align-left');
|
|
240
|
+
}
|
|
241
|
+
else if (marginVal === '0 0 0 auto') {
|
|
242
|
+
figure.classList.add(hasNumericWidth ? 'image-style-align-right' : 'image-style-block-align-right');
|
|
243
|
+
}
|
|
244
|
+
figure.setAttribute('style', serializeStyle(styleMap));
|
|
245
|
+
if (hasNumericWidth) {
|
|
246
|
+
const img = figure.querySelector('img');
|
|
247
|
+
if (img) {
|
|
248
|
+
const imgStyle = parseStyle(img.getAttribute('style') || '');
|
|
249
|
+
if (imgStyle.get('width') === '100%')
|
|
250
|
+
imgStyle.delete('width');
|
|
251
|
+
if (imgStyle.get('height') === 'auto')
|
|
252
|
+
imgStyle.delete('height');
|
|
253
|
+
const serialized = serializeStyle(imgStyle);
|
|
254
|
+
if (serialized)
|
|
255
|
+
img.setAttribute('style', serialized);
|
|
256
|
+
else
|
|
257
|
+
img.removeAttribute('style');
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
return doc.body.innerHTML;
|
|
262
|
+
};
|
|
215
263
|
const imageClassesToInlineStyles = (html) => {
|
|
216
264
|
if (!html)
|
|
217
265
|
return html;
|
|
@@ -635,8 +683,8 @@ class SdEditor {
|
|
|
635
683
|
#i18n = inject(I18nService);
|
|
636
684
|
// Input
|
|
637
685
|
option = input({});
|
|
638
|
-
height = input('250px');
|
|
639
|
-
maxHeight = input('250px');
|
|
686
|
+
height = input('250px'); // Chiều dài height hiển thị mặc định
|
|
687
|
+
maxHeight = input('250px'); // Chiều dài tối đa mở rộng nếu nội dung vượt quá height mặc định
|
|
640
688
|
maxlength = input(undefined);
|
|
641
689
|
label = input();
|
|
642
690
|
helperText = input();
|
|
@@ -754,16 +802,18 @@ class SdEditor {
|
|
|
754
802
|
this.#setupSubscriptions();
|
|
755
803
|
this.#setupDestroy();
|
|
756
804
|
}
|
|
757
|
-
// Public API
|
|
758
805
|
onReady = (editor) => {
|
|
759
806
|
this.#editor = editor;
|
|
760
807
|
const currentValue = this.valueModel();
|
|
761
|
-
if (currentValue)
|
|
762
|
-
this.#
|
|
763
|
-
|
|
808
|
+
if (currentValue) {
|
|
809
|
+
this.#setToEditor(currentValue);
|
|
810
|
+
}
|
|
811
|
+
if (this.formControl.disabled) {
|
|
764
812
|
editor.enableReadOnlyMode('sd-editor');
|
|
765
|
-
|
|
813
|
+
}
|
|
814
|
+
if (this.readonly()) {
|
|
766
815
|
editor.enableReadOnlyMode('sd-editor-readonly');
|
|
816
|
+
}
|
|
767
817
|
editor.model.document.registerPostFixer(writer => {
|
|
768
818
|
let changed = false;
|
|
769
819
|
for (const change of editor.model.document.differ.getChanges()) {
|
|
@@ -786,6 +836,159 @@ class SdEditor {
|
|
|
786
836
|
});
|
|
787
837
|
};
|
|
788
838
|
focusEditor = () => this.#editor?.editing?.view?.focus?.();
|
|
839
|
+
/**
|
|
840
|
+
* Xử lý tải lên các file và trả về nội dung dữ liệu cuối cùng.
|
|
841
|
+
* * @description
|
|
842
|
+
* - Đối với các file upload chế độ 'deferred' (chỉ xử lý khi submit), cần @ViewChild component và gọi hàm upload() này.
|
|
843
|
+
* - Hỗ trợ two-way binding.
|
|
844
|
+
* - Hàm hỗ trợ trả ra data cuối cùng.
|
|
845
|
+
* * @returns {Promise<string>} Nội dung cuối cùng được trích xuất từ sd-editor.
|
|
846
|
+
*/
|
|
847
|
+
upload = async () => {
|
|
848
|
+
await this.#uploadImages();
|
|
849
|
+
return this.#getFromEditor();
|
|
850
|
+
};
|
|
851
|
+
// Editor Content
|
|
852
|
+
#setToEditor(html) {
|
|
853
|
+
this.#editor?.setData?.(this.#normalizeHtmlForEditor(html));
|
|
854
|
+
}
|
|
855
|
+
#getFromEditor() {
|
|
856
|
+
return this.#editor ? this.#normalizeEditorToHtml(this.#editor.getData()) : '';
|
|
857
|
+
}
|
|
858
|
+
// Normalize HTML từ bên ngoài -> format CKEditor.
|
|
859
|
+
#normalizeHtmlForEditor = (html) => {
|
|
860
|
+
if (!html) {
|
|
861
|
+
return '';
|
|
862
|
+
}
|
|
863
|
+
let result = html;
|
|
864
|
+
result = imageInlineStylesToClasses(result);
|
|
865
|
+
return result;
|
|
866
|
+
};
|
|
867
|
+
// Normalize HTML từ CKEditor → format HTML.
|
|
868
|
+
#normalizeEditorToHtml = (html) => {
|
|
869
|
+
if (!html) {
|
|
870
|
+
return '';
|
|
871
|
+
}
|
|
872
|
+
let result = html;
|
|
873
|
+
result = imageClassesToInlineStyles(result);
|
|
874
|
+
return result;
|
|
875
|
+
};
|
|
876
|
+
// Xử lý binding 2 chiều
|
|
877
|
+
#onModelSignalChange(html) {
|
|
878
|
+
const v = html ?? '';
|
|
879
|
+
if (this.formControl.value === v) {
|
|
880
|
+
return;
|
|
881
|
+
}
|
|
882
|
+
this.formControl.setValue(v, { emitEvent: false });
|
|
883
|
+
this._textLength.set(countTextLength(v));
|
|
884
|
+
if (this.#editor) {
|
|
885
|
+
this.#setToEditor(v);
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
// Xử lý khi user soạn thảo
|
|
889
|
+
#onEditorUserInput(rawHtml) {
|
|
890
|
+
const out = imageClassesToInlineStyles(rawHtml);
|
|
891
|
+
this._textLength.set(countTextLength(out));
|
|
892
|
+
if (this.formControl.value !== out) {
|
|
893
|
+
this.formControl.setValue(out, { emitEvent: false });
|
|
894
|
+
}
|
|
895
|
+
this.formControl.updateValueAndValidity({ emitEvent: false });
|
|
896
|
+
this.formControl.sdChanges.next(true);
|
|
897
|
+
this.valueModel.set(out);
|
|
898
|
+
this.sdChange.emit(out);
|
|
899
|
+
}
|
|
900
|
+
// Xử lý nếu dev sử dụng form và set trực tiếp data
|
|
901
|
+
#onFormGroupExternalChange(html) {
|
|
902
|
+
const v = html ?? '';
|
|
903
|
+
this.valueModel.set(v);
|
|
904
|
+
this._textLength.set(countTextLength(v));
|
|
905
|
+
if (this.#editor) {
|
|
906
|
+
this.#setToEditor(v);
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
// Validators
|
|
910
|
+
#requiredValidator() {
|
|
911
|
+
return () => (this._textLength() ? null : { required: true });
|
|
912
|
+
}
|
|
913
|
+
#maxLengthValidator() {
|
|
914
|
+
return () => {
|
|
915
|
+
const max = this.maxlength();
|
|
916
|
+
const len = this._textLength();
|
|
917
|
+
return len > max ? { maxlength: { requiredLength: max, actualLength: len } } : null;
|
|
918
|
+
};
|
|
919
|
+
}
|
|
920
|
+
#inlineErrorValidator() {
|
|
921
|
+
return () => ({ inlineError: true });
|
|
922
|
+
}
|
|
923
|
+
#updateValidators() {
|
|
924
|
+
const validators = [];
|
|
925
|
+
const asyncValidators = [];
|
|
926
|
+
if (this.required()) {
|
|
927
|
+
validators.push(this.#requiredValidator());
|
|
928
|
+
}
|
|
929
|
+
if (this.maxlength() !== undefined) {
|
|
930
|
+
validators.push(this.#maxLengthValidator());
|
|
931
|
+
}
|
|
932
|
+
if (this.inlineError()) {
|
|
933
|
+
validators.push(this.#inlineErrorValidator());
|
|
934
|
+
}
|
|
935
|
+
const val = this.validator();
|
|
936
|
+
if (val) {
|
|
937
|
+
asyncValidators.push(HandleSdCustomValidator(val));
|
|
938
|
+
}
|
|
939
|
+
this.formControl.setValidators(validators.length ? validators : null);
|
|
940
|
+
this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);
|
|
941
|
+
this.formControl.updateValueAndValidity({ emitEvent: false });
|
|
942
|
+
}
|
|
943
|
+
// Setup
|
|
944
|
+
#setupEffects() {
|
|
945
|
+
// Lắng nghe disabled
|
|
946
|
+
effect(() => {
|
|
947
|
+
this.disabled() ? this.formControl.disable({ emitEvent: false }) : this.formControl.enable({ emitEvent: false });
|
|
948
|
+
});
|
|
949
|
+
// Lắng nghe readonly
|
|
950
|
+
effect(() => {
|
|
951
|
+
if (!this.#editor) {
|
|
952
|
+
return;
|
|
953
|
+
}
|
|
954
|
+
if (this.readonly()) {
|
|
955
|
+
this.#editor.enableReadOnlyMode('sd-editor-readonly');
|
|
956
|
+
}
|
|
957
|
+
else {
|
|
958
|
+
this.#editor.disableReadOnlyMode('sd-editor-readonly');
|
|
959
|
+
}
|
|
960
|
+
});
|
|
961
|
+
// Lắng nghe binđing 2 chiều model
|
|
962
|
+
effect(() => this.#onModelSignalChange(this.valueModel()));
|
|
963
|
+
// Lắng nghe name form
|
|
964
|
+
effect(() => this.form()?.addControl(this.name(), this.formControl));
|
|
965
|
+
// Lắng nghe validators
|
|
966
|
+
effect(() => {
|
|
967
|
+
this.required();
|
|
968
|
+
this.maxlength();
|
|
969
|
+
this.inlineError();
|
|
970
|
+
this.validator();
|
|
971
|
+
this.#updateValidators();
|
|
972
|
+
});
|
|
973
|
+
}
|
|
974
|
+
#setupSubscriptions() {
|
|
975
|
+
// Đăng ký nếu dev sử dụng form để set data trực tiếp từ bên ngoài vào
|
|
976
|
+
this.formControl.valueChanges
|
|
977
|
+
.pipe(takeUntilDestroyed(this.#destroyRef))
|
|
978
|
+
.subscribe((val) => this.#onFormGroupExternalChange(val));
|
|
979
|
+
this.formControl.sdChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => this.#cdRef.markForCheck());
|
|
980
|
+
// Đăng ký user gõ trong editor
|
|
981
|
+
this.#contentChangeSubject
|
|
982
|
+
.pipe(debounceTime(100), takeUntilDestroyed(this.#destroyRef))
|
|
983
|
+
.subscribe(rawHtml => this.#onEditorUserInput(rawHtml));
|
|
984
|
+
}
|
|
985
|
+
#setupDestroy() {
|
|
986
|
+
this.#destroyRef.onDestroy(() => {
|
|
987
|
+
this.form()?.removeControl(this.name());
|
|
988
|
+
this.#editor?.destroy?.();
|
|
989
|
+
});
|
|
990
|
+
}
|
|
991
|
+
// Helpers
|
|
789
992
|
#uploadImages = async () => {
|
|
790
993
|
const uploadMode = this.option()?.imageConfig?.uploadMode ?? 'deferred';
|
|
791
994
|
// Early return nếu không phải 'deferred' mode.
|
|
@@ -823,77 +1026,18 @@ class SdEditor {
|
|
|
823
1026
|
throw new Error(`Upload failed for ${failedBatches.flat().length} image(s)`);
|
|
824
1027
|
}
|
|
825
1028
|
};
|
|
826
|
-
upload = async () => {
|
|
827
|
-
await this.#uploadImages();
|
|
828
|
-
return this.#getContent();
|
|
829
|
-
};
|
|
830
|
-
// Setup
|
|
831
|
-
#setupEffects = () => {
|
|
832
|
-
effect(() => {
|
|
833
|
-
this.disabled() ? this.formControl.disable({ emitEvent: false }) : this.formControl.enable({ emitEvent: false });
|
|
834
|
-
});
|
|
835
|
-
effect(() => {
|
|
836
|
-
if (!this.#editor)
|
|
837
|
-
return;
|
|
838
|
-
this.readonly() ? this.#editor.enableReadOnlyMode('sd-editor-readonly') : this.#editor.disableReadOnlyMode('sd-editor-readonly');
|
|
839
|
-
});
|
|
840
|
-
effect(() => {
|
|
841
|
-
const val = this.valueModel();
|
|
842
|
-
if (this.formControl.value !== val) {
|
|
843
|
-
this.formControl.setValue(val, { emitEvent: false });
|
|
844
|
-
if (this.#editor)
|
|
845
|
-
this.#setContent(val);
|
|
846
|
-
}
|
|
847
|
-
});
|
|
848
|
-
effect(() => this.form()?.addControl(this.name(), this.formControl));
|
|
849
|
-
effect(() => {
|
|
850
|
-
this.required();
|
|
851
|
-
this.maxlength();
|
|
852
|
-
this.inlineError();
|
|
853
|
-
this.validator();
|
|
854
|
-
this.#updateValidators();
|
|
855
|
-
});
|
|
856
|
-
};
|
|
857
|
-
#setupSubscriptions = () => {
|
|
858
|
-
this.formControl.valueChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((val) => {
|
|
859
|
-
const v = val ?? '';
|
|
860
|
-
this.valueModel.set(v);
|
|
861
|
-
this._textLength.set(countTextLength(v));
|
|
862
|
-
if (this.#editor) {
|
|
863
|
-
this.#setContent(v);
|
|
864
|
-
}
|
|
865
|
-
});
|
|
866
|
-
this.formControl.sdChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => this.#cdRef.markForCheck());
|
|
867
|
-
this.#contentChangeSubject.pipe(debounceTime(100), takeUntilDestroyed(this.#destroyRef)).subscribe(content => {
|
|
868
|
-
const out = imageClassesToInlineStyles(content);
|
|
869
|
-
this._textLength.set(countTextLength(out));
|
|
870
|
-
if (this.formControl.value !== out)
|
|
871
|
-
this.formControl.setValue(out, { emitEvent: false });
|
|
872
|
-
this.formControl.updateValueAndValidity({ emitEvent: false });
|
|
873
|
-
this.formControl.sdChanges.next(true);
|
|
874
|
-
this.valueModel.set(out);
|
|
875
|
-
this.sdChange.emit(out);
|
|
876
|
-
});
|
|
877
|
-
};
|
|
878
|
-
#setupDestroy = () => {
|
|
879
|
-
this.#destroyRef.onDestroy(() => {
|
|
880
|
-
this.form()?.removeControl(this.name());
|
|
881
|
-
this.#editor?.destroy?.();
|
|
882
|
-
});
|
|
883
|
-
};
|
|
884
|
-
// Helpers
|
|
885
|
-
#setContent = (content) => this.#editor?.setData?.(content);
|
|
886
|
-
#getContent = () => (this.#editor ? imageClassesToInlineStyles(this.#editor.getData()) : '');
|
|
887
1029
|
#getConfigurations = () => {
|
|
888
1030
|
const config = this.#uploadConfig;
|
|
889
|
-
if (!config)
|
|
1031
|
+
if (!config) {
|
|
890
1032
|
return [];
|
|
1033
|
+
}
|
|
891
1034
|
return Array.isArray(config) ? config : [config];
|
|
892
1035
|
};
|
|
893
|
-
#validateDuplicateConfigKeys() {
|
|
1036
|
+
#validateDuplicateConfigKeys = () => {
|
|
894
1037
|
const config = this.#uploadConfig;
|
|
895
|
-
if (!config)
|
|
1038
|
+
if (!config) {
|
|
896
1039
|
return;
|
|
1040
|
+
}
|
|
897
1041
|
const configurations = Array.isArray(config) ? config : [config];
|
|
898
1042
|
const seen = new Set();
|
|
899
1043
|
for (const cfg of configurations) {
|
|
@@ -904,42 +1048,23 @@ class SdEditor {
|
|
|
904
1048
|
}
|
|
905
1049
|
seen.add(normalizedKey);
|
|
906
1050
|
}
|
|
907
|
-
}
|
|
1051
|
+
};
|
|
908
1052
|
#getSelectedConfig = () => {
|
|
909
1053
|
const configurations = this.#getConfigurations();
|
|
910
|
-
if (!configurations.length)
|
|
1054
|
+
if (!configurations.length) {
|
|
911
1055
|
return undefined;
|
|
1056
|
+
}
|
|
912
1057
|
return configurations.find(cfg => cfg.key === this.key());
|
|
913
1058
|
};
|
|
914
|
-
#buildUploadFn = () =>
|
|
915
|
-
|
|
916
|
-
const validators = [];
|
|
917
|
-
const asyncValidators = [];
|
|
918
|
-
if (this.required()) {
|
|
919
|
-
validators.push(() => (this._textLength() ? null : { required: true }));
|
|
920
|
-
}
|
|
921
|
-
const max = this.maxlength();
|
|
922
|
-
if (max !== undefined) {
|
|
923
|
-
validators.push(() => (this._textLength() > max ? { maxlength: { requiredLength: max, actualLength: this._textLength() } } : null));
|
|
924
|
-
}
|
|
925
|
-
const inl = this.inlineError();
|
|
926
|
-
if (inl) {
|
|
927
|
-
validators.push(() => ({ inlineError: true }));
|
|
928
|
-
}
|
|
929
|
-
const val = this.validator();
|
|
930
|
-
if (val) {
|
|
931
|
-
asyncValidators.push(HandleSdCustomValidator(val));
|
|
932
|
-
}
|
|
933
|
-
this.formControl.setValidators(validators.length ? validators : null);
|
|
934
|
-
this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);
|
|
935
|
-
this.formControl.updateValueAndValidity({ emitEvent: false });
|
|
1059
|
+
#buildUploadFn = () => {
|
|
1060
|
+
return this.option()?.imageConfig?.uploadFn ?? this.#getSelectedConfig()?.upload;
|
|
936
1061
|
};
|
|
937
1062
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
938
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdEditor, isStandalone: true, selector: "sd-editor", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, hideInlineError: { classPropertyName: "hideInlineError", publicName: "hideInlineError", isSignal: true, isRequired: false, transformFunction: null }, inlineError: { classPropertyName: "inlineError", publicName: "inlineError", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, valueModel: { classPropertyName: "valueModel", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueModel: "modelChange", sdChange: "sdChange", sdBlur: "sdBlur", sdFocus: "sdFocus" }, ngImport: i0, template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by{display:none}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover
|
|
1063
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdEditor, isStandalone: true, selector: "sd-editor", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, hideInlineError: { classPropertyName: "hideInlineError", publicName: "hideInlineError", isSignal: true, isRequired: false, transformFunction: null }, inlineError: { classPropertyName: "inlineError", publicName: "inlineError", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, valueModel: { classPropertyName: "valueModel", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueModel: "modelChange", sdChange: "sdChange", sdBlur: "sdBlur", sdFocus: "sdFocus" }, ngImport: i0, template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by,::ng-deep .ck-powered-by-balloon{display:none!important}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .ck-editor__editable.ck-focused{box-shadow:none!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover{z-index:99999!important}:host ::ng-deep .ck-content figure.image.image-style-align-left{float:left;margin:0 1em 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-left[style*=\"width:100\"]{float:none;margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-right{float:right;margin:0 0 0 1em}:host ::ng-deep .ck-content figure.image.image-style-align-right[style*=\"width:100\"]{float:none;margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image.image-style-block-align-left{margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-block-align-right{margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image .ck-progress-bar{position:absolute;bottom:0;left:0;width:30%!important;height:3px;background:var(--sd-color-primary, #1565c0);border-radius:2px;z-index:10;pointer-events:none;animation:sd-progress-indeterminate 1.4s ease-in-out infinite}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar){overflow:hidden}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar) img{filter:blur(1px) brightness(.85);transition:filter .3s ease}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):after{content:\"\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:9;background:#ffffff40;border-radius:inherit}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):before{content:\"\";position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.5);border-top-color:var(--sd-color-primary, #1565c0);border-radius:50%;animation:sd-spinner .75s linear infinite;z-index:11;pointer-events:none}@keyframes sd-spinner{to{transform:rotate(360deg)}}@keyframes sd-progress-indeterminate{0%{left:-30%}to{left:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CKEditorModule }, { kind: "component", type: i1.CKEditorComponent, selector: "ckeditor", inputs: ["editor", "config", "data", "tagName", "watchdog", "editorWatchdogConfig", "disableWatchdog", "disableTwoWayDataBinding", "disabled"], outputs: ["ready", "change", "blur", "focus", "error"] }, { kind: "component", type: SdLabel, selector: "sd-label", inputs: ["label", "description", "required", "helperText"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
939
1064
|
}
|
|
940
1065
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdEditor, decorators: [{
|
|
941
1066
|
type: Component,
|
|
942
|
-
args: [{ selector: 'sd-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CKEditorModule, SdLabel, MatFormFieldModule, MatIconModule, MatTooltipModule], template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by{display:none}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover
|
|
1067
|
+
args: [{ selector: 'sd-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CKEditorModule, SdLabel, MatFormFieldModule, MatIconModule, MatTooltipModule], template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by,::ng-deep .ck-powered-by-balloon{display:none!important}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .ck-editor__editable.ck-focused{box-shadow:none!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover{z-index:99999!important}:host ::ng-deep .ck-content figure.image.image-style-align-left{float:left;margin:0 1em 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-left[style*=\"width:100\"]{float:none;margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-right{float:right;margin:0 0 0 1em}:host ::ng-deep .ck-content figure.image.image-style-align-right[style*=\"width:100\"]{float:none;margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image.image-style-block-align-left{margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-block-align-right{margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image .ck-progress-bar{position:absolute;bottom:0;left:0;width:30%!important;height:3px;background:var(--sd-color-primary, #1565c0);border-radius:2px;z-index:10;pointer-events:none;animation:sd-progress-indeterminate 1.4s ease-in-out infinite}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar){overflow:hidden}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar) img{filter:blur(1px) brightness(.85);transition:filter .3s ease}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):after{content:\"\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:9;background:#ffffff40;border-radius:inherit}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):before{content:\"\";position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.5);border-top-color:var(--sd-color-primary, #1565c0);border-radius:50%;animation:sd-spinner .75s linear infinite;z-index:11;pointer-events:none}@keyframes sd-spinner{to{transform:rotate(360deg)}}@keyframes sd-progress-indeterminate{0%{left:-30%}to{left:100%}}\n"] }]
|
|
943
1068
|
}], ctorParameters: () => [] });
|
|
944
1069
|
|
|
945
1070
|
/**
|