ui-ingredients
Version:
Headless component library for Svelte powered by zag
32 lines (31 loc) • 845 B
JavaScript
import { reflect } from '@zag-js/svelte';
import { getContext, hasContext, setContext } from 'svelte';
export function createContext(...args) {
const k = args[0];
const s = args[1] ?? true;
if (k.trim().length < 1) {
const e = new Error();
e.name = 'ContextError';
e.message = 'Context key cannot be empty';
throw e;
}
function has() {
return hasContext(k);
}
function set(v) {
setContext(k, isFn(v) ? reflect(v) : v);
}
function get() {
if (s && !has()) {
const e = new Error();
e.name = 'ContextError';
e.message = "No context found for '%s'".replace('%s', k);
throw e;
}
return getContext(k);
}
return [get, set, has];
}
function isFn(v) {
return typeof v === 'function';
}