stimulsoft-forms
Version:
Stimulsoft PDF Forms
1,010 lines • 87.7 kB
JavaScript
import { Component } from "@angular/core";
import StiRectangleGeometryLayout from "../../computed/StiRectangleGeometryLayout";
import { StiTextElement } from "../../elements/StiTextElement";
import { UsedFont } from "../../services/objects";
import * as i0 from "@angular/core";
import * as i1 from "../../services/model.service";
import * as i2 from "../../services/sti-helper.service";
import * as i3 from "../../services/sti-draggable.service";
import * as i4 from "../../services/theme.service";
import * as i5 from "../../services/sti-form-events-service";
import * as i6 from "../../services/sti-editable-content.service";
import * as i7 from "../../services/sti-localization.service";
import * as i8 from "../../services/sti-rich-text.service";
import * as i9 from "../../services/sti-undo-service";
import * as i10 from "../../services/sti-name.service";
import * as i11 from "../../services/sti-color-dialog.service";
import * as i12 from "../../services/sti-clipboard-sevice";
import * as i13 from "@angular/common";
import * as i14 from "../sti-dropdown-component/sti-dropdown-component";
import * as i15 from "../sti-tooltip/sti-tooltip.directive";
import * as i16 from "../sti-select-button/sti-select-button.component";
export class StiHomeRibbonComponent {
constructor(model, helper, draggableService, theme, render, formEvents, editableContentService, loc, richTextService, undoService, nameService, colorService, clipboardService) {
this.model = model;
this.helper = helper;
this.draggableService = draggableService;
this.theme = theme;
this.render = render;
this.formEvents = formEvents;
this.editableContentService = editableContentService;
this.loc = loc;
this.richTextService = richTextService;
this.undoService = undoService;
this.nameService = nameService;
this.colorService = colorService;
this.clipboardService = clipboardService;
}
get alignment() {
return this.editableContentService.editableContent["horizontalAlignment"]
? this.editableContentService.editableContent["horizontalAlignment"]
: null;
}
haveBackgroundColor() {
return (this.editableContentService.editableContent != null &&
this.editableContentService.editableContent.haveBackgoundColor());
}
haveContentAlignment() {
return (this.editableContentService.editableContent != null &&
this.editableContentService.editableContent.haveContentAlignment());
}
haveVerticalAlignment() {
return (this.editableContentService.editableContent != null &&
this.editableContentService.editableContent.haveVerticalAlignment());
}
showColorPicker(element, object, isRichText = false) {
this.colorService.openDialog(element, object, isRichText);
}
changeEvent() {
let currentChangableFont = new UsedFont(this.editableContentService.editableContent.eFont.family, this.model.arrayOfStylesToString(this.editableContentService.editableContent.eFont.style), this.editableContentService.editableContent.eFont.size);
this.model.form.formEvents.next({ name: "UpdateFonts", value: currentChangableFont });
}
setStyle(value) {
if (value == "Bold") {
this.richTextService.insertBold();
}
else if (value == "Italic") {
this.richTextService.insertItalic();
}
else {
this.richTextService.insertUnderline();
}
}
setAlignment(value) {
if (value == 1) {
this.richTextService.setLeftAlignment();
}
else if (value == 2) {
this.richTextService.setCenterAlignment();
}
else {
this.richTextService.setRightAlignment();
}
}
get fontSize() {
return this.editableContentService.editableContent?.eFont.size;
}
set fontSize(value) {
if (this.editableContentService.editableContent) {
this.editableContentService.editableContent.eFont.size = value;
}
}
get fontFamily() {
return this.editableContentService.editableContent?.eFont.family;
}
set fontFamily(value) {
if (this.editableContentService.editableContent) {
this.editableContentService.editableContent.eFont.family = value;
}
}
get fontStyle() {
return this.editableContentService.editableContent?.eFont.style;
}
set fontStyle(value) {
if (this.editableContentService.editableContent) {
this.editableContentService.editableContent.eFont.style = value;
}
}
get foreColor() {
return this.editableContentService.editableContent?.eColor;
}
get backColor() {
return this.editableContentService.editableContent.eBackgroundColor;
}
get canDelete() {
return this.model.selectedComponent ? true : false;
}
get isRichText() {
return this.model.selectedComponent?.element instanceof StiTextElement ? true : false;
}
ngOnInit() { }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiHomeRibbonComponent, deps: [{ token: i1.StiModelService }, { token: i2.StiHelperService }, { token: i3.StiDraggableService }, { token: i4.StiThemeService }, { token: StiRectangleGeometryLayout }, { token: i5.FormEventsService }, { token: i6.StiEditableContentService }, { token: i7.StiLocalizationService }, { token: i8.StiRichTextService }, { token: i9.StiUndoService }, { token: i10.StiNameService }, { token: i11.StiColorDialogService }, { token: i12.StiClipboardService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StiHomeRibbonComponent, selector: "sti-home-ribbon-component", ngImport: i0, template: `<div
class="home"
style="-moz-user-select: none;-webkit-touch-callout: none;-webkit-user-select: none;-ms-user-select: none;user-select: none"
>
<div
[style.margin-left]="'10px'"
class="container {{ undoService?.undos?.length < 2 ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('HelpDesigner', 'Undo').replace('.', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="undoService.undo()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Undo.png')" alt="" /></div>
</div>
<div
class="container {{ undoService?.redos?.length < 1 ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('HelpDesigner', 'Redo').replace('.', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="undoService.redo()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Redo.png')" alt="" /></div>
</div>
<!-- <div
*ngIf="isRichText"
[style.margin-left]="'10px'"
class="container"
[stiTooltip]="loc.getP('Undo')"
tooltipPosition="bottom" showDelay="500"
(click)="richTextService.useUndo()"
>
<div class="button"><img [src]="getIcon('Undo')" alt="" /></div>
</div>
<div
*ngIf="isRichText"
class="container"
[stiTooltip]="loc.getP('Redo')"
tooltipPosition="bottom" showDelay="500"
(click)="richTextService.useRedo()"
>
<div class="button"><img [src]="getIcon('Redo')" alt="" /></div>
</div> -->
<div class="vertical-line"></div>
<div
class="container {{ !clipboardService.hasCopy ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('MainMenu', 'menuEditPaste').replace('&', '').replace(';', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="clipboardService.pasteElement($event)"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Paste.png')" alt="" /></div>
</div>
<div
class="container {{ clipboardService.canCopy ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('MainMenu', 'menuEditCopy').replace('&', '').replace(';', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="clipboardService.copyElement()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Copy.png')" alt="" /></div>
</div>
<div
class="container {{ clipboardService.canCopy ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('MainMenu', 'menuEditCut').replace('&', '').replace(';', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="clipboardService.cutElement()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Cut.png')" alt="" /></div>
</div>
<div
class="container {{ !canDelete ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('Buttons', 'Delete')"
tooltipPosition="bottom"
showDelay="500"
(click)="formEvents.deleteComponent()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Delete.png')" alt="" /></div>
</div>
<div class="vertical-line"></div>
<sti-dropdown-component
*ngIf="!isRichText"
[id]="0"
[options]="model.fontFamilies"
[(value)]="fontFamily"
[disabled]="editableContentService.editableContent == null"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
[optionLabel]="'name'"
[optionValue]="'name'"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="changeEvent()"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="!isRichText"
[options]="model.fontFamilies"
[(ngModel)]="fontFamily"
optionLabel="name"
optionValue="name"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
[disabled]="editableContentService.editableContent == null"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
tooltipPosition="bottom"
showDelay="500"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(onChange)="changeEvent()"
></p-dropdown> -->
<sti-dropdown-component
*ngIf="isRichText"
[id]="1"
[options]="model.fontFamilies"
[(value)]="richTextService.activeFontFamily"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
[optionLabel]="'name'"
[optionValue]="'name'"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="richTextService.insertFontFamily(richTextService.activeFontFamily)"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="isRichText"
[options]="model.fontFamilies"
[(ngModel)]="richTextService.activeFontFamily"
optionLabel="name"
optionValue="name"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
tooltipPosition="bottom"
showDelay="500"
(mousedown)="$event.preventDefault()"
(onChange)="richTextService.insertFontFamily(richTextService.activeFontFamily)"
(mouseup)="editableContentService.startEdit()"
></p-dropdown> -->
<sti-dropdown-component
*ngIf="!isRichText"
[id]="2"
[options]="helper.fontSizes"
[(value)]="fontSize"
[tooltip]="loc.getP('FontSize')"
[style]="{
width: '60px',
height: '32px',
alignItems: 'center',
margin: '10px 10px 1px 2px',
fontSize: '12px'
}"
[disabled]="editableContentService.editableContent == null"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="changeEvent()"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="!isRichText"
[options]="helper.fontSizes"
[(ngModel)]="fontSize"
[style]="{ width: '60px', height: '32px', alignItems: 'center', margin: '10px 10px 1px 2px', fontSize: '12px' }"
[tooltip]="loc.getP('FontSize')"
tooltipPosition="bottom"
showDelay="500"
[disabled]="editableContentService.editableContent == null"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(onChange)="changeEvent()"
></p-dropdown> -->
<sti-dropdown-component
*ngIf="isRichText"
[id]="3"
[options]="helper.richTextFontSizes"
[(value)]="richTextService.activeFontSize"
[tooltip]="loc.getP('FontSize')"
[optionLabel]="'name'"
[optionValue]="'value'"
[style]="{
width: '60px',
height: '32px',
alignItems: 'center',
margin: '10px 10px 1px 2px',
fontSize: '12px'
}"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="richTextService.insertFontSize()"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="isRichText"
[options]="helper.richTextFontSizes"
[(ngModel)]="richTextService.activeFontSize"
optionLabel="name"
optionValue="value"
[style]="{ width: '60px', height: '32px', alignItems: 'center', margin: '10px 10px 1px 2px', fontSize: '12px' }"
[tooltip]="loc.getP('FontSize')"
tooltipPosition="bottom"
showDelay="500"
(mousedown)="$event.preventDefault()"
(onChange)="richTextService.insertFontSize()"
(mouseup)="editableContentService.startEdit()"
></p-dropdown> -->
<sti-selectButton
*ngIf="!isRichText"
[options]="helper.styleOptions"
[(value)]="fontStyle"
[multiple]="true"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
[disabled]="editableContentService.editableContent == null"
(mousedown)="$event.preventDefault()"
(onChange)="changeEvent()"
><ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.value)"
tooltipPosition="bottom"
showDelay="500"
/> </ng-template
></sti-selectButton>
<sti-selectButton
*ngIf="isRichText"
[options]="helper.styleOptions"
[(value)]="richTextService.activeTextStyles"
[multiple]="true"
optionValue="value"
(onOptionClick)="setStyle($event.option.value)"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
><ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.value)"
tooltipPosition="bottom"
showDelay="500"
/> </ng-template
></sti-selectButton>
<div class="vertical-line"></div>
<div
*ngIf="!isRichText"
class="button-container"
[stiTooltip]="loc.getP('ForeColor')"
tooltipPosition="bottom"
showDelay="500"
[style.opacity]="editableContentService.editableContent != null ? '1' : '0.5'"
[class]="editableContentService.editableContent != null ? 'enabled' : 'disabled'"
(click)="showColorPicker(fontColorEditor, foreColor)"
(mousedown)="$event.preventDefault()"
#fontColorEditor
>
<div class="prev">
<div class="foreground" [style]="{ backgroundPosition: 'center', backgroundRepeat: 'no-repeat' }">
<img [src]="model.getImage('images.Brush.png')" alt="" />
</div>
<span
class="color-preview"
[style.background-color]="
editableContentService.editableContent != null
? editableContentService.editableContent?.eColor?.toHtmlColor()
: 'rgb(182, 181, 180)'
"
></span>
</div>
<div [style]="{ position: 'relative', alignSelf: 'center' }">
<i class="pi pi-chevron-down"></i>
</div>
</div>
<div
*ngIf="isRichText"
class="button-container"
[stiTooltip]="loc.getP('ForeColor')"
tooltipPosition="bottom"
showDelay="500"
[style.opacity]="1"
[class]="'enabled'"
(click)="showColorPicker(richTextColorEditor, richTextService.activeColor, true)"
(mousedown)="$event.preventDefault()"
#richTextColorEditor
>
<div class="prev">
<div class="foreground" [style]="{ backgroundPosition: 'center', backgroundRepeat: 'no-repeat' }">
<img [src]="model.getImage('images.Brush.png')" alt="" />
</div>
<span class="color-preview" [style.background-color]="richTextService.activeColor.toHtmlColor()"></span>
</div>
<div [style]="{ position: 'relative', alignSelf: 'center' }">
<i class="pi pi-chevron-down"></i>
</div>
</div>
<div
class="button-container"
[stiTooltip]="loc.getP('BackColor')"
tooltipPosition="bottom"
showDelay="500"
[style.opacity]="haveBackgroundColor() ? '1' : '0.5'"
[class]="haveBackgroundColor() ? 'enabled' : 'disabled'"
(click)="showColorPicker(backColorEditor, backColor)"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
#backColorEditor
>
<div class="prev">
<div class="background" [style]="{ backgroundPosition: 'center', backgroundRepeat: 'no-repeat' }">
<img [src]="model.getImage('images.Fill.png')" alt="" />
</div>
<span
class="color-preview"
[style.background-color]="
editableContentService.editableContent != null
? editableContentService.editableContent?.eBackgroundColor?.toHtmlColor()
: 'rgb(182, 181, 180)'
"
></span>
</div>
<div [style]="{ position: 'relative', alignSelf: 'center' }">
<i class="pi pi-chevron-down"></i>
</div>
</div>
<sti-selectButton
*ngIf="haveContentAlignment()"
[options]="helper.justifyOptions"
[(value)]="editableContentService.editableContent.eContentAlignment"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
(mousedown)="editableContentService.startEdit()"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="!haveContentAlignment() && !isRichText"
[options]="helper.justifyOptions"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
[disabled]="true"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="isRichText"
[options]="helper.justifyOptions"
[(value)]="richTextService.activeAlignment"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
(onOptionClick)="setAlignment($event.option.value)"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="haveVerticalAlignment()"
[options]="helper.verticalAlignment"
[(value)]="editableContentService.editableContent.eVerticalAlignment"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
(mousedown)="editableContentService.startEdit()"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="!haveVerticalAlignment()"
[options]="helper.verticalAlignment"
optionValue="value"
[disabled]="true"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '90px' }"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<!-- <div class="vertical-line"></div>
<div
class="container"
[stiTooltip]="loc.getP('ToggleElementCorners')"
tooltipPosition="bottom"
showDelay="500"
(click)="model.showCornerRadius = !model.showCornerRadius"
>
<div class="button {{ model.showCornerRadius ? 'active' : '' }}"><img [src]="getIcon('Corners')" alt="" /></div>
</div> -->
</div>`, isInline: true, styles: [".active{background-color:var(--active-color)!important}.disabled{opacity:.5;pointer-events:none}.container{width:40px;display:flex;align-items:center;justify-content:center}.button{height:32px;width:32px;background-color:var(--back-color);border-radius:3px;display:flex;align-items:center;justify-content:center}.button:hover{background-color:var(--hover-color)!important}.button:active{background-color:var(--columnDeleteHover-color)!important}img{max-width:18px}.prev{display:flex;width:100%;position:relative;flex-direction:column}.button-container{display:flex;margin-top:11px;height:32px;width:48px;position:relative;margin-right:10px;border-radius:3px}.button-container:hover{background-color:var(--hover-color)}.button-container:active{background-color:var(--columnDeleteHover-color)}.color-preview{width:20px;height:5px;margin-left:6px}i{height:12px;width:12px;right:3px;top:50%;vertical-align:middle;color:var(--text-color)}i:hover{color:#fff}.home{height:55px;color:var(--text-color);width:100%;display:flex;border-bottom:1px solid var(--formBorder-color);vertical-align:-webkit-baseline-middle;background-color:var(--back-color);font-family:Segoe UI;overflow-x:auto;overflow-y:hidden}*{scrollbar-width:thin;scrollbar-color:var(--thumb-color),var(--back-color)}*::-webkit-scrollbar{-webkit-appearance:none;background-color:var(--back-color);height:10px;width:10px;outline:none}*::-webkit-scrollbar-button{-webkit-appearance:none;height:3px;width:3px}*::-webkit-scrollbar-thumb{-webkit-appearance:none;background-color:var(--thumb-color);height:10px;min-width:25px;max-width:80%;border-radius:4px;border:2px solid var(--back-color)}*::-webkit-scrollbar-thumb:hover{background-color:var(--trackHover-color);height:10px}*::-webkit-scrollbar-track{-webkit-appearance:none;background-color:var(--back-color);border:1px solid var(--back-color)}*::-webkit-scrollbar-corner{background-color:var(--back-color)}.home input{margin-top:12.5px;vertical-align:-webkit-baseline-middle}.vertical-line{margin-top:10px;width:0px;height:32px;border-right:1px solid rgb(195,195,195);margin-right:5px}.Bold{background:var(--navbarBold-icon)}.Italic{background:var(--navbarItalic-icon)}.Underline{background:var(--navbarUnder-icon)}.foreground{margin-left:10px;margin-top:5px;width:16px;height:18px}.background{margin-left:8px;margin-top:5px;width:16px;height:18px}\n"], dependencies: [{ kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i14.StiDropdownComponent, selector: "sti-dropdown-component", inputs: ["id", "options", "value", "disabled", "optionLabel", "optionValue", "isMinVersion", "tooltip"], outputs: ["valueChange"] }, { kind: "directive", type: i15.StiTooltipDirective, selector: "[stiTooltip]", inputs: ["tooltipPosition", "stiTooltip", "showDelay"] }, { kind: "component", type: i16.StiSelectButtonComponent, selector: "sti-selectButton", inputs: ["options", "value", "optionLabel", "optionValue", "multiple", "disabled"], outputs: ["onOptionClick", "onChange", "valueChange"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiHomeRibbonComponent, decorators: [{
type: Component,
args: [{ selector: "sti-home-ribbon-component", template: `<div
class="home"
style="-moz-user-select: none;-webkit-touch-callout: none;-webkit-user-select: none;-ms-user-select: none;user-select: none"
>
<div
[style.margin-left]="'10px'"
class="container {{ undoService?.undos?.length < 2 ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('HelpDesigner', 'Undo').replace('.', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="undoService.undo()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Undo.png')" alt="" /></div>
</div>
<div
class="container {{ undoService?.redos?.length < 1 ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('HelpDesigner', 'Redo').replace('.', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="undoService.redo()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Redo.png')" alt="" /></div>
</div>
<!-- <div
*ngIf="isRichText"
[style.margin-left]="'10px'"
class="container"
[stiTooltip]="loc.getP('Undo')"
tooltipPosition="bottom" showDelay="500"
(click)="richTextService.useUndo()"
>
<div class="button"><img [src]="getIcon('Undo')" alt="" /></div>
</div>
<div
*ngIf="isRichText"
class="container"
[stiTooltip]="loc.getP('Redo')"
tooltipPosition="bottom" showDelay="500"
(click)="richTextService.useRedo()"
>
<div class="button"><img [src]="getIcon('Redo')" alt="" /></div>
</div> -->
<div class="vertical-line"></div>
<div
class="container {{ !clipboardService.hasCopy ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('MainMenu', 'menuEditPaste').replace('&', '').replace(';', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="clipboardService.pasteElement($event)"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Paste.png')" alt="" /></div>
</div>
<div
class="container {{ clipboardService.canCopy ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('MainMenu', 'menuEditCopy').replace('&', '').replace(';', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="clipboardService.copyElement()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Copy.png')" alt="" /></div>
</div>
<div
class="container {{ clipboardService.canCopy ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('MainMenu', 'menuEditCut').replace('&', '').replace(';', '')"
tooltipPosition="bottom"
showDelay="500"
(click)="clipboardService.cutElement()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Cut.png')" alt="" /></div>
</div>
<div
class="container {{ !canDelete ? 'disabled' : '' }}"
[stiTooltip]="loc.get2('Buttons', 'Delete')"
tooltipPosition="bottom"
showDelay="500"
(click)="formEvents.deleteComponent()"
>
<div class="button"><img [src]="model.getImage('images.Ribbon.Delete.png')" alt="" /></div>
</div>
<div class="vertical-line"></div>
<sti-dropdown-component
*ngIf="!isRichText"
[id]="0"
[options]="model.fontFamilies"
[(value)]="fontFamily"
[disabled]="editableContentService.editableContent == null"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
[optionLabel]="'name'"
[optionValue]="'name'"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="changeEvent()"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="!isRichText"
[options]="model.fontFamilies"
[(ngModel)]="fontFamily"
optionLabel="name"
optionValue="name"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
[disabled]="editableContentService.editableContent == null"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
tooltipPosition="bottom"
showDelay="500"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(onChange)="changeEvent()"
></p-dropdown> -->
<sti-dropdown-component
*ngIf="isRichText"
[id]="1"
[options]="model.fontFamilies"
[(value)]="richTextService.activeFontFamily"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
[optionLabel]="'name'"
[optionValue]="'name'"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="richTextService.insertFontFamily(richTextService.activeFontFamily)"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="isRichText"
[options]="model.fontFamilies"
[(ngModel)]="richTextService.activeFontFamily"
optionLabel="name"
optionValue="name"
[style]="{
width: '150px',
height: '32px',
alignItems: 'center',
margin: '1px 2px',
marginTop: '10px',
fontSize: '12px'
}"
[tooltip]="loc.get2('HelpDesigner', 'FontName')"
tooltipPosition="bottom"
showDelay="500"
(mousedown)="$event.preventDefault()"
(onChange)="richTextService.insertFontFamily(richTextService.activeFontFamily)"
(mouseup)="editableContentService.startEdit()"
></p-dropdown> -->
<sti-dropdown-component
*ngIf="!isRichText"
[id]="2"
[options]="helper.fontSizes"
[(value)]="fontSize"
[tooltip]="loc.getP('FontSize')"
[style]="{
width: '60px',
height: '32px',
alignItems: 'center',
margin: '10px 10px 1px 2px',
fontSize: '12px'
}"
[disabled]="editableContentService.editableContent == null"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="changeEvent()"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="!isRichText"
[options]="helper.fontSizes"
[(ngModel)]="fontSize"
[style]="{ width: '60px', height: '32px', alignItems: 'center', margin: '10px 10px 1px 2px', fontSize: '12px' }"
[tooltip]="loc.getP('FontSize')"
tooltipPosition="bottom"
showDelay="500"
[disabled]="editableContentService.editableContent == null"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(onChange)="changeEvent()"
></p-dropdown> -->
<sti-dropdown-component
*ngIf="isRichText"
[id]="3"
[options]="helper.richTextFontSizes"
[(value)]="richTextService.activeFontSize"
[tooltip]="loc.getP('FontSize')"
[optionLabel]="'name'"
[optionValue]="'value'"
[style]="{
width: '60px',
height: '32px',
alignItems: 'center',
margin: '10px 10px 1px 2px',
fontSize: '12px'
}"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
(valueChange)="richTextService.insertFontSize()"
></sti-dropdown-component>
<!-- <p-dropdown
*ngIf="isRichText"
[options]="helper.richTextFontSizes"
[(ngModel)]="richTextService.activeFontSize"
optionLabel="name"
optionValue="value"
[style]="{ width: '60px', height: '32px', alignItems: 'center', margin: '10px 10px 1px 2px', fontSize: '12px' }"
[tooltip]="loc.getP('FontSize')"
tooltipPosition="bottom"
showDelay="500"
(mousedown)="$event.preventDefault()"
(onChange)="richTextService.insertFontSize()"
(mouseup)="editableContentService.startEdit()"
></p-dropdown> -->
<sti-selectButton
*ngIf="!isRichText"
[options]="helper.styleOptions"
[(value)]="fontStyle"
[multiple]="true"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
[disabled]="editableContentService.editableContent == null"
(mousedown)="$event.preventDefault()"
(onChange)="changeEvent()"
><ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.value)"
tooltipPosition="bottom"
showDelay="500"
/> </ng-template
></sti-selectButton>
<sti-selectButton
*ngIf="isRichText"
[options]="helper.styleOptions"
[(value)]="richTextService.activeTextStyles"
[multiple]="true"
optionValue="value"
(onOptionClick)="setStyle($event.option.value)"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
><ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.value)"
tooltipPosition="bottom"
showDelay="500"
/> </ng-template
></sti-selectButton>
<div class="vertical-line"></div>
<div
*ngIf="!isRichText"
class="button-container"
[stiTooltip]="loc.getP('ForeColor')"
tooltipPosition="bottom"
showDelay="500"
[style.opacity]="editableContentService.editableContent != null ? '1' : '0.5'"
[class]="editableContentService.editableContent != null ? 'enabled' : 'disabled'"
(click)="showColorPicker(fontColorEditor, foreColor)"
(mousedown)="$event.preventDefault()"
#fontColorEditor
>
<div class="prev">
<div class="foreground" [style]="{ backgroundPosition: 'center', backgroundRepeat: 'no-repeat' }">
<img [src]="model.getImage('images.Brush.png')" alt="" />
</div>
<span
class="color-preview"
[style.background-color]="
editableContentService.editableContent != null
? editableContentService.editableContent?.eColor?.toHtmlColor()
: 'rgb(182, 181, 180)'
"
></span>
</div>
<div [style]="{ position: 'relative', alignSelf: 'center' }">
<i class="pi pi-chevron-down"></i>
</div>
</div>
<div
*ngIf="isRichText"
class="button-container"
[stiTooltip]="loc.getP('ForeColor')"
tooltipPosition="bottom"
showDelay="500"
[style.opacity]="1"
[class]="'enabled'"
(click)="showColorPicker(richTextColorEditor, richTextService.activeColor, true)"
(mousedown)="$event.preventDefault()"
#richTextColorEditor
>
<div class="prev">
<div class="foreground" [style]="{ backgroundPosition: 'center', backgroundRepeat: 'no-repeat' }">
<img [src]="model.getImage('images.Brush.png')" alt="" />
</div>
<span class="color-preview" [style.background-color]="richTextService.activeColor.toHtmlColor()"></span>
</div>
<div [style]="{ position: 'relative', alignSelf: 'center' }">
<i class="pi pi-chevron-down"></i>
</div>
</div>
<div
class="button-container"
[stiTooltip]="loc.getP('BackColor')"
tooltipPosition="bottom"
showDelay="500"
[style.opacity]="haveBackgroundColor() ? '1' : '0.5'"
[class]="haveBackgroundColor() ? 'enabled' : 'disabled'"
(click)="showColorPicker(backColorEditor, backColor)"
(mousedown)="$event.preventDefault()"
(mouseup)="editableContentService.startEdit()"
#backColorEditor
>
<div class="prev">
<div class="background" [style]="{ backgroundPosition: 'center', backgroundRepeat: 'no-repeat' }">
<img [src]="model.getImage('images.Fill.png')" alt="" />
</div>
<span
class="color-preview"
[style.background-color]="
editableContentService.editableContent != null
? editableContentService.editableContent?.eBackgroundColor?.toHtmlColor()
: 'rgb(182, 181, 180)'
"
></span>
</div>
<div [style]="{ position: 'relative', alignSelf: 'center' }">
<i class="pi pi-chevron-down"></i>
</div>
</div>
<sti-selectButton
*ngIf="haveContentAlignment()"
[options]="helper.justifyOptions"
[(value)]="editableContentService.editableContent.eContentAlignment"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
(mousedown)="editableContentService.startEdit()"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="!haveContentAlignment() && !isRichText"
[options]="helper.justifyOptions"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
[disabled]="true"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="isRichText"
[options]="helper.justifyOptions"
[(value)]="richTextService.activeAlignment"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
(onOptionClick)="setAlignment($event.option.value)"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="haveVerticalAlignment()"
[options]="helper.verticalAlignment"
[(value)]="editableContentService.editableContent.eVerticalAlignment"
optionValue="value"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '94px' }"
(mousedown)="editableContentService.startEdit()"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
*ngIf="!haveVerticalAlignment()"
[options]="helper.verticalAlignment"
optionValue="value"
[disabled]="true"
[style]="{ margin: '11px 10px 1px 1px', height: '32px', minWidth: '90px' }"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<!-- <div class="vertical-line"></div>
<div
class="container"
[stiTooltip]="loc.getP('ToggleElementCorners')"
tooltipPosition="bottom"
showDelay="500"
(click)="model.showCornerRadius = !model.showCornerRadius"
>
<div class="button {{ model.showCornerRadius ? 'active' : '' }}"><img [src]="getIcon('Corners')" alt="" /></div>
</div> -->
</div>`, styles: [".active{background-color:var(--active-color)!important}.disabled{opacity:.5;pointer-events:none}.container{width:40px;display:flex;align-items:center;justify-content:center}.button{height:32px;width:32px;background-color:var(--back-color);border-radius:3px;display:flex;align-items:center;justify-content:center}.button:hover{background-color:var(--hover-color)!important}.button:active{background-color:var(--columnDeleteHover-color)!important}img{max-width:18px}.prev{display:flex;width:100%;position:relative;flex-direction:column}.button-container{display:flex;margin-top:11px;height:32px;width:48px;position:relative;margin-right:10px;border-radius:3px}.button-container:hover{background-color:var(--hover-color)}.button-container:active{background-color:var(--columnDeleteHover-color)}.color-preview{width:20px;height:5px;margin-left:6px}i{height:12px;width:12px;right:3px;top:50%;vertical-align:middle;color:var(--text-color)}i:hover{color:#fff}.home{height:55px;color:var(--text-color);width:100%;display:flex;border-bottom:1px solid var(--formBorder-color);vertical-align:-webkit-baseline-middle;background-color:var(--back-color);font-family:Segoe UI;overflow-x:auto;overflow-y:hidden}*{scrollbar-width:thin;scrollbar-color:var(--thumb-color),var(--back-color)}*::-webkit-scrollbar{-webkit-appearance:none;background-color:var(--back-color);height:10px;width:10px;outline:none}*::-webkit-scrollbar-button{-webkit-appearance:none;height:3px;width:3px}*::-webkit-scrollbar-thumb{-webkit-appearance:none;background-color:var(--thumb-color);height:10px;min-width:25px;max-width:80%;border-radius:4px;border:2px solid var(--back-color)}*::-webkit-scrollbar-thumb:hover{background-color:var(--trackHover-color);height:10px}*::-webkit-scrollbar-track{-webkit-appearance:none;background-color:var(--back-color);border:1px solid var(--back-color)}*::-webkit-scrollbar-corner{background-color:var(--back-color)}.home input{margin-top:12.5px;vertical-align:-webkit-baseline-middle}.vertical-line{margin-top:10px;width:0px;height:32px;border-right:1px solid rgb(195,195,195);margin-right:5px}.Bold{background:var(--navbarBold-icon)}.Italic{background:var(--navbarItalic-icon)}.Underline{background:var(--navbarUnder-icon)}.foreground{margin-left:10px;margin-top:5px;width:16px;height:18px}.background{margin-left:8px;margin-top:5px;width:16px;height:18px}\n"] }]
}], ctorParameters: () => [{ type: i1.StiModelService }, { type: i2.StiHelperService }, { type: i3.StiDraggableService }, { type: i4.StiThemeService }, { type: StiRectangleGeometryLayout }, { type: i5.FormEventsService }, { type: i6.StiEditableContentService }, { type: i7.StiLocalizationService }, { type: i8.StiRichTextService }, { type: i9.StiUndoService }, { type: i10.StiNameService }, { type: i11.StiColorDialogService }, { type: i12.StiClipboardService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmhvbWUtcmliYm9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL25hdmJhci5jb21wb25lbnQvbmF2YmFyLmhvbWUtcmliYm9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBTWxELE9BQU8sMEJBQTBCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd21CbEQsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxZQUNTLEtBQXNCLEVBQ3RCLE1BQXdCLEVBQ3hCLGdCQUFxQyxFQUNyQyxLQUFzQixFQUN0QixNQUFrQyxFQUNsQyxVQUE2QixFQUM3QixzQkFBaUQsRUFDakQsR0FBMkIsRUFDM0IsZUFBbUMsRUFDbkMsV0FBMkIsRUFDM0IsV0FBMkIsRUFDM0IsWUFBbUMsRUFDbkMsZ0JBQXFDO1FBWnJDLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUFDckMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBNEI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUEyQjtRQUNqRCxRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFDbkMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMz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