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' import { createStyleSheet, adoptStyleSheets } from 'src/services/style_setter/style_setter.js' export default { components: { Checkbox, ColorInput }, props: [ 'shadow', 'shadowControl', 'previewClass', 'previewStyle', 'previewCss', 'disabled', 'invalid', 'noColorControl' ], emits: ['update:shadow'], data () { return { colorOverride: undefined, lightGrid: false, zoom: 100, randomSeed: genRandomSeed() } }, mounted () { this.update() }, computed: { hideControls () { return typeof this.shadow === 'string' } }, watch: { previewCss () { this.update() }, previewStyle () { this.update() }, zoom () { this.update() } }, methods: { updateProperty (axis, value) { this.$emit('update:shadow', { axis, value: Number(value) }) }, update () { const sheet = createStyleSheet('style-component-preview', 90) sheet.clear() const result = [this.previewCss] if (this.colorOverride) result.push(`--background: ${this.colorOverride}`) const styleRule = [ '#component-preview-', this.randomSeed, ' {\n', '.preview-block {\n', `zoom: ${this.zoom / 100};`, this.previewStyle, '\n}', '\n}' ].join('') sheet.addRule(styleRule) sheet.addRule([ '#component-preview-', this.randomSeed, ' {\n', ...result, '\n}' ].join('')) sheet.ready = true adoptStyleSheets() } } }