asterui 0.12.10 → 0.12.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/components/Anchor.d.ts +10 -0
  2. package/dist/components/Breadcrumb.d.ts +20 -3
  3. package/dist/components/ContextMenu.d.ts +39 -3
  4. package/dist/components/Menu.d.ts +29 -4
  5. package/dist/components/Space.d.ts +1 -0
  6. package/dist/components/Splitter.d.ts +2 -0
  7. package/dist/index.d.ts +2 -4
  8. package/dist/index.js +63 -65
  9. package/dist/index.js.map +1 -1
  10. package/dist/index100.js +11 -44
  11. package/dist/index100.js.map +1 -1
  12. package/dist/index101.js +12 -10
  13. package/dist/index101.js.map +1 -1
  14. package/dist/index102.js +7 -14
  15. package/dist/index102.js.map +1 -1
  16. package/dist/index103.js +12 -7
  17. package/dist/index103.js.map +1 -1
  18. package/dist/index104.js +29 -11
  19. package/dist/index104.js.map +1 -1
  20. package/dist/index105.js +16 -29
  21. package/dist/index105.js.map +1 -1
  22. package/dist/index19.js +161 -63
  23. package/dist/index19.js.map +1 -1
  24. package/dist/index3.js +81 -65
  25. package/dist/index3.js.map +1 -1
  26. package/dist/index51.js +110 -104
  27. package/dist/index51.js.map +1 -1
  28. package/dist/index74.js +37 -25
  29. package/dist/index74.js.map +1 -1
  30. package/dist/index75.js +223 -103
  31. package/dist/index75.js.map +1 -1
  32. package/dist/index76.js +21 -51
  33. package/dist/index76.js.map +1 -1
  34. package/dist/index77.js +31 -22
  35. package/dist/index77.js.map +1 -1
  36. package/dist/index78.js +22 -31
  37. package/dist/index78.js.map +1 -1
  38. package/dist/index79.js +327 -20
  39. package/dist/index79.js.map +1 -1
  40. package/dist/index8.js +32 -8
  41. package/dist/index8.js.map +1 -1
  42. package/dist/index80.js +50 -323
  43. package/dist/index80.js.map +1 -1
  44. package/dist/index81.js +40 -56
  45. package/dist/index81.js.map +1 -1
  46. package/dist/index82.js +23 -40
  47. package/dist/index82.js.map +1 -1
  48. package/dist/index83.js +93 -21
  49. package/dist/index83.js.map +1 -1
  50. package/dist/index84.js +148 -87
  51. package/dist/index84.js.map +1 -1
  52. package/dist/index85.js +152 -147
  53. package/dist/index85.js.map +1 -1
  54. package/dist/index86.js +63 -159
  55. package/dist/index86.js.map +1 -1
  56. package/dist/index87.js +35 -65
  57. package/dist/index87.js.map +1 -1
  58. package/dist/index88.js +234 -35
  59. package/dist/index88.js.map +1 -1
  60. package/dist/index89.js +31 -231
  61. package/dist/index89.js.map +1 -1
  62. package/dist/index90.js +210 -34
  63. package/dist/index90.js.map +1 -1
  64. package/dist/index91.js +198 -195
  65. package/dist/index91.js.map +1 -1
  66. package/dist/index92.js +241 -159
  67. package/dist/index92.js.map +1 -1
  68. package/dist/index93.js +166 -283
  69. package/dist/index93.js.map +1 -1
  70. package/dist/index94.js +253 -173
  71. package/dist/index94.js.map +1 -1
  72. package/dist/index95.js +14 -258
  73. package/dist/index95.js.map +1 -1
  74. package/dist/index96.js +31 -12
  75. package/dist/index96.js.map +1 -1
  76. package/dist/index97.js +5 -32
  77. package/dist/index97.js.map +1 -1
  78. package/dist/index98.js +13 -5
  79. package/dist/index98.js.map +1 -1
  80. package/dist/index99.js +43 -11
  81. package/dist/index99.js.map +1 -1
  82. package/package.json +1 -1
  83. package/dist/components/Stack.d.ts +0 -10
  84. package/dist/index106.js +0 -21
  85. package/dist/index106.js.map +0 -1
package/dist/index3.js CHANGED
@@ -1,100 +1,116 @@
1
- import { jsx as m, jsxs as Y } from "react/jsx-runtime";
2
- import { useState as y, useCallback as v, useEffect as N, createContext as z, useContext as D } from "react";
3
- const $ = z(null), O = () => {
4
- const o = D($);
1
+ import { jsx as a, jsxs as W } from "react/jsx-runtime";
2
+ import { useState as R, useRef as V, useCallback as y, useEffect as $, createContext as X, useContext as Z } from "react";
3
+ const C = X(null), _ = () => {
4
+ const o = Z(C);
5
5
  if (!o)
6
6
  throw new Error("Anchor.Link must be used within an Anchor");
7
7
  return o;
8
- }, H = ({
8
+ }, Y = ({
9
9
  href: o,
10
- title: d,
11
- children: i,
12
- className: r = ""
10
+ title: h,
11
+ children: c,
12
+ className: f = ""
13
13
  }) => {
14
- const { activeLink: s, direction: h, registerLink: u, unregisterLink: g, handleClick: k } = O();
15
- N(() => (u(o), () => g(o)), [o, u, g]);
16
- const x = s === o, l = h === "vertical";
17
- return /* @__PURE__ */ Y("div", { className: l ? "" : "inline-block", children: [
18
- /* @__PURE__ */ m(
14
+ const { activeLink: r, direction: k, registerLink: l, unregisterLink: w, handleClick: x } = _();
15
+ $(() => (l(o), () => w(o)), [o, l, w]);
16
+ const v = r === o, d = k === "vertical";
17
+ return /* @__PURE__ */ W("div", { className: d ? "" : "inline-block", children: [
18
+ /* @__PURE__ */ a(
19
19
  "a",
20
20
  {
21
21
  href: `#${o}`,
22
- onClick: (c) => k(c, o, d),
22
+ onClick: (b) => x(b, o, h),
23
23
  className: `
24
24
  block text-sm transition-colors
25
- ${l ? "py-1 pl-3 border-l-2" : "px-3 py-1 border-b-2"}
26
- ${x ? "text-primary border-primary font-medium" : "text-base-content/70 border-transparent hover:text-base-content hover:border-base-content/30"}
27
- ${r}
25
+ ${d ? "py-1 pl-3 border-l-2" : "px-3 py-1 border-b-2"}
26
+ ${v ? "text-primary border-primary font-medium" : "text-base-content/70 border-transparent hover:text-base-content hover:border-base-content/30"}
27
+ ${f}
28
28
  `.trim(),
29
- children: d
29
+ children: h
30
30
  }
31
31
  ),
32
- i && /* @__PURE__ */ m("div", { className: l ? "pl-3" : "inline-flex", children: i })
32
+ c && /* @__PURE__ */ a("div", { className: d ? "pl-3" : "inline-flex", children: c })
33
33
  ] });
34
- }, P = ({
34
+ }, O = ({
35
35
  items: o,
36
- direction: d = "vertical",
37
- offsetTop: i = 0,
36
+ direction: h = "vertical",
37
+ offsetTop: c = 0,
38
+ bounds: f = 5,
38
39
  getContainer: r,
39
- onChange: s,
40
- onClick: h,
41
- activeLink: u,
42
- className: g = "",
43
- children: k
40
+ getCurrentAnchor: k,
41
+ onChange: l,
42
+ onClick: w,
43
+ activeLink: x,
44
+ affix: v = !1,
45
+ affixOffsetTop: d = 0,
46
+ replace: b = !1,
47
+ className: D = "",
48
+ children: q
44
49
  }) => {
45
- const [x, l] = y(""), [c, A] = y([]), w = u !== void 0, b = w ? u : x, I = v((n) => {
46
- A((t) => t.includes(n) ? t : [...t, n]);
47
- }, []), R = v((n) => {
48
- A((t) => t.filter((e) => e !== n));
49
- }, []), B = v((n) => {
50
+ const [F, H] = R(""), [i, N] = R([]), [m, G] = R(!1), p = V(null), B = V(null), g = x !== void 0, L = g ? x : F, J = k ? k(L) : L, K = y((n) => {
51
+ N((t) => t.includes(n) ? t : [...t, n]);
52
+ }, []), M = y((n) => {
53
+ N((t) => t.filter((e) => e !== n));
54
+ }, []), T = y((n) => {
50
55
  const t = document.getElementById(n);
51
56
  if (t) {
52
- const e = r?.() ?? window, a = t.getBoundingClientRect().top, L = e === window ? 0 : e.getBoundingClientRect().top, f = e === window ? window.scrollY : e.scrollTop, p = a - L + f - i;
53
- e === window ? window.scrollTo({ top: p, behavior: "smooth" }) : e.scrollTo({ top: p, behavior: "smooth" });
57
+ const e = r?.() ?? window, s = t.getBoundingClientRect().top, u = e === window ? 0 : e.getBoundingClientRect().top, E = e === window ? window.scrollY : e.scrollTop, A = s - u + E - c;
58
+ e === window ? window.scrollTo({ top: A, behavior: "smooth" }) : e.scrollTo({ top: A, behavior: "smooth" }), b ? window.history.replaceState(null, "", `#${n}`) : window.history.pushState(null, "", `#${n}`);
54
59
  }
55
- }, [r, i]), j = v((n, t, e) => {
56
- n.preventDefault(), h?.(n, { href: t, title: e }), B(t), w || l(t), s?.(t);
57
- }, [h, B, w, s]);
58
- N(() => {
59
- if (c.length === 0) return;
60
+ }, [r, c, b]), Q = y((n, t, e) => {
61
+ n.preventDefault(), w?.(n, { href: t, title: e }), T(t), g || H(t), l?.(t);
62
+ }, [w, T, g, l]);
63
+ $(() => {
64
+ if (!v || !p.current) return;
65
+ const n = r?.() ?? window, t = () => {
66
+ if (!p.current || !B.current) return;
67
+ const e = B.current.getBoundingClientRect(), s = n === window ? 0 : n.getBoundingClientRect().top, u = e.top - s <= d;
68
+ u !== m && G(u);
69
+ };
70
+ return n.addEventListener("scroll", t, { passive: !0 }), t(), () => n.removeEventListener("scroll", t);
71
+ }, [v, d, r, m]), $(() => {
72
+ if (i.length === 0) return;
60
73
  const n = r?.() ?? window, t = () => {
61
74
  let e = "";
62
- const a = n === window ? document.documentElement : n, L = n === window ? 0 : a.getBoundingClientRect().top, f = n === window ? window.scrollY : a.scrollTop, p = a.scrollHeight, V = n === window ? window.innerHeight : a.clientHeight;
63
- if (f + V >= p - 10 && c.length > 0)
64
- e = c[c.length - 1];
75
+ const s = n === window ? document.documentElement : n, u = n === window ? 0 : s.getBoundingClientRect().top, E = n === window ? window.scrollY : s.scrollTop, A = s.scrollHeight, U = n === window ? window.innerHeight : s.clientHeight;
76
+ if (E + U >= A - 10 && i.length > 0)
77
+ e = i[i.length - 1];
65
78
  else {
66
- for (const C of c) {
67
- const T = document.getElementById(C);
68
- T && T.getBoundingClientRect().top - L - i <= 10 && (e = C);
79
+ for (const z of i) {
80
+ const P = document.getElementById(z);
81
+ P && P.getBoundingClientRect().top - u - c <= f && (e = z);
69
82
  }
70
- !e && c.length > 0 && (e = c[0]);
83
+ !e && i.length > 0 && (e = i[0]);
71
84
  }
72
- e && e !== b && (w || l(e), s?.(e));
85
+ e && e !== L && (g || H(e), l?.(e));
73
86
  };
74
87
  return n.addEventListener("scroll", t, { passive: !0 }), t(), () => n.removeEventListener("scroll", t);
75
- }, [c, r, i, b, w, s]);
76
- const S = {
77
- activeLink: b,
78
- direction: d,
79
- offsetTop: i,
80
- registerLink: I,
81
- unregisterLink: R,
82
- handleClick: j
83
- }, E = (n) => n.map((t) => /* @__PURE__ */ m(H, { href: t.href, title: t.title, children: t.children && E(t.children) }, t.href));
84
- return /* @__PURE__ */ m($.Provider, { value: S, children: /* @__PURE__ */ m(
88
+ }, [i, r, c, f, L, g, l]);
89
+ const I = {
90
+ activeLink: J,
91
+ direction: h,
92
+ offsetTop: c,
93
+ registerLink: K,
94
+ unregisterLink: M,
95
+ handleClick: Q
96
+ }, S = (n) => n.map((t) => /* @__PURE__ */ a(Y, { href: t.href, title: t.title, children: t.children && S(t.children) }, t.href)), j = /* @__PURE__ */ a(
85
97
  "nav",
86
98
  {
99
+ ref: p,
87
100
  className: `
88
- ${d === "horizontal" ? "flex items-center" : "flex flex-col"}
89
- ${g}
90
- `.trim(),
91
- children: o ? E(o) : k
101
+ ${h === "horizontal" ? "flex items-center" : "flex flex-col"}
102
+ ${m ? "fixed bg-base-100 shadow-sm z-10" : ""}
103
+ ${D}
104
+ `.trim(),
105
+ style: m ? { top: d } : void 0,
106
+ children: o ? S(o) : q
92
107
  }
93
- ) });
94
- }, M = Object.assign(P, {
95
- Link: H
108
+ );
109
+ return v ? /* @__PURE__ */ a(C.Provider, { value: I, children: /* @__PURE__ */ a("div", { ref: B, style: m && p.current ? { height: p.current.offsetHeight } : void 0, children: j }) }) : /* @__PURE__ */ a(C.Provider, { value: I, children: j });
110
+ }, rt = Object.assign(O, {
111
+ Link: Y
96
112
  });
97
113
  export {
98
- M as Anchor
114
+ rt as Anchor
99
115
  };
100
116
  //# sourceMappingURL=index3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index3.js","sources":["../src/components/Anchor.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, createContext, useContext } from 'react'\n\nexport interface AnchorLinkItem {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: AnchorLinkItem[]\n}\n\nexport interface AnchorProps {\n /** Anchor links (alternative to Anchor.Link children) */\n items?: AnchorLinkItem[]\n /** Layout direction */\n direction?: 'horizontal' | 'vertical'\n /** Offset from top when calculating scroll position */\n offsetTop?: number\n /** Target scroll container (default: window) */\n getContainer?: () => HTMLElement | Window\n /** Callback when active link changes */\n onChange?: (activeLink: string) => void\n /** Callback when link is clicked */\n onClick?: (e: React.MouseEvent, link: { href: string; title: React.ReactNode }) => void\n /** Currently active link (controlled) */\n activeLink?: string\n /** Custom class name */\n className?: string\n /** Anchor.Link children */\n children?: React.ReactNode\n}\n\nexport interface AnchorLinkProps {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: React.ReactNode\n /** Custom class name */\n className?: string\n}\n\ninterface AnchorContextValue {\n activeLink: string\n direction: 'horizontal' | 'vertical'\n offsetTop: number\n registerLink: (href: string) => void\n unregisterLink: (href: string) => void\n handleClick: (e: React.MouseEvent, href: string, title: React.ReactNode) => void\n}\n\nconst AnchorContext = createContext<AnchorContextValue | null>(null)\n\nconst useAnchorContext = () => {\n const context = useContext(AnchorContext)\n if (!context) {\n throw new Error('Anchor.Link must be used within an Anchor')\n }\n return context\n}\n\nconst AnchorLink: React.FC<AnchorLinkProps> = ({\n href,\n title,\n children,\n className = '',\n}) => {\n const { activeLink, direction, registerLink, unregisterLink, handleClick } = useAnchorContext()\n\n useEffect(() => {\n registerLink(href)\n return () => unregisterLink(href)\n }, [href, registerLink, unregisterLink])\n\n const isActive = activeLink === href\n const isVertical = direction === 'vertical'\n\n return (\n <div className={isVertical ? '' : 'inline-block'}>\n <a\n href={`#${href}`}\n onClick={(e) => handleClick(e, href, title)}\n className={`\n block text-sm transition-colors\n ${isVertical ? 'py-1 pl-3 border-l-2' : 'px-3 py-1 border-b-2'}\n ${isActive\n ? 'text-primary border-primary font-medium'\n : 'text-base-content/70 border-transparent hover:text-base-content hover:border-base-content/30'\n }\n ${className}\n `.trim()}\n >\n {title}\n </a>\n {children && (\n <div className={isVertical ? 'pl-3' : 'inline-flex'}>\n {children}\n </div>\n )}\n </div>\n )\n}\n\nconst AnchorComponent: React.FC<AnchorProps> = ({\n items,\n direction = 'vertical',\n offsetTop = 0,\n getContainer,\n onChange,\n onClick,\n activeLink: controlledActiveLink,\n className = '',\n children,\n}) => {\n const [internalActiveLink, setInternalActiveLink] = useState('')\n const [links, setLinks] = useState<string[]>([])\n\n const isControlled = controlledActiveLink !== undefined\n const activeLink = isControlled ? controlledActiveLink : internalActiveLink\n\n const registerLink = useCallback((href: string) => {\n setLinks((prev) => (prev.includes(href) ? prev : [...prev, href]))\n }, [])\n\n const unregisterLink = useCallback((href: string) => {\n setLinks((prev) => prev.filter((link) => link !== href))\n }, [])\n\n const scrollToTarget = useCallback((href: string) => {\n const target = document.getElementById(href)\n if (target) {\n const container = getContainer?.() ?? window\n const targetTop = target.getBoundingClientRect().top\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n const scrollTop = container === window\n ? window.scrollY\n : (container as HTMLElement).scrollTop\n\n const top = targetTop - containerTop + scrollTop - offsetTop\n\n if (container === window) {\n window.scrollTo({ top, behavior: 'smooth' })\n } else {\n (container as HTMLElement).scrollTo({ top, behavior: 'smooth' })\n }\n }\n }, [getContainer, offsetTop])\n\n const handleClick = useCallback((\n e: React.MouseEvent,\n href: string,\n title: React.ReactNode\n ) => {\n e.preventDefault()\n onClick?.(e, { href, title })\n scrollToTarget(href)\n\n if (!isControlled) {\n setInternalActiveLink(href)\n }\n onChange?.(href)\n }, [onClick, scrollToTarget, isControlled, onChange])\n\n // Scroll spy\n useEffect(() => {\n if (links.length === 0) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n let currentActive = ''\n const containerEl = container === window ? document.documentElement : container as HTMLElement\n const containerTop = container === window\n ? 0\n : containerEl.getBoundingClientRect().top\n\n // Check if scrolled to near the bottom\n const scrollTop = container === window ? window.scrollY : containerEl.scrollTop\n const scrollHeight = containerEl.scrollHeight\n const clientHeight = container === window ? window.innerHeight : containerEl.clientHeight\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - 10\n\n // If near bottom, use the last link\n if (isNearBottom && links.length > 0) {\n currentActive = links[links.length - 1]\n } else {\n // Find the last element that has scrolled past the top (standard scroll spy behavior)\n for (const href of links) {\n const element = document.getElementById(href)\n if (element) {\n const rect = element.getBoundingClientRect()\n const distance = rect.top - containerTop - offsetTop\n\n // If element's top is at or above the threshold, it's the current section\n if (distance <= 10) {\n currentActive = href\n }\n }\n }\n\n // If nothing matched, use the first link\n if (!currentActive && links.length > 0) {\n currentActive = links[0]\n }\n }\n\n if (currentActive && currentActive !== activeLink) {\n if (!isControlled) {\n setInternalActiveLink(currentActive)\n }\n onChange?.(currentActive)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll() // Initial check\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [links, getContainer, offsetTop, activeLink, isControlled, onChange])\n\n const contextValue: AnchorContextValue = {\n activeLink,\n direction,\n offsetTop,\n registerLink,\n unregisterLink,\n handleClick,\n }\n\n const renderItems = (linkItems: AnchorLinkItem[]): React.ReactNode => {\n return linkItems.map((item) => (\n <AnchorLink key={item.href} href={item.href} title={item.title}>\n {item.children && renderItems(item.children)}\n </AnchorLink>\n ))\n }\n\n return (\n <AnchorContext.Provider value={contextValue}>\n <nav\n className={`\n ${direction === 'horizontal' ? 'flex items-center' : 'flex flex-col'}\n ${className}\n `.trim()}\n >\n {items ? renderItems(items) : children}\n </nav>\n </AnchorContext.Provider>\n )\n}\n\nexport const Anchor = Object.assign(AnchorComponent, {\n Link: AnchorLink,\n})\n"],"names":["AnchorContext","createContext","useAnchorContext","context","useContext","AnchorLink","href","title","children","className","activeLink","direction","registerLink","unregisterLink","handleClick","useEffect","isActive","isVertical","jsxs","jsx","e","AnchorComponent","items","offsetTop","getContainer","onChange","onClick","controlledActiveLink","internalActiveLink","setInternalActiveLink","useState","links","setLinks","isControlled","useCallback","prev","link","scrollToTarget","target","container","targetTop","containerTop","scrollTop","top","handleScroll","currentActive","containerEl","scrollHeight","clientHeight","element","contextValue","renderItems","linkItems","item","Anchor"],"mappings":"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"}
1
+ {"version":3,"file":"index3.js","sources":["../src/components/Anchor.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, createContext, useContext, useRef } from 'react'\n\nexport interface AnchorLinkItem {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: AnchorLinkItem[]\n}\n\nexport interface AnchorProps {\n /** Anchor links (alternative to Anchor.Link children) */\n items?: AnchorLinkItem[]\n /** Layout direction */\n direction?: 'horizontal' | 'vertical'\n /** Offset from top when calculating scroll position */\n offsetTop?: number\n /** Bounding distance of anchor area */\n bounds?: number\n /** Target scroll container (default: window) */\n getContainer?: () => HTMLElement | Window\n /** Customize the anchor highlight */\n getCurrentAnchor?: (activeLink: string) => string\n /** Callback when active link changes */\n onChange?: (activeLink: string) => void\n /** Callback when link is clicked */\n onClick?: (e: React.MouseEvent, link: { href: string; title: React.ReactNode }) => void\n /** Currently active link (controlled) */\n activeLink?: string\n /** Whether to fix the anchor when scrolling */\n affix?: boolean\n /** Pixels to offset from top when affix is true */\n affixOffsetTop?: number\n /** Replace history instead of push */\n replace?: boolean\n /** Custom class name */\n className?: string\n /** Anchor.Link children */\n children?: React.ReactNode\n}\n\nexport interface AnchorLinkProps {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: React.ReactNode\n /** Custom class name */\n className?: string\n}\n\ninterface AnchorContextValue {\n activeLink: string\n direction: 'horizontal' | 'vertical'\n offsetTop: number\n registerLink: (href: string) => void\n unregisterLink: (href: string) => void\n handleClick: (e: React.MouseEvent, href: string, title: React.ReactNode) => void\n}\n\nconst AnchorContext = createContext<AnchorContextValue | null>(null)\n\nconst useAnchorContext = () => {\n const context = useContext(AnchorContext)\n if (!context) {\n throw new Error('Anchor.Link must be used within an Anchor')\n }\n return context\n}\n\nconst AnchorLink: React.FC<AnchorLinkProps> = ({\n href,\n title,\n children,\n className = '',\n}) => {\n const { activeLink, direction, registerLink, unregisterLink, handleClick } = useAnchorContext()\n\n useEffect(() => {\n registerLink(href)\n return () => unregisterLink(href)\n }, [href, registerLink, unregisterLink])\n\n const isActive = activeLink === href\n const isVertical = direction === 'vertical'\n\n return (\n <div className={isVertical ? '' : 'inline-block'}>\n <a\n href={`#${href}`}\n onClick={(e) => handleClick(e, href, title)}\n className={`\n block text-sm transition-colors\n ${isVertical ? 'py-1 pl-3 border-l-2' : 'px-3 py-1 border-b-2'}\n ${isActive\n ? 'text-primary border-primary font-medium'\n : 'text-base-content/70 border-transparent hover:text-base-content hover:border-base-content/30'\n }\n ${className}\n `.trim()}\n >\n {title}\n </a>\n {children && (\n <div className={isVertical ? 'pl-3' : 'inline-flex'}>\n {children}\n </div>\n )}\n </div>\n )\n}\n\nconst AnchorComponent: React.FC<AnchorProps> = ({\n items,\n direction = 'vertical',\n offsetTop = 0,\n bounds = 5,\n getContainer,\n getCurrentAnchor,\n onChange,\n onClick,\n activeLink: controlledActiveLink,\n affix = false,\n affixOffsetTop = 0,\n replace = false,\n className = '',\n children,\n}) => {\n const [internalActiveLink, setInternalActiveLink] = useState('')\n const [links, setLinks] = useState<string[]>([])\n const [isAffixed, setIsAffixed] = useState(false)\n const anchorRef = useRef<HTMLDivElement>(null)\n const placeholderRef = useRef<HTMLDivElement>(null)\n\n const isControlled = controlledActiveLink !== undefined\n const rawActiveLink = isControlled ? controlledActiveLink : internalActiveLink\n const activeLink = getCurrentAnchor ? getCurrentAnchor(rawActiveLink) : rawActiveLink\n\n const registerLink = useCallback((href: string) => {\n setLinks((prev) => (prev.includes(href) ? prev : [...prev, href]))\n }, [])\n\n const unregisterLink = useCallback((href: string) => {\n setLinks((prev) => prev.filter((link) => link !== href))\n }, [])\n\n const scrollToTarget = useCallback((href: string) => {\n const target = document.getElementById(href)\n if (target) {\n const container = getContainer?.() ?? window\n const targetTop = target.getBoundingClientRect().top\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n const scrollTop = container === window\n ? window.scrollY\n : (container as HTMLElement).scrollTop\n\n const top = targetTop - containerTop + scrollTop - offsetTop\n\n if (container === window) {\n window.scrollTo({ top, behavior: 'smooth' })\n } else {\n (container as HTMLElement).scrollTo({ top, behavior: 'smooth' })\n }\n\n // Update URL hash\n if (replace) {\n window.history.replaceState(null, '', `#${href}`)\n } else {\n window.history.pushState(null, '', `#${href}`)\n }\n }\n }, [getContainer, offsetTop, replace])\n\n const handleClick = useCallback((\n e: React.MouseEvent,\n href: string,\n title: React.ReactNode\n ) => {\n e.preventDefault()\n onClick?.(e, { href, title })\n scrollToTarget(href)\n\n if (!isControlled) {\n setInternalActiveLink(href)\n }\n onChange?.(href)\n }, [onClick, scrollToTarget, isControlled, onChange])\n\n // Affix logic\n useEffect(() => {\n if (!affix || !anchorRef.current) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n if (!anchorRef.current || !placeholderRef.current) return\n\n const placeholderRect = placeholderRef.current.getBoundingClientRect()\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n\n const shouldAffix = placeholderRect.top - containerTop <= affixOffsetTop\n\n if (shouldAffix !== isAffixed) {\n setIsAffixed(shouldAffix)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll()\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [affix, affixOffsetTop, getContainer, isAffixed])\n\n // Scroll spy\n useEffect(() => {\n if (links.length === 0) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n let currentActive = ''\n const containerEl = container === window ? document.documentElement : container as HTMLElement\n const containerTop = container === window\n ? 0\n : containerEl.getBoundingClientRect().top\n\n // Check if scrolled to near the bottom\n const scrollTop = container === window ? window.scrollY : containerEl.scrollTop\n const scrollHeight = containerEl.scrollHeight\n const clientHeight = container === window ? window.innerHeight : containerEl.clientHeight\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - 10\n\n // If near bottom, use the last link\n if (isNearBottom && links.length > 0) {\n currentActive = links[links.length - 1]\n } else {\n // Find the last element that has scrolled past the top (standard scroll spy behavior)\n for (const href of links) {\n const element = document.getElementById(href)\n if (element) {\n const rect = element.getBoundingClientRect()\n const distance = rect.top - containerTop - offsetTop\n\n // If element's top is within bounds of the threshold, it's the current section\n if (distance <= bounds) {\n currentActive = href\n }\n }\n }\n\n // If nothing matched, use the first link\n if (!currentActive && links.length > 0) {\n currentActive = links[0]\n }\n }\n\n if (currentActive && currentActive !== rawActiveLink) {\n if (!isControlled) {\n setInternalActiveLink(currentActive)\n }\n onChange?.(currentActive)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll() // Initial check\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [links, getContainer, offsetTop, bounds, rawActiveLink, isControlled, onChange])\n\n const contextValue: AnchorContextValue = {\n activeLink,\n direction,\n offsetTop,\n registerLink,\n unregisterLink,\n handleClick,\n }\n\n const renderItems = (linkItems: AnchorLinkItem[]): React.ReactNode => {\n return linkItems.map((item) => (\n <AnchorLink key={item.href} href={item.href} title={item.title}>\n {item.children && renderItems(item.children)}\n </AnchorLink>\n ))\n }\n\n const anchorContent = (\n <nav\n ref={anchorRef}\n className={`\n ${direction === 'horizontal' ? 'flex items-center' : 'flex flex-col'}\n ${isAffixed ? 'fixed bg-base-100 shadow-sm z-10' : ''}\n ${className}\n `.trim()}\n style={isAffixed ? { top: affixOffsetTop } : undefined}\n >\n {items ? renderItems(items) : children}\n </nav>\n )\n\n if (affix) {\n return (\n <AnchorContext.Provider value={contextValue}>\n <div ref={placeholderRef} style={isAffixed && anchorRef.current ? { height: anchorRef.current.offsetHeight } : undefined}>\n {anchorContent}\n </div>\n </AnchorContext.Provider>\n )\n }\n\n return (\n <AnchorContext.Provider value={contextValue}>\n {anchorContent}\n </AnchorContext.Provider>\n )\n}\n\nexport const Anchor = Object.assign(AnchorComponent, {\n Link: AnchorLink,\n})\n"],"names":["AnchorContext","createContext","useAnchorContext","context","useContext","AnchorLink","href","title","children","className","activeLink","direction","registerLink","unregisterLink","handleClick","useEffect","isActive","isVertical","jsxs","jsx","e","AnchorComponent","items","offsetTop","bounds","getContainer","getCurrentAnchor","onChange","onClick","controlledActiveLink","affix","affixOffsetTop","replace","internalActiveLink","setInternalActiveLink","useState","links","setLinks","isAffixed","setIsAffixed","anchorRef","useRef","placeholderRef","isControlled","rawActiveLink","useCallback","prev","link","scrollToTarget","target","container","targetTop","containerTop","scrollTop","top","handleScroll","placeholderRect","shouldAffix","currentActive","containerEl","scrollHeight","clientHeight","element","contextValue","renderItems","linkItems","item","anchorContent","Anchor"],"mappings":";;AA8DA,MAAMA,IAAgBC,EAAyC,IAAI,GAE7DC,IAAmB,MAAM;AAC7B,QAAMC,IAAUC,EAAWJ,CAAa;AACxC,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,2CAA2C;AAE7D,SAAOA;AACT,GAEME,IAAwC,CAAC;AAAA,EAC7C,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,YAAAC,GAAY,WAAAC,GAAW,cAAAC,GAAc,gBAAAC,GAAgB,aAAAC,EAAA,IAAgBZ,EAAA;AAE7E,EAAAa,EAAU,OACRH,EAAaN,CAAI,GACV,MAAMO,EAAeP,CAAI,IAC/B,CAACA,GAAMM,GAAcC,CAAc,CAAC;AAEvC,QAAMG,IAAWN,MAAeJ,GAC1BW,IAAaN,MAAc;AAEjC,SACE,gBAAAO,EAAC,OAAA,EAAI,WAAWD,IAAa,KAAK,gBAChC,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,IAAIb,CAAI;AAAA,QACd,SAAS,CAACc,MAAMN,EAAYM,GAAGd,GAAMC,CAAK;AAAA,QAC1C,WAAW;AAAA;AAAA,YAEPU,IAAa,yBAAyB,sBAAsB;AAAA,YAC5DD,IACE,4CACA,8FACJ;AAAA,YACEP,CAAS;AAAA,UACX,KAAA;AAAA,QAED,UAAAF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEFC,KACC,gBAAAW,EAAC,OAAA,EAAI,WAAWF,IAAa,SAAS,eACnC,UAAAT,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,GAEMa,IAAyC,CAAC;AAAA,EAC9C,OAAAC;AAAA,EACA,WAAAX,IAAY;AAAA,EACZ,WAAAY,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,cAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAYC;AAAA,EACZ,OAAAC,IAAQ;AAAA,EACR,gBAAAC,IAAiB;AAAA,EACjB,SAAAC,IAAU;AAAA,EACV,WAAAvB,IAAY;AAAA,EACZ,UAAAD;AACF,MAAM;AACJ,QAAM,CAACyB,GAAoBC,CAAqB,IAAIC,EAAS,EAAE,GACzD,CAACC,GAAOC,CAAQ,IAAIF,EAAmB,CAAA,CAAE,GACzC,CAACG,GAAWC,CAAY,IAAIJ,EAAS,EAAK,GAC1CK,IAAYC,EAAuB,IAAI,GACvCC,IAAiBD,EAAuB,IAAI,GAE5CE,IAAed,MAAyB,QACxCe,IAAgBD,IAAed,IAAuBI,GACtDvB,IAAagB,IAAmBA,EAAiBkB,CAAa,IAAIA,GAElEhC,IAAeiC,EAAY,CAACvC,MAAiB;AACjD,IAAA+B,EAAS,CAACS,MAAUA,EAAK,SAASxC,CAAI,IAAIwC,IAAO,CAAC,GAAGA,GAAMxC,CAAI,CAAE;AAAA,EACnE,GAAG,CAAA,CAAE,GAECO,IAAiBgC,EAAY,CAACvC,MAAiB;AACnD,IAAA+B,EAAS,CAACS,MAASA,EAAK,OAAO,CAACC,MAASA,MAASzC,CAAI,CAAC;AAAA,EACzD,GAAG,CAAA,CAAE,GAEC0C,IAAiBH,EAAY,CAACvC,MAAiB;AACnD,UAAM2C,IAAS,SAAS,eAAe3C,CAAI;AAC3C,QAAI2C,GAAQ;AACV,YAAMC,IAAYzB,SAAoB,QAChC0B,IAAYF,EAAO,sBAAA,EAAwB,KAC3CG,IAAeF,MAAc,SAC/B,IACCA,EAA0B,wBAAwB,KACjDG,IAAYH,MAAc,SAC5B,OAAO,UACNA,EAA0B,WAEzBI,IAAMH,IAAYC,IAAeC,IAAY9B;AAEnD,MAAI2B,MAAc,SAChB,OAAO,SAAS,EAAE,KAAAI,GAAK,UAAU,UAAU,IAE1CJ,EAA0B,SAAS,EAAE,KAAAI,GAAK,UAAU,UAAU,GAI7DtB,IACF,OAAO,QAAQ,aAAa,MAAM,IAAI,IAAI1B,CAAI,EAAE,IAEhD,OAAO,QAAQ,UAAU,MAAM,IAAI,IAAIA,CAAI,EAAE;AAAA,IAEjD;AAAA,EACF,GAAG,CAACmB,GAAcF,GAAWS,CAAO,CAAC,GAE/BlB,IAAc+B,EAAY,CAC9BzB,GACAd,GACAC,MACG;AACH,IAAAa,EAAE,eAAA,GACFQ,IAAUR,GAAG,EAAE,MAAAd,GAAM,OAAAC,EAAA,CAAO,GAC5ByC,EAAe1C,CAAI,GAEdqC,KACHT,EAAsB5B,CAAI,GAE5BqB,IAAWrB,CAAI;AAAA,EACjB,GAAG,CAACsB,GAASoB,GAAgBL,GAAchB,CAAQ,CAAC;AAGpD,EAAAZ,EAAU,MAAM;AACd,QAAI,CAACe,KAAS,CAACU,EAAU,QAAS;AAElC,UAAMU,IAAYzB,SAAoB,QAEhC8B,IAAe,MAAM;AACzB,UAAI,CAACf,EAAU,WAAW,CAACE,EAAe,QAAS;AAEnD,YAAMc,IAAkBd,EAAe,QAAQ,sBAAA,GACzCU,IAAeF,MAAc,SAC/B,IACCA,EAA0B,wBAAwB,KAEjDO,IAAcD,EAAgB,MAAMJ,KAAgBrB;AAE1D,MAAI0B,MAAgBnB,KAClBC,EAAakB,CAAW;AAAA,IAE5B;AAEA,WAAAP,EAAU,iBAAiB,UAAUK,GAAc,EAAE,SAAS,IAAM,GACpEA,EAAA,GAEO,MAAML,EAAU,oBAAoB,UAAUK,CAAY;AAAA,EACnE,GAAG,CAACzB,GAAOC,GAAgBN,GAAca,CAAS,CAAC,GAGnDvB,EAAU,MAAM;AACd,QAAIqB,EAAM,WAAW,EAAG;AAExB,UAAMc,IAAYzB,SAAoB,QAEhC8B,IAAe,MAAM;AACzB,UAAIG,IAAgB;AACpB,YAAMC,IAAcT,MAAc,SAAS,SAAS,kBAAkBA,GAChEE,IAAeF,MAAc,SAC/B,IACAS,EAAY,wBAAwB,KAGlCN,IAAYH,MAAc,SAAS,OAAO,UAAUS,EAAY,WAChEC,IAAeD,EAAY,cAC3BE,IAAeX,MAAc,SAAS,OAAO,cAAcS,EAAY;AAI7E,UAHqBN,IAAYQ,KAAgBD,IAAe,MAG5CxB,EAAM,SAAS;AACjC,QAAAsB,IAAgBtB,EAAMA,EAAM,SAAS,CAAC;AAAA,WACjC;AAEL,mBAAW9B,KAAQ8B,GAAO;AACxB,gBAAM0B,IAAU,SAAS,eAAexD,CAAI;AAC5C,UAAIwD,KACWA,EAAQ,sBAAA,EACC,MAAMV,IAAe7B,KAG3BC,MACdkC,IAAgBpD;AAAA,QAGtB;AAGA,QAAI,CAACoD,KAAiBtB,EAAM,SAAS,MACnCsB,IAAgBtB,EAAM,CAAC;AAAA,MAE3B;AAEA,MAAIsB,KAAiBA,MAAkBd,MAChCD,KACHT,EAAsBwB,CAAa,GAErC/B,IAAW+B,CAAa;AAAA,IAE5B;AAEA,WAAAR,EAAU,iBAAiB,UAAUK,GAAc,EAAE,SAAS,IAAM,GACpEA,EAAA,GAEO,MAAML,EAAU,oBAAoB,UAAUK,CAAY;AAAA,EACnE,GAAG,CAACnB,GAAOX,GAAcF,GAAWC,GAAQoB,GAAeD,GAAchB,CAAQ,CAAC;AAElF,QAAMoC,IAAmC;AAAA,IACvC,YAAArD;AAAA,IACA,WAAAC;AAAA,IACA,WAAAY;AAAA,IACA,cAAAX;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,GAGIkD,IAAc,CAACC,MACZA,EAAU,IAAI,CAACC,wBACnB7D,GAAA,EAA2B,MAAM6D,EAAK,MAAM,OAAOA,EAAK,OACtD,UAAAA,EAAK,YAAYF,EAAYE,EAAK,QAAQ,EAAA,GAD5BA,EAAK,IAEtB,CACD,GAGGC,IACJ,gBAAAhD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKqB;AAAA,MACL,WAAW;AAAA,UACP7B,MAAc,eAAe,sBAAsB,eAAe;AAAA,UAClE2B,IAAY,qCAAqC,EAAE;AAAA,UACnD7B,CAAS;AAAA,QACX,KAAA;AAAA,MACF,OAAO6B,IAAY,EAAE,KAAKP,MAAmB;AAAA,MAE5C,UAAAT,IAAQ0C,EAAY1C,CAAK,IAAId;AAAA,IAAA;AAAA,EAAA;AAIlC,SAAIsB,IAEA,gBAAAX,EAACnB,EAAc,UAAd,EAAuB,OAAO+D,GAC7B,UAAA,gBAAA5C,EAAC,OAAA,EAAI,KAAKuB,GAAgB,OAAOJ,KAAaE,EAAU,UAAU,EAAE,QAAQA,EAAU,QAAQ,aAAA,IAAiB,QAC5G,UAAA2B,EAAA,CACH,EAAA,CACF,sBAKDnE,EAAc,UAAd,EAAuB,OAAO+D,GAC5B,UAAAI,GACH;AAEJ,GAEaC,KAAS,OAAO,OAAO/C,GAAiB;AAAA,EACnD,MAAMhB;AACR,CAAC;"}
package/dist/index51.js CHANGED
@@ -1,150 +1,156 @@
1
- import { jsx as o, jsxs as C } from "react/jsx-runtime";
2
- import { useState as M, useCallback as b, createContext as B, useId as O, useContext as g } from "react";
3
- const v = B(null);
4
- function w() {
5
- const n = g(v);
6
- if (!n)
1
+ import { jsx as l, jsxs as b } from "react/jsx-runtime";
2
+ import { useState as C, useCallback as M, createContext as V, useId as q, useContext as N } from "react";
3
+ const y = V(null);
4
+ function A() {
5
+ const e = N(y);
6
+ if (!e)
7
7
  throw new Error("Menu components must be used within a Menu");
8
- return n;
8
+ return e;
9
9
  }
10
- function D({
11
- children: n,
12
- mode: e = "vertical",
13
- selectedKeys: t,
14
- defaultSelectedKeys: a = [],
15
- openKeys: i,
16
- defaultOpenKeys: f = [],
17
- onSelect: c,
18
- onOpenChange: r,
19
- className: s = "",
20
- ...l
10
+ function j(e, n, s, a, o) {
11
+ return e.divider ? /* @__PURE__ */ l(S, {}, e.key) : e.title ? /* @__PURE__ */ l(K, { children: e.label }, e.key) : e.children && e.children.length > 0 ? /* @__PURE__ */ l(I, { itemKey: e.key, label: e.label, icon: e.icon, disabled: e.disabled, children: e.children.map((i) => j(i)) }, e.key) : /* @__PURE__ */ l(k, { itemKey: e.key, icon: e.icon, disabled: e.disabled, children: e.label }, e.key);
12
+ }
13
+ function F({
14
+ children: e,
15
+ items: n,
16
+ mode: s = "vertical",
17
+ size: a,
18
+ selectedKeys: o,
19
+ defaultSelectedKeys: i = [],
20
+ openKeys: d,
21
+ defaultOpenKeys: m = [],
22
+ onSelect: r,
23
+ onOpenChange: t,
24
+ className: c = "",
25
+ ...p
21
26
  }) {
22
- const [u, d] = M(a), [p, N] = M(f), j = t ?? u, h = i ?? p, I = b(
23
- (m) => {
24
- t === void 0 && d([m]), c?.(m);
27
+ const [x, v] = C(i), [f, T] = C(m), O = o ?? x, h = d ?? f, B = M(
28
+ (u) => {
29
+ o === void 0 && v([u]), r?.(u);
25
30
  },
26
- [t, c]
27
- ), S = b(
28
- (m) => {
29
- const x = h.includes(m) ? h.filter((y) => y !== m) : [...h, m];
30
- i === void 0 && N(x), r?.(x);
31
+ [o, r]
32
+ ), w = M(
33
+ (u) => {
34
+ const g = h.includes(u) ? h.filter((R) => R !== u) : [...h, u];
35
+ d === void 0 && T(g), t?.(g);
31
36
  },
32
- [h, i, r]
33
- ), T = ["menu", {
34
- vertical: "",
37
+ [h, d, t]
38
+ ), D = {
39
+ vertical: "menu-vertical",
35
40
  horizontal: "menu-horizontal",
36
- inline: ""
37
- }[e], s].filter(Boolean).join(" ");
38
- return /* @__PURE__ */ o(
39
- v.Provider,
40
- {
41
- value: {
42
- mode: e,
43
- selectedKeys: j,
44
- openKeys: h,
45
- onSelect: I,
46
- onToggleOpen: S
47
- },
48
- children: /* @__PURE__ */ o("ul", { className: T, ...l, children: n })
49
- }
50
- );
41
+ inline: "menu-vertical"
42
+ }, z = {
43
+ xs: "menu-xs",
44
+ sm: "menu-sm",
45
+ md: "menu-md",
46
+ lg: "menu-lg",
47
+ xl: "menu-xl"
48
+ }, E = ["menu", D[s], a && z[a], c].filter(Boolean).join(" "), L = {
49
+ mode: s,
50
+ selectedKeys: O,
51
+ openKeys: h,
52
+ onSelect: B,
53
+ onToggleOpen: w
54
+ }, P = n && n.length > 0 ? n.map((u) => j(u)) : e;
55
+ return /* @__PURE__ */ l(y.Provider, { value: L, children: /* @__PURE__ */ l("ul", { className: E, ...p, children: P }) });
51
56
  }
52
- function K({
53
- children: n,
54
- itemKey: e,
55
- icon: t,
57
+ function k({
58
+ children: e,
59
+ itemKey: n,
60
+ icon: s,
56
61
  disabled: a = !1,
57
- onClick: i,
58
- active: f,
59
- className: c = "",
60
- ...r
62
+ onClick: o,
63
+ active: i,
64
+ className: d = "",
65
+ ...m
61
66
  }) {
62
- const s = g(v), l = e && s ? s.selectedKeys.includes(e) : f, u = () => {
63
- a || (e && s && s.onSelect(e), i?.());
64
- }, d = [
65
- l && "active bg-primary text-primary-content",
67
+ const r = N(y), t = n && r ? r.selectedKeys.includes(n) : i, c = () => {
68
+ a || (n && r && r.onSelect(n), o?.());
69
+ }, p = [
70
+ t && "active bg-primary text-primary-content",
66
71
  a && "disabled",
67
- c
72
+ d
68
73
  ].filter(Boolean).join(" ");
69
- return /* @__PURE__ */ o("li", { children: /* @__PURE__ */ C(
74
+ return /* @__PURE__ */ l("li", { children: /* @__PURE__ */ b(
70
75
  "a",
71
76
  {
72
- className: d,
73
- onClick: u,
77
+ className: p,
78
+ onClick: c,
74
79
  "aria-disabled": a,
75
80
  role: "menuitem",
76
- "data-state": l ? "active" : "inactive",
77
- ...r,
81
+ "data-state": t ? "active" : "inactive",
82
+ ...m,
78
83
  children: [
79
- t && /* @__PURE__ */ o("span", { className: "menu-icon", children: t }),
80
- n
84
+ s && /* @__PURE__ */ l("span", { className: "menu-icon", children: s }),
85
+ e
81
86
  ]
82
87
  }
83
88
  ) });
84
89
  }
85
- function k({
86
- children: n,
87
- itemKey: e,
88
- label: t,
89
- icon: a,
90
+ function I({
91
+ children: e,
92
+ itemKey: n,
93
+ label: s,
94
+ title: a,
95
+ icon: o,
90
96
  disabled: i = !1,
91
- className: f = "",
92
- ...c
97
+ className: d = "",
98
+ ...m
93
99
  }) {
94
- const r = w(), s = r.openKeys.includes(e), l = O(), u = () => {
95
- i || r.onToggleOpen(e);
96
- }, d = [i && "disabled", f].filter(Boolean).join(" ");
97
- return r.mode === "inline" ? /* @__PURE__ */ o("li", { className: d, "data-state": s ? "open" : "closed", ...c, children: /* @__PURE__ */ C("details", { open: s, children: [
98
- /* @__PURE__ */ C(
100
+ const r = A(), t = r.openKeys.includes(n), c = q(), p = s ?? a, x = () => {
101
+ i || r.onToggleOpen(n);
102
+ }, v = [i && "disabled", d].filter(Boolean).join(" ");
103
+ return r.mode === "inline" ? /* @__PURE__ */ l("li", { className: v, "data-state": t ? "open" : "closed", ...m, children: /* @__PURE__ */ b("details", { open: t, children: [
104
+ /* @__PURE__ */ b(
99
105
  "summary",
100
106
  {
101
- onClick: (p) => {
102
- p.preventDefault(), u();
107
+ onClick: (f) => {
108
+ f.preventDefault(), x();
103
109
  },
104
- "aria-expanded": s,
105
- "aria-controls": l,
110
+ "aria-expanded": t,
111
+ "aria-controls": c,
106
112
  "aria-disabled": i,
107
113
  children: [
108
- a && /* @__PURE__ */ o("span", { className: "menu-icon", children: a }),
109
- t
114
+ o && /* @__PURE__ */ l("span", { className: "menu-icon", children: o }),
115
+ p
110
116
  ]
111
117
  }
112
118
  ),
113
- /* @__PURE__ */ o("ul", { id: l, role: "menu", children: n })
114
- ] }) }) : /* @__PURE__ */ o("li", { className: d, "data-state": s ? "open" : "closed", ...c, children: /* @__PURE__ */ C("details", { open: s, children: [
115
- /* @__PURE__ */ C(
119
+ /* @__PURE__ */ l("ul", { id: c, role: "menu", children: e })
120
+ ] }) }) : /* @__PURE__ */ l("li", { className: v, "data-state": t ? "open" : "closed", ...m, children: /* @__PURE__ */ b("details", { open: t, children: [
121
+ /* @__PURE__ */ b(
116
122
  "summary",
117
123
  {
118
- onClick: (p) => {
119
- p.preventDefault(), u();
124
+ onClick: (f) => {
125
+ f.preventDefault(), x();
120
126
  },
121
- "aria-expanded": s,
122
- "aria-controls": l,
127
+ "aria-expanded": t,
128
+ "aria-controls": c,
123
129
  "aria-disabled": i,
124
130
  children: [
125
- a && /* @__PURE__ */ o("span", { className: "menu-icon", children: a }),
126
- t
131
+ o && /* @__PURE__ */ l("span", { className: "menu-icon", children: o }),
132
+ p
127
133
  ]
128
134
  }
129
135
  ),
130
- /* @__PURE__ */ o("ul", { id: l, role: "menu", children: n })
136
+ /* @__PURE__ */ l("ul", { id: c, role: "menu", children: e })
131
137
  ] }) });
132
138
  }
133
- function z({ children: n, className: e = "", ...t }) {
134
- const a = ["menu-title", e].filter(Boolean).join(" ");
135
- return /* @__PURE__ */ o("li", { className: a, ...t, children: n });
139
+ function K({ children: e, className: n = "", ...s }) {
140
+ const a = ["menu-title", n].filter(Boolean).join(" ");
141
+ return /* @__PURE__ */ l("li", { className: a, ...s, children: e });
136
142
  }
137
- function E({ className: n = "", ...e }) {
138
- const t = ["border-t border-base-300 my-1", n].filter(Boolean).join(" ");
139
- return /* @__PURE__ */ o("li", { className: t, role: "separator", ...e });
143
+ function S({ className: e = "", ...n }) {
144
+ const s = ["border-t border-base-300 my-1", e].filter(Boolean).join(" ");
145
+ return /* @__PURE__ */ l("li", { className: s, role: "separator", ...n });
140
146
  }
141
- const A = Object.assign(D, {
142
- Item: K,
143
- SubMenu: k,
144
- Title: z,
145
- Divider: E
147
+ const J = Object.assign(F, {
148
+ Item: k,
149
+ SubMenu: I,
150
+ Title: K,
151
+ Divider: S
146
152
  });
147
153
  export {
148
- A as Menu
154
+ J as Menu
149
155
  };
150
156
  //# sourceMappingURL=index51.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index51.js","sources":["../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n children: React.ReactNode\n mode?: MenuMode\n selectedKeys?: string[]\n defaultSelectedKeys?: string[]\n openKeys?: string[]\n defaultOpenKeys?: string[]\n onSelect?: (key: string) => void\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n itemKey?: string\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use itemKey and selectedKeys instead */\n active?: boolean\n}\n\nexport interface MenuSubMenuProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n itemKey: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\nfunction MenuRoot({\n children,\n mode = 'vertical',\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: '',\n horizontal: 'menu-horizontal',\n inline: '',\n }\n\n const menuClasses = ['menu', modeClasses[mode], className].filter(Boolean).join(' ')\n\n return (\n <MenuContext.Provider\n value={{\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }}\n >\n <ul className={menuClasses} {...rest}>{children}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n itemKey,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = itemKey && context ? context.selectedKeys.includes(itemKey) : active\n\n const handleClick = () => {\n if (disabled) return\n if (itemKey && context) {\n context.onSelect(itemKey)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n itemKey,\n label,\n icon,\n disabled = false,\n className = '',\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = context.openKeys.includes(itemKey)\n const submenuId = useId()\n\n const handleToggle = () => {\n if (disabled) return\n context.onToggleOpen(itemKey)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {label}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {label}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = ['menu-title', className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["MenuContext","createContext","useMenuContext","context","useContext","MenuRoot","children","mode","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onSelect","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","selectedKeys","openKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","menuClasses","jsx","MenuItem","itemKey","icon","disabled","onClick","active","isSelected","handleClick","itemClasses","jsxs","MenuSubMenu","label","isOpen","submenuId","useId","handleToggle","submenuClasses","e","MenuTitle","titleClasses","MenuDivider","dividerClasses","Menu"],"mappings":"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"}
1
+ {"version":3,"file":"index51.js","sources":["../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\nexport type MenuSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface MenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n children?: MenuItem[]\n divider?: boolean\n title?: boolean // For section titles\n}\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Menu items (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: MenuItem[]\n /** Menu display mode */\n mode?: MenuMode\n /** Menu size */\n size?: MenuSize\n /** Controlled selected keys */\n selectedKeys?: string[]\n /** Default selected keys (uncontrolled) */\n defaultSelectedKeys?: string[]\n /** Controlled open submenu keys */\n openKeys?: string[]\n /** Default open submenu keys (uncontrolled) */\n defaultOpenKeys?: string[]\n /** Callback when item is selected */\n onSelect?: (key: string) => void\n /** Callback when submenu open state changes */\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n itemKey?: string\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use itemKey and selectedKeys instead */\n active?: boolean\n}\n\nexport interface MenuSubMenuProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n itemKey: string\n /** Submenu label */\n label?: React.ReactNode\n /** Submenu title (alias for label) */\n title?: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\n// Internal component for rendering data-driven menu items\nfunction renderMenuItem(item: MenuItem, onSelect: (key: string) => void, selectedKeys: string[], openKeys: string[], onToggleOpen: (key: string) => void): React.ReactNode {\n if (item.divider) {\n return <MenuDivider key={item.key} />\n }\n\n if (item.title) {\n return <MenuTitle key={item.key}>{item.label}</MenuTitle>\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <MenuSubMenu key={item.key} itemKey={item.key} label={item.label} icon={item.icon} disabled={item.disabled}>\n {item.children.map((child) => renderMenuItem(child, onSelect, selectedKeys, openKeys, onToggleOpen))}\n </MenuSubMenu>\n )\n }\n\n return (\n <MenuItem key={item.key} itemKey={item.key} icon={item.icon} disabled={item.disabled}>\n {item.label}\n </MenuItem>\n )\n}\n\nfunction MenuRoot({\n children,\n items,\n mode = 'vertical',\n size,\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: 'menu-vertical',\n horizontal: 'menu-horizontal',\n inline: 'menu-vertical',\n }\n\n const sizeClasses: Record<MenuSize, string> = {\n xs: 'menu-xs',\n sm: 'menu-sm',\n md: 'menu-md',\n lg: 'menu-lg',\n xl: 'menu-xl',\n }\n\n const menuClasses = ['menu', modeClasses[mode], size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n const contextValue = {\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }\n\n // Render data-driven items if provided\n const content = items && items.length > 0\n ? items.map((item) => renderMenuItem(item, handleSelect, selectedKeys, openKeys, handleToggleOpen))\n : children\n\n return (\n <MenuContext.Provider value={contextValue}>\n <ul className={menuClasses} {...rest}>{content}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n itemKey,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = itemKey && context ? context.selectedKeys.includes(itemKey) : active\n\n const handleClick = () => {\n if (disabled) return\n if (itemKey && context) {\n context.onSelect(itemKey)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n itemKey,\n label,\n title,\n icon,\n disabled = false,\n className = '',\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = context.openKeys.includes(itemKey)\n const submenuId = useId()\n\n // Support both label and title (title as alias for backwards compatibility)\n const displayLabel = label ?? title\n\n const handleToggle = () => {\n if (disabled) return\n context.onToggleOpen(itemKey)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = ['menu-title', className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["MenuContext","createContext","useMenuContext","context","useContext","renderMenuItem","item","onSelect","selectedKeys","openKeys","onToggleOpen","jsx","MenuDivider","MenuTitle","MenuSubMenu","child","MenuItem","MenuRoot","children","items","mode","size","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","modeClasses","sizeClasses","menuClasses","contextValue","content","itemKey","icon","disabled","onClick","active","isSelected","handleClick","itemClasses","jsxs","label","title","isOpen","submenuId","useId","displayLabel","handleToggle","submenuClasses","e","titleClasses","dividerClasses","Menu"],"mappings":";;AAyEA,MAAMA,IAAcC,EAAuC,IAAI;AAE/D,SAASC,IAAiB;AACxB,QAAMC,IAAUC,EAAWJ,CAAW;AACtC,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,4CAA4C;AAE9D,SAAOA;AACT;AAGA,SAASE,EAAeC,GAAgBC,GAAiCC,GAAwBC,GAAoBC,GAAsD;AACzK,SAAIJ,EAAK,UACA,gBAAAK,EAACC,GAAA,IAAiBN,EAAK,GAAK,IAGjCA,EAAK,QACA,gBAAAK,EAACE,GAAA,EAA0B,UAAAP,EAAK,MAAA,GAAhBA,EAAK,GAAiB,IAG3CA,EAAK,YAAYA,EAAK,SAAS,SAAS,IAExC,gBAAAK,EAACG,GAAA,EAA2B,SAASR,EAAK,KAAK,OAAOA,EAAK,OAAO,MAAMA,EAAK,MAAM,UAAUA,EAAK,UAC/F,UAAAA,EAAK,SAAS,IAAI,CAACS,MAAUV,EAAeU,CAAqD,CAAC,KADnFT,EAAK,GAEvB,IAKF,gBAAAK,EAACK,GAAA,EAAwB,SAASV,EAAK,KAAK,MAAMA,EAAK,MAAM,UAAUA,EAAK,UACzE,UAAAA,EAAK,MAAA,GADOA,EAAK,GAEpB;AAEJ;AAEA,SAASW,EAAS;AAAA,EAChB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,cAAcC;AAAA,EACd,qBAAAC,IAAsB,CAAA;AAAA,EACtB,UAAUC;AAAA,EACV,iBAAAC,IAAkB,CAAA;AAAA,EAClB,UAAAlB;AAAA,EACA,cAAAmB;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAc;AACZ,QAAM,CAACC,GAAsBC,CAAuB,IAAIC,EAAmBR,CAAmB,GACxF,CAACS,GAAkBC,CAAmB,IAAIF,EAAmBN,CAAe,GAE5EjB,IAAec,KAA0BO,GACzCpB,IAAWe,KAAsBQ,GAEjCE,IAAeC;AAAA,IACnB,CAACC,MAAgB;AACf,MAAId,MAA2B,UAC7BQ,EAAwB,CAACM,CAAG,CAAC,GAE/B7B,IAAW6B,CAAG;AAAA,IAChB;AAAA,IACA,CAACd,GAAwBf,CAAQ;AAAA,EAAA,GAG7B8B,IAAmBF;AAAA,IACvB,CAACC,MAAgB;AACf,YAAME,IAAc7B,EAAS,SAAS2B,CAAG,IACrC3B,EAAS,OAAO,CAAC8B,MAAMA,MAAMH,CAAG,IAChC,CAAC,GAAG3B,GAAU2B,CAAG;AAErB,MAAIZ,MAAuB,UACzBS,EAAoBK,CAAW,GAEjCZ,IAAeY,CAAW;AAAA,IAC5B;AAAA,IACA,CAAC7B,GAAUe,GAAoBE,CAAY;AAAA,EAAA,GAGvCc,IAAwC;AAAA,IAC5C,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,EAAA,GAGJC,IAAwC;AAAA,IAC5C,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAc,CAAC,QAAQF,EAAYpB,CAAI,GAAGC,KAAQoB,EAAYpB,CAAI,GAAGM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAExGgB,IAAe;AAAA,IACnB,MAAAvB;AAAA,IACA,cAAAZ;AAAA,IACA,UAAAC;AAAA,IACA,UAAUyB;AAAA,IACV,cAAcG;AAAA,EAAA,GAIVO,IAAUzB,KAASA,EAAM,SAAS,IACpCA,EAAM,IAAI,CAACb,MAASD,EAAeC,CAA4D,CAAC,IAChGY;AAEJ,SACE,gBAAAP,EAACX,EAAY,UAAZ,EAAqB,OAAO2C,GAC3B,UAAA,gBAAAhC,EAAC,MAAA,EAAG,WAAW+B,GAAc,GAAGd,GAAO,aAAQ,GACjD;AAEJ;AAEA,SAASZ,EAAS;AAAA,EAChB,UAAAE;AAAA,EACA,SAAA2B;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAtB,IAAY;AAAA,EACZ,GAAGC;AACL,GAAkB;AAChB,QAAMzB,IAAUC,EAAWJ,CAAW,GAGhCkD,IAAaL,KAAW1C,IAAUA,EAAQ,aAAa,SAAS0C,CAAO,IAAII,GAE3EE,IAAc,MAAM;AACxB,IAAIJ,MACAF,KAAW1C,KACbA,EAAQ,SAAS0C,CAAO,GAE1BG,IAAA;AAAA,EACF,GAEMI,IAAc;AAAA,IAClBF,KAAc;AAAA,IACdH,KAAY;AAAA,IACZpB;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,MAAA,EACC,UAAA,gBAAA0B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD;AAAA,MACX,SAASD;AAAA,MACT,iBAAeJ;AAAA,MACf,MAAK;AAAA,MACL,cAAYG,IAAa,WAAW;AAAA,MACnC,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAAkB,KAAQ,gBAAAnC,EAAC,QAAA,EAAK,WAAU,aAAa,UAAAmC,GAAK;AAAA,QAC1C5B;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,SAASJ,EAAY;AAAA,EACnB,UAAAI;AAAA,EACA,SAAA2B;AAAA,EACA,OAAAS;AAAA,EACA,OAAAC;AAAA,EACA,MAAAT;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAApB,IAAY;AAAA,EACZ,GAAGC;AACL,GAAqB;AACnB,QAAMzB,IAAUD,EAAA,GACVsD,IAASrD,EAAQ,SAAS,SAAS0C,CAAO,GAC1CY,IAAYC,EAAA,GAGZC,IAAeL,KAASC,GAExBK,IAAe,MAAM;AACzB,IAAIb,KACJ5C,EAAQ,aAAa0C,CAAO;AAAA,EAC9B,GAEMgB,IAAiB,CAACd,KAAY,YAAYpB,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGnF,SAAIxB,EAAQ,SAAS,WAEjB,gBAAAQ,EAAC,MAAA,EAAG,WAAWkD,GAAgB,cAAYL,IAAS,SAAS,UAAW,GAAG5B,GACzE,UAAA,gBAAAyB,EAAC,WAAA,EAAQ,MAAMG,GACb,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAACS,MAAM;AACd,UAAAA,EAAE,eAAA,GACFF,EAAA;AAAA,QACF;AAAA,QACA,iBAAeJ;AAAA,QACf,iBAAeC;AAAA,QACf,iBAAeV;AAAA,QAEd,UAAA;AAAA,UAAAD,KAAQ,gBAAAnC,EAAC,QAAA,EAAK,WAAU,aAAa,UAAAmC,GAAK;AAAA,UAC1Ca;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEF,MAAA,EAAG,IAAIF,GAAW,MAAK,QACrB,UAAAvC,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF,IAMF,gBAAAP,EAAC,MAAA,EAAG,WAAWkD,GAAgB,cAAYL,IAAS,SAAS,UAAW,GAAG5B,GACzE,UAAA,gBAAAyB,EAAC,WAAA,EAAQ,MAAMG,GACb,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAACS,MAAM;AACd,UAAAA,EAAE,eAAA,GACFF,EAAA;AAAA,QACF;AAAA,QACA,iBAAeJ;AAAA,QACf,iBAAeC;AAAA,QACf,iBAAeV;AAAA,QAEd,UAAA;AAAA,UAAAD,KAAQ,gBAAAnC,EAAC,QAAA,EAAK,WAAU,aAAa,UAAAmC,GAAK;AAAA,UAC1Ca;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEF,MAAA,EAAG,IAAIF,GAAW,MAAK,QACrB,UAAAvC,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEA,SAASL,EAAU,EAAE,UAAAK,GAAU,WAAAS,IAAY,IAAI,GAAGC,KAAwB;AACxE,QAAMmC,IAAe,CAAC,cAAcpC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEvE,2BAAQ,MAAA,EAAG,WAAWoC,GAAe,GAAGnC,GAAO,UAAAV,GAAS;AAC1D;AAEA,SAASN,EAAY,EAAE,WAAAe,IAAY,IAAI,GAAGC,KAA0B;AAClE,QAAMoC,IAAiB,CAAC,iCAAiCrC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE5F,2BAAQ,MAAA,EAAG,WAAWqC,GAAgB,MAAK,aAAa,GAAGpC,GAAM;AACnE;AAEO,MAAMqC,IAAO,OAAO,OAAOhD,GAAU;AAAA,EAC1C,MAAMD;AAAA,EACN,SAASF;AAAA,EACT,OAAOD;AAAA,EACP,SAASD;AACX,CAAC;"}