diff options
| author | HJ <30-hj@users.noreply.git.pleroma.social> | 2024-10-03 19:44:24 +0000 |
|---|---|---|
| committer | HJ <30-hj@users.noreply.git.pleroma.social> | 2024-10-03 19:44:24 +0000 |
| commit | a1c3a7a742ea86b0ddeb67a42ca27f478f0f22a2 (patch) | |
| tree | 82540411b3afbcc66545e2419eee7ec5dbae7f93 /src/components/component_preview | |
| parent | 56a3bff267203017a704652117167569be0cd58a (diff) | |
| parent | 05ab57a8e68033b520e6038afaa6514423f0d117 (diff) | |
Merge branch 'shadow-control-2.0' into 'develop'
Fixed and refined the shadow control in theme tab
See merge request pleroma/pleroma-fe!1939
Diffstat (limited to 'src/components/component_preview')
| -rw-r--r-- | src/components/component_preview/component_preview.vue | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/src/components/component_preview/component_preview.vue b/src/components/component_preview/component_preview.vue new file mode 100644 index 00000000..3b2cf63b --- /dev/null +++ b/src/components/component_preview/component_preview.vue @@ -0,0 +1,212 @@ +<template> +<div + class="ComponentPreview" + :class="{ '-shadow-controls': shadowControl }" +> + <label + class="header" + v-show="shadowControl" + :class="{ faint: disabled }" + > + {{ $t('settings.style.shadows.offset') }} + </label> + <input + v-show="shadowControl" + :value="shadow?.y" + :disabled="disabled" + :class="{ disabled }" + class="input input-number y-shift-number" + type="number" + @input="e => updateProperty('y', e.target.value)" + > + <input + v-show="shadowControl" + :value="shadow?.y" + :disabled="disabled" + :class="{ disabled }" + class="input input-range y-shift-slider" + type="range" + max="20" + min="-20" + @input="e => updateProperty('y', e.target.value)" + > + <div + class="preview-window" + :class="{ '-light-grid': lightGrid }" + > + <div + class="preview-block" + :style="previewStyle" + /> + </div> + <input + v-show="shadowControl" + :value="shadow?.x" + :disabled="disabled" + :class="{ disabled }" + class="input input-number x-shift-number" + type="number" + @input="e => updateProperty('x', e.target.value)" + > + <input + v-show="shadowControl" + :value="shadow?.x" + :disabled="disabled" + :class="{ disabled }" + class="input input-range x-shift-slider" + type="range" + max="20" + min="-20" + @input="e => updateProperty('x', e.target.value)" + > + <Checkbox + id="lightGrid" + v-model="lightGrid" + :disabled="shadow == null" + name="lightGrid" + class="input-light-grid" + > + {{ $t('settings.style.shadows.light_grid') }} + </Checkbox> +</div> +</template> + +<style lang="scss"> +.ComponentPreview { + display: grid; + grid-template-columns: 3em 1fr 3em; + grid-template-rows: 2em 1fr 2em; + grid-template-areas: + ". header y-num " + ". preview y-slide" + "x-num x-slide . " + "options options options"; + grid-gap: 0.5em; + + .header { + grid-area: header; + justify-self: center; + align-self: baseline; + line-height: 2; + } + + .input-light-grid { + grid-area: options; + justify-self: center; + } + + .input-number { + min-width: 2em; + } + + .x-shift-number { + grid-area: x-num; + } + + .x-shift-slider { + grid-area: x-slide; + height: auto; + align-self: start; + min-width: 10em; + } + + .y-shift-number { + grid-area: y-num; + } + + .y-shift-slider { + grid-area: y-slide; + writing-mode: vertical-lr; + justify-self: left; + min-height: 10em; + } + + .x-shift-slider, + .y-shift-slider { + padding: 0; + } + + .preview-window { + --__grid-color1: rgb(102 102 102); + --__grid-color2: rgb(153 153 153); + --__grid-color1-disabled: rgba(102 102 102 / 20%); + --__grid-color2-disabled: rgba(153 153 153 / 20%); + + &.-light-grid { + --__grid-color1: rgb(205 205 205); + --__grid-color2: rgb(255 255 255); + --__grid-color1-disabled: rgba(205 205 205 / 20%); + --__grid-color2-disabled: rgba(255 255 255 / 20%); + } + + grid-area: preview; + aspect-ratio: 1; + display: flex; + align-items: center; + justify-content: center; + min-width: 10em; + min-height: 10em; + background-color: var(--__grid-color2); + background-image: + linear-gradient(45deg, var(--__grid-color1) 25%, transparent 25%), + linear-gradient(-45deg, var(--__grid-color1) 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, var(--__grid-color1) 75%), + linear-gradient(-45deg, transparent 75%, var(--__grid-color1) 75%); + background-size: 20px 20px; + background-position: 0 0, 0 10px, 10px -10px, -10px 0; + border-radius: var(--roundness); + + &.disabled { + background-color: var(--__grid-color2-disabled); + background-image: + linear-gradient(45deg, var(--__grid-color1-disabled) 25%, transparent 25%), + linear-gradient(-45deg, var(--__grid-color1-disabled) 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, var(--__grid-color1-disabled) 75%), + linear-gradient(-45deg, transparent 75%, var(--__grid-color1-disabled) 75%); + } + + .preview-block { + background: var(--background, var(--bg)); + display: flex; + justify-content: center; + align-items: center; + min-width: 33%; + min-height: 33%; + max-width: 80%; + max-height: 80%; + border-width: 0; + border-style: solid; + border-color: var(--border); + border-radius: var(--roundness); + box-shadow: var(--shadow); + } + } +} +</style> +<script> +import Checkbox from 'src/components/checkbox/checkbox.vue' + +export default { + props: [ + 'shadow', + 'shadowControl', + 'previewClass', + 'previewStyle', + 'disabled' + ], + data () { + return { + lightGrid: false + } + }, + emits: ['update:shadow'], + components: { + Checkbox + }, + methods: { + updateProperty (axis, value) { + this.$emit('update:shadow', { axis, value }) + } + } +} +</script> |
