Newer
Older
gnexus-ui-kit / src / vue / utils.js
@Eugene Sukhodolskiy Eugene Sukhodolskiy 15 hours ago 1 KB Add Vue adapter foundation
import { h } from "vue";

export const variants = new Set([
	"primary",
	"secondary",
	"accent",
	"success",
	"warning",
	"danger",
	"error",
	"info"
]);

export function cx(...items) {
	return items
		.flatMap(item => {
			if(!item) {
				return [];
			}

			if(Array.isArray(item)) {
				return item;
			}

			if(typeof item === "object") {
				return Object.entries(item)
					.filter(([, enabled]) => enabled)
					.map(([name]) => name);
			}

			return [item];
		})
		.filter(Boolean)
		.join(" ");
}

export function normalizeVariant(value, fallback = "primary") {
	return variants.has(value) ? value : fallback;
}

export function iconNode(icon, extraClass = "") {
	if(!icon) {
		return null;
	}

	const iconClass = icon.includes("ph ") || icon.startsWith("ph-")
		? icon
		: `ph ${icon}`;

	return h("i", {
		class: cx(iconClass, extraClass),
		"aria-hidden": "true"
	});
}

export function slotOrText(slots, name, text) {
	return slots[name] ? slots[name]() : text;
}

export function eventValue(event) {
	const target = event.target;

	if(target.type === "checkbox") {
		return target.checked;
	}

	return target.value;
}