element-plus
Version:
A Component Library for Vue3.0
80 lines (74 loc) • 2.33 kB
JavaScript
import { defineComponent, computed, resolveComponent, openBlock, createBlock, mergeProps, Fragment, renderList, renderSlot, createVNode, createCommentVNode } from 'vue';
import SkeletonItem from '../el-skeleton-item';
import { useThrottleRender } from '../hooks';
var script = defineComponent({
name: "ElSkeleton",
components: {
[SkeletonItem.name]: SkeletonItem
},
props: {
animated: {
type: Boolean,
default: false
},
count: {
type: Number,
default: 1
},
rows: {
type: Number,
default: 3
},
loading: {
type: Boolean,
default: true
},
throttle: {
type: Number
}
},
setup(props) {
const innerLoading = computed(() => {
return props.loading;
});
const uiLoading = useThrottleRender(innerLoading, props.throttle);
return {
uiLoading
};
}
});
function render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_el_skeleton_item = resolveComponent("el-skeleton-item");
return _ctx.uiLoading ? (openBlock(), createBlock("div", mergeProps({
key: 0,
class: ["el-skeleton", _ctx.animated ? "is-animated" : ""]
}, _ctx.$attrs), [
(openBlock(true), createBlock(Fragment, null, renderList(_ctx.count, (i) => {
return openBlock(), createBlock(Fragment, { key: i }, [
_ctx.loading ? renderSlot(_ctx.$slots, "template", { key: 0 }, () => [
createVNode(_component_el_skeleton_item, {
class: "is-first",
variant: "p"
}),
(openBlock(true), createBlock(Fragment, null, renderList(_ctx.rows, (item) => {
return openBlock(), createBlock(_component_el_skeleton_item, {
key: item,
class: {
"el-skeleton__paragraph": true,
"is-last": item === _ctx.rows && _ctx.rows > 1
},
variant: "p"
}, null, 8, ["class"]);
}), 128))
]) : createCommentVNode("v-if", true)
], 64);
}), 128))
], 16)) : renderSlot(_ctx.$slots, "default", mergeProps({ key: 1 }, _ctx.$attrs));
}
script.render = render;
script.__file = "packages/skeleton/src/index.vue";
script.install = (app) => {
app.component(script.name, script);
};
const _Skeleton = script;
export default _Skeleton;