Newer
Older
gnexus-ui-kit / src / vue / components / GnTimeline.js
@Eugene Sukhodolskiy Eugene Sukhodolskiy 14 hours ago 1 KB Expand Vue adapter component coverage
import { defineComponent, h } from "vue";
import { cx, iconNode, normalizeVariant } from "../utils.js";

export default defineComponent({
	name: "GnTimeline",
	props: {
		items: { type: Array, default: () => [] }
	},
	setup(props, { attrs, slots }) {
		return () => h("ol", { ...attrs, class: cx("timeline", attrs.class) }, props.items.map(item => {
			const variant = item.variant ? normalizeVariant(item.variant) : "";

			return h("li", { class: cx("timeline-item", variant && `timeline-item-${variant}`) }, [
				h("span", { class: "timeline-marker" }, [iconNode(item.icon || "ph-circle")]),
				h("div", { class: "timeline-content" }, [
					h("article", { class: "timeline-card" }, [
						h("header", { class: "timeline-header" }, [
							h("h3", { class: "timeline-title" }, item.title),
							item.time && h("time", { class: "timeline-time" }, item.time)
						]),
						h("p", { class: "timeline-text" }, slots[item.key]?.({ item }) || item.text),
						(item.meta || slots.meta) && h("div", { class: "timeline-meta" }, slots.meta?.({ item }) || item.meta)
					])
				])
			]);
		}));
	}
});