@fesjs/fes-design
Version:
fes-design for PC
114 lines (109 loc) • 4.26 kB
JavaScript
import { defineComponent, inject, resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withKeys, withModifiers, createVNode, createCommentVNode, renderSlot, createTextVNode, toDisplayString, withCtx, withDirectives, vShow } from 'vue';
import FadeInExpandTransition from '../_util/components/fadeInExpandTransition';
import { RightOutlined } from '../icon';
import { useTheme } from '../_theme/useTheme';
import { collapseItemProps } from './collapseItemExpose';
import { useCollapseItem, useCollapseItemDOM } from './useCollapseItem';
import { arrowPositionKey } from './common';
var script = defineComponent({
name: 'FCollapseItem',
components: {
FadeInExpandTransition,
RightOutlined
},
props: collapseItemProps,
setup(props) {
useTheme();
const {
arrow,
embedded
} = inject(arrowPositionKey);
const {
focusing,
id,
isActive,
handleFocus,
handleHeaderClick,
handleEnterClick
} = useCollapseItem(props);
const {
arrowKls,
headKls,
rootKls,
itemWrapperKls,
itemContentKls,
scopedContentId,
scopedHeadId
} = useCollapseItemDOM(props, {
focusing,
isActive,
id,
embedded
});
return {
arrow,
arrowKls,
headKls,
rootKls,
itemWrapperKls,
itemContentKls,
scopedContentId,
scopedHeadId,
focusing,
isActive,
handleFocus,
handleHeaderClick,
handleEnterClick
};
}
});
const _hoisted_1 = ["aria-expanded", "aria-controls", "aria-describedby"];
const _hoisted_2 = ["id", "tabindex"];
const _hoisted_3 = ["id", "aria-hidden", "aria-labelledby"];
function render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_right_outlined = resolveComponent("right-outlined");
const _component_FadeInExpandTransition = resolveComponent("FadeInExpandTransition");
return openBlock(), createElementBlock("div", {
class: normalizeClass(_ctx.rootKls)
}, [createElementVNode("div", {
role: "tab",
"aria-expanded": _ctx.isActive,
"aria-controls": _ctx.scopedContentId,
"aria-describedby": _ctx.scopedContentId
}, [createElementVNode("div", {
id: _ctx.scopedHeadId,
class: normalizeClass(_ctx.headKls),
role: "button",
tabindex: _ctx.disabled ? -1 : 0,
onClick: _cache[0] || (_cache[0] = function () {
return _ctx.handleHeaderClick && _ctx.handleHeaderClick(...arguments);
}),
onKeypress: _cache[1] || (_cache[1] = withKeys(withModifiers(function () {
return _ctx.handleEnterClick && _ctx.handleEnterClick(...arguments);
}, ["stop", "prevent"]), ["space", "enter"])),
onFocus: _cache[2] || (_cache[2] = function () {
return _ctx.handleFocus && _ctx.handleFocus(...arguments);
}),
onBlur: _cache[3] || (_cache[3] = $event => _ctx.focusing = false)
}, [_ctx.arrow === 'left' ? (openBlock(), createElementBlock("div", {
key: 0,
class: normalizeClass(["fes-collapse-item__arrow-left", _ctx.arrowKls])
}, [createVNode(_component_right_outlined)], 2 /* CLASS */)) : createCommentVNode("v-if", true), renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(_ctx.title), 1 /* TEXT */)]), _ctx.arrow === 'right' ? (openBlock(), createElementBlock("div", {
key: 1,
class: normalizeClass(_ctx.arrowKls)
}, [createVNode(_component_right_outlined)], 2 /* CLASS */)) : createCommentVNode("v-if", true)], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_2)], 8 /* PROPS */, _hoisted_1), createVNode(_component_FadeInExpandTransition, null, {
default: withCtx(() => [withDirectives(createElementVNode("div", {
id: _ctx.scopedContentId,
class: normalizeClass(_ctx.itemWrapperKls),
role: "tabpanel",
"aria-hidden": !_ctx.isActive,
"aria-labelledby": _ctx.scopedHeadId
}, [createElementVNode("div", {
class: normalizeClass(_ctx.itemContentKls)
}, [renderSlot(_ctx.$slots, "default")], 2 /* CLASS */)], 10 /* CLASS, PROPS */, _hoisted_3), [[vShow, _ctx.isActive]])]),
_: 3 /* FORWARDED */
})], 2 /* CLASS */);
}
script.render = render;
script.__file = "components/collapse/collapseItem.vue";
export { script as default };