mirror of
https://gitlab.com/bramw/baserow.git
synced 2024-11-22 07:42:36 +00:00
352 lines
10 KiB
Vue
352 lines
10 KiB
Vue
<template>
|
|
<div>
|
|
<ThemeConfigBlockSection
|
|
v-if="showLabel"
|
|
:title="$t('inputThemeConfigBlock.label')"
|
|
>
|
|
<template #default>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.fontFamily')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<FontFamilySelector v-model="values.label_font_family" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.label_font_family"
|
|
:default-value="theme?.label_font_family"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.textColor')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<ColorInput
|
|
v-model="values.label_text_color"
|
|
:color-variables="colorVariables"
|
|
:default-value="theme?.label_text_color"
|
|
small
|
|
/>
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.label_text_color"
|
|
:default-value="theme?.label_text_color"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.size')"
|
|
:error-message="getError('label_font_size')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<PixelValueSelector v-model="values.label_font_size" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.label_font_size"
|
|
:default-value="theme?.label_font_size"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
</template>
|
|
<template #preview>
|
|
<ABFormGroup :label="$t('inputThemeConfigBlock.label')">
|
|
<ABInput value="" />
|
|
</ABFormGroup>
|
|
</template>
|
|
</ThemeConfigBlockSection>
|
|
<ThemeConfigBlockSection :title="$t('inputThemeConfigBlock.input')">
|
|
<template #default>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.fontFamily')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<FontFamilySelector v-model="values.input_font_family" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_font_family"
|
|
:default-value="theme?.input_font_family"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.textColor')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<ColorInput
|
|
v-model="values.input_text_color"
|
|
:color-variables="colorVariables"
|
|
:default-value="theme?.input_text_color"
|
|
small
|
|
/>
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_text_color"
|
|
:default-value="theme?.input_text_color"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.size')"
|
|
:error-message="getError('input_font_size')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<PixelValueSelector v-model="values.input_font_size" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_font_size"
|
|
:default-value="theme?.input_font_size"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.backgroundColor')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<ColorInput
|
|
v-model="values.input_background_color"
|
|
:color-variables="colorVariables"
|
|
:default-value="theme?.input_background_color"
|
|
small
|
|
/>
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_background_color"
|
|
:default-value="theme?.input_background_color"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.borderColor')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<ColorInput
|
|
v-model="values.input_border_color"
|
|
:color-variables="colorVariables"
|
|
:default-value="theme?.input_border_color"
|
|
small
|
|
/>
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_border_color"
|
|
:default-value="theme?.input_border_color"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.borderSize')"
|
|
:error-message="getError('input_border_size')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<PixelValueSelector v-model="values.input_border_size" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_border_size"
|
|
:default-value="theme?.input_border_size"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.borderRadius')"
|
|
:error-message="getError('input_border_radius')"
|
|
class="margin-bottom-2"
|
|
>
|
|
<PixelValueSelector v-model="values.input_border_radius" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="values.input_border_radius"
|
|
:default-value="theme?.input_border_radius"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
<FormGroup
|
|
horizontal-narrow
|
|
small-label
|
|
:label="$t('inputThemeConfigBlock.padding')"
|
|
:error-message="getInputPaddingError()"
|
|
class="margin-bottom-2"
|
|
>
|
|
<PaddingSelector v-model="inputPadding" />
|
|
<template #after-input>
|
|
<ResetButton
|
|
v-model="inputPadding"
|
|
:default-value="
|
|
theme
|
|
? {
|
|
vertical: theme['input_vertical_padding'],
|
|
horizontal: theme['input_horizontal_padding'],
|
|
}
|
|
: undefined
|
|
"
|
|
/>
|
|
</template>
|
|
</FormGroup>
|
|
</template>
|
|
<template #preview>
|
|
<ABFormGroup>
|
|
<ABInput
|
|
:value="$t('inputThemeConfigBlock.input')"
|
|
class="margin-bottom-2"
|
|
/>
|
|
<ABDropdown
|
|
:value="$t('inputThemeConfigBlock.input')"
|
|
:show-search="false"
|
|
class="margin-bottom-2"
|
|
>
|
|
<ABDropdownItem
|
|
v-for="option in options"
|
|
:key="option.value"
|
|
:name="option.name"
|
|
:value="option.value"
|
|
/>
|
|
</ABDropdown>
|
|
<div class="margin-bottom-2">
|
|
<ABCheckbox
|
|
v-for="(option, index) in options"
|
|
:key="option.value"
|
|
:name="option.name"
|
|
:value="index === 1"
|
|
>
|
|
{{ option.name }}
|
|
</ABCheckbox>
|
|
</div>
|
|
<div class="margin-bottom-2">
|
|
<ABRadio
|
|
v-for="(option, index) in options"
|
|
:key="option.value"
|
|
:value="index === 1"
|
|
>
|
|
{{ option.name }}
|
|
</ABRadio>
|
|
</div>
|
|
</ABFormGroup>
|
|
</template>
|
|
</ThemeConfigBlockSection>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import themeConfigBlock from '@baserow/modules/builder/mixins/themeConfigBlock'
|
|
import ThemeConfigBlockSection from '@baserow/modules/builder/components/theme/ThemeConfigBlockSection'
|
|
import ResetButton from '@baserow/modules/builder/components/theme/ResetButton'
|
|
import FontFamilySelector from '@baserow/modules/builder/components/FontFamilySelector'
|
|
import PixelValueSelector from '@baserow/modules/builder/components/PixelValueSelector'
|
|
import PaddingSelector from '@baserow/modules/builder/components/PaddingSelector'
|
|
import { required, integer, minValue, maxValue } from 'vuelidate/lib/validators'
|
|
|
|
const minMax = {
|
|
label_font_size: {
|
|
min: 1,
|
|
max: 100,
|
|
},
|
|
input_font_size: {
|
|
min: 1,
|
|
max: 100,
|
|
},
|
|
input_border_size: {
|
|
min: 0,
|
|
max: 100,
|
|
},
|
|
input_border_radius: {
|
|
min: 0,
|
|
max: 100,
|
|
},
|
|
input_horizontal_padding: {
|
|
min: 0,
|
|
max: 200,
|
|
},
|
|
input_vertical_padding: {
|
|
min: 0,
|
|
max: 200,
|
|
},
|
|
}
|
|
|
|
export default {
|
|
name: 'LinkThemeConfigBlock',
|
|
components: {
|
|
ThemeConfigBlockSection,
|
|
ResetButton,
|
|
FontFamilySelector,
|
|
PixelValueSelector,
|
|
PaddingSelector,
|
|
},
|
|
mixins: [themeConfigBlock],
|
|
data() {
|
|
return {
|
|
values: {},
|
|
options: [
|
|
{ name: 'Option 1', value: 1 },
|
|
{ name: 'Option 2', value: 2 },
|
|
{ name: 'Option 3', value: 3 },
|
|
],
|
|
}
|
|
},
|
|
computed: {
|
|
inputPadding: {
|
|
get() {
|
|
return {
|
|
vertical: this.values.input_vertical_padding,
|
|
horizontal: this.values.input_horizontal_padding,
|
|
}
|
|
},
|
|
set(newValue) {
|
|
this.values.input_vertical_padding = newValue.vertical
|
|
this.values.input_horizontal_padding = newValue.horizontal
|
|
},
|
|
},
|
|
showLabel() {
|
|
return !this.extraArgs?.onlyInput
|
|
},
|
|
},
|
|
methods: {
|
|
isAllowedKey(key) {
|
|
return key.startsWith('input_') || key.startsWith('label_')
|
|
},
|
|
getError(property) {
|
|
if (this.$v.values[property].$invalid) {
|
|
return this.$t('error.minMaxValueField', minMax[property])
|
|
}
|
|
return null
|
|
},
|
|
getInputPaddingError() {
|
|
return (
|
|
this.getError('input_vertical_padding') ||
|
|
this.getError('input_horizontal_padding')
|
|
)
|
|
},
|
|
},
|
|
validations: {
|
|
values: Object.fromEntries(
|
|
Object.entries(minMax).map(([key, limits]) => [
|
|
key,
|
|
{
|
|
required,
|
|
integer,
|
|
minValue: minValue(limits.min),
|
|
maxValue: maxValue(limits.max),
|
|
},
|
|
])
|
|
),
|
|
},
|
|
}
|
|
</script>
|