2025-07-02 00:36:37 +03:00
|
|
|
import Checkbox from 'src/components/checkbox/checkbox.vue'
|
|
|
|
|
import ColorInput from 'src/components/color_input/color_input.vue'
|
|
|
|
|
|
|
|
|
|
import genRandomSeed from 'src/services/random_seed/random_seed.service.js'
|
2026-01-06 16:22:52 +02:00
|
|
|
import {
|
|
|
|
|
createStyleSheet,
|
|
|
|
|
adoptStyleSheets,
|
|
|
|
|
} from 'src/services/style_setter/style_setter.js'
|
2025-07-02 00:36:37 +03:00
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
Checkbox,
|
2026-01-06 16:22:52 +02:00
|
|
|
ColorInput,
|
2025-07-02 00:36:37 +03:00
|
|
|
},
|
|
|
|
|
props: [
|
|
|
|
|
'shadow',
|
|
|
|
|
'shadowControl',
|
|
|
|
|
'previewClass',
|
|
|
|
|
'previewStyle',
|
|
|
|
|
'previewCss',
|
|
|
|
|
'disabled',
|
|
|
|
|
'invalid',
|
2026-01-06 16:22:52 +02:00
|
|
|
'noColorControl',
|
2025-07-02 00:36:37 +03:00
|
|
|
],
|
|
|
|
|
emits: ['update:shadow'],
|
2026-01-06 16:22:52 +02:00
|
|
|
data() {
|
2025-07-02 00:36:37 +03:00
|
|
|
return {
|
|
|
|
|
colorOverride: undefined,
|
|
|
|
|
lightGrid: false,
|
|
|
|
|
zoom: 100,
|
2026-01-06 16:22:52 +02:00
|
|
|
randomSeed: genRandomSeed(),
|
2025-07-02 00:36:37 +03:00
|
|
|
}
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
mounted() {
|
2025-07-02 16:18:07 +03:00
|
|
|
this.update()
|
|
|
|
|
},
|
2025-07-02 00:36:37 +03:00
|
|
|
computed: {
|
2026-01-06 16:22:52 +02:00
|
|
|
hideControls() {
|
2025-07-02 00:36:37 +03:00
|
|
|
return typeof this.shadow === 'string'
|
2026-01-06 16:22:52 +02:00
|
|
|
},
|
2025-07-02 00:36:37 +03:00
|
|
|
},
|
|
|
|
|
watch: {
|
2026-01-06 16:22:52 +02:00
|
|
|
previewCss() {
|
2025-07-02 00:36:37 +03:00
|
|
|
this.update()
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
previewStyle() {
|
2025-07-02 00:36:37 +03:00
|
|
|
this.update()
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
zoom() {
|
2025-07-02 00:36:37 +03:00
|
|
|
this.update()
|
2026-01-06 16:22:52 +02:00
|
|
|
},
|
2025-07-02 00:36:37 +03:00
|
|
|
},
|
|
|
|
|
methods: {
|
2026-01-06 16:22:52 +02:00
|
|
|
updateProperty(axis, value) {
|
2025-07-02 00:36:37 +03:00
|
|
|
this.$emit('update:shadow', { axis, value: Number(value) })
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
update() {
|
2025-07-03 17:11:23 +03:00
|
|
|
const sheet = createStyleSheet('style-component-preview', 90)
|
2025-07-02 00:36:37 +03:00
|
|
|
|
2025-07-02 22:54:45 +03:00
|
|
|
sheet.clear()
|
2025-07-02 00:36:37 +03:00
|
|
|
|
2025-07-02 22:54:45 +03:00
|
|
|
const result = [this.previewCss]
|
2025-07-02 00:36:37 +03:00
|
|
|
if (this.colorOverride) result.push(`--background: ${this.colorOverride}`)
|
|
|
|
|
|
|
|
|
|
const styleRule = [
|
2026-01-06 16:22:52 +02:00
|
|
|
'#component-preview-',
|
|
|
|
|
this.randomSeed,
|
|
|
|
|
' {\n',
|
2025-07-02 00:36:37 +03:00
|
|
|
'.preview-block {\n',
|
|
|
|
|
`zoom: ${this.zoom / 100};`,
|
|
|
|
|
this.previewStyle,
|
|
|
|
|
'\n}',
|
2026-01-06 16:22:52 +02:00
|
|
|
'\n}',
|
2025-07-02 00:36:37 +03:00
|
|
|
].join('')
|
|
|
|
|
|
2025-07-02 22:54:45 +03:00
|
|
|
sheet.addRule(styleRule)
|
2026-01-06 16:22:52 +02:00
|
|
|
sheet.addRule(
|
|
|
|
|
['#component-preview-', this.randomSeed, ' {\n', ...result, '\n}'].join(
|
|
|
|
|
'',
|
|
|
|
|
),
|
|
|
|
|
)
|
2025-07-02 22:54:45 +03:00
|
|
|
|
|
|
|
|
sheet.ready = true
|
|
|
|
|
adoptStyleSheets()
|
2026-01-06 16:22:52 +02:00
|
|
|
},
|
|
|
|
|
},
|
2025-07-02 00:36:37 +03:00
|
|
|
}
|