Newer
Older
vmk-ui-kit / src / vue / components / GnListItem.js
/**
 * GnListItem - Single list item with optional icon and meta.
 */

import { defineComponent, h, computed } from "vue";
import { cx, iconNode } from "../utils.js";

export default defineComponent({
	name: "GnListItem",
	props: {
		icon: { type: String, default: "" },
		meta: { type: String, default: "" },
		active: { type: Boolean, default: false },
		disabled: { type: Boolean, default: false }
	},
	emits: ["click"],
	setup(props, { slots, emit }) {
		const classes = computed(() => cx("list-item", {
			"is-active": props.active,
			"is-disabled": props.disabled
		}));

		return () => h("li", {
			class: classes.value,
			tabindex: props.disabled ? undefined : "0",
			onClick: () => !props.disabled && emit("click")
		}, [
			props.icon && h("span", { class: "list-item-icon" }, [iconNode(props.icon)]),
			h("span", { class: "list-item-content" }, slots.default?.()),
			props.meta && h("span", { class: "list-item-meta" }, props.meta)
		]);
	}
});