@seniorsistemas/angular-components 19.9.3 → 19.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
- package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +8 -0
- package/content-generator/lib/content-generator/content-generator.component.d.ts +2 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +2 -0
- package/drawer/README.md +9 -2
- package/drawer/lib/drawer/drawer.component.d.ts +12 -1
- package/editor/lib/editor/editor.component.d.ts +1 -1
- package/esm2022/button/lib/button/button.component.mjs +3 -3
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +17 -5
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +9 -8
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +18 -3
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +33 -11
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +4 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +8 -8
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -3
- package/esm2022/paginator/lib/models/paginator.models.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +19 -13
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +19 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
- package/esm2022/select/lib/select/select.component.mjs +3 -3
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +6 -5
- package/esm2022/slider/lib/slider/slider.component.mjs +3 -3
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +54 -8
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
- package/esm2022/utils/lib/utils/utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +16 -4
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +8 -6
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +17 -2
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +32 -9
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +16 -16
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +7 -7
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +18 -12
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +20 -9
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +5 -4
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +53 -7
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
- package/global-search/lib/global-search/global-search.module.d.ts +1 -1
- package/package.json +7 -9
- package/paginator/lib/models/paginator.models.d.ts +1 -0
- package/paginator/lib/paginator/paginator.component.d.ts +3 -1
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +3 -1
- package/side-sheet/README.md +4 -4
- package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +1 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +2 -1
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
- package/utils/lib/utils/utils.d.ts +21 -0
|
@@ -131,10 +131,10 @@ class EditorComponent {
|
|
|
131
131
|
* @description Emitido quando a seleção de texto no editor muda.
|
|
132
132
|
*/
|
|
133
133
|
selectionChange = output();
|
|
134
|
+
formDisabled = false;
|
|
134
135
|
editorContainer = viewChild.required('editorContainer');
|
|
135
136
|
imageInput = viewChild.required('imageInput');
|
|
136
137
|
editor;
|
|
137
|
-
_formDisabled = false;
|
|
138
138
|
_currentPlaceholder = '';
|
|
139
139
|
activeStates = {
|
|
140
140
|
isBold: false,
|
|
@@ -162,7 +162,7 @@ class EditorComponent {
|
|
|
162
162
|
constructor() {
|
|
163
163
|
effect(() => {
|
|
164
164
|
if (this.editor) {
|
|
165
|
-
this.editor.setEditable(!this.readonly() && !this.
|
|
165
|
+
this.editor.setEditable(!this.readonly() && !this.formDisabled, false);
|
|
166
166
|
this.cdr.markForCheck();
|
|
167
167
|
}
|
|
168
168
|
});
|
|
@@ -191,8 +191,8 @@ class EditorComponent {
|
|
|
191
191
|
this._onTouched = fn;
|
|
192
192
|
}
|
|
193
193
|
setDisabledState(isDisabled) {
|
|
194
|
-
this.
|
|
195
|
-
this.editor?.setEditable(!isDisabled && !this.readonly());
|
|
194
|
+
this.formDisabled = isDisabled;
|
|
195
|
+
this.editor?.setEditable(!isDisabled && !this.readonly(), false);
|
|
196
196
|
this.cdr.markForCheck();
|
|
197
197
|
}
|
|
198
198
|
isFormatAllowed(format) {
|
|
@@ -362,7 +362,7 @@ class EditorComponent {
|
|
|
362
362
|
},
|
|
363
363
|
},
|
|
364
364
|
onUpdate: ({ editor }) => {
|
|
365
|
-
const html = editor.getHTML();
|
|
365
|
+
const html = editor.isEmpty ? '' : editor.getHTML();
|
|
366
366
|
const text = editor.getText();
|
|
367
367
|
this._value = html;
|
|
368
368
|
this._onChange(html);
|
|
@@ -416,7 +416,7 @@ class EditorComponent {
|
|
|
416
416
|
useExisting: forwardRef(() => EditorComponent),
|
|
417
417
|
multi: true,
|
|
418
418
|
},
|
|
419
|
-
], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"rounded bg-grayscale-0 flex flex-col border border-grayscale-30 transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6]\"\n (change)=\"onHeadingChange($event)\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentColor\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"!activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"!activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: EditorToolbarButtonComponent, selector: "s-editor-toolbar-button", inputs: ["icon", "label", "active", "disabled"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
419
|
+
], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: EditorToolbarButtonComponent, selector: "s-editor-toolbar-button", inputs: ["icon", "label", "active", "disabled"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
420
420
|
}
|
|
421
421
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorComponent, decorators: [{
|
|
422
422
|
type: Component,
|
|
@@ -426,7 +426,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
426
426
|
useExisting: forwardRef(() => EditorComponent),
|
|
427
427
|
multi: true,
|
|
428
428
|
},
|
|
429
|
-
], template: "<div\n class=\"rounded bg-grayscale-0 flex flex-col border border-grayscale-30 transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6]\"\n (change)=\"onHeadingChange($event)\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentColor\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"!activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"!activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"] }]
|
|
429
|
+
], template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"] }]
|
|
430
430
|
}], ctorParameters: () => [] });
|
|
431
431
|
|
|
432
432
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-editor.mjs","sources":["../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.ts","../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.html","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.ts","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.html","../../projects/angular-components/editor/src/lib/editor/editor.component.ts","../../projects/angular-components/editor/src/lib/editor/editor.component.html","../../projects/angular-components/editor/src/seniorsistemas-angular-components-editor.ts"],"sourcesContent":["import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { ActiveDialog, DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { DynamicFormModule, DynamicStructure } from '@seniorsistemas/angular-components/dynamic-form';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@Component({\n standalone: true,\n imports: [ReactiveFormsModule, TranslateModule, DialogComponent, DynamicFormModule, ButtonModule, TemplateModule],\n templateUrl: './link-dialog.component.html',\n})\nexport class LinkDialogComponent implements OnInit {\n private readonly activeDialog = inject(ActiveDialog);\n private readonly translateService = inject(TranslateService);\n\n initialUrl = '';\n\n form = new FormGroup({ url: new FormControl('') });\n\n configs: DynamicStructure[] = [];\n\n ngOnInit(): void {\n this.form.setValue({ url: this.initialUrl });\n this.configs = [\n {\n type: 'row',\n fields: [\n {\n type: 'string',\n name: 'url',\n label: this.translateService.instant('platform.angular_components.editor_link_url_label'),\n placeholder: this.translateService.instant(\n 'platform.angular_components.editor_link_url_placeholder',\n ),\n },\n ],\n },\n ];\n }\n\n confirm(): void {\n this.activeDialog.close(this.form.value.url?.trim() ?? '');\n }\n\n cancel(): void {\n this.activeDialog.dismiss();\n }\n}\n\n","<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n <ng-template sTemplate=\"body\">\n <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n </ng-template>\n <ng-template sTemplate=\"footer\">\n <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n <s-button\n [label]=\"'platform.angular_components.cancel' | translate\"\n priority=\"secondary\"\n (clicked)=\"cancel()\"\n />\n <s-button\n [label]=\"'platform.angular_components.editor_confirm' | translate\"\n priority=\"primary\"\n (clicked)=\"confirm()\"\n />\n </div>\n </ng-template>\n</s-dialog>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 's-editor-toolbar-button',\n standalone: true,\n imports: [NgClass],\n templateUrl: './editor-toolbar-button.component.html',\n host: { style: 'display: contents' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorToolbarButtonComponent {\n icon = input.required<string>();\n label = input.required<string>();\n active = input<boolean>(false);\n disabled = input<boolean>(false);\n clicked = output<void>();\n}\n\n","<button\n type=\"button\"\n class=\"inline-flex items-center justify-center w-7 h-7 p-0 border-0 bg-transparent rounded cursor-pointer text-base leading-none transition-colors duration-150 disabled:opacity-[.35] disabled:cursor-not-allowed\"\n [ngClass]=\"{\n 'bg-[#ebebfa]': active(),\n 'text-[#5c5ce6]': active(),\n 'hover:bg-[#ddddf7]': active(),\n 'text-[#3d3d4d]': !active(),\n 'enabled:hover:bg-[#e8e8f0]': !active(),\n 'enabled:hover:text-[#1e1e2e]': !active()\n }\"\n [disabled]=\"disabled()\"\n [title]=\"label()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-pressed]=\"active()\"\n (click)=\"clicked.emit()\"\n>\n <i [class]=\"icon()\"></i>\n</button>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n effect,\n forwardRef,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { Editor } from '@tiptap/core';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Subscript from '@tiptap/extension-subscript';\nimport Superscript from '@tiptap/extension-superscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport StarterKit from '@tiptap/starter-kit';\n\nimport { LinkDialogComponent } from './link-dialog/link-dialog.component';\nimport { EditorFormat, EditorSelectionChangeEvent, EditorTextChangeEvent, Extension } from './models';\nimport { EditorToolbarButtonComponent } from './toolbar-button/editor-toolbar-button.component';\n\n/**\n * @description Componente de editor de texto rico (WYSIWYG) construído sobre o Tiptap/ProseMirror.\n * Substitui o `p-editor` do PrimeNG sem dependência externa de licença comercial.\n * Implementa {@link ControlValueAccessor} para integração com Angular Forms.\n *\n * @example\n * ```html\n * <s-editor\n * formControlName=\"descricao\"\n * [readonly]=\"false\"\n * (textChange)=\"onTextChange($event)\" />\n * ```\n */\n@Component({\n selector: 's-editor',\n standalone: true,\n imports: [NgClass, NgStyle, TranslateModule, EditorToolbarButtonComponent],\n templateUrl: './editor.component.html',\n styleUrls: ['./editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditorComponent),\n multi: true,\n },\n ],\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * @description Coloca o editor em modo somente leitura.\n * @default false\n */\n readonly = input<boolean>(false);\n\n /**\n * @description Lista de formatos habilitados na toolbar. Quando vazio, todos os formatos são exibidos.\n */\n formats = input<EditorFormat[]>();\n\n /**\n * @description Texto de dica exibido quando o editor está vazio.\n */\n placeholder = input<string>();\n\n /**\n * @description Estilos inline aplicados ao container do editor.\n */\n style = input<{ [klass: string]: unknown }>();\n\n /**\n * @description Classes CSS adicionais aplicadas ao container do editor.\n */\n styleClass = input<string>();\n\n /**\n * @description Extensões Tiptap adicionais para estender o comportamento padrão do editor.\n */\n extensions = input<Extension[]>([]);\n\n /**\n * @description Emitido quando o editor é inicializado e está pronto para uso.\n */\n editorInit = output<Editor>();\n\n /**\n * @description Emitido sempre que o conteúdo do editor é alterado.\n */\n textChange = output<EditorTextChangeEvent>();\n\n /**\n * @description Emitido quando a seleção de texto no editor muda.\n */\n selectionChange = output<EditorSelectionChangeEvent>();\n\n private editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n private imageInput = viewChild.required<ElementRef<HTMLInputElement>>('imageInput');\n\n private editor?: Editor;\n private _formDisabled = false;\n private _currentPlaceholder = '';\n\n activeStates = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrike: false,\n isBulletList: false,\n isOrderedList: false,\n isBlockquote: false,\n isCode: false,\n isSubscript: false,\n isSuperscript: false,\n isAlignLeft: false,\n isAlignCenter: false,\n isAlignRight: false,\n currentHeading: 0,\n currentColor: '#000000',\n currentHighlight: 'transparent',\n canUndo: false,\n canRedo: false,\n };\n\n private _value = '';\n private _onChange: (value: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n if (this.editor) {\n this.editor.setEditable(!this.readonly() && !this._formDisabled);\n this.cdr.markForCheck();\n }\n });\n\n effect(() => {\n this._currentPlaceholder = this.placeholder() ?? '';\n this.editor?.view.dispatch(this.editor.state.tr);\n });\n }\n\n ngAfterViewInit(): void {\n this.initEditor();\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n }\n\n writeValue(value: string): void {\n this._value = value ?? '';\n if (this.editor) {\n this.editor.chain().setMeta('addToHistory', false).setContent(this._value, { emitUpdate: false }).run();\n this.cdr.markForCheck();\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._formDisabled = isDisabled;\n this.editor?.setEditable(!isDisabled && !this.readonly());\n this.cdr.markForCheck();\n }\n\n isFormatAllowed(format: EditorFormat): boolean {\n const formats = this.formats();\n return !formats?.length || formats.includes(format);\n }\n\n hasAnyFormatBeforeUndoRedo(): boolean {\n const formatsBeforeUndoRedo: EditorFormat[] = [\n 'header', 'bold', 'italic', 'underline', 'strike', 'subscript', 'superscript',\n 'color', 'highlight', 'list', 'align', 'blockquote', 'code-block', 'link', 'image',\n ];\n return formatsBeforeUndoRedo.some(f => this.isFormatAllowed(f));\n }\n\n toggleBold(): void {\n this.editor?.chain().focus().toggleBold().run();\n }\n\n toggleItalic(): void {\n this.editor?.chain().focus().toggleItalic().run();\n }\n\n toggleUnderline(): void {\n this.editor?.chain().focus().toggleUnderline().run();\n }\n\n toggleStrike(): void {\n this.editor?.chain().focus().toggleStrike().run();\n }\n\n toggleBulletList(): void {\n this.editor?.chain().focus().toggleBulletList().run();\n }\n\n toggleOrderedList(): void {\n this.editor?.chain().focus().toggleOrderedList().run();\n }\n\n toggleBlockquote(): void {\n this.editor?.chain().focus().toggleBlockquote().run();\n }\n\n toggleCode(): void {\n this.editor?.chain().focus().toggleCode().run();\n }\n\n toggleSubscript(): void {\n this.editor?.chain().focus().toggleSubscript().run();\n }\n\n toggleSuperscript(): void {\n this.editor?.chain().focus().toggleSuperscript().run();\n }\n\n setTextAlign(align: 'left' | 'center' | 'right'): void {\n this.editor?.chain().focus().setTextAlign(align).run();\n }\n\n setColor(color: string): void {\n this.editor?.chain().focus().setColor(color).run();\n }\n\n setHighlight(color: string): void {\n this.editor?.chain().focus().setHighlight({ color }).run();\n }\n\n clearFormatting(): void {\n this.editor?.chain().focus().clearNodes().unsetAllMarks().run();\n }\n\n onHeadingChange(event: Event): void {\n const level = parseInt((event.target as HTMLSelectElement).value) as 0 | 1 | 2 | 3;\n if (isNaN(level) || level === 0) {\n this.editor?.chain().focus().setParagraph().run();\n } else {\n this.editor?.chain().focus().setHeading({ level }).run();\n }\n }\n\n setLink(): void {\n const existingUrl = (this.editor?.getAttributes('link')['href'] as string) ?? '';\n const ref = this.dialogService.open(LinkDialogComponent, { size: 'sm' });\n ref.componentInstance.initialUrl = existingUrl;\n ref.closed\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe((url: string) => {\n if (url === '') {\n this.editor?.chain().focus().extendMarkRange('link').unsetLink().run();\n } else {\n this.editor?.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }\n });\n }\n\n setImage(): void {\n this.imageInput().nativeElement.click();\n }\n\n onImageFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = (e) => {\n const src = e.target?.result as string;\n this.editor?.chain().focus().setImage({ src }).run();\n input.value = '';\n this.cdr.markForCheck();\n };\n reader.readAsDataURL(file);\n }\n\n undo(): void {\n this.editor?.chain().focus().undo().run();\n }\n\n redo(): void {\n this.editor?.chain().focus().redo().run();\n }\n\n onToolbarKeydown(event: KeyboardEvent): void {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (!focusable.length) return;\n\n const currentIndex = focusable.findIndex(el => el === document.activeElement);\n let nextIndex: number;\n\n switch (event.key) {\n case 'ArrowRight': nextIndex = (currentIndex + 1) % focusable.length; break;\n case 'ArrowLeft': nextIndex = (currentIndex - 1 + focusable.length) % focusable.length; break;\n case 'Home': nextIndex = 0; break;\n default: nextIndex = focusable.length - 1; break;\n }\n\n focusable.forEach((el, i) => el.setAttribute('tabindex', i === nextIndex ? '0' : '-1'));\n focusable[nextIndex].focus();\n }\n\n onToolbarFocusIn(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (focusable.includes(target)) {\n focusable.forEach(el => el.setAttribute('tabindex', el === target ? '0' : '-1'));\n }\n }\n\n private getToolbarFocusable(toolbar: HTMLElement): HTMLElement[] {\n return Array.from(\n toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), select, label[tabindex]'),\n );\n }\n\n private initEditor(): void {\n this.editor = new Editor({\n element: this.editorContainer().nativeElement,\n extensions: [\n StarterKit.configure({\n link: { openOnClick: false },\n underline: false,\n }),\n Underline,\n Image.configure({ allowBase64: true }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n TextStyle,\n Color,\n Highlight.configure({ multicolor: true }),\n Placeholder.configure({ placeholder: () => this._currentPlaceholder }),\n Subscript,\n Superscript,\n ...this.extensions(),\n ],\n content: this._value,\n editable: !this.readonly(),\n editorProps: {\n attributes: {\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': this.translateService.instant(\n 'platform.angular_components.editor_content_area',\n ),\n },\n },\n onUpdate: ({ editor }) => {\n const html = editor.getHTML();\n const text = editor.getText();\n this._value = html;\n this._onChange(html);\n this.textChange.emit({ htmlValue: html, textValue: text });\n this.syncActiveStates();\n this.cdr.markForCheck();\n },\n onBlur: () => {\n this._onTouched();\n },\n onSelectionUpdate: ({ editor }) => {\n this.syncActiveStates();\n const { from, to, empty } = editor.state.selection;\n this.selectionChange.emit({ from, to, empty });\n this.cdr.markForCheck();\n },\n });\n\n this.syncActiveStates();\n this.cdr.markForCheck();\n this.editorInit.emit(this.editor);\n }\n\n private syncActiveStates(): void {\n if (!this.editor) return;\n\n const e = this.editor;\n this.activeStates = {\n isBold: e.isActive('bold'),\n isItalic: e.isActive('italic'),\n isUnderline: e.isActive('underline'),\n isStrike: e.isActive('strike'),\n isBulletList: e.isActive('bulletList'),\n isOrderedList: e.isActive('orderedList'),\n isBlockquote: e.isActive('blockquote'),\n isCode: e.isActive('code'),\n isSubscript: e.isActive('subscript'),\n isSuperscript: e.isActive('superscript'),\n isAlignLeft: e.isActive({ textAlign: 'left' }),\n isAlignCenter: e.isActive({ textAlign: 'center' }),\n isAlignRight: e.isActive({ textAlign: 'right' }),\n currentHeading: [1, 2, 3].find((level) => e.isActive('heading', { level })) ?? 0,\n currentColor: (e.getAttributes('textStyle')['color'] as string) || '#000000',\n currentHighlight: (e.getAttributes('highlight')['color'] as string) || 'transparent',\n canUndo: e.can().undo(),\n canRedo: e.can().redo(),\n };\n }\n}\n","<div\n class=\"rounded bg-grayscale-0 flex flex-col border border-grayscale-30 transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6]\"\n (change)=\"onHeadingChange($event)\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentColor\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"!activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"!activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-editor.mjs","sources":["../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.ts","../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.html","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.ts","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.html","../../projects/angular-components/editor/src/lib/editor/editor.component.ts","../../projects/angular-components/editor/src/lib/editor/editor.component.html","../../projects/angular-components/editor/src/seniorsistemas-angular-components-editor.ts"],"sourcesContent":["import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { ActiveDialog, DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { DynamicFormModule, DynamicStructure } from '@seniorsistemas/angular-components/dynamic-form';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@Component({\n standalone: true,\n imports: [ReactiveFormsModule, TranslateModule, DialogComponent, DynamicFormModule, ButtonModule, TemplateModule],\n templateUrl: './link-dialog.component.html',\n})\nexport class LinkDialogComponent implements OnInit {\n private readonly activeDialog = inject(ActiveDialog);\n private readonly translateService = inject(TranslateService);\n\n initialUrl = '';\n\n form = new FormGroup({ url: new FormControl('') });\n\n configs: DynamicStructure[] = [];\n\n ngOnInit(): void {\n this.form.setValue({ url: this.initialUrl });\n this.configs = [\n {\n type: 'row',\n fields: [\n {\n type: 'string',\n name: 'url',\n label: this.translateService.instant('platform.angular_components.editor_link_url_label'),\n placeholder: this.translateService.instant(\n 'platform.angular_components.editor_link_url_placeholder',\n ),\n },\n ],\n },\n ];\n }\n\n confirm(): void {\n this.activeDialog.close(this.form.value.url?.trim() ?? '');\n }\n\n cancel(): void {\n this.activeDialog.dismiss();\n }\n}\n\n","<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n <ng-template sTemplate=\"body\">\n <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n </ng-template>\n <ng-template sTemplate=\"footer\">\n <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n <s-button\n [label]=\"'platform.angular_components.cancel' | translate\"\n priority=\"secondary\"\n (clicked)=\"cancel()\"\n />\n <s-button\n [label]=\"'platform.angular_components.editor_confirm' | translate\"\n priority=\"primary\"\n (clicked)=\"confirm()\"\n />\n </div>\n </ng-template>\n</s-dialog>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 's-editor-toolbar-button',\n standalone: true,\n imports: [NgClass],\n templateUrl: './editor-toolbar-button.component.html',\n host: { style: 'display: contents' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorToolbarButtonComponent {\n icon = input.required<string>();\n label = input.required<string>();\n active = input<boolean>(false);\n disabled = input<boolean>(false);\n clicked = output<void>();\n}\n\n","<button\n type=\"button\"\n class=\"inline-flex items-center justify-center w-7 h-7 p-0 border-0 bg-transparent rounded cursor-pointer text-base leading-none transition-colors duration-150 disabled:opacity-[.35] disabled:cursor-not-allowed\"\n [ngClass]=\"{\n 'bg-[#ebebfa]': active(),\n 'text-[#5c5ce6]': active(),\n 'hover:bg-[#ddddf7]': active(),\n 'text-[#3d3d4d]': !active(),\n 'enabled:hover:bg-[#e8e8f0]': !active(),\n 'enabled:hover:text-[#1e1e2e]': !active()\n }\"\n [disabled]=\"disabled()\"\n [title]=\"label()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-pressed]=\"active()\"\n (click)=\"clicked.emit()\"\n>\n <i [class]=\"icon()\"></i>\n</button>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n effect,\n forwardRef,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { Editor } from '@tiptap/core';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Subscript from '@tiptap/extension-subscript';\nimport Superscript from '@tiptap/extension-superscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport StarterKit from '@tiptap/starter-kit';\n\nimport { LinkDialogComponent } from './link-dialog/link-dialog.component';\nimport { EditorFormat, EditorSelectionChangeEvent, EditorTextChangeEvent, Extension } from './models';\nimport { EditorToolbarButtonComponent } from './toolbar-button/editor-toolbar-button.component';\n\n/**\n * @description Componente de editor de texto rico (WYSIWYG) construído sobre o Tiptap/ProseMirror.\n * Substitui o `p-editor` do PrimeNG sem dependência externa de licença comercial.\n * Implementa {@link ControlValueAccessor} para integração com Angular Forms.\n *\n * @example\n * ```html\n * <s-editor\n * formControlName=\"descricao\"\n * [readonly]=\"false\"\n * (textChange)=\"onTextChange($event)\" />\n * ```\n */\n@Component({\n selector: 's-editor',\n standalone: true,\n imports: [NgClass, NgStyle, TranslateModule, EditorToolbarButtonComponent],\n templateUrl: './editor.component.html',\n styleUrls: ['./editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditorComponent),\n multi: true,\n },\n ],\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * @description Coloca o editor em modo somente leitura.\n * @default false\n */\n readonly = input<boolean>(false);\n\n /**\n * @description Lista de formatos habilitados na toolbar. Quando vazio, todos os formatos são exibidos.\n */\n formats = input<EditorFormat[]>();\n\n /**\n * @description Texto de dica exibido quando o editor está vazio.\n */\n placeholder = input<string>();\n\n /**\n * @description Estilos inline aplicados ao container do editor.\n */\n style = input<{ [klass: string]: unknown }>();\n\n /**\n * @description Classes CSS adicionais aplicadas ao container do editor.\n */\n styleClass = input<string>();\n\n /**\n * @description Extensões Tiptap adicionais para estender o comportamento padrão do editor.\n */\n extensions = input<Extension[]>([]);\n\n /**\n * @description Emitido quando o editor é inicializado e está pronto para uso.\n */\n editorInit = output<Editor>();\n\n /**\n * @description Emitido sempre que o conteúdo do editor é alterado.\n */\n textChange = output<EditorTextChangeEvent>();\n\n /**\n * @description Emitido quando a seleção de texto no editor muda.\n */\n selectionChange = output<EditorSelectionChangeEvent>();\n\n protected formDisabled = false;\n\n private editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n private imageInput = viewChild.required<ElementRef<HTMLInputElement>>('imageInput');\n private editor?: Editor;\n private _currentPlaceholder = '';\n\n activeStates = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrike: false,\n isBulletList: false,\n isOrderedList: false,\n isBlockquote: false,\n isCode: false,\n isSubscript: false,\n isSuperscript: false,\n isAlignLeft: false,\n isAlignCenter: false,\n isAlignRight: false,\n currentHeading: 0,\n currentColor: '#000000',\n currentHighlight: 'transparent',\n canUndo: false,\n canRedo: false,\n };\n\n private _value = '';\n private _onChange: (value: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n if (this.editor) {\n this.editor.setEditable(!this.readonly() && !this.formDisabled, false);\n this.cdr.markForCheck();\n }\n });\n\n effect(() => {\n this._currentPlaceholder = this.placeholder() ?? '';\n this.editor?.view.dispatch(this.editor.state.tr);\n });\n }\n\n ngAfterViewInit(): void {\n this.initEditor();\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n }\n\n writeValue(value: string): void {\n this._value = value ?? '';\n if (this.editor) {\n this.editor.chain().setMeta('addToHistory', false).setContent(this._value, { emitUpdate: false }).run();\n this.cdr.markForCheck();\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled = isDisabled;\n this.editor?.setEditable(!isDisabled && !this.readonly(), false);\n this.cdr.markForCheck();\n }\n\n isFormatAllowed(format: EditorFormat): boolean {\n const formats = this.formats();\n return !formats?.length || formats.includes(format);\n }\n\n hasAnyFormatBeforeUndoRedo(): boolean {\n const formatsBeforeUndoRedo: EditorFormat[] = [\n 'header', 'bold', 'italic', 'underline', 'strike', 'subscript', 'superscript',\n 'color', 'highlight', 'list', 'align', 'blockquote', 'code-block', 'link', 'image',\n ];\n return formatsBeforeUndoRedo.some(f => this.isFormatAllowed(f));\n }\n\n toggleBold(): void {\n this.editor?.chain().focus().toggleBold().run();\n }\n\n toggleItalic(): void {\n this.editor?.chain().focus().toggleItalic().run();\n }\n\n toggleUnderline(): void {\n this.editor?.chain().focus().toggleUnderline().run();\n }\n\n toggleStrike(): void {\n this.editor?.chain().focus().toggleStrike().run();\n }\n\n toggleBulletList(): void {\n this.editor?.chain().focus().toggleBulletList().run();\n }\n\n toggleOrderedList(): void {\n this.editor?.chain().focus().toggleOrderedList().run();\n }\n\n toggleBlockquote(): void {\n this.editor?.chain().focus().toggleBlockquote().run();\n }\n\n toggleCode(): void {\n this.editor?.chain().focus().toggleCode().run();\n }\n\n toggleSubscript(): void {\n this.editor?.chain().focus().toggleSubscript().run();\n }\n\n toggleSuperscript(): void {\n this.editor?.chain().focus().toggleSuperscript().run();\n }\n\n setTextAlign(align: 'left' | 'center' | 'right'): void {\n this.editor?.chain().focus().setTextAlign(align).run();\n }\n\n setColor(color: string): void {\n this.editor?.chain().focus().setColor(color).run();\n }\n\n setHighlight(color: string): void {\n this.editor?.chain().focus().setHighlight({ color }).run();\n }\n\n clearFormatting(): void {\n this.editor?.chain().focus().clearNodes().unsetAllMarks().run();\n }\n\n onHeadingChange(event: Event): void {\n const level = parseInt((event.target as HTMLSelectElement).value) as 0 | 1 | 2 | 3;\n if (isNaN(level) || level === 0) {\n this.editor?.chain().focus().setParagraph().run();\n } else {\n this.editor?.chain().focus().setHeading({ level }).run();\n }\n }\n\n setLink(): void {\n const existingUrl = (this.editor?.getAttributes('link')['href'] as string) ?? '';\n const ref = this.dialogService.open(LinkDialogComponent, { size: 'sm' });\n ref.componentInstance.initialUrl = existingUrl;\n ref.closed\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe((url: string) => {\n if (url === '') {\n this.editor?.chain().focus().extendMarkRange('link').unsetLink().run();\n } else {\n this.editor?.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }\n });\n }\n\n setImage(): void {\n this.imageInput().nativeElement.click();\n }\n\n onImageFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = (e) => {\n const src = e.target?.result as string;\n this.editor?.chain().focus().setImage({ src }).run();\n input.value = '';\n this.cdr.markForCheck();\n };\n reader.readAsDataURL(file);\n }\n\n undo(): void {\n this.editor?.chain().focus().undo().run();\n }\n\n redo(): void {\n this.editor?.chain().focus().redo().run();\n }\n\n onToolbarKeydown(event: KeyboardEvent): void {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (!focusable.length) return;\n\n const currentIndex = focusable.findIndex(el => el === document.activeElement);\n let nextIndex: number;\n\n switch (event.key) {\n case 'ArrowRight': nextIndex = (currentIndex + 1) % focusable.length; break;\n case 'ArrowLeft': nextIndex = (currentIndex - 1 + focusable.length) % focusable.length; break;\n case 'Home': nextIndex = 0; break;\n default: nextIndex = focusable.length - 1; break;\n }\n\n focusable.forEach((el, i) => el.setAttribute('tabindex', i === nextIndex ? '0' : '-1'));\n focusable[nextIndex].focus();\n }\n\n onToolbarFocusIn(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (focusable.includes(target)) {\n focusable.forEach(el => el.setAttribute('tabindex', el === target ? '0' : '-1'));\n }\n }\n\n private getToolbarFocusable(toolbar: HTMLElement): HTMLElement[] {\n return Array.from(\n toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), select, label[tabindex]'),\n );\n }\n\n private initEditor(): void {\n this.editor = new Editor({\n element: this.editorContainer().nativeElement,\n extensions: [\n StarterKit.configure({\n link: { openOnClick: false },\n underline: false,\n }),\n Underline,\n Image.configure({ allowBase64: true }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n TextStyle,\n Color,\n Highlight.configure({ multicolor: true }),\n Placeholder.configure({ placeholder: () => this._currentPlaceholder }),\n Subscript,\n Superscript,\n ...this.extensions(),\n ],\n content: this._value,\n editable: !this.readonly(),\n editorProps: {\n attributes: {\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': this.translateService.instant(\n 'platform.angular_components.editor_content_area',\n ),\n },\n },\n onUpdate: ({ editor }) => {\n const html = editor.isEmpty ? '' : editor.getHTML();\n const text = editor.getText();\n this._value = html;\n this._onChange(html);\n this.textChange.emit({ htmlValue: html, textValue: text });\n this.syncActiveStates();\n this.cdr.markForCheck();\n },\n onBlur: () => {\n this._onTouched();\n },\n onSelectionUpdate: ({ editor }) => {\n this.syncActiveStates();\n const { from, to, empty } = editor.state.selection;\n this.selectionChange.emit({ from, to, empty });\n this.cdr.markForCheck();\n },\n });\n\n this.syncActiveStates();\n this.cdr.markForCheck();\n this.editorInit.emit(this.editor);\n }\n\n private syncActiveStates(): void {\n if (!this.editor) return;\n\n const e = this.editor;\n this.activeStates = {\n isBold: e.isActive('bold'),\n isItalic: e.isActive('italic'),\n isUnderline: e.isActive('underline'),\n isStrike: e.isActive('strike'),\n isBulletList: e.isActive('bulletList'),\n isOrderedList: e.isActive('orderedList'),\n isBlockquote: e.isActive('blockquote'),\n isCode: e.isActive('code'),\n isSubscript: e.isActive('subscript'),\n isSuperscript: e.isActive('superscript'),\n isAlignLeft: e.isActive({ textAlign: 'left' }),\n isAlignCenter: e.isActive({ textAlign: 'center' }),\n isAlignRight: e.isActive({ textAlign: 'right' }),\n currentHeading: [1, 2, 3].find((level) => e.isActive('heading', { level })) ?? 0,\n currentColor: (e.getAttributes('textStyle')['color'] as string) || '#000000',\n currentHighlight: (e.getAttributes('highlight')['color'] as string) || 'transparent',\n canUndo: e.can().undo(),\n canRedo: e.can().redo(),\n };\n }\n}\n","<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|