ckgl/node_modules/vant/es/action-bar-button/ActionBarButton.mjs
2024-12-21 13:52:42 +08:00

74 lines
1.8 KiB
JavaScript

import { computed, defineComponent, createVNode as _createVNode } from "vue";
import { extend, createNamespace } from "../utils/index.mjs";
import { ACTION_BAR_KEY } from "../action-bar/ActionBar.mjs";
import { useParent } from "@vant/use";
import { useExpose } from "../composables/use-expose.mjs";
import { useRoute, routeProps } from "../composables/use-route.mjs";
import { Button } from "../button/index.mjs";
const [name, bem] = createNamespace("action-bar-button");
const actionBarButtonProps = extend({}, routeProps, {
type: String,
text: String,
icon: String,
color: String,
loading: Boolean,
disabled: Boolean
});
var stdin_default = defineComponent({
name,
props: actionBarButtonProps,
setup(props, {
slots
}) {
const route = useRoute();
const {
parent,
index
} = useParent(ACTION_BAR_KEY);
const isFirst = computed(() => {
if (parent) {
const prev = parent.children[index.value - 1];
return !(prev && "isButton" in prev);
}
});
const isLast = computed(() => {
if (parent) {
const next = parent.children[index.value + 1];
return !(next && "isButton" in next);
}
});
useExpose({
isButton: true
});
return () => {
const {
type,
icon,
text,
color,
loading,
disabled
} = props;
return _createVNode(Button, {
"class": bem([type, {
last: isLast.value,
first: isFirst.value
}]),
"size": "large",
"type": type,
"icon": icon,
"color": color,
"loading": loading,
"disabled": disabled,
"onClick": route
}, {
default: () => [slots.default ? slots.default() : text]
});
};
}
});
export {
actionBarButtonProps,
stdin_default as default
};