UNPKG

alinea

Version:

[![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea) [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)

308 lines (300 loc) 11.9 kB
import { Lift_module_default } from "../chunks/chunk-CKT37OYJ.js"; import { I as I2, M, N, O, e } from "../chunks/chunk-CRWVV7PH.js"; import { c, p } from "../chunks/chunk-PB6GIAHT.js"; import { D, I, S, X, l, o2 as o, o3 as o2, s2 as s, s3 as s2, t, u, y } from "../chunks/chunk-QEHUZJO2.js"; import "../chunks/chunk-U5RRZUYZ.js"; // node_modules/@headlessui/react/dist/hooks/use-is-mounted.js import { useRef as r } from "react"; function f() { let e2 = r(false); return l(() => (e2.current = true, () => { e2.current = false; }), []), e2; } // node_modules/@headlessui/react/dist/components/tabs/tabs.js import _, { Fragment as ne, createContext as V, useContext as Q, useMemo as F, useReducer as re, useRef as K } from "react"; // node_modules/@headlessui/react/dist/internal/focus-sentinel.js import s3, { useState as c2 } from "react"; function A({ onFocus: n }) { let [r3, o3] = c2(true), u2 = f(); return r3 ? s3.createElement(c, { as: "button", type: "button", features: p.Focusable, onFocus: (a2) => { a2.preventDefault(); let e2, i = 50; function t2() { if (i-- <= 0) { e2 && cancelAnimationFrame(e2); return; } if (n()) { if (cancelAnimationFrame(e2), !u2.current) return; o3(false); return; } e2 = requestAnimationFrame(t2); } e2 = requestAnimationFrame(t2); } }) : null; } // node_modules/@headlessui/react/dist/utils/stable-collection.js import * as r2 from "react"; var s4 = r2.createContext(null); function a() { return { groups: /* @__PURE__ */ new Map(), get(n, t2) { var c3; let e2 = this.groups.get(n); e2 || (e2 = /* @__PURE__ */ new Map(), this.groups.set(n, e2)); let l2 = (c3 = e2.get(t2)) != null ? c3 : 0; e2.set(t2, l2 + 1); let o3 = Array.from(e2.keys()).indexOf(t2); function i() { let u2 = e2.get(t2); u2 > 1 ? e2.set(t2, u2 - 1) : e2.delete(t2); } return [o3, i]; } }; } function C({ children: n }) { let t2 = r2.useRef(a()); return r2.createElement(s4.Provider, { value: t2 }, n); } function d(n) { let t2 = r2.useContext(s4); if (!t2) throw new Error("You must wrap your component in a <StableCollection>"); let e2 = f2(), [l2, o3] = t2.current.get(n, e2); return r2.useEffect(() => o3, []), l2; } function f2() { var l2, o3, i; let n = (i = (o3 = (l2 = r2.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) == null ? void 0 : l2.ReactCurrentOwner) == null ? void 0 : o3.current) != null ? i : null; if (!n) return Symbol(); let t2 = [], e2 = n; for (; e2; ) t2.push(e2.index), e2 = e2.return; return "$." + t2.join("."); } // node_modules/@headlessui/react/dist/components/tabs/tabs.js var ue = ((t2) => (t2[t2.Forwards = 0] = "Forwards", t2[t2.Backwards = 1] = "Backwards", t2))(ue || {}); var Te = ((o3) => (o3[o3.Less = -1] = "Less", o3[o3.Equal = 0] = "Equal", o3[o3.Greater = 1] = "Greater", o3))(Te || {}); var de = ((r3) => (r3[r3.SetSelectedIndex = 0] = "SetSelectedIndex", r3[r3.RegisterTab = 1] = "RegisterTab", r3[r3.UnregisterTab = 2] = "UnregisterTab", r3[r3.RegisterPanel = 3] = "RegisterPanel", r3[r3.UnregisterPanel = 4] = "UnregisterPanel", r3))(de || {}); var ce = { [0](e2, n) { var u2; let t2 = I2(e2.tabs, (T) => T.current), o3 = I2(e2.panels, (T) => T.current), s5 = t2.filter((T) => { var l2; return !((l2 = T.current) != null && l2.hasAttribute("disabled")); }), r3 = { ...e2, tabs: t2, panels: o3 }; if (n.index < 0 || n.index > t2.length - 1) { let T = u(Math.sign(n.index - e2.selectedIndex), { [-1]: () => 1, [0]: () => u(Math.sign(n.index), { [-1]: () => 0, [0]: () => 0, [1]: () => 1 }), [1]: () => 0 }); if (s5.length === 0) return r3; let l2 = u(T, { [0]: () => t2.indexOf(s5[0]), [1]: () => t2.indexOf(s5[s5.length - 1]) }); return { ...r3, selectedIndex: l2 === -1 ? e2.selectedIndex : l2 }; } let i = t2.slice(0, n.index), b = [...t2.slice(n.index), ...i].find((T) => s5.includes(T)); if (!b) return r3; let c3 = (u2 = t2.indexOf(b)) != null ? u2 : e2.selectedIndex; return c3 === -1 && (c3 = e2.selectedIndex), { ...r3, selectedIndex: c3 }; }, [1](e2, n) { var r3; if (e2.tabs.includes(n.tab)) return e2; let t2 = e2.tabs[e2.selectedIndex], o3 = I2([...e2.tabs, n.tab], (i) => i.current), s5 = (r3 = o3.indexOf(t2)) != null ? r3 : e2.selectedIndex; return s5 === -1 && (s5 = e2.selectedIndex), { ...e2, tabs: o3, selectedIndex: s5 }; }, [2](e2, n) { return { ...e2, tabs: e2.tabs.filter((t2) => t2 !== n.tab) }; }, [3](e2, n) { return e2.panels.includes(n.panel) ? e2 : { ...e2, panels: I2([...e2.panels, n.panel], (t2) => t2.current) }; }, [4](e2, n) { return { ...e2, panels: e2.panels.filter((t2) => t2 !== n.panel) }; } }; var X2 = V(null); X2.displayName = "TabsDataContext"; function M2(e2) { let n = Q(X2); if (n === null) { let t2 = new Error(`<${e2} /> is missing a parent <Tab.Group /> component.`); throw Error.captureStackTrace && Error.captureStackTrace(t2, M2), t2; } return n; } var $ = V(null); $.displayName = "TabsActionsContext"; function q(e2) { let n = Q($); if (n === null) { let t2 = new Error(`<${e2} /> is missing a parent <Tab.Group /> component.`); throw Error.captureStackTrace && Error.captureStackTrace(t2, q), t2; } return n; } function fe(e2, n) { return u(n.type, ce, e2, n); } var be = ne; function me(e2, n) { let { defaultIndex: t2 = 0, vertical: o3 = false, manual: s5 = false, onChange: r3, selectedIndex: i = null, ...R } = e2; const b = o3 ? "vertical" : "horizontal", c3 = s5 ? "manual" : "auto"; let u2 = i !== null, T = y(n), [l2, d2] = re(fe, { selectedIndex: i != null ? i : t2, tabs: [], panels: [] }), g = F(() => ({ selectedIndex: l2.selectedIndex }), [l2.selectedIndex]), m = s(r3 || (() => { })), y2 = s(l2.tabs), E = F(() => ({ orientation: b, activation: c3, ...l2 }), [b, c3, l2]), I3 = o((p2) => (d2({ type: 1, tab: p2 }), () => d2({ type: 2, tab: p2 }))), A2 = o((p2) => (d2({ type: 3, panel: p2 }), () => d2({ type: 4, panel: p2 }))), L = o((p2) => { C2.current !== p2 && m.current(p2), u2 || d2({ type: 0, index: p2 }); }), C2 = s(u2 ? e2.selectedIndex : l2.selectedIndex), N2 = F(() => ({ registerTab: I3, registerPanel: A2, change: L }), []); l(() => { d2({ type: 0, index: i != null ? i : t2 }); }, [i]), l(() => { if (C2.current === void 0 || l2.tabs.length <= 0) return; let p2 = I2(l2.tabs, (a2) => a2.current); p2.some((a2, f3) => l2.tabs[f3] !== a2) && L(p2.indexOf(l2.tabs[C2.current])); }); let B = { ref: T }; return _.createElement(C, null, _.createElement($.Provider, { value: N2 }, _.createElement(X2.Provider, { value: E }, E.tabs.length <= 0 && _.createElement(A, { onFocus: () => { var p2, D2; for (let a2 of y2.current) if (((p2 = a2.current) == null ? void 0 : p2.tabIndex) === 0) return (D2 = a2.current) == null || D2.focus(), true; return false; } }), X({ ourProps: B, theirProps: R, slot: g, defaultTag: be, name: "Tabs" })))); } var Pe = "div"; function xe(e2, n) { let { orientation: t2, selectedIndex: o3 } = M2("Tab.List"), s5 = y(n); return X({ ourProps: { ref: s5, role: "tablist", "aria-orientation": t2 }, theirProps: e2, slot: { selectedIndex: o3 }, defaultTag: Pe, name: "Tabs.List" }); } var ge = "button"; function ye(e2, n) { var p2, D2; let t2 = I(), { id: o3 = `headlessui-tabs-tab-${t2}`, ...s5 } = e2, { orientation: r3, activation: i, selectedIndex: R, tabs: b, panels: c3 } = M2("Tab"), u2 = q("Tab"), T = M2("Tab"), l2 = K(null), d2 = y(l2, n); l(() => u2.registerTab(l2), [u2, l2]); let g = d("tabs"), m = b.indexOf(l2); m === -1 && (m = g); let y2 = m === R, E = o((a2) => { var j; let f3 = a2(); if (f3 === N.Success && i === "auto") { let W = (j = e(l2)) == null ? void 0 : j.activeElement, z = T.tabs.findIndex((te) => te.current === W); z !== -1 && u2.change(z); } return f3; }), I3 = o((a2) => { let f3 = b.map((W) => W.current).filter(Boolean); if (a2.key === o2.Space || a2.key === o2.Enter) { a2.preventDefault(), a2.stopPropagation(), u2.change(m); return; } switch (a2.key) { case o2.Home: case o2.PageUp: return a2.preventDefault(), a2.stopPropagation(), E(() => O(f3, M.First)); case o2.End: case o2.PageDown: return a2.preventDefault(), a2.stopPropagation(), E(() => O(f3, M.Last)); } if (E(() => u(r3, { vertical() { return a2.key === o2.ArrowUp ? O(f3, M.Previous | M.WrapAround) : a2.key === o2.ArrowDown ? O(f3, M.Next | M.WrapAround) : N.Error; }, horizontal() { return a2.key === o2.ArrowLeft ? O(f3, M.Previous | M.WrapAround) : a2.key === o2.ArrowRight ? O(f3, M.Next | M.WrapAround) : N.Error; } })) === N.Success) return a2.preventDefault(); }), A2 = K(false), L = o(() => { var a2; A2.current || (A2.current = true, (a2 = l2.current) == null || a2.focus({ preventScroll: true }), u2.change(m), t(() => { A2.current = false; })); }), C2 = o((a2) => { a2.preventDefault(); }), N2 = F(() => ({ selected: y2 }), [y2]), B = { ref: d2, onKeyDown: I3, onMouseDown: C2, onClick: L, id: o3, role: "tab", type: s2(e2, l2), "aria-controls": (D2 = (p2 = c3[m]) == null ? void 0 : p2.current) == null ? void 0 : D2.id, "aria-selected": y2, tabIndex: y2 ? 0 : -1 }; return X({ ourProps: B, theirProps: s5, slot: N2, defaultTag: ge, name: "Tabs.Tab" }); } var Ee = "div"; function Ae(e2, n) { let { selectedIndex: t2 } = M2("Tab.Panels"), o3 = y(n), s5 = F(() => ({ selectedIndex: t2 }), [t2]); return X({ ourProps: { ref: o3 }, theirProps: e2, slot: s5, defaultTag: Ee, name: "Tabs.Panels" }); } var Re = "div"; var Le = S.RenderStrategy | S.Static; function Se(e2, n) { var E, I3, A2, L; let t2 = I(), { id: o3 = `headlessui-tabs-panel-${t2}`, tabIndex: s5 = 0, ...r3 } = e2, { selectedIndex: i, tabs: R, panels: b } = M2("Tab.Panel"), c3 = q("Tab.Panel"), u2 = K(null), T = y(u2, n); l(() => c3.registerPanel(u2), [c3, u2]); let l2 = d("panels"), d2 = b.indexOf(u2); d2 === -1 && (d2 = l2); let g = d2 === i, m = F(() => ({ selected: g }), [g]), y2 = { ref: T, id: o3, role: "tabpanel", "aria-labelledby": (I3 = (E = R[d2]) == null ? void 0 : E.current) == null ? void 0 : I3.id, tabIndex: g ? s5 : -1 }; return !g && ((A2 = r3.unmount) == null || A2) && !((L = r3.static) != null && L) ? _.createElement(c, { as: "span", ...y2 }) : X({ ourProps: y2, theirProps: r3, slot: m, defaultTag: Re, features: Le, visible: g, name: "Tabs.Panel" }); } var Ie = D(ye); var De = D(me); var Fe = D(xe); var he = D(Ae); var Me = D(Se); var rt = Object.assign(Ie, { Group: De, List: Fe, Panels: he, Panel: Me }); // src/ui/Tabs.module.scss var Tabs_module_default = { "list": "alinea-Tabs-list", "trigger": "alinea-Tabs-trigger", "is-selected": "alinea-Tabs-is-selected", "isSelected": "alinea-Tabs-is-selected" }; // src/ui/Tabs.tsx import { fromModule } from "./util/Styler.js"; import { jsx } from "react/jsx-runtime"; var styles = fromModule(Tabs_module_default); var liftStyles = fromModule(Lift_module_default); var Tabs; ((Tabs2) => { Tabs2.Root = rt.Group; function List({ backdrop = true, ...props }) { return /* @__PURE__ */ jsx( rt.List, { className: backdrop ? liftStyles.header.mergeProps(props).with(styles.list)() : styles.list, ...props } ); } Tabs2.List = List; function Trigger(props) { return /* @__PURE__ */ jsx( rt, { ...props, className: ({ selected }) => styles.trigger.mergeProps(props)({ selected }) } ); } Tabs2.Trigger = Trigger; Tabs2.Panels = rt.Panels; Tabs2.Panel = rt.Panel; })(Tabs || (Tabs = {})); export { Tabs };