diff --git a/studio/src/app/components/editor/app-select-target-element/app-select-target-element.tsx b/studio/src/app/components/editor/app-select-target-element/app-select-target-element.tsx index baded3f67..7673e587d 100644 --- a/studio/src/app/components/editor/app-select-target-element/app-select-target-element.tsx +++ b/studio/src/app/components/editor/app-select-target-element/app-select-target-element.tsx @@ -118,7 +118,7 @@ export class AppSelectTargetElement { if (this.slide) { return ( - Text + Font ); } else { @@ -130,7 +130,7 @@ export class AppSelectTargetElement { if (this.textTarget) { return ( - Text + Font ); } else { diff --git a/studio/src/app/components/editor/color/app-color-text-background/app-color-text-background.tsx b/studio/src/app/components/editor/styles/app-color-text-background/app-color-text-background.tsx similarity index 100% rename from studio/src/app/components/editor/color/app-color-text-background/app-color-text-background.tsx rename to studio/src/app/components/editor/styles/app-color-text-background/app-color-text-background.tsx diff --git a/studio/src/app/components/editor/styles/app-expansion-panel/app-expansion-panel.tsx b/studio/src/app/components/editor/styles/app-expansion-panel/app-expansion-panel.tsx index 50161d8de..173e53bf8 100644 --- a/studio/src/app/components/editor/styles/app-expansion-panel/app-expansion-panel.tsx +++ b/studio/src/app/components/editor/styles/app-expansion-panel/app-expansion-panel.tsx @@ -1,4 +1,4 @@ -import {Component, h, State, Prop} from '@stencil/core'; +import {Component, h, Prop} from '@stencil/core'; @Component({ tag: 'app-expansion-panel', @@ -10,11 +10,17 @@ export class AppExpansionPanel { @Prop() expander: boolean = true; - @State() - private expanded: 'open' | 'close' = 'open'; + @Prop({mutable: true}) + expanded: 'open' | 'close' = 'open'; // Source animation: https://css-tricks.com/using-css-transitions-auto-dimensions/ + componentDidLoad() { + if (this.expanded === 'close') { + this.container.style.height = 0 + 'px'; + } + } + private toggle() { if (this.expanded === 'close') { this.expand(); diff --git a/studio/src/app/components/editor/styles/element/app-align/app-align.scss b/studio/src/app/components/editor/styles/element/app-align/app-align.scss index e9b383bc7..ef1e8400c 100644 --- a/studio/src/app/components/editor/styles/element/app-align/app-align.scss +++ b/studio/src/app/components/editor/styles/element/app-align/app-align.scss @@ -1,21 +1,7 @@ app-align { - ion-item.align { - --background-activated: transparent; - --background-focused: transparent; - --background-hover: transparent; - - --color: rgba(0, 0, 0, 0.6); - font-size: var(--font-size-normal); - - cursor: pointer; - - &:hover, - &.active { - --color: black; - - ion-icon { - color: black; - } + ion-list { + ion-item { + margin-bottom: 4px; } } } diff --git a/studio/src/app/components/editor/styles/element/app-align/app-align.tsx b/studio/src/app/components/editor/styles/element/app-align/app-align.tsx index 641b9c823..bd47b00cd 100644 --- a/studio/src/app/components/editor/styles/element/app-align/app-align.tsx +++ b/studio/src/app/components/editor/styles/element/app-align/app-align.tsx @@ -19,13 +19,13 @@ export class AppAlign { this.align = await AlignUtils.getAlignment(this.selectedElement); } - private async updateAlign(align: TextAlign): Promise { - if (!this.selectedElement) { + private async updateAlign($event: CustomEvent): Promise { + if (!this.selectedElement || !$event || !$event.detail) { return; } - this.selectedElement.style.textAlign = align; - this.align = align; + this.selectedElement.style.textAlign = $event.detail.value; + this.align = $event.detail.value; this.alignChange.emit(); } @@ -39,20 +39,23 @@ export class AppAlign { Alignment - {this.renderAlign(TextAlign.LEFT, 'Align left')} - {this.renderAlign(TextAlign.CENTER, 'Align center')} - {this.renderAlign(TextAlign.RIGHT, 'Align right')} + + Alignment + + this.updateAlign($event)} + interface="popover" + mode="md" + class="ion-padding-start ion-padding-end"> + Left + Center + Right + + ); } - - private renderAlign(align: TextAlign, text: string) { - return ( - this.updateAlign(align)} class={`align ${this.align == align ? 'active' : undefined}`}> - - {text} - - ); - } } diff --git a/studio/src/app/components/editor/color/app-color-code/app-color-code.scss b/studio/src/app/components/editor/styles/element/app-color-code/app-color-code.scss similarity index 60% rename from studio/src/app/components/editor/color/app-color-code/app-color-code.scss rename to studio/src/app/components/editor/styles/element/app-color-code/app-color-code.scss index 83cea7cfd..021aaec46 100644 --- a/studio/src/app/components/editor/color/app-color-code/app-color-code.scss +++ b/studio/src/app/components/editor/styles/element/app-color-code/app-color-code.scss @@ -8,4 +8,13 @@ app-color-code { ion-item.action-button { padding-bottom: 8px; } + + ion-list { + &.terminal, + &.theme { + ion-item { + margin-bottom: 4px; + } + } + } } diff --git a/studio/src/app/components/editor/color/app-color-code/app-color-code.tsx b/studio/src/app/components/editor/styles/element/app-color-code/app-color-code.tsx similarity index 77% rename from studio/src/app/components/editor/color/app-color-code/app-color-code.tsx rename to studio/src/app/components/editor/styles/element/app-color-code/app-color-code.tsx index fc82794f3..6ada81355 100644 --- a/studio/src/app/components/editor/color/app-color-code/app-color-code.tsx +++ b/studio/src/app/components/editor/styles/element/app-color-code/app-color-code.tsx @@ -1,6 +1,10 @@ -import {Component, Element, Event, EventEmitter, h, Prop, State} from '@stencil/core'; +import {Component, Event, EventEmitter, h, Prop, State} from '@stencil/core'; + import {alertController, RangeChangeEventDetail} from '@ionic/core'; -import {ColorUtils, InitStyleColor} from '../../../../utils/editor/color.utils'; + +import {DeckdeckgoHighlightCodeCarbonTheme, DeckdeckgoHighlightCodeTerminal} from '@deckdeckgo/highlight-code'; + +import {ColorUtils, InitStyleColor} from '../../../../../utils/editor/color.utils'; enum CodeColorType { COMMENTS, @@ -19,8 +23,6 @@ enum CodeColorType { styleUrl: 'app-color-code.scss', }) export class AppColorCode { - @Element() el: HTMLElement; - @Prop() selectedElement: HTMLElement; @@ -45,11 +47,18 @@ export class AppColorCode { @State() private highlightColorOpacity: number = 100; - @Event() colorChange: EventEmitter; + @State() + private terminal: DeckdeckgoHighlightCodeTerminal = DeckdeckgoHighlightCodeTerminal.CARBON; + + @State() + private theme: DeckdeckgoHighlightCodeCarbonTheme = DeckdeckgoHighlightCodeCarbonTheme.DRACULA; + + @Event() codeDidChange: EventEmitter; async componentWillLoad() { - await this.initColor(); - await this.initCurrentHiglight(); + const promises: Promise[] = [this.initColor(), this.initCurrentHiglight(), this.initTerminal()]; + + await Promise.all(promises); } // prettier-ignore @@ -68,6 +77,18 @@ export class AppColorCode { }); } + private async initTerminal() { + this.terminal = + this.selectedElement && this.selectedElement.hasAttribute('terminal') + ? (this.selectedElement.getAttribute('terminal') as DeckdeckgoHighlightCodeTerminal) + : DeckdeckgoHighlightCodeTerminal.CARBON; + + this.theme = + this.selectedElement && this.selectedElement.hasAttribute('theme') + ? (this.selectedElement.getAttribute('theme') as DeckdeckgoHighlightCodeCarbonTheme) + : DeckdeckgoHighlightCodeCarbonTheme.DRACULA; + } + private selectColor($event: CustomEvent, colorFunction: Function): Promise { return new Promise(async (resolve) => { if (!this.selectedElement || !this.selectedElement.parentElement) { @@ -165,13 +186,13 @@ export class AppColorCode { } // prettier-ignore - private initColor(): Promise { - return new Promise(async (resolve) => { + private initColor(): Promise { + return new Promise(async (resolve) => { if (!this.selectedElement || !this.selectedElement.style) { this.codeColor = undefined; this.codeColorOpacity = 100; - resolve(null); + resolve(); return; } @@ -248,7 +269,7 @@ export class AppColorCode { } private emitColorChange() { - this.colorChange.emit(); + this.codeDidChange.emit(); } private updateOpacity($event: CustomEvent, opacityFunction: Function): Promise { @@ -297,14 +318,40 @@ export class AppColorCode { }); } + private toggle($event: CustomEvent, attribute: 'terminal' | 'theme'): Promise { + return new Promise(async (resolve) => { + if (!$event || !$event.detail) { + resolve(); + return; + } + + if (!this.selectedElement) { + resolve(); + return; + } + + if (attribute === 'terminal') { + this.terminal = $event.detail.value; + } else if (attribute === 'theme') { + this.theme = $event.detail.value; + } + + this.selectedElement.setAttribute(attribute, $event.detail.value); + + this.codeDidChange.emit(); + + resolve(); + }); + } + render() { - return [this.renderCategoryColor(), this.renderHighlightLinesColor()]; + return [this.renderTerminal(), this.renderTheme(), this.renderCategoryColor(), this.renderHighlightLinesColor()]; } private renderCategoryColor() { return ( - - Colors + + More colors Apply a color to @@ -365,9 +412,70 @@ export class AppColorCode { ); } - private renderHighlightLinesColor() { + private renderTerminal() { + return ( + + Terminal + + + + Terminal + + this.toggle($event, 'terminal')} + interface="popover" + mode="md" + class="ion-padding-start ion-padding-end ion-text-capitalize"> + {Object.keys(DeckdeckgoHighlightCodeTerminal).map((key: string) => { + return ( + + {DeckdeckgoHighlightCodeTerminal[key].replace(/^\w/, (c) => c.toUpperCase())} + + ); + })} + + + + + ); + } + + private renderTheme() { return ( + Theme + + + + Theme + + this.toggle($event, 'theme')} + interface="popover" + mode="md" + class="ion-padding-start ion-padding-end ion-text-capitalize"> + {Object.keys(DeckdeckgoHighlightCodeCarbonTheme).map((key: string) => { + return ( + + {DeckdeckgoHighlightCodeCarbonTheme[key].replace(/^\w/, (c) => c.toUpperCase())} + + ); + })} + + + + + ); + } + + private renderHighlightLinesColor() { + return ( + Highlight lines