edit page: change footer and order order of elements
This commit is contained in:
parent
ccd7adf0cb
commit
fd5bc7faea
2 changed files with 293 additions and 123 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
<q-header elevated>
|
<q-header elevated>
|
||||||
<q-toolbar>
|
<q-toolbar>
|
||||||
<q-toolbar-title>
|
<q-toolbar-title>
|
||||||
MIIUS <!-- Me You Us -->
|
THATS ME
|
||||||
</q-toolbar-title>
|
</q-toolbar-title>
|
||||||
|
|
||||||
<!-- Add login status indicator -->
|
<!-- Add login status indicator -->
|
||||||
|
|
@ -493,7 +493,7 @@
|
||||||
<q-tabs align="justify" dense>
|
<q-tabs align="justify" dense>
|
||||||
<q-route-tab to="/" icon="home" />
|
<q-route-tab to="/" icon="home" />
|
||||||
<q-route-tab to="/people" icon="people" />
|
<q-route-tab to="/people" icon="people" />
|
||||||
<q-route-tab to="/entry" icon="add_circle_outline" />
|
<q-route-tab to="/edit" icon="add_circle_outline" />
|
||||||
<q-route-tab to="/messages" icon="mail" />
|
<q-route-tab to="/messages" icon="mail" />
|
||||||
<q-route-tab to="/profile" icon="person" />
|
<q-route-tab to="/profile" icon="person" />
|
||||||
</q-tabs>
|
</q-tabs>
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,20 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page padding>
|
<q-page padding class="edit-page-container">
|
||||||
<div class="row justify-center">
|
<div class="row justify-center">
|
||||||
<div class="col-12 col-md-8 col-lg-6">
|
<div class="col-12 col-md-8 col-lg-3">
|
||||||
<q-card>
|
<q-card>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<div class="text-h5">Edit Entry</div>
|
<div class="text-h5">Entry</div>
|
||||||
<div class="text-subtitle2 text-grey">Modify your life event details</div>
|
<div class="text-subtitle2 text-grey">Modify your life event details</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-form @submit.prevent="onSave" class="q-gutter-md">
|
<q-form @submit.prevent="onSave" class="q-gutter-md">
|
||||||
|
|
||||||
<!-- Tab Navigation -->
|
<!-- Tab Panels (without tab navigation here) -->
|
||||||
<q-tabs
|
|
||||||
v-model="currentTab"
|
|
||||||
dense
|
|
||||||
class="text-grey"
|
|
||||||
active-color="primary"
|
|
||||||
indicator-color="primary"
|
|
||||||
align="justify"
|
|
||||||
narrow-indicator
|
|
||||||
>
|
|
||||||
<q-tab name="basics" icon="mood" label="Basics" />
|
|
||||||
<q-tab name="media" icon="perm_media" label="Media" />
|
|
||||||
<q-tab name="content" icon="article" label="Content" />
|
|
||||||
<q-tab name="details" icon="info" label="Details" />
|
|
||||||
</q-tabs>
|
|
||||||
|
|
||||||
<q-separator />
|
|
||||||
|
|
||||||
<!-- Tab Panels -->
|
|
||||||
<q-tab-panels v-model="currentTab" animated>
|
<q-tab-panels v-model="currentTab" animated>
|
||||||
|
|
||||||
<!-- Tab 1: Basics -->
|
<!-- Tab 1: Basics - Only Image and Emotional Level -->
|
||||||
<q-tab-panel name="basics" class="q-pa-none">
|
<q-tab-panel name="basics" class="q-pa-none">
|
||||||
<div class="q-gutter-md q-mt-md">
|
<div class="q-gutter-md q-mt-md">
|
||||||
|
|
||||||
|
|
@ -58,9 +40,10 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Key Image -->
|
<!-- Key Image -->
|
||||||
<div class="q-mb-md">
|
<div class="q-mb-md">
|
||||||
<q-label class="text-subtitle2 q-mb-sm">Key Image *</q-label>
|
<q-label class="text-subtitle2 q-mb-sm">Image *</q-label>
|
||||||
|
|
||||||
<!-- Preview selected key image -->
|
<!-- Preview selected key image -->
|
||||||
<div v-if="form.keyImage || form.keyImageUrl" class="q-mb-sm">
|
<div v-if="form.keyImage || form.keyImageUrl" class="q-mb-sm">
|
||||||
|
|
@ -98,12 +81,44 @@
|
||||||
</q-file>
|
</q-file>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Headline -->
|
</div>
|
||||||
|
|
||||||
|
<!-- Tab Navigation for Basics -->
|
||||||
|
<div class="row q-gutter-md q-mt-lg justify-between">
|
||||||
|
<q-btn
|
||||||
|
label="Cancel"
|
||||||
|
color="grey"
|
||||||
|
flat
|
||||||
|
@click="onCancel"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
label="Continue"
|
||||||
|
icon-right="arrow_forward"
|
||||||
|
color="primary"
|
||||||
|
@click="goToNextTab"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-tab-panel>
|
||||||
|
|
||||||
|
<!-- Tab 2: Content - Title, Headline, Date/Time, Description -->
|
||||||
|
<q-tab-panel name="content" class="q-pa-none">
|
||||||
|
<div class="q-gutter-md q-mt-md">
|
||||||
|
|
||||||
|
<!-- Title (formerly Subheadline) - Now mandatory -->
|
||||||
|
<q-input
|
||||||
|
v-model="form.subheadline"
|
||||||
|
label="Title *"
|
||||||
|
filled
|
||||||
|
:rules="[val => !!val || 'Title is required']"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Headline - Now optional -->
|
||||||
<q-input
|
<q-input
|
||||||
v-model="form.headline"
|
v-model="form.headline"
|
||||||
label="Headline *"
|
label="Headline"
|
||||||
filled
|
filled
|
||||||
:rules="[val => !!val || 'Headline is required']"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Date and Time -->
|
<!-- Date and Time -->
|
||||||
|
|
@ -135,10 +150,38 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Description (formerly Text) -->
|
||||||
|
<q-input
|
||||||
|
v-model="form.text"
|
||||||
|
label="Description"
|
||||||
|
filled
|
||||||
|
type="textarea"
|
||||||
|
rows="4"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tab Navigation for Content -->
|
||||||
|
<div class="row q-gutter-md q-mt-lg justify-between">
|
||||||
|
<q-btn
|
||||||
|
label="Back"
|
||||||
|
icon="arrow_back"
|
||||||
|
color="grey"
|
||||||
|
flat
|
||||||
|
@click="goToPreviousTab"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
label="Continue"
|
||||||
|
icon-right="arrow_forward"
|
||||||
|
color="primary"
|
||||||
|
@click="goToNextTab"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
|
|
||||||
<!-- Tab 2: Media -->
|
<!-- Tab 3: Media -->
|
||||||
<q-tab-panel name="media" class="q-pa-none">
|
<q-tab-panel name="media" class="q-pa-none">
|
||||||
<div class="q-gutter-md q-mt-md">
|
<div class="q-gutter-md q-mt-md">
|
||||||
|
|
||||||
|
|
@ -273,30 +316,79 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Tab Navigation for Media -->
|
||||||
|
<div class="row q-gutter-md q-mt-lg justify-between">
|
||||||
|
<q-btn
|
||||||
|
label="Back"
|
||||||
|
icon="arrow_back"
|
||||||
|
color="grey"
|
||||||
|
flat
|
||||||
|
@click="goToPreviousTab"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
label="Continue"
|
||||||
|
icon-right="arrow_forward"
|
||||||
|
color="primary"
|
||||||
|
@click="goToNextTab"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
|
|
||||||
<!-- Tab 3: Content -->
|
<!-- Tab 4: Details - Location, Persons, Category, Tags, Delete -->
|
||||||
<q-tab-panel name="content" class="q-pa-none">
|
<q-tab-panel name="details" class="q-pa-none">
|
||||||
<div class="q-gutter-md q-mt-md">
|
<div class="q-gutter-md q-mt-md">
|
||||||
|
|
||||||
<!-- Subheadline -->
|
<!-- Location -->
|
||||||
<q-input
|
<q-input
|
||||||
v-model="form.subheadline"
|
v-model="form.location"
|
||||||
label="Subheadline"
|
label="Location"
|
||||||
filled
|
filled
|
||||||
/>
|
>
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<q-icon name="place" />
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
|
||||||
<!-- Text -->
|
<!-- Related Persons -->
|
||||||
<q-input
|
<div class="q-mb-md">
|
||||||
v-model="form.text"
|
<q-separator class="q-mt-lg q-mb-lg" />
|
||||||
label="Description"
|
<q-label class="text-subtitle2 q-mb-sm">Related Persons</q-label>
|
||||||
filled
|
<v-select
|
||||||
type="textarea"
|
v-model="selectedPerson"
|
||||||
rows="4"
|
:options="personOptions"
|
||||||
/>
|
placeholder="Add related persons"
|
||||||
|
class="vue-select-custom"
|
||||||
|
@option:selected="addPerson"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Selected persons circles -->
|
||||||
|
<div v-if="form.relatedPersons.length > 0" class="person-circles q-mt-md">
|
||||||
|
<div
|
||||||
|
v-for="(person, index) in form.relatedPersons"
|
||||||
|
:key="index"
|
||||||
|
class="person-circle"
|
||||||
|
@mouseenter="hoveredPersonIndex = index"
|
||||||
|
@mouseleave="hoveredPersonIndex = null"
|
||||||
|
>
|
||||||
|
<div class="person-initials">{{ getInitials(person) }}</div>
|
||||||
|
<div
|
||||||
|
v-if="hoveredPersonIndex === index"
|
||||||
|
class="person-delete"
|
||||||
|
@click="removePerson(index)"
|
||||||
|
>
|
||||||
|
×
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Category Selection -->
|
<!-- Category Selection -->
|
||||||
<div class="q-mb-md">
|
<div class="q-mb-md">
|
||||||
|
<q-separator class="q-mt-lg q-mb-lg" />
|
||||||
<q-label class="text-subtitle2 q-mb-sm">Category</q-label>
|
<q-label class="text-subtitle2 q-mb-sm">Category</q-label>
|
||||||
|
|
||||||
<!-- Main Category Selection with vue-select -->
|
<!-- Main Category Selection with vue-select -->
|
||||||
|
|
@ -347,88 +439,47 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
<!-- Delete Entry Section -->
|
||||||
</q-tab-panel>
|
<div class="q-mb-md q-mt-lg">
|
||||||
|
<q-separator class="q-mt-lg q-mb-lg" />
|
||||||
<!-- Tab 4: Details -->
|
<q-label class="text-subtitle2 q-mb-sm text-negative">Danger Zone</q-label>
|
||||||
<q-tab-panel name="details" class="q-pa-none">
|
<p class="text-caption text-grey q-mb-md">
|
||||||
<div class="q-gutter-md q-mt-md">
|
Once you delete this entry, it cannot be recovered. Please be certain.
|
||||||
|
</p>
|
||||||
<!-- Location -->
|
<q-btn
|
||||||
<q-input
|
label="Delete Entry"
|
||||||
v-model="form.location"
|
icon="delete"
|
||||||
label="Location"
|
color="negative"
|
||||||
filled
|
outline
|
||||||
>
|
@click="confirmDelete"
|
||||||
<template v-slot:prepend>
|
class="full-width"
|
||||||
<q-icon name="place" />
|
|
||||||
</template>
|
|
||||||
</q-input>
|
|
||||||
|
|
||||||
<!-- Related Persons -->
|
|
||||||
<div class="q-mb-md">
|
|
||||||
<q-label class="text-subtitle2 q-mb-sm">Related Persons</q-label>
|
|
||||||
<v-select
|
|
||||||
v-model="selectedPerson"
|
|
||||||
:options="personOptions"
|
|
||||||
placeholder="Add related persons"
|
|
||||||
class="vue-select-custom"
|
|
||||||
@option:selected="addPerson"
|
|
||||||
clearable
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Selected persons circles -->
|
|
||||||
<div v-if="form.relatedPersons.length > 0" class="person-circles q-mt-md">
|
|
||||||
<div
|
|
||||||
v-for="(person, index) in form.relatedPersons"
|
|
||||||
:key="index"
|
|
||||||
class="person-circle"
|
|
||||||
@mouseenter="hoveredPersonIndex = index"
|
|
||||||
@mouseleave="hoveredPersonIndex = null"
|
|
||||||
>
|
|
||||||
<div class="person-initials">{{ getInitials(person) }}</div>
|
|
||||||
<div
|
|
||||||
v-if="hoveredPersonIndex === index"
|
|
||||||
class="person-delete"
|
|
||||||
@click="removePerson(index)"
|
|
||||||
>
|
|
||||||
×
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Tab Navigation for Details - Back and Publish -->
|
||||||
|
<div class="row q-gutter-md q-mt-lg justify-between">
|
||||||
|
<q-btn
|
||||||
|
label="Back"
|
||||||
|
icon="arrow_back"
|
||||||
|
color="grey"
|
||||||
|
flat
|
||||||
|
@click="goToPreviousTab"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
label="Publish"
|
||||||
|
icon="publish"
|
||||||
|
color="primary"
|
||||||
|
type="submit"
|
||||||
|
class="col-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
|
|
||||||
</q-tab-panels>
|
</q-tab-panels>
|
||||||
|
|
||||||
<!-- Action Buttons -->
|
|
||||||
<div class="row q-gutter-md q-mt-lg">
|
|
||||||
<q-btn
|
|
||||||
label="Delete Entry"
|
|
||||||
icon="delete"
|
|
||||||
color="negative"
|
|
||||||
outline
|
|
||||||
@click="confirmDelete"
|
|
||||||
class="col-auto"
|
|
||||||
/>
|
|
||||||
<q-space />
|
|
||||||
<q-btn
|
|
||||||
label="Cancel"
|
|
||||||
color="grey"
|
|
||||||
flat
|
|
||||||
@click="onCancel"
|
|
||||||
class="col-auto"
|
|
||||||
/>
|
|
||||||
<q-btn
|
|
||||||
label="Save"
|
|
||||||
icon="save"
|
|
||||||
color="primary"
|
|
||||||
type="submit"
|
|
||||||
class="col-auto"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</q-form>
|
</q-form>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
</q-card>
|
</q-card>
|
||||||
|
|
@ -449,6 +500,24 @@
|
||||||
</q-card-actions>
|
</q-card-actions>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
|
||||||
|
<!-- Fixed Footer with Tab Navigation - Updated order -->
|
||||||
|
<q-footer elevated class="bg-white text-dark edit-footer">
|
||||||
|
<q-tabs
|
||||||
|
v-model="currentTab"
|
||||||
|
dense
|
||||||
|
class="text-grey full-width"
|
||||||
|
active-color="primary"
|
||||||
|
indicator-color="primary"
|
||||||
|
align="justify"
|
||||||
|
narrow-indicator
|
||||||
|
>
|
||||||
|
<q-tab name="basics" icon="event" label="Event" />
|
||||||
|
<q-tab name="content" icon="article" label="Content" />
|
||||||
|
<q-tab name="media" icon="perm_media" label="Media" />
|
||||||
|
<q-tab name="details" icon="info" label="Details" />
|
||||||
|
</q-tabs>
|
||||||
|
</q-footer>
|
||||||
</q-page>
|
</q-page>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -473,9 +542,25 @@ export default {
|
||||||
|
|
||||||
// Tab navigation state
|
// Tab navigation state
|
||||||
const currentTab = ref('basics')
|
const currentTab = ref('basics')
|
||||||
|
const tabOrder = ['basics', 'content', 'media', 'details']
|
||||||
|
|
||||||
// Form data - using default form data structure
|
// Get current date and time
|
||||||
const form = reactive({ ...defaultFormData })
|
const getCurrentDate = () => {
|
||||||
|
const now = new Date()
|
||||||
|
return now.toISOString().split('T')[0] // Format: YYYY-MM-DD
|
||||||
|
}
|
||||||
|
|
||||||
|
const getCurrentTime = () => {
|
||||||
|
const now = new Date()
|
||||||
|
return now.toTimeString().slice(0, 5) // Format: HH:MM
|
||||||
|
}
|
||||||
|
|
||||||
|
// Form data with current date/time defaults
|
||||||
|
const form = reactive({
|
||||||
|
...defaultFormData,
|
||||||
|
date: getCurrentDate(),
|
||||||
|
time: getCurrentTime()
|
||||||
|
})
|
||||||
|
|
||||||
// Category selection state
|
// Category selection state
|
||||||
const selectedMainCategory = ref('')
|
const selectedMainCategory = ref('')
|
||||||
|
|
@ -494,6 +579,21 @@ export default {
|
||||||
const personOptionsRef = ref([...personOptions])
|
const personOptionsRef = ref([...personOptions])
|
||||||
const mainCategoryOptions = ref(getMainCategories())
|
const mainCategoryOptions = ref(getMainCategories())
|
||||||
|
|
||||||
|
// Tab navigation methods
|
||||||
|
const goToNextTab = () => {
|
||||||
|
const currentIndex = tabOrder.indexOf(currentTab.value)
|
||||||
|
if (currentIndex < tabOrder.length - 1) {
|
||||||
|
currentTab.value = tabOrder[currentIndex + 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const goToPreviousTab = () => {
|
||||||
|
const currentIndex = tabOrder.indexOf(currentTab.value)
|
||||||
|
if (currentIndex > 0) {
|
||||||
|
currentTab.value = tabOrder[currentIndex - 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
const loadEntry = () => {
|
const loadEntry = () => {
|
||||||
// TODO: Load entry data based on route params
|
// TODO: Load entry data based on route params
|
||||||
|
|
@ -502,14 +602,15 @@ export default {
|
||||||
// Load existing entry data
|
// Load existing entry data
|
||||||
// This would typically come from an API call
|
// This would typically come from an API call
|
||||||
console.log('Loading entry:', entryId)
|
console.log('Loading entry:', entryId)
|
||||||
|
// Note: When loading existing entry, you might want to override the default date/time
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onSave = () => {
|
const onSave = () => {
|
||||||
// TODO: Implement save functionality
|
// TODO: Implement publish functionality
|
||||||
$q.notify({
|
$q.notify({
|
||||||
type: 'positive',
|
type: 'positive',
|
||||||
message: 'Entry saved successfully!',
|
message: 'Entry published successfully!',
|
||||||
position: 'top'
|
position: 'top'
|
||||||
})
|
})
|
||||||
router.push('/wave')
|
router.push('/wave')
|
||||||
|
|
@ -652,7 +753,16 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close navigation drawer when page loads
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
// Close the drawer by setting it to false
|
||||||
|
const drawerElement = document.querySelector('.q-drawer')
|
||||||
|
if (drawerElement) {
|
||||||
|
// Trigger close event
|
||||||
|
const closeEvent = new CustomEvent('drawer-close')
|
||||||
|
window.dispatchEvent(closeEvent)
|
||||||
|
}
|
||||||
|
|
||||||
loadEntry()
|
loadEntry()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -669,6 +779,8 @@ export default {
|
||||||
tagOptions: tagOptionsRef,
|
tagOptions: tagOptionsRef,
|
||||||
personOptions: personOptionsRef,
|
personOptions: personOptionsRef,
|
||||||
mainCategoryOptions,
|
mainCategoryOptions,
|
||||||
|
goToNextTab,
|
||||||
|
goToPreviousTab,
|
||||||
onSave,
|
onSave,
|
||||||
onCancel,
|
onCancel,
|
||||||
confirmDelete,
|
confirmDelete,
|
||||||
|
|
@ -695,6 +807,64 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
/* Fix for first item in row with q-gutter having unwanted left margin */
|
||||||
|
.row.q-gutter-md > .col:first-child {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add this more specific rule if the above doesn't work */
|
||||||
|
.row.q-gutter-md.q-mb-md > .col:first-child {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add padding bottom to prevent content from being hidden behind footer */
|
||||||
|
.edit-page-container {
|
||||||
|
padding-bottom: 80px; /* Adjust based on footer height */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style the edit footer */
|
||||||
|
.edit-footer {
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.12);
|
||||||
|
box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure tabs are properly sized in footer */
|
||||||
|
.edit-footer .q-tabs {
|
||||||
|
min-height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-footer .q-tab {
|
||||||
|
padding: 8px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Custom tab icon styling */
|
||||||
|
.tab-icon {
|
||||||
|
filter: opacity(0.6);
|
||||||
|
transition: filter 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.q-tab--active .tab-icon {
|
||||||
|
filter: opacity(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure proper spacing for custom tab content */
|
||||||
|
.q-tab .column {
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive adjustments for mobile */
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.tab-icon {
|
||||||
|
width: 20px !important;
|
||||||
|
height: 20px !important;
|
||||||
|
margin-bottom: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.q-tab .column span {
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.q-card {
|
.q-card {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue