@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
84 lines (83 loc) • 1.89 kB
JavaScript
import { computed as c, defineComponent as r, createVNode as d } from "vue";
import { withInstall as m } from "../common/index.esm.js";
const f = {
/**
* 组件标识
*/
id: String,
/**
* 设置按钮类型
*/
type: { type: String, default: "primary" },
/**
* 是否禁用
*/
disabled: { type: Boolean, default: !1 },
/**
* 按钮尺寸
*/
size: { type: String, default: "middle" },
/**
* 按钮图标
*/
icon: { type: String },
/**
* 自定义class
*/
customClass: { type: Object, default: {} }
};
function b(t, n) {
function l(e) {
e.stopPropagation(), t.disabled || n.emit("click", e);
}
return {
onClickButton: l
};
}
function C(t) {
const n = c(() => {
const e = {
"f-icon": !0
};
if (t.icon) {
const i = t.icon.trim().split(" ");
i && i.length && i.reduce((o, s) => (o[s] = !0, o), e);
}
return e;
}), l = c(() => !!(t.icon && t.icon.trim()));
return { iconClass: n, shouldShowIcon: l };
}
const g = /* @__PURE__ */ r({
name: "FButton",
props: f,
emits: ["click"],
setup(t, n) {
const {
onClickButton: l
} = b(t, n), {
iconClass: e,
shouldShowIcon: i
} = C(t), o = c(() => {
const s = {
btn: !0,
"btn-lg": t.size === "large",
"btn-md": t.size !== "large" && t.size !== "small",
"btn-sm": t.size === "small",
"btn-icontext": i.value
};
return s[`btn-${t.type}`] = !0, t.customClass && Object.keys(t.customClass).reduce((u, a) => (u[a] = t.customClass[a], u), s), s;
});
return () => d("button", {
class: o.value,
disabled: t.disabled,
onClick: (s) => l(s)
}, [i.value && d("i", {
class: e.value
}, null), n.slots.default && n.slots.default()]);
}
}), k = m(g);
export {
g as FButton,
f as buttonProps,
k as default
};