Vulture/VApp/node_modules/vuetify/lib/components/VExpansionPanel/VExpansionPanel.mjs

104 lines
4.2 KiB
JavaScript

import { createVNode as _createVNode } from "vue";
// Components
import { VExpansionPanelSymbol } from "./VExpansionPanels.mjs";
import { VExpansionPanelText } from "./VExpansionPanelText.mjs";
import { makeVExpansionPanelTitleProps, VExpansionPanelTitle } from "./VExpansionPanelTitle.mjs"; // Composables
import { useBackgroundColor } from "../../composables/color.mjs";
import { makeComponentProps } from "../../composables/component.mjs";
import { provideDefaults } from "../../composables/defaults.mjs";
import { makeElevationProps, useElevation } from "../../composables/elevation.mjs";
import { makeGroupItemProps, useGroupItem } from "../../composables/group.mjs";
import { makeLazyProps } from "../../composables/lazy.mjs";
import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
import { makeTagProps } from "../../composables/tag.mjs"; // Utilities
import { computed, provide, toRef } from 'vue';
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs";
export const makeVExpansionPanelProps = propsFactory({
title: String,
text: String,
bgColor: String,
...makeComponentProps(),
...makeElevationProps(),
...makeGroupItemProps(),
...makeLazyProps(),
...makeRoundedProps(),
...makeTagProps(),
...makeVExpansionPanelTitleProps()
}, 'VExpansionPanel');
export const VExpansionPanel = genericComponent()({
name: 'VExpansionPanel',
props: makeVExpansionPanelProps(),
emits: {
'group:selected': val => true
},
setup(props, _ref) {
let {
slots
} = _ref;
const groupItem = useGroupItem(props, VExpansionPanelSymbol);
const {
backgroundColorClasses,
backgroundColorStyles
} = useBackgroundColor(props, 'bgColor');
const {
elevationClasses
} = useElevation(props);
const {
roundedClasses
} = useRounded(props);
const isDisabled = computed(() => groupItem?.disabled.value || props.disabled);
const selectedIndices = computed(() => groupItem.group.items.value.reduce((arr, item, index) => {
if (groupItem.group.selected.value.includes(item.id)) arr.push(index);
return arr;
}, []));
const isBeforeSelected = computed(() => {
const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id);
return !groupItem.isSelected.value && selectedIndices.value.some(selectedIndex => selectedIndex - index === 1);
});
const isAfterSelected = computed(() => {
const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id);
return !groupItem.isSelected.value && selectedIndices.value.some(selectedIndex => selectedIndex - index === -1);
});
provide(VExpansionPanelSymbol, groupItem);
provideDefaults({
VExpansionPanelText: {
eager: toRef(props, 'eager')
},
VExpansionPanelTitle: {
readonly: toRef(props, 'readonly')
}
});
useRender(() => {
const hasText = !!(slots.text || props.text);
const hasTitle = !!(slots.title || props.title);
return _createVNode(props.tag, {
"class": ['v-expansion-panel', {
'v-expansion-panel--active': groupItem.isSelected.value,
'v-expansion-panel--before-active': isBeforeSelected.value,
'v-expansion-panel--after-active': isAfterSelected.value,
'v-expansion-panel--disabled': isDisabled.value
}, roundedClasses.value, backgroundColorClasses.value, props.class],
"style": [backgroundColorStyles.value, props.style]
}, {
default: () => [_createVNode("div", {
"class": ['v-expansion-panel__shadow', ...elevationClasses.value]
}, null), hasTitle && _createVNode(VExpansionPanelTitle, {
"key": "title",
"collapseIcon": props.collapseIcon,
"color": props.color,
"expandIcon": props.expandIcon,
"hideActions": props.hideActions,
"ripple": props.ripple
}, {
default: () => [slots.title ? slots.title() : props.title]
}), hasText && _createVNode(VExpansionPanelText, {
"key": "text"
}, {
default: () => [slots.text ? slots.text() : props.text]
}), slots.default?.()]
});
});
return {};
}
});
//# sourceMappingURL=VExpansionPanel.mjs.map