@clubmed/trident-ui
Version:
Shared ClubMed React UI components
91 lines (90 loc) • 2.14 kB
JavaScript
"use client";
import { jsx as f } from "react/jsx-runtime";
import { createContext as p, useId as v, useReducer as y, useCallback as u } from "react";
function x(e) {
const n = [...e.refs.keys()], o = (n.findIndex((t) => t === e.value) + 1) % n.length;
return { ...e, value: n[o] };
}
function g(e) {
const n = [...e.refs.keys()], o = (n.findIndex((t) => t === e.value) - 1 + n.length) % n.length;
return { ...e, value: n[o] };
}
function C(e) {
const r = [...e.refs.keys()][0];
return {
...e,
value: r
};
}
function k(e) {
const n = [...e.refs.keys()], r = n[n.length - 1];
return {
...e,
value: r
};
}
function b(e, n) {
const r = new Map(e.refs);
return r.delete(n.payload.value), {
...e,
refs: r
};
}
function h(e, n) {
return {
...e,
...e.value === -1 && { value: n.payload.value },
refs: new Map(e.refs).set(n.payload.value, n.payload.ref)
};
}
function w(e, n) {
return { ...e, value: n.payload };
}
const i = {
next: x,
previous: g,
start: C,
end: k,
register: h,
unregister: b,
update: w
};
function I(e, n) {
if (n.type in i) {
const r = i[n.type];
return r(e, n);
}
return e;
}
const d = p({
uid: "",
value: 0,
refs: /* @__PURE__ */ new Map(),
dispatch: () => {
console.warn("Tab Controller Context dispatch used outside of Provider");
},
register: () => {
console.warn("Tab Controller Context register used outside of Provider");
},
unregister: () => {
console.warn("Tab Controller Context unregister used outside of Provider");
}
});
d.displayName = "TabControlContext";
function P({ selected: e, children: n }) {
const r = v(), [o, t] = y(I, {
uid: r,
value: e || -1,
refs: /* @__PURE__ */ new Map()
}), l = u((s, c) => {
t({ type: "register", payload: { value: s, ref: c } });
}, []), a = u((s) => {
t({ type: "unregister", payload: { value: s } });
}, []);
return /* @__PURE__ */ f(d.Provider, { value: { ...o, dispatch: t, register: l, unregister: a }, children: n });
}
export {
d as TabControlContext,
P as TabsProvider
};
//# sourceMappingURL=TabControl.js.map