|
@@ -2,48 +2,45 @@
|
|
|
<div class="slide-design-panel">
|
|
|
<div class="title">背景填充</div>
|
|
|
<div class="row">
|
|
|
- <Select
|
|
|
- style="flex: 1;"
|
|
|
- :value="background.type"
|
|
|
+ <Select
|
|
|
+ style="flex: 1"
|
|
|
+ :value="background.type"
|
|
|
@update:value="value => updateBackgroundType(value as 'gradient' | 'image' | 'solid')"
|
|
|
:options="[
|
|
|
{ label: '纯色填充', value: 'solid' },
|
|
|
{ label: '图片填充', value: 'image' },
|
|
|
- { label: '渐变填充', value: 'gradient' },
|
|
|
+ { label: '渐变填充', value: 'gradient' }
|
|
|
]"
|
|
|
/>
|
|
|
- <div style="width: 10px;"></div>
|
|
|
+ <div style="width: 10px"></div>
|
|
|
|
|
|
- <Popover trigger="click" v-if="background.type === 'solid'" style="flex: 1;">
|
|
|
+ <Popover trigger="click" v-if="background.type === 'solid'" style="flex: 1">
|
|
|
<template #content>
|
|
|
- <ColorPicker
|
|
|
- :modelValue="background.color"
|
|
|
- @update:modelValue="color => updateBackground({ color })"
|
|
|
- />
|
|
|
+ <ColorPicker :modelValue="background.color" @update:modelValue="color => updateBackground({ color })" />
|
|
|
</template>
|
|
|
<ColorButton :color="background.color || '#fff'" />
|
|
|
</Popover>
|
|
|
|
|
|
- <Select
|
|
|
- style="flex: 1;"
|
|
|
- :value="background.image?.size || 'cover'"
|
|
|
+ <Select
|
|
|
+ style="flex: 1"
|
|
|
+ :value="background.image?.size || 'cover'"
|
|
|
@update:value="value => updateImageBackground({ size: value as SlideBackgroundImageSize })"
|
|
|
v-else-if="background.type === 'image'"
|
|
|
:options="[
|
|
|
{ label: '缩放', value: 'contain' },
|
|
|
{ label: '拼贴', value: 'repeat' },
|
|
|
- { label: '缩放铺满', value: 'cover' },
|
|
|
+ { label: '缩放铺满', value: 'cover' }
|
|
|
]"
|
|
|
/>
|
|
|
|
|
|
- <Select
|
|
|
- style="flex: 1;"
|
|
|
- :value="background.gradient?.type || ''"
|
|
|
+ <Select
|
|
|
+ style="flex: 1"
|
|
|
+ :value="background.gradient?.type || ''"
|
|
|
@update:value="value => updateGradientBackground({ type: value as GradientType })"
|
|
|
v-else
|
|
|
:options="[
|
|
|
{ label: '线性渐变', value: 'linear' },
|
|
|
- { label: '径向渐变', value: 'radial' },
|
|
|
+ { label: '径向渐变', value: 'radial' }
|
|
|
]"
|
|
|
/>
|
|
|
</div>
|
|
@@ -63,12 +60,12 @@
|
|
|
<GradientBar
|
|
|
:value="background.gradient?.colors || []"
|
|
|
@update:value="value => updateGradientBackground({ colors: value })"
|
|
|
- @update:index="index => currentGradientIndex = index"
|
|
|
+ @update:index="index => (currentGradientIndex = index)"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">当前色块:</div>
|
|
|
- <Popover trigger="click" style="width: 60%;">
|
|
|
+ <div style="width: 40%">当前色块:</div>
|
|
|
+ <Popover trigger="click" style="width: 60%">
|
|
|
<template #content>
|
|
|
<ColorPicker
|
|
|
:modelValue="background.gradient!.colors[currentGradientIndex].color"
|
|
@@ -79,36 +76,36 @@
|
|
|
</Popover>
|
|
|
</div>
|
|
|
<div class="row" v-if="background.gradient?.type === 'linear'">
|
|
|
- <div style="width: 40%;">渐变角度:</div>
|
|
|
+ <div style="width: 40%">渐变角度:</div>
|
|
|
<Slider
|
|
|
:min="0"
|
|
|
:max="360"
|
|
|
:step="15"
|
|
|
:value="background.gradient.rotate || 0"
|
|
|
@update:value="value => updateGradientBackground({ rotate: value as number })"
|
|
|
- style="width: 60%;"
|
|
|
+ style="width: 60%"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
- <Button style="flex: 1;" @click="applyBackgroundAllSlide()">应用背景到全部</Button>
|
|
|
+ <Button style="flex: 1" @click="applyBackgroundAllSlide()">应用背景到全部</Button>
|
|
|
</div>
|
|
|
|
|
|
<Divider />
|
|
|
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">画布尺寸:</div>
|
|
|
- <Select
|
|
|
- style="width: 60%;"
|
|
|
- :value="viewportRatio"
|
|
|
+ <div style="width: 40%">画布尺寸:</div>
|
|
|
+ <Select
|
|
|
+ style="width: 60%"
|
|
|
+ :value="viewportRatio"
|
|
|
@update:value="value => updateViewportRatio(value as number)"
|
|
|
:options="[
|
|
|
{ label: '宽屏 16 : 9', value: 0.5625 },
|
|
|
{ label: '宽屏 16 : 10', value: 0.625 },
|
|
|
{ label: '标准 4 : 3', value: 0.75 },
|
|
|
{ label: '纸张 A3 / A4', value: 0.70710678 },
|
|
|
- { label: '竖向 A3 / A4', value: 1.41421356 },
|
|
|
+ { label: '竖向 A3 / A4', value: 1.41421356 }
|
|
|
]"
|
|
|
/>
|
|
|
</div>
|
|
@@ -124,73 +121,81 @@
|
|
|
</span>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">字体:</div>
|
|
|
+ <div style="width: 40%">字体:</div>
|
|
|
<Select
|
|
|
- style="width: 60%;"
|
|
|
+ style="width: 60%"
|
|
|
:value="theme.fontName"
|
|
|
search
|
|
|
searchLabel="搜索字体"
|
|
|
@update:value="value => updateTheme({ fontName: value as string })"
|
|
|
- :options="[
|
|
|
- ...availableFonts,
|
|
|
- ...WEB_FONTS
|
|
|
- ]"
|
|
|
+ :options="[...availableFonts, ...WEB_FONTS]"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">字体颜色:</div>
|
|
|
- <Popover trigger="click" style="width: 60%;">
|
|
|
+ <div style="width: 40%">字号:</div>
|
|
|
+ <Select
|
|
|
+ style="width: 60%"
|
|
|
+ :value="theme.fontSize"
|
|
|
+ search
|
|
|
+ searchLabel="搜索字号"
|
|
|
+ @update:value="value => updateTheme({ fontSize: value as string })"
|
|
|
+ :options="
|
|
|
+ fontSizeOptions.map(item => ({
|
|
|
+ label: item,
|
|
|
+ value: item
|
|
|
+ }))
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <IconAddText />
|
|
|
+ </template>
|
|
|
+ </Select>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div style="width: 40%">字体颜色:</div>
|
|
|
+ <Popover trigger="click" style="width: 60%">
|
|
|
<template #content>
|
|
|
- <ColorPicker
|
|
|
- :modelValue="theme.fontColor"
|
|
|
- @update:modelValue="value => updateTheme({ fontColor: value })"
|
|
|
- />
|
|
|
+ <ColorPicker :modelValue="theme.fontColor" @update:modelValue="value => updateTheme({ fontColor: value })" />
|
|
|
</template>
|
|
|
<ColorButton :color="theme.fontColor" />
|
|
|
</Popover>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">背景颜色:</div>
|
|
|
- <Popover trigger="click" style="width: 60%;">
|
|
|
+ <div style="width: 40%">背景颜色:</div>
|
|
|
+ <Popover trigger="click" style="width: 60%">
|
|
|
<template #content>
|
|
|
- <ColorPicker
|
|
|
- :modelValue="theme.backgroundColor"
|
|
|
- @update:modelValue="value => updateTheme({ backgroundColor: value })"
|
|
|
- />
|
|
|
+ <ColorPicker :modelValue="theme.backgroundColor" @update:modelValue="value => updateTheme({ backgroundColor: value })" />
|
|
|
</template>
|
|
|
<ColorButton :color="theme.backgroundColor" />
|
|
|
</Popover>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">主题色:</div>
|
|
|
- <Popover trigger="click" style="width: 60%;">
|
|
|
+ <div style="width: 40%">主题色:</div>
|
|
|
+ <Popover trigger="click" style="width: 60%">
|
|
|
<template #content>
|
|
|
- <ColorPicker
|
|
|
- :modelValue="theme.themeColor"
|
|
|
- @update:modelValue="value => updateTheme({ themeColor: value })"
|
|
|
- />
|
|
|
+ <ColorPicker :modelValue="theme.themeColor" @update:modelValue="value => updateTheme({ themeColor: value })" />
|
|
|
</template>
|
|
|
<ColorButton :color="theme.themeColor" />
|
|
|
</Popover>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<template v-if="moreThemeConfigsVisible">
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">边框样式:</div>
|
|
|
- <Select
|
|
|
- style="width: 60%;"
|
|
|
- :value="theme.outline.style || ''"
|
|
|
+ <div style="width: 40%">边框样式:</div>
|
|
|
+ <Select
|
|
|
+ style="width: 60%"
|
|
|
+ :value="theme.outline.style || ''"
|
|
|
@update:value="value => updateTheme({ outline: { ...theme.outline, style: value as 'dashed' | 'solid' | 'dotted' } })"
|
|
|
:options="[
|
|
|
{ label: '实线边框', value: 'solid' },
|
|
|
{ label: '虚线边框', value: 'dashed' },
|
|
|
- { label: '点线边框', value: 'dotted' },
|
|
|
+ { label: '点线边框', value: 'dotted' }
|
|
|
]"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">边框颜色:</div>
|
|
|
- <Popover trigger="click" style="width: 60%;">
|
|
|
+ <div style="width: 40%">边框颜色:</div>
|
|
|
+ <Popover trigger="click" style="width: 60%">
|
|
|
<template #content>
|
|
|
<ColorPicker
|
|
|
:modelValue="theme.outline.color"
|
|
@@ -201,28 +206,28 @@
|
|
|
</Popover>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">边框粗细:</div>
|
|
|
- <NumberInput
|
|
|
- :value="theme.outline.width || 0"
|
|
|
- @update:value="value => updateTheme({ outline: { ...theme.outline, width: value } })"
|
|
|
- style="width: 60%;"
|
|
|
+ <div style="width: 40%">边框粗细:</div>
|
|
|
+ <NumberInput
|
|
|
+ :value="theme.outline.width || 0"
|
|
|
+ @update:value="value => updateTheme({ outline: { ...theme.outline, width: value } })"
|
|
|
+ style="width: 60%"
|
|
|
/>
|
|
|
</div>
|
|
|
- <div class="row" style="height: 30px;">
|
|
|
- <div style="width: 40%;">水平阴影:</div>
|
|
|
- <Slider
|
|
|
- style="width: 60%;"
|
|
|
- :min="-10"
|
|
|
- :max="10"
|
|
|
- :step="1"
|
|
|
- :value="theme.shadow.h"
|
|
|
+ <div class="row" style="height: 30px">
|
|
|
+ <div style="width: 40%">水平阴影:</div>
|
|
|
+ <Slider
|
|
|
+ style="width: 60%"
|
|
|
+ :min="-10"
|
|
|
+ :max="10"
|
|
|
+ :step="1"
|
|
|
+ :value="theme.shadow.h"
|
|
|
@update:value="value => updateTheme({ shadow: { ...theme.shadow, h: value as number } })"
|
|
|
/>
|
|
|
</div>
|
|
|
- <div class="row" style="height: 30px;">
|
|
|
- <div style="width: 40%;">垂直阴影:</div>
|
|
|
+ <div class="row" style="height: 30px">
|
|
|
+ <div style="width: 40%">垂直阴影:</div>
|
|
|
<Slider
|
|
|
- style="width: 60%;"
|
|
|
+ style="width: 60%"
|
|
|
:min="-10"
|
|
|
:max="10"
|
|
|
:step="1"
|
|
@@ -230,10 +235,10 @@
|
|
|
@update:value="value => updateTheme({ shadow: { ...theme.shadow, v: value as number } })"
|
|
|
/>
|
|
|
</div>
|
|
|
- <div class="row" style="height: 30px;">
|
|
|
- <div style="width: 40%;">模糊距离:</div>
|
|
|
+ <div class="row" style="height: 30px">
|
|
|
+ <div style="width: 40%">模糊距离:</div>
|
|
|
<Slider
|
|
|
- style="width: 60%;"
|
|
|
+ style="width: 60%"
|
|
|
:min="1"
|
|
|
:max="20"
|
|
|
:step="1"
|
|
@@ -242,13 +247,10 @@
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="row">
|
|
|
- <div style="width: 40%;">阴影颜色:</div>
|
|
|
- <Popover trigger="click" style="width: 60%;">
|
|
|
+ <div style="width: 40%">阴影颜色:</div>
|
|
|
+ <Popover trigger="click" style="width: 60%">
|
|
|
<template #content>
|
|
|
- <ColorPicker
|
|
|
- :modelValue="theme.shadow.color"
|
|
|
- @update:modelValue="value => updateTheme({ shadow: { ...theme.shadow, color: value } })"
|
|
|
- />
|
|
|
+ <ColorPicker :modelValue="theme.shadow.color" @update:modelValue="value => updateTheme({ shadow: { ...theme.shadow, color: value } })" />
|
|
|
</template>
|
|
|
<ColorButton :color="theme.shadow.color" />
|
|
|
</Popover>
|
|
@@ -256,81 +258,77 @@
|
|
|
</template>
|
|
|
|
|
|
<div class="row">
|
|
|
- <Button style="flex: 1;" @click="applyThemeToAllSlides(moreThemeConfigsVisible)">应用主题到全部</Button>
|
|
|
+ <Button style="flex: 1" @click="applyThemeToAllSlides(moreThemeConfigsVisible)">应用主题到全部</Button>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
- <Button style="flex: 1;" @click="themeStylesExtractVisible = true">从幻灯片提取主题</Button>
|
|
|
+ <Button style="flex: 1" @click="themeStylesExtractVisible = true">从幻灯片提取主题</Button>
|
|
|
</div>
|
|
|
|
|
|
<Divider />
|
|
|
|
|
|
<div class="title">预置主题</div>
|
|
|
<div class="theme-list">
|
|
|
- <div
|
|
|
- class="theme-item"
|
|
|
- v-for="(item, index) in PRESET_THEMES"
|
|
|
+ <div
|
|
|
+ class="theme-item"
|
|
|
+ v-for="(item, index) in PRESET_THEMES"
|
|
|
:key="index"
|
|
|
:style="{
|
|
|
backgroundColor: item.background,
|
|
|
- fontFamily: item.fontname,
|
|
|
+ fontFamily: item.fontname
|
|
|
}"
|
|
|
>
|
|
|
<div class="theme-item-content">
|
|
|
<div class="text" :style="{ color: item.fontColor }">文字 Aa</div>
|
|
|
<div class="colors">
|
|
|
- <div class="color-block" v-for="(color, index) in item.colors" :key="index" :style="{ backgroundColor: color}"></div>
|
|
|
+ <div class="color-block" v-for="(color, index) in item.colors" :key="index" :style="{ backgroundColor: color }"></div>
|
|
|
</div>
|
|
|
|
|
|
<div class="btns">
|
|
|
<Button type="primary" size="small" @click="applyPresetThemeToSingleSlide(item)">应用</Button>
|
|
|
- <Button type="primary" size="small" style="margin-top: 3px;" @click="applyPresetThemeToAllSlides(item)">应用全局</Button>
|
|
|
+ <Button type="primary" size="small" style="margin-top: 3px" @click="applyPresetThemeToAllSlides(item)">应用全局</Button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <Modal
|
|
|
- v-model:visible="themeStylesExtractVisible"
|
|
|
- :width="320"
|
|
|
- @closed="themeStylesExtractVisible = false"
|
|
|
- >
|
|
|
+ <Modal v-model:visible="themeStylesExtractVisible" :width="320" @closed="themeStylesExtractVisible = false">
|
|
|
<ThemeStylesExtract @close="themeStylesExtractVisible = false" />
|
|
|
</Modal>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
-import { computed, ref } from 'vue'
|
|
|
-import { storeToRefs } from 'pinia'
|
|
|
-import { useMainStore, useSlidesStore } from '@/store'
|
|
|
-import type {
|
|
|
+import { computed, ref } from "vue"
|
|
|
+import { storeToRefs } from "pinia"
|
|
|
+import { useMainStore, useSlidesStore } from "@/store"
|
|
|
+import type {
|
|
|
Gradient,
|
|
|
GradientType,
|
|
|
SlideBackground,
|
|
|
SlideBackgroundType,
|
|
|
SlideTheme,
|
|
|
SlideBackgroundImage,
|
|
|
- SlideBackgroundImageSize,
|
|
|
-} from '@/types/slides'
|
|
|
-import { PRESET_THEMES } from '@/configs/theme'
|
|
|
-import { WEB_FONTS } from '@/configs/font'
|
|
|
-import useHistorySnapshot from '@/hooks/useHistorySnapshot'
|
|
|
-import useSlideTheme from '@/hooks/useSlideTheme'
|
|
|
-import { getImageDataURL } from '@/utils/image'
|
|
|
-
|
|
|
-import ThemeStylesExtract from './ThemeStylesExtract.vue'
|
|
|
-import ColorButton from '@/components/ColorButton.vue'
|
|
|
-import FileInput from '@/components/FileInput.vue'
|
|
|
-import ColorPicker from '@/components/ColorPicker/index.vue'
|
|
|
-import Divider from '@/components/Divider.vue'
|
|
|
-import Slider from '@/components/Slider.vue'
|
|
|
-import Button from '@/components/Button.vue'
|
|
|
-import Select from '@/components/Select.vue'
|
|
|
-import Popover from '@/components/Popover.vue'
|
|
|
-import NumberInput from '@/components/NumberInput.vue'
|
|
|
-import Modal from '@/components/Modal.vue'
|
|
|
-import GradientBar from '@/components/GradientBar.vue'
|
|
|
+ SlideBackgroundImageSize
|
|
|
+} from "@/types/slides"
|
|
|
+import { PRESET_THEMES } from "@/configs/theme"
|
|
|
+import { WEB_FONTS } from "@/configs/font"
|
|
|
+import useHistorySnapshot from "@/hooks/useHistorySnapshot"
|
|
|
+import useSlideTheme from "@/hooks/useSlideTheme"
|
|
|
+import { getImageDataURL } from "@/utils/image"
|
|
|
+
|
|
|
+import ThemeStylesExtract from "./ThemeStylesExtract.vue"
|
|
|
+import ColorButton from "@/components/ColorButton.vue"
|
|
|
+import FileInput from "@/components/FileInput.vue"
|
|
|
+import ColorPicker from "@/components/ColorPicker/index.vue"
|
|
|
+import Divider from "@/components/Divider.vue"
|
|
|
+import Slider from "@/components/Slider.vue"
|
|
|
+import Button from "@/components/Button.vue"
|
|
|
+import Select from "@/components/Select.vue"
|
|
|
+import Popover from "@/components/Popover.vue"
|
|
|
+import NumberInput from "@/components/NumberInput.vue"
|
|
|
+import Modal from "@/components/Modal.vue"
|
|
|
+import GradientBar from "@/components/GradientBar.vue"
|
|
|
|
|
|
const slidesStore = useSlidesStore()
|
|
|
const { availableFonts } = storeToRefs(useMainStore())
|
|
@@ -343,53 +341,47 @@ const currentGradientIndex = ref(0)
|
|
|
const background = computed(() => {
|
|
|
if (!currentSlide.value.background) {
|
|
|
return {
|
|
|
- type: 'solid',
|
|
|
- value: '#fff',
|
|
|
+ type: "solid",
|
|
|
+ value: "#fff"
|
|
|
} as SlideBackground
|
|
|
}
|
|
|
return currentSlide.value.background
|
|
|
})
|
|
|
|
|
|
const { addHistorySnapshot } = useHistorySnapshot()
|
|
|
-const {
|
|
|
- applyPresetThemeToSingleSlide,
|
|
|
- applyPresetThemeToAllSlides,
|
|
|
- applyThemeToAllSlides,
|
|
|
-} = useSlideTheme()
|
|
|
+const { applyPresetThemeToSingleSlide, applyPresetThemeToAllSlides, applyThemeToAllSlides } = useSlideTheme()
|
|
|
|
|
|
// 设置背景模式:纯色、图片、渐变色
|
|
|
const updateBackgroundType = (type: SlideBackgroundType) => {
|
|
|
- if (type === 'solid') {
|
|
|
+ if (type === "solid") {
|
|
|
const newBackground: SlideBackground = {
|
|
|
...background.value,
|
|
|
- type: 'solid',
|
|
|
- color: background.value.color || '#fff',
|
|
|
+ type: "solid",
|
|
|
+ color: background.value.color || "#fff"
|
|
|
}
|
|
|
slidesStore.updateSlide({ background: newBackground })
|
|
|
- }
|
|
|
- else if (type === 'image') {
|
|
|
+ } else if (type === "image") {
|
|
|
const newBackground: SlideBackground = {
|
|
|
...background.value,
|
|
|
- type: 'image',
|
|
|
+ type: "image",
|
|
|
image: background.value.image || {
|
|
|
- src: '',
|
|
|
- size: 'cover',
|
|
|
- },
|
|
|
+ src: "",
|
|
|
+ size: "cover"
|
|
|
+ }
|
|
|
}
|
|
|
slidesStore.updateSlide({ background: newBackground })
|
|
|
- }
|
|
|
- else {
|
|
|
+ } else {
|
|
|
const newBackground: SlideBackground = {
|
|
|
...background.value,
|
|
|
- type: 'gradient',
|
|
|
+ type: "gradient",
|
|
|
gradient: background.value.gradient || {
|
|
|
- type: 'linear',
|
|
|
+ type: "linear",
|
|
|
colors: [
|
|
|
- { pos: 0, color: '#fff' },
|
|
|
- { pos: 100, color: '#fff' },
|
|
|
+ { pos: 0, color: "#fff" },
|
|
|
+ { pos: 100, color: "#fff" }
|
|
|
],
|
|
|
- rotate: 0,
|
|
|
- },
|
|
|
+ rotate: 0
|
|
|
+ }
|
|
|
}
|
|
|
currentGradientIndex.value = 0
|
|
|
slidesStore.updateSlide({ background: newBackground })
|
|
@@ -432,7 +424,7 @@ const applyBackgroundAllSlide = () => {
|
|
|
const newSlides = slides.value.map(slide => {
|
|
|
return {
|
|
|
...slide,
|
|
|
- background: currentSlide.value.background,
|
|
|
+ background: currentSlide.value.background
|
|
|
}
|
|
|
})
|
|
|
slidesStore.setSlides(newSlides)
|
|
@@ -448,6 +440,12 @@ const updateTheme = (themeProps: Partial<SlideTheme>) => {
|
|
|
const updateViewportRatio = (value: number) => {
|
|
|
slidesStore.setViewportRatio(value)
|
|
|
}
|
|
|
+
|
|
|
+const fontSizeOptions = [
|
|
|
+ '24px', '28px', '32px', '36px', '40px', '44px', '48px', '56px', '64px',
|
|
|
+ '72px', '80px', '88px', '96px', '108px', '120px', '132px', '144px', '152px',
|
|
|
+ '160px', '176px', '192px', '208px', '224px', '240px',
|
|
|
+]
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
@@ -549,9 +547,9 @@ const updateViewportRatio = (value: number) => {
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
display: flex;
|
|
|
- background-color: rgba($color: #000, $alpha: .25);
|
|
|
+ background-color: rgba($color: #000, $alpha: 0.25);
|
|
|
opacity: 0;
|
|
|
transition: opacity $transitionDelay;
|
|
|
}
|
|
|
}
|
|
|
-</style>
|
|
|
+</style>
|