ckgl/node_modules/vant/es/nav-bar/NavBar.mjs
2024-12-21 13:52:42 +08:00

106 lines
3.0 KiB
JavaScript

import { ref, defineComponent, createVNode as _createVNode } from "vue";
import { truthProp, numericProp, BORDER_BOTTOM, getZIndexStyle, createNamespace, HAPTICS_FEEDBACK } from "../utils/index.mjs";
import { usePlaceholder } from "../composables/use-placeholder.mjs";
import { Icon } from "../icon/index.mjs";
const [name, bem] = createNamespace("nav-bar");
const navBarProps = {
title: String,
fixed: Boolean,
zIndex: numericProp,
border: truthProp,
leftText: String,
rightText: String,
leftDisabled: Boolean,
rightDisabled: Boolean,
leftArrow: Boolean,
placeholder: Boolean,
safeAreaInsetTop: Boolean,
clickable: truthProp
};
var stdin_default = defineComponent({
name,
props: navBarProps,
emits: ["clickLeft", "clickRight"],
setup(props, {
emit,
slots
}) {
const navBarRef = ref();
const renderPlaceholder = usePlaceholder(navBarRef, bem);
const onClickLeft = (event) => {
if (!props.leftDisabled) {
emit("clickLeft", event);
}
};
const onClickRight = (event) => {
if (!props.rightDisabled) {
emit("clickRight", event);
}
};
const renderLeft = () => {
if (slots.left) {
return slots.left();
}
return [props.leftArrow && _createVNode(Icon, {
"class": bem("arrow"),
"name": "arrow-left"
}, null), props.leftText && _createVNode("span", {
"class": bem("text")
}, [props.leftText])];
};
const renderRight = () => {
if (slots.right) {
return slots.right();
}
return _createVNode("span", {
"class": bem("text")
}, [props.rightText]);
};
const renderNavBar = () => {
const {
title,
fixed,
border,
zIndex
} = props;
const style = getZIndexStyle(zIndex);
const hasLeft = props.leftArrow || props.leftText || slots.left;
const hasRight = props.rightText || slots.right;
return _createVNode("div", {
"ref": navBarRef,
"style": style,
"class": [bem({
fixed
}), {
[BORDER_BOTTOM]: border,
"van-safe-area-top": props.safeAreaInsetTop
}]
}, [_createVNode("div", {
"class": bem("content")
}, [hasLeft && _createVNode("div", {
"class": [bem("left", {
disabled: props.leftDisabled
}), props.clickable && !props.leftDisabled ? HAPTICS_FEEDBACK : ""],
"onClick": onClickLeft
}, [renderLeft()]), _createVNode("div", {
"class": [bem("title"), "van-ellipsis"]
}, [slots.title ? slots.title() : title]), hasRight && _createVNode("div", {
"class": [bem("right", {
disabled: props.rightDisabled
}), props.clickable && !props.rightDisabled ? HAPTICS_FEEDBACK : ""],
"onClick": onClickRight
}, [renderRight()])])]);
};
return () => {
if (props.fixed && props.placeholder) {
return renderPlaceholder(renderNavBar);
}
return renderNavBar();
};
}
});
export {
stdin_default as default,
navBarProps
};