asterui 0.12.1 → 0.12.3

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 (273) hide show
  1. package/dist/components/Checkbox.d.ts +10 -0
  2. package/dist/components/Dock.d.ts +38 -0
  3. package/dist/components/Mask.d.ts +14 -0
  4. package/dist/index.d.ts +5 -1
  5. package/dist/index.js +173 -169
  6. package/dist/index.js.map +1 -1
  7. package/dist/index10.js +85 -59
  8. package/dist/index10.js.map +1 -1
  9. package/dist/index100.js +12 -7
  10. package/dist/index100.js.map +1 -1
  11. package/dist/index101.js +13 -11
  12. package/dist/index101.js.map +1 -1
  13. package/dist/index102.js +7 -30
  14. package/dist/index102.js.map +1 -1
  15. package/dist/index103.js +11 -16
  16. package/dist/index103.js.map +1 -1
  17. package/dist/index104.js +30 -10792
  18. package/dist/index104.js.map +1 -1
  19. package/dist/index105.js +18 -5
  20. package/dist/index105.js.map +1 -1
  21. package/dist/index15.js +3 -3
  22. package/dist/index21.js +1 -1
  23. package/dist/index24.js +43 -32
  24. package/dist/index24.js.map +1 -1
  25. package/dist/index25.js +32 -41
  26. package/dist/index25.js.map +1 -1
  27. package/dist/index26.js +41 -12
  28. package/dist/index26.js.map +1 -1
  29. package/dist/index27.js +12 -33
  30. package/dist/index27.js.map +1 -1
  31. package/dist/index28.js +33 -63
  32. package/dist/index28.js.map +1 -1
  33. package/dist/index29.js +60 -77
  34. package/dist/index29.js.map +1 -1
  35. package/dist/index30.js +80 -18
  36. package/dist/index30.js.map +1 -1
  37. package/dist/index31.js +15 -217
  38. package/dist/index31.js.map +1 -1
  39. package/dist/index32.js +216 -1078
  40. package/dist/index32.js.map +1 -1
  41. package/dist/index33.js +1081 -17
  42. package/dist/index33.js.map +1 -1
  43. package/dist/index34.js +17 -121
  44. package/dist/index34.js.map +1 -1
  45. package/dist/index35.js +119 -37
  46. package/dist/index35.js.map +1 -1
  47. package/dist/index36.js +31 -182
  48. package/dist/index36.js.map +1 -1
  49. package/dist/index37.js +191 -97
  50. package/dist/index37.js.map +1 -1
  51. package/dist/index38.js +93 -158
  52. package/dist/index38.js.map +1 -1
  53. package/dist/index39.js +155 -139
  54. package/dist/index39.js.map +1 -1
  55. package/dist/index40.js +146 -15
  56. package/dist/index40.js.map +1 -1
  57. package/dist/index41.js +14 -17
  58. package/dist/index41.js.map +1 -1
  59. package/dist/index42.js +18 -21
  60. package/dist/index42.js.map +1 -1
  61. package/dist/index43.js +18 -116
  62. package/dist/index43.js.map +1 -1
  63. package/dist/index44.js +116 -10
  64. package/dist/index44.js.map +1 -1
  65. package/dist/index45.js +13 -35
  66. package/dist/index45.js.map +1 -1
  67. package/dist/index46.js +33 -114
  68. package/dist/index46.js.map +1 -1
  69. package/dist/index47.js +10 -176
  70. package/dist/index47.js.map +1 -1
  71. package/dist/index48.js +114 -145
  72. package/dist/index48.js.map +1 -1
  73. package/dist/index49.js +176 -12
  74. package/dist/index49.js.map +1 -1
  75. package/dist/index50.js +146 -21
  76. package/dist/index50.js.map +1 -1
  77. package/dist/index51.js +12 -14
  78. package/dist/index51.js.map +1 -1
  79. package/dist/index52.js +20 -5
  80. package/dist/index52.js.map +1 -1
  81. package/dist/index53.js +14 -266
  82. package/dist/index53.js.map +1 -1
  83. package/dist/index54.js +7 -17
  84. package/dist/index54.js.map +1 -1
  85. package/dist/index55.js +257 -113
  86. package/dist/index55.js.map +1 -1
  87. package/dist/index56.js +17 -110
  88. package/dist/index56.js.map +1 -1
  89. package/dist/index57.js +121 -169
  90. package/dist/index57.js.map +1 -1
  91. package/dist/index58.js +110 -32
  92. package/dist/index58.js.map +1 -1
  93. package/dist/index59.js +163 -115
  94. package/dist/index59.js.map +1 -1
  95. package/dist/index60.js +30 -84
  96. package/dist/index60.js.map +1 -1
  97. package/dist/index61.js +121 -19
  98. package/dist/index61.js.map +1 -1
  99. package/dist/index62.js +81 -69
  100. package/dist/index62.js.map +1 -1
  101. package/dist/index63.js +19 -56
  102. package/dist/index63.js.map +1 -1
  103. package/dist/index64.js +72 -43
  104. package/dist/index64.js.map +1 -1
  105. package/dist/index65.js +54 -49
  106. package/dist/index65.js.map +1 -1
  107. package/dist/index66.js +41 -58
  108. package/dist/index66.js.map +1 -1
  109. package/dist/index67.js +50 -105
  110. package/dist/index67.js.map +1 -1
  111. package/dist/index68.js +62 -41
  112. package/dist/index68.js.map +1 -1
  113. package/dist/index69.js +99 -60
  114. package/dist/index69.js.map +1 -1
  115. package/dist/index70.js +41 -21
  116. package/dist/index70.js.map +1 -1
  117. package/dist/index71.js +66 -44
  118. package/dist/index71.js.map +1 -1
  119. package/dist/index72.js +19 -132
  120. package/dist/index72.js.map +1 -1
  121. package/dist/index73.js +40 -46
  122. package/dist/index73.js.map +1 -1
  123. package/dist/index74.js +134 -22
  124. package/dist/index74.js.map +1 -1
  125. package/dist/index75.js +50 -29
  126. package/dist/index75.js.map +1 -1
  127. package/dist/index76.js +19 -19
  128. package/dist/index76.js.map +1 -1
  129. package/dist/index77.js +31 -329
  130. package/dist/index77.js.map +1 -1
  131. package/dist/index78.js +19 -53
  132. package/dist/index78.js.map +1 -1
  133. package/dist/index79.js +328 -39
  134. package/dist/index79.js.map +1 -1
  135. package/dist/index80.js +56 -23
  136. package/dist/index80.js.map +1 -1
  137. package/dist/index81.js +40 -95
  138. package/dist/index81.js.map +1 -1
  139. package/dist/index82.js +22 -129
  140. package/dist/index82.js.map +1 -1
  141. package/dist/index83.js +86 -152
  142. package/dist/index83.js.map +1 -1
  143. package/dist/index84.js +125 -60
  144. package/dist/index84.js.map +1 -1
  145. package/dist/index85.js +160 -34
  146. package/dist/index85.js.map +1 -1
  147. package/dist/index86.js +65 -234
  148. package/dist/index86.js.map +1 -1
  149. package/dist/index87.js +35 -34
  150. package/dist/index87.js.map +1 -1
  151. package/dist/index88.js +222 -198
  152. package/dist/index88.js.map +1 -1
  153. package/dist/index89.js +34 -213
  154. package/dist/index89.js.map +1 -1
  155. package/dist/index90.js +190 -275
  156. package/dist/index90.js.map +1 -1
  157. package/dist/index91.js +202 -167
  158. package/dist/index91.js.map +1 -1
  159. package/dist/index92.js +263 -226
  160. package/dist/index92.js.map +1 -1
  161. package/dist/index93.js +176 -12
  162. package/dist/index93.js.map +1 -1
  163. package/dist/index94.js +257 -32
  164. package/dist/index94.js.map +1 -1
  165. package/dist/index95.js +13 -5
  166. package/dist/index95.js.map +1 -1
  167. package/dist/index96.js +31 -12
  168. package/dist/index96.js.map +1 -1
  169. package/dist/index97.js +5 -45
  170. package/dist/index97.js.map +1 -1
  171. package/dist/index98.js +13 -12
  172. package/dist/index98.js.map +1 -1
  173. package/dist/index99.js +44 -13
  174. package/dist/index99.js.map +1 -1
  175. package/package.json +11 -4
  176. package/dist/index106.js +0 -45
  177. package/dist/index106.js.map +0 -1
  178. package/dist/index107.js +0 -5
  179. package/dist/index107.js.map +0 -1
  180. package/dist/index108.js +0 -10
  181. package/dist/index108.js.map +0 -1
  182. package/dist/index109.js +0 -155
  183. package/dist/index109.js.map +0 -1
  184. package/dist/index110.js +0 -33
  185. package/dist/index110.js.map +0 -1
  186. package/dist/index111.js +0 -33
  187. package/dist/index111.js.map +0 -1
  188. package/dist/index112.js +0 -5
  189. package/dist/index112.js.map +0 -1
  190. package/dist/index113.js +0 -75
  191. package/dist/index113.js.map +0 -1
  192. package/dist/index114.js +0 -42
  193. package/dist/index114.js.map +0 -1
  194. package/dist/index115.js +0 -29
  195. package/dist/index115.js.map +0 -1
  196. package/dist/index116.js +0 -24
  197. package/dist/index116.js.map +0 -1
  198. package/dist/index117.js +0 -27
  199. package/dist/index117.js.map +0 -1
  200. package/dist/index118.js +0 -23
  201. package/dist/index118.js.map +0 -1
  202. package/dist/index119.js +0 -103
  203. package/dist/index119.js.map +0 -1
  204. package/dist/index120.js +0 -363
  205. package/dist/index120.js.map +0 -1
  206. package/dist/index121.js +0 -28
  207. package/dist/index121.js.map +0 -1
  208. package/dist/index122.js +0 -76
  209. package/dist/index122.js.map +0 -1
  210. package/dist/index123.js +0 -19
  211. package/dist/index123.js.map +0 -1
  212. package/dist/index124.js +0 -69
  213. package/dist/index124.js.map +0 -1
  214. package/dist/index125.js +0 -147
  215. package/dist/index125.js.map +0 -1
  216. package/dist/index126.js +0 -5
  217. package/dist/index126.js.map +0 -1
  218. package/dist/index127.js +0 -59
  219. package/dist/index127.js.map +0 -1
  220. package/dist/index128.js +0 -5
  221. package/dist/index128.js.map +0 -1
  222. package/dist/index129.js +0 -5
  223. package/dist/index129.js.map +0 -1
  224. package/dist/index130.js +0 -5
  225. package/dist/index130.js.map +0 -1
  226. package/dist/index131.js +0 -5
  227. package/dist/index131.js.map +0 -1
  228. package/dist/index132.js +0 -5
  229. package/dist/index132.js.map +0 -1
  230. package/dist/index133.js +0 -5
  231. package/dist/index133.js.map +0 -1
  232. package/dist/index134.js +0 -5
  233. package/dist/index134.js.map +0 -1
  234. package/dist/index135.js +0 -5
  235. package/dist/index135.js.map +0 -1
  236. package/dist/index136.js +0 -35
  237. package/dist/index136.js.map +0 -1
  238. package/dist/index137.js +0 -5
  239. package/dist/index137.js.map +0 -1
  240. package/dist/index138.js +0 -11
  241. package/dist/index138.js.map +0 -1
  242. package/dist/index139.js +0 -5
  243. package/dist/index139.js.map +0 -1
  244. package/dist/index140.js +0 -5
  245. package/dist/index140.js.map +0 -1
  246. package/dist/index141.js +0 -24
  247. package/dist/index141.js.map +0 -1
  248. package/dist/index142.js +0 -5
  249. package/dist/index142.js.map +0 -1
  250. package/dist/index143.js +0 -27
  251. package/dist/index143.js.map +0 -1
  252. package/dist/index144.js +0 -74
  253. package/dist/index144.js.map +0 -1
  254. package/dist/index145.js +0 -24
  255. package/dist/index145.js.map +0 -1
  256. package/dist/index146.js +0 -37
  257. package/dist/index146.js.map +0 -1
  258. package/dist/index147.js +0 -73
  259. package/dist/index147.js.map +0 -1
  260. package/dist/index148.js +0 -5
  261. package/dist/index148.js.map +0 -1
  262. package/dist/index149.js +0 -25
  263. package/dist/index149.js.map +0 -1
  264. package/dist/index150.js +0 -5
  265. package/dist/index150.js.map +0 -1
  266. package/dist/index151.js +0 -5
  267. package/dist/index151.js.map +0 -1
  268. package/dist/index152.js +0 -5
  269. package/dist/index152.js.map +0 -1
  270. package/dist/index153.js +0 -5
  271. package/dist/index153.js.map +0 -1
  272. package/dist/index154.js +0 -7
  273. package/dist/index154.js.map +0 -1
package/dist/index36.js CHANGED
@@ -1,194 +1,43 @@
1
- import { jsx as p } from "react/jsx-runtime";
2
- import b, { useId as O, useState as y, useRef as x, useCallback as B, useEffect as k, createContext as R, useContext as F } from "react";
3
- const A = R(void 0);
4
- function v() {
5
- const t = F(A);
6
- if (!t)
7
- throw new Error("Dropdown compound components must be used within Dropdown");
8
- return t;
9
- }
10
- function M({
11
- children: t,
12
- hover: i = !1,
13
- position: u = "bottom",
14
- align: o = "start",
1
+ import { jsxs as p, jsx as m } from "react/jsx-runtime";
2
+ import b from "react";
3
+ const j = ({
4
+ position: r = "top-end",
5
+ children: s,
15
6
  className: c = "",
16
- ...d
17
- }) {
18
- const n = O(), s = O(), [a, l] = y(!1), [r, I] = y(-1), [m, C] = y(0), e = x(/* @__PURE__ */ new Map()), f = x(null), w = B((D, h, j) => {
19
- h ? e.current.set(D, { ref: h, disabled: j }) : e.current.delete(D);
20
- }, []);
21
- k(() => {
22
- const D = (h) => {
23
- f.current && !f.current.contains(h.target) && (l(!1), I(-1));
24
- };
25
- if (a)
26
- return document.addEventListener("mousedown", D), () => document.removeEventListener("mousedown", D);
27
- }, [a]);
28
- const g = {
29
- top: "dropdown-top",
30
- bottom: "dropdown-bottom",
31
- left: "dropdown-left",
32
- right: "dropdown-right"
33
- }, K = {
34
- start: "",
35
- center: "dropdown-center",
36
- end: "dropdown-end"
37
- }, N = [
38
- "dropdown",
39
- g[u],
40
- K[o],
41
- i && "dropdown-hover",
42
- a && "dropdown-open",
43
- c
44
- ].filter(Boolean).join(" ");
45
- return /* @__PURE__ */ p(
46
- A.Provider,
47
- {
48
- value: {
49
- position: u,
50
- align: o,
51
- menuId: n,
52
- triggerId: s,
53
- isOpen: a,
54
- setIsOpen: l,
55
- focusedIndex: r,
56
- setFocusedIndex: I,
57
- registerItem: w,
58
- itemCount: m,
59
- setItemCount: C
60
- },
61
- children: /* @__PURE__ */ p("div", { ref: f, className: N, "data-state": a ? "open" : "closed", ...d, children: t })
62
- }
63
- );
64
- }
65
- function T({ children: t, className: i = "" }) {
66
- const { menuId: u, triggerId: o, isOpen: c, setIsOpen: d, setFocusedIndex: n, itemCount: s } = v(), a = (r) => {
67
- switch (r.key) {
68
- case "Enter":
69
- case " ":
70
- case "ArrowDown":
71
- r.preventDefault(), d(!0), n(0);
7
+ ...o
8
+ }) => {
9
+ const n = (d) => {
10
+ const [l, h] = d.split("-"), t = [];
11
+ switch (l) {
12
+ case "top":
13
+ t.push("indicator-top");
72
14
  break;
73
- case "ArrowUp":
74
- r.preventDefault(), d(!0), n(s - 1);
15
+ case "middle":
16
+ t.push("indicator-middle");
75
17
  break;
76
- case "Escape":
77
- r.preventDefault(), d(!1), n(-1);
18
+ case "bottom":
19
+ t.push("indicator-bottom");
78
20
  break;
79
21
  }
80
- }, l = () => {
81
- d(!c), c || n(0);
82
- };
83
- return /* @__PURE__ */ p(
84
- "button",
85
- {
86
- id: o,
87
- type: "button",
88
- tabIndex: 0,
89
- className: `btn ${i}`,
90
- "aria-haspopup": "menu",
91
- "aria-expanded": c,
92
- "aria-controls": u,
93
- onClick: l,
94
- onKeyDown: a,
95
- children: t
96
- }
97
- );
98
- }
99
- function V({ children: t, className: i = "" }) {
100
- const { menuId: u, triggerId: o, isOpen: c, setIsOpen: d, focusedIndex: n, setFocusedIndex: s, setItemCount: a } = v(), l = x(null), r = b.Children.toArray(t).filter(
101
- (e) => b.isValidElement(e) && e.type === E
102
- );
103
- k(() => {
104
- a(r.length);
105
- }, [r.length, a]), k(() => {
106
- c && n >= 0 && l.current && l.current.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')[n]?.focus();
107
- }, [c, n]);
108
- const I = (e) => {
109
- const w = r.filter(
110
- (g) => b.isValidElement(g) && !g.props.disabled
111
- ).length;
112
- switch (e.key) {
113
- case "ArrowDown":
114
- e.preventDefault(), s((n + 1) % w);
115
- break;
116
- case "ArrowUp":
117
- e.preventDefault(), s((n - 1 + w) % w);
118
- break;
119
- case "Home":
120
- e.preventDefault(), s(0);
22
+ switch (h) {
23
+ case "start":
24
+ t.push("indicator-start");
121
25
  break;
122
- case "End":
123
- e.preventDefault(), s(w - 1);
26
+ case "center":
27
+ t.push("indicator-center");
124
28
  break;
125
- case "Escape":
126
- e.preventDefault(), d(!1), s(-1), document.getElementById(o)?.focus();
29
+ case "end":
30
+ t.push("indicator-end");
127
31
  break;
128
- case "Tab":
129
- d(!1), s(-1);
130
- break;
131
- }
132
- }, m = [
133
- "dropdown-content",
134
- "menu",
135
- "bg-base-100",
136
- "rounded-box",
137
- "z-[1]",
138
- "shadow",
139
- i
140
- ].filter(Boolean).join(" "), C = b.Children.map(t, (e, f) => b.isValidElement(e) && e.type === E ? b.cloneElement(e, { _index: f }) : e);
141
- return /* @__PURE__ */ p(
142
- "ul",
143
- {
144
- ref: l,
145
- id: u,
146
- role: "menu",
147
- "aria-labelledby": o,
148
- tabIndex: -1,
149
- className: m,
150
- onKeyDown: I,
151
- children: C
152
32
  }
153
- );
154
- }
155
- function E({
156
- children: t,
157
- onClick: i,
158
- active: u = !1,
159
- disabled: o = !1,
160
- danger: c = !1,
161
- className: d = ""
162
- }) {
163
- const { setIsOpen: n, setFocusedIndex: s, triggerId: a } = v(), l = [u && "active", o && "disabled", d].filter(Boolean).join(" "), r = () => {
164
- o || (i?.(), n(!1), s(-1), document.getElementById(a)?.focus());
165
- };
166
- return /* @__PURE__ */ p("li", { className: l, role: "none", children: /* @__PURE__ */ p(
167
- "a",
168
- {
169
- role: "menuitem",
170
- tabIndex: o ? -1 : 0,
171
- "aria-disabled": o || void 0,
172
- className: c ? "text-error" : "",
173
- onClick: r,
174
- onKeyDown: (m) => {
175
- (m.key === "Enter" || m.key === " ") && !o && (m.preventDefault(), r());
176
- },
177
- children: t
178
- }
179
- ) });
180
- }
181
- function L({ className: t = "" }) {
182
- const i = ["border-base-content/10", t].filter(Boolean).join(" ");
183
- return /* @__PURE__ */ p("li", { role: "separator", className: "my-1", children: /* @__PURE__ */ p("hr", { className: i }) });
184
- }
185
- const q = Object.assign(M, {
186
- Trigger: T,
187
- Menu: V,
188
- Item: E,
189
- Divider: L
190
- });
33
+ return t.join(" ");
34
+ }, e = b.Children.toArray(s), a = e[0], i = e[1];
35
+ return /* @__PURE__ */ p("div", { className: `indicator inline-block ${c}`, ...o, children: [
36
+ i && /* @__PURE__ */ m("div", { className: `indicator-item ${n(r)}`, children: i }),
37
+ a
38
+ ] });
39
+ };
191
40
  export {
192
- q as Dropdown
41
+ j as Indicator
193
42
  };
194
43
  //# sourceMappingURL=index36.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index36.js","sources":["../src/components/Dropdown.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useRef, useState, useCallback, useEffect } from 'react'\n\ninterface DropdownContextValue {\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n menuId: string\n triggerId: string\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n registerItem: (index: number, ref: HTMLElement | null, disabled: boolean) => void\n itemCount: number\n setItemCount: (count: number) => void\n}\n\nconst DropdownContext = createContext<DropdownContextValue | undefined>(undefined)\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext)\n if (!context) {\n throw new Error('Dropdown compound components must be used within Dropdown')\n }\n return context\n}\n\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n hover?: boolean\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n}\n\nexport interface DropdownTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface DropdownMenuProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface DropdownItemProps {\n children: React.ReactNode\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n danger?: boolean\n className?: string\n _index?: number // Internal prop passed by DropdownMenu\n}\n\nexport interface DropdownDividerProps {\n className?: string\n}\n\nfunction DropdownRoot({\n children,\n hover = false,\n position = 'bottom',\n align = 'start',\n className = '',\n ...rest\n}: DropdownProps) {\n const menuId = useId()\n const triggerId = useId()\n const [isOpen, setIsOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [itemCount, setItemCount] = useState(0)\n const itemRefs = useRef<Map<number, { ref: HTMLElement | null; disabled: boolean }>>(new Map())\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n const registerItem = useCallback((index: number, ref: HTMLElement | null, disabled: boolean) => {\n if (ref) {\n itemRefs.current.set(index, { ref, disabled })\n } else {\n itemRefs.current.delete(index)\n }\n }, [])\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n setFocusedIndex(-1)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const positionClasses: Record<string, string> = {\n top: 'dropdown-top',\n bottom: 'dropdown-bottom',\n left: 'dropdown-left',\n right: 'dropdown-right',\n }\n\n const alignClasses: Record<string, string> = {\n start: '',\n center: 'dropdown-center',\n end: 'dropdown-end',\n }\n\n const dropdownClasses = [\n 'dropdown',\n positionClasses[position],\n alignClasses[align],\n hover && 'dropdown-hover',\n isOpen && 'dropdown-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <DropdownContext.Provider\n value={{\n position,\n align,\n menuId,\n triggerId,\n isOpen,\n setIsOpen,\n focusedIndex,\n setFocusedIndex,\n registerItem,\n itemCount,\n setItemCount,\n }}\n >\n <div ref={dropdownRef} className={dropdownClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>{children}</div>\n </DropdownContext.Provider>\n )\n}\n\nfunction DropdownTrigger({ children, className = '' }: DropdownTriggerProps) {\n const { menuId, triggerId, isOpen, setIsOpen, setFocusedIndex, itemCount } = useDropdownContext()\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(0)\n break\n case 'ArrowUp':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(itemCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const handleClick = () => {\n setIsOpen(!isOpen)\n if (!isOpen) {\n setFocusedIndex(0)\n }\n }\n\n return (\n <button\n id={triggerId}\n type=\"button\"\n tabIndex={0}\n className={`btn ${className}`}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </button>\n )\n}\n\nfunction DropdownMenu({ children, className = '' }: DropdownMenuProps) {\n const { menuId, triggerId, isOpen, setIsOpen, focusedIndex, setFocusedIndex, setItemCount } = useDropdownContext()\n const menuRef = useRef<HTMLUListElement>(null)\n\n // Count children and set item count\n const childArray = React.Children.toArray(children).filter(\n (child) => React.isValidElement(child) && (child.type === DropdownItem)\n )\n\n useEffect(() => {\n setItemCount(childArray.length)\n }, [childArray.length, setItemCount])\n\n // Focus management\n useEffect(() => {\n if (isOpen && focusedIndex >= 0 && menuRef.current) {\n const items = menuRef.current.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n const item = items[focusedIndex] as HTMLElement\n item?.focus()\n }\n }, [isOpen, focusedIndex])\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const enabledItems = childArray.filter(\n (child) => React.isValidElement(child) && !(child.props as DropdownItemProps).disabled\n )\n const enabledCount = enabledItems.length\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setFocusedIndex((focusedIndex + 1) % enabledCount)\n break\n case 'ArrowUp':\n event.preventDefault()\n setFocusedIndex((focusedIndex - 1 + enabledCount) % enabledCount)\n break\n case 'Home':\n event.preventDefault()\n setFocusedIndex(0)\n break\n case 'End':\n event.preventDefault()\n setFocusedIndex(enabledCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n // Return focus to trigger\n document.getElementById(triggerId)?.focus()\n break\n case 'Tab':\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const menuClasses = [\n 'dropdown-content',\n 'menu',\n 'bg-base-100',\n 'rounded-box',\n 'z-[1]',\n 'shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Clone children to pass index\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === DropdownItem) {\n return React.cloneElement(child as React.ReactElement<any>, { _index: index })\n }\n return child\n })\n\n return (\n <ul\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={menuClasses}\n onKeyDown={handleKeyDown}\n >\n {childrenWithIndex}\n </ul>\n )\n}\n\nfunction DropdownItem({\n children,\n onClick,\n active = false,\n disabled = false,\n danger = false,\n className = '',\n}: DropdownItemProps) {\n const { setIsOpen, setFocusedIndex, triggerId } = useDropdownContext()\n const itemClasses = [active && 'active', disabled && 'disabled', className].filter(Boolean).join(' ')\n\n const handleClick = () => {\n if (!disabled) {\n onClick?.()\n setIsOpen(false)\n setFocusedIndex(-1)\n document.getElementById(triggerId)?.focus()\n }\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault()\n handleClick()\n }\n }\n\n return (\n <li className={itemClasses} role=\"none\">\n <a\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={danger ? 'text-error' : ''}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </a>\n </li>\n )\n}\n\nfunction DropdownDivider({ className = '' }: DropdownDividerProps) {\n const classes = ['border-base-content/10', className].filter(Boolean).join(' ')\n return (\n <li role=\"separator\" className=\"my-1\">\n <hr className={classes} />\n </li>\n )\n}\n\nexport const Dropdown = Object.assign(DropdownRoot, {\n Trigger: DropdownTrigger,\n Menu: DropdownMenu,\n Item: DropdownItem,\n Divider: DropdownDivider,\n})\n"],"names":["DropdownContext","createContext","useDropdownContext","context","useContext","DropdownRoot","children","hover","position","align","className","rest","menuId","useId","triggerId","isOpen","setIsOpen","useState","focusedIndex","setFocusedIndex","itemCount","setItemCount","itemRefs","useRef","dropdownRef","registerItem","useCallback","index","ref","disabled","useEffect","handleClickOutside","event","positionClasses","alignClasses","dropdownClasses","jsx","DropdownTrigger","handleKeyDown","handleClick","DropdownMenu","menuRef","childArray","React","child","DropdownItem","enabledCount","menuClasses","childrenWithIndex","onClick","active","danger","itemClasses","DropdownDivider","classes","Dropdown"],"mappings":"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"}
1
+ {"version":3,"file":"index36.js","sources":["../src/components/Indicator.tsx"],"sourcesContent":["import React from 'react'\n\nexport type IndicatorPosition =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'middle-start'\n | 'middle-center'\n | 'middle-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end'\n\nexport interface IndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\n position?: IndicatorPosition\n children: React.ReactNode\n}\n\nexport const Indicator: React.FC<IndicatorProps> = ({\n position = 'top-end',\n children,\n className = '',\n ...rest\n}) => {\n // Get position classes for indicator\n const getPositionClasses = (pos: IndicatorPosition) => {\n const [vertical, horizontal] = pos.split('-')\n const classes: string[] = []\n\n switch (vertical) {\n case 'top':\n classes.push('indicator-top')\n break\n case 'middle':\n classes.push('indicator-middle')\n break\n case 'bottom':\n classes.push('indicator-bottom')\n break\n }\n\n switch (horizontal) {\n case 'start':\n classes.push('indicator-start')\n break\n case 'center':\n classes.push('indicator-center')\n break\n case 'end':\n classes.push('indicator-end')\n break\n }\n\n return classes.join(' ')\n }\n\n const childrenArray = React.Children.toArray(children)\n const content = childrenArray[0]\n const indicatorElement = childrenArray[1]\n\n return (\n <div className={`indicator inline-block ${className}`} {...rest}>\n {indicatorElement && (\n <div className={`indicator-item ${getPositionClasses(position)}`}>\n {indicatorElement}\n </div>\n )}\n {content}\n </div>\n )\n}\n"],"names":["Indicator","position","children","className","rest","getPositionClasses","pos","vertical","horizontal","classes","childrenArray","React","content","indicatorElement","jsx"],"mappings":";;AAkBO,MAAMA,IAAsC,CAAC;AAAA,EAClD,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AAEJ,QAAMC,IAAqB,CAACC,MAA2B;AACrD,UAAM,CAACC,GAAUC,CAAU,IAAIF,EAAI,MAAM,GAAG,GACtCG,IAAoB,CAAA;AAE1B,YAAQF,GAAA;AAAA,MACN,KAAK;AACH,QAAAE,EAAQ,KAAK,eAAe;AAC5B;AAAA,MACF,KAAK;AACH,QAAAA,EAAQ,KAAK,kBAAkB;AAC/B;AAAA,MACF,KAAK;AACH,QAAAA,EAAQ,KAAK,kBAAkB;AAC/B;AAAA,IAAA;AAGJ,YAAQD,GAAA;AAAA,MACN,KAAK;AACH,QAAAC,EAAQ,KAAK,iBAAiB;AAC9B;AAAA,MACF,KAAK;AACH,QAAAA,EAAQ,KAAK,kBAAkB;AAC/B;AAAA,MACF,KAAK;AACH,QAAAA,EAAQ,KAAK,eAAe;AAC5B;AAAA,IAAA;AAGJ,WAAOA,EAAQ,KAAK,GAAG;AAAA,EACzB,GAEMC,IAAgBC,EAAM,SAAS,QAAQT,CAAQ,GAC/CU,IAAUF,EAAc,CAAC,GACzBG,IAAmBH,EAAc,CAAC;AAExC,2BACG,OAAA,EAAI,WAAW,0BAA0BP,CAAS,IAAK,GAAGC,GACxD,UAAA;AAAA,IAAAS,KACC,gBAAAC,EAAC,SAAI,WAAW,kBAAkBT,EAAmBJ,CAAQ,CAAC,IAC3D,UAAAY,EAAA,CACH;AAAA,IAEDD;AAAA,EAAA,GACH;AAEJ;"}
package/dist/index37.js CHANGED
@@ -1,100 +1,194 @@
1
- import { jsxs as e, jsx as a } from "react/jsx-runtime";
2
- const r = () => /* @__PURE__ */ a(
3
- "svg",
4
- {
5
- width: "184",
6
- height: "152",
7
- viewBox: "0 0 184 152",
8
- xmlns: "http://www.w3.org/2000/svg",
9
- className: "mx-auto",
10
- children: /* @__PURE__ */ e("g", { fill: "none", fillRule: "evenodd", children: [
11
- /* @__PURE__ */ e("g", { transform: "translate(24 31.67)", children: [
12
- /* @__PURE__ */ a(
13
- "ellipse",
14
- {
15
- className: "fill-base-300",
16
- cx: "67.797",
17
- cy: "106.89",
18
- rx: "67.797",
19
- ry: "12.668"
20
- }
21
- ),
22
- /* @__PURE__ */ a(
23
- "path",
24
- {
25
- className: "fill-base-200",
26
- d: "M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"
27
- }
28
- ),
29
- /* @__PURE__ */ a(
30
- "path",
31
- {
32
- className: "fill-base-100",
33
- d: "M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",
34
- transform: "translate(13.56)"
35
- }
36
- ),
37
- /* @__PURE__ */ a(
38
- "ellipse",
39
- {
40
- className: "fill-base-300",
41
- cx: "67.797",
42
- cy: "106.89",
43
- rx: "67.797",
44
- ry: "12.668"
45
- }
46
- ),
47
- /* @__PURE__ */ a(
48
- "path",
49
- {
50
- className: "fill-base-200",
51
- d: "M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"
52
- }
53
- ),
54
- /* @__PURE__ */ a(
55
- "path",
56
- {
57
- className: "fill-base-content opacity-10",
58
- d: "M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"
59
- }
60
- ),
61
- /* @__PURE__ */ a(
62
- "path",
63
- {
64
- className: "fill-base-100",
65
- d: "M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"
66
- }
67
- )
68
- ] }),
69
- /* @__PURE__ */ a(
70
- "path",
71
- {
72
- className: "fill-base-content opacity-10",
73
- d: "M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"
74
- }
75
- ),
76
- /* @__PURE__ */ e("g", { className: "fill-base-100", transform: "translate(149.65 15.383)", children: [
77
- /* @__PURE__ */ a("ellipse", { cx: "20.654", cy: "3.167", rx: "2.849", ry: "2.815" }),
78
- /* @__PURE__ */ a("path", { d: "M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z" })
79
- ] })
80
- ] })
81
- }
82
- ), o = ({
83
- children: l,
84
- className: t = "",
85
- description: s = "No Data",
86
- image: c,
87
- imageStyle: i,
88
- ...h
89
- }) => {
90
- const n = ["flex flex-col items-center justify-center py-8 px-4", t].filter(Boolean).join(" ");
91
- return /* @__PURE__ */ e("div", { className: n, ...h, children: [
92
- /* @__PURE__ */ a("div", { className: "mb-2", style: i, children: c === void 0 ? /* @__PURE__ */ a(r, {}) : c }),
93
- s && /* @__PURE__ */ a("div", { className: "text-base-content/60 text-sm mb-4", children: s }),
94
- l && /* @__PURE__ */ a("div", { className: "mt-2", children: l })
95
- ] });
96
- };
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ import b, { useId as O, useState as y, useRef as x, useCallback as B, useEffect as k, createContext as R, useContext as F } from "react";
3
+ const A = R(void 0);
4
+ function v() {
5
+ const t = F(A);
6
+ if (!t)
7
+ throw new Error("Dropdown compound components must be used within Dropdown");
8
+ return t;
9
+ }
10
+ function M({
11
+ children: t,
12
+ hover: i = !1,
13
+ position: u = "bottom",
14
+ align: o = "start",
15
+ className: c = "",
16
+ ...d
17
+ }) {
18
+ const n = O(), s = O(), [a, l] = y(!1), [r, I] = y(-1), [m, C] = y(0), e = x(/* @__PURE__ */ new Map()), f = x(null), w = B((D, h, j) => {
19
+ h ? e.current.set(D, { ref: h, disabled: j }) : e.current.delete(D);
20
+ }, []);
21
+ k(() => {
22
+ const D = (h) => {
23
+ f.current && !f.current.contains(h.target) && (l(!1), I(-1));
24
+ };
25
+ if (a)
26
+ return document.addEventListener("mousedown", D), () => document.removeEventListener("mousedown", D);
27
+ }, [a]);
28
+ const g = {
29
+ top: "dropdown-top",
30
+ bottom: "dropdown-bottom",
31
+ left: "dropdown-left",
32
+ right: "dropdown-right"
33
+ }, K = {
34
+ start: "",
35
+ center: "dropdown-center",
36
+ end: "dropdown-end"
37
+ }, N = [
38
+ "dropdown",
39
+ g[u],
40
+ K[o],
41
+ i && "dropdown-hover",
42
+ a && "dropdown-open",
43
+ c
44
+ ].filter(Boolean).join(" ");
45
+ return /* @__PURE__ */ p(
46
+ A.Provider,
47
+ {
48
+ value: {
49
+ position: u,
50
+ align: o,
51
+ menuId: n,
52
+ triggerId: s,
53
+ isOpen: a,
54
+ setIsOpen: l,
55
+ focusedIndex: r,
56
+ setFocusedIndex: I,
57
+ registerItem: w,
58
+ itemCount: m,
59
+ setItemCount: C
60
+ },
61
+ children: /* @__PURE__ */ p("div", { ref: f, className: N, "data-state": a ? "open" : "closed", ...d, children: t })
62
+ }
63
+ );
64
+ }
65
+ function T({ children: t, className: i = "" }) {
66
+ const { menuId: u, triggerId: o, isOpen: c, setIsOpen: d, setFocusedIndex: n, itemCount: s } = v(), a = (r) => {
67
+ switch (r.key) {
68
+ case "Enter":
69
+ case " ":
70
+ case "ArrowDown":
71
+ r.preventDefault(), d(!0), n(0);
72
+ break;
73
+ case "ArrowUp":
74
+ r.preventDefault(), d(!0), n(s - 1);
75
+ break;
76
+ case "Escape":
77
+ r.preventDefault(), d(!1), n(-1);
78
+ break;
79
+ }
80
+ }, l = () => {
81
+ d(!c), c || n(0);
82
+ };
83
+ return /* @__PURE__ */ p(
84
+ "button",
85
+ {
86
+ id: o,
87
+ type: "button",
88
+ tabIndex: 0,
89
+ className: `btn ${i}`,
90
+ "aria-haspopup": "menu",
91
+ "aria-expanded": c,
92
+ "aria-controls": u,
93
+ onClick: l,
94
+ onKeyDown: a,
95
+ children: t
96
+ }
97
+ );
98
+ }
99
+ function V({ children: t, className: i = "" }) {
100
+ const { menuId: u, triggerId: o, isOpen: c, setIsOpen: d, focusedIndex: n, setFocusedIndex: s, setItemCount: a } = v(), l = x(null), r = b.Children.toArray(t).filter(
101
+ (e) => b.isValidElement(e) && e.type === E
102
+ );
103
+ k(() => {
104
+ a(r.length);
105
+ }, [r.length, a]), k(() => {
106
+ c && n >= 0 && l.current && l.current.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')[n]?.focus();
107
+ }, [c, n]);
108
+ const I = (e) => {
109
+ const w = r.filter(
110
+ (g) => b.isValidElement(g) && !g.props.disabled
111
+ ).length;
112
+ switch (e.key) {
113
+ case "ArrowDown":
114
+ e.preventDefault(), s((n + 1) % w);
115
+ break;
116
+ case "ArrowUp":
117
+ e.preventDefault(), s((n - 1 + w) % w);
118
+ break;
119
+ case "Home":
120
+ e.preventDefault(), s(0);
121
+ break;
122
+ case "End":
123
+ e.preventDefault(), s(w - 1);
124
+ break;
125
+ case "Escape":
126
+ e.preventDefault(), d(!1), s(-1), document.getElementById(o)?.focus();
127
+ break;
128
+ case "Tab":
129
+ d(!1), s(-1);
130
+ break;
131
+ }
132
+ }, m = [
133
+ "dropdown-content",
134
+ "menu",
135
+ "bg-base-100",
136
+ "rounded-box",
137
+ "z-[1]",
138
+ "shadow",
139
+ i
140
+ ].filter(Boolean).join(" "), C = b.Children.map(t, (e, f) => b.isValidElement(e) && e.type === E ? b.cloneElement(e, { _index: f }) : e);
141
+ return /* @__PURE__ */ p(
142
+ "ul",
143
+ {
144
+ ref: l,
145
+ id: u,
146
+ role: "menu",
147
+ "aria-labelledby": o,
148
+ tabIndex: -1,
149
+ className: m,
150
+ onKeyDown: I,
151
+ children: C
152
+ }
153
+ );
154
+ }
155
+ function E({
156
+ children: t,
157
+ onClick: i,
158
+ active: u = !1,
159
+ disabled: o = !1,
160
+ danger: c = !1,
161
+ className: d = ""
162
+ }) {
163
+ const { setIsOpen: n, setFocusedIndex: s, triggerId: a } = v(), l = [u && "active", o && "disabled", d].filter(Boolean).join(" "), r = () => {
164
+ o || (i?.(), n(!1), s(-1), document.getElementById(a)?.focus());
165
+ };
166
+ return /* @__PURE__ */ p("li", { className: l, role: "none", children: /* @__PURE__ */ p(
167
+ "a",
168
+ {
169
+ role: "menuitem",
170
+ tabIndex: o ? -1 : 0,
171
+ "aria-disabled": o || void 0,
172
+ className: c ? "text-error" : "",
173
+ onClick: r,
174
+ onKeyDown: (m) => {
175
+ (m.key === "Enter" || m.key === " ") && !o && (m.preventDefault(), r());
176
+ },
177
+ children: t
178
+ }
179
+ ) });
180
+ }
181
+ function L({ className: t = "" }) {
182
+ const i = ["border-base-content/10", t].filter(Boolean).join(" ");
183
+ return /* @__PURE__ */ p("li", { role: "separator", className: "my-1", children: /* @__PURE__ */ p("hr", { className: i }) });
184
+ }
185
+ const q = Object.assign(M, {
186
+ Trigger: T,
187
+ Menu: V,
188
+ Item: E,
189
+ Divider: L
190
+ });
97
191
  export {
98
- o as Empty
192
+ q as Dropdown
99
193
  };
100
194
  //# sourceMappingURL=index37.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index37.js","sources":["../src/components/Empty.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface EmptyProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode\n description?: React.ReactNode\n image?: React.ReactNode\n imageStyle?: React.CSSProperties\n}\n\nconst DefaultEmptyImage: React.FC = () => (\n <svg\n width=\"184\"\n height=\"152\"\n viewBox=\"0 0 184 152\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mx-auto\"\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse\n className=\"fill-base-300\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"fill-base-200\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n className=\"fill-base-100\"\n d=\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\"\n transform=\"translate(13.56)\"\n />\n <ellipse\n className=\"fill-base-300\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"fill-base-200\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n className=\"fill-base-content opacity-10\"\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\n />\n <path\n className=\"fill-base-100\"\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n />\n </g>\n <path\n className=\"fill-base-content opacity-10\"\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n />\n <g className=\"fill-base-100\" transform=\"translate(149.65 15.383)\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\n </g>\n </g>\n </svg>\n)\n\nexport const Empty: React.FC<EmptyProps> = ({\n children,\n className = '',\n description = 'No Data',\n image,\n imageStyle,\n ...rest\n}) => {\n const classes = ['flex flex-col items-center justify-center py-8 px-4', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={classes} {...rest}>\n <div className=\"mb-2\" style={imageStyle}>\n {image === undefined ? <DefaultEmptyImage /> : image}\n </div>\n {description && (\n <div className=\"text-base-content/60 text-sm mb-4\">{description}</div>\n )}\n {children && <div className=\"mt-2\">{children}</div>}\n </div>\n )\n}\n"],"names":["DefaultEmptyImage","jsx","jsxs","Empty","children","className","description","image","imageStyle","rest","classes"],"mappings":";AASA,MAAMA,IAA8B,MAClC,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,WAAU;AAAA,IAEV,UAAA,gBAAAC,EAAC,KAAA,EAAE,MAAK,QAAO,UAAS,WACtB,UAAA;AAAA,MAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,uBACX,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,YACF,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ,GACF;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJ,gBAAAC,EAAC,KAAA,EAAE,WAAU,iBAAgB,WAAU,4BACrC,UAAA;AAAA,QAAA,gBAAAD,EAAC,WAAA,EAAQ,IAAG,UAAS,IAAG,SAAQ,IAAG,SAAQ,IAAG,QAAA,CAAQ;AAAA,QACtD,gBAAAA,EAAC,QAAA,EAAK,GAAE,uDAAA,CAAuD;AAAA,MAAA,EAAA,CACjE;AAAA,IAAA,EAAA,CACF;AAAA,EAAA;AACF,GAGWE,IAA8B,CAAC;AAAA,EAC1C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,aAAAC,IAAc;AAAA,EACd,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAU,CAAC,uDAAuDL,CAAS,EAC9E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAH,EAAC,OAAA,EAAI,WAAWQ,GAAU,GAAGD,GAC3B,UAAA;AAAA,IAAA,gBAAAR,EAAC,OAAA,EAAI,WAAU,QAAO,OAAOO,GAC1B,gBAAU,SAAY,gBAAAP,EAACD,GAAA,CAAA,CAAkB,IAAKO,EAAA,CACjD;AAAA,IACCD,KACC,gBAAAL,EAAC,OAAA,EAAI,WAAU,qCAAqC,UAAAK,GAAY;AAAA,IAEjEF,KAAY,gBAAAH,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAG,EAAA,CAAS;AAAA,EAAA,GAC/C;AAEJ;"}
1
+ {"version":3,"file":"index37.js","sources":["../src/components/Dropdown.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useRef, useState, useCallback, useEffect } from 'react'\n\ninterface DropdownContextValue {\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n menuId: string\n triggerId: string\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n registerItem: (index: number, ref: HTMLElement | null, disabled: boolean) => void\n itemCount: number\n setItemCount: (count: number) => void\n}\n\nconst DropdownContext = createContext<DropdownContextValue | undefined>(undefined)\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext)\n if (!context) {\n throw new Error('Dropdown compound components must be used within Dropdown')\n }\n return context\n}\n\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n hover?: boolean\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n}\n\nexport interface DropdownTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface DropdownMenuProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface DropdownItemProps {\n children: React.ReactNode\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n danger?: boolean\n className?: string\n _index?: number // Internal prop passed by DropdownMenu\n}\n\nexport interface DropdownDividerProps {\n className?: string\n}\n\nfunction DropdownRoot({\n children,\n hover = false,\n position = 'bottom',\n align = 'start',\n className = '',\n ...rest\n}: DropdownProps) {\n const menuId = useId()\n const triggerId = useId()\n const [isOpen, setIsOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [itemCount, setItemCount] = useState(0)\n const itemRefs = useRef<Map<number, { ref: HTMLElement | null; disabled: boolean }>>(new Map())\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n const registerItem = useCallback((index: number, ref: HTMLElement | null, disabled: boolean) => {\n if (ref) {\n itemRefs.current.set(index, { ref, disabled })\n } else {\n itemRefs.current.delete(index)\n }\n }, [])\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n setFocusedIndex(-1)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const positionClasses: Record<string, string> = {\n top: 'dropdown-top',\n bottom: 'dropdown-bottom',\n left: 'dropdown-left',\n right: 'dropdown-right',\n }\n\n const alignClasses: Record<string, string> = {\n start: '',\n center: 'dropdown-center',\n end: 'dropdown-end',\n }\n\n const dropdownClasses = [\n 'dropdown',\n positionClasses[position],\n alignClasses[align],\n hover && 'dropdown-hover',\n isOpen && 'dropdown-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <DropdownContext.Provider\n value={{\n position,\n align,\n menuId,\n triggerId,\n isOpen,\n setIsOpen,\n focusedIndex,\n setFocusedIndex,\n registerItem,\n itemCount,\n setItemCount,\n }}\n >\n <div ref={dropdownRef} className={dropdownClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>{children}</div>\n </DropdownContext.Provider>\n )\n}\n\nfunction DropdownTrigger({ children, className = '' }: DropdownTriggerProps) {\n const { menuId, triggerId, isOpen, setIsOpen, setFocusedIndex, itemCount } = useDropdownContext()\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(0)\n break\n case 'ArrowUp':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(itemCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const handleClick = () => {\n setIsOpen(!isOpen)\n if (!isOpen) {\n setFocusedIndex(0)\n }\n }\n\n return (\n <button\n id={triggerId}\n type=\"button\"\n tabIndex={0}\n className={`btn ${className}`}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </button>\n )\n}\n\nfunction DropdownMenu({ children, className = '' }: DropdownMenuProps) {\n const { menuId, triggerId, isOpen, setIsOpen, focusedIndex, setFocusedIndex, setItemCount } = useDropdownContext()\n const menuRef = useRef<HTMLUListElement>(null)\n\n // Count children and set item count\n const childArray = React.Children.toArray(children).filter(\n (child) => React.isValidElement(child) && (child.type === DropdownItem)\n )\n\n useEffect(() => {\n setItemCount(childArray.length)\n }, [childArray.length, setItemCount])\n\n // Focus management\n useEffect(() => {\n if (isOpen && focusedIndex >= 0 && menuRef.current) {\n const items = menuRef.current.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n const item = items[focusedIndex] as HTMLElement\n item?.focus()\n }\n }, [isOpen, focusedIndex])\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const enabledItems = childArray.filter(\n (child) => React.isValidElement(child) && !(child.props as DropdownItemProps).disabled\n )\n const enabledCount = enabledItems.length\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setFocusedIndex((focusedIndex + 1) % enabledCount)\n break\n case 'ArrowUp':\n event.preventDefault()\n setFocusedIndex((focusedIndex - 1 + enabledCount) % enabledCount)\n break\n case 'Home':\n event.preventDefault()\n setFocusedIndex(0)\n break\n case 'End':\n event.preventDefault()\n setFocusedIndex(enabledCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n // Return focus to trigger\n document.getElementById(triggerId)?.focus()\n break\n case 'Tab':\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const menuClasses = [\n 'dropdown-content',\n 'menu',\n 'bg-base-100',\n 'rounded-box',\n 'z-[1]',\n 'shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Clone children to pass index\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === DropdownItem) {\n return React.cloneElement(child as React.ReactElement<any>, { _index: index })\n }\n return child\n })\n\n return (\n <ul\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={menuClasses}\n onKeyDown={handleKeyDown}\n >\n {childrenWithIndex}\n </ul>\n )\n}\n\nfunction DropdownItem({\n children,\n onClick,\n active = false,\n disabled = false,\n danger = false,\n className = '',\n}: DropdownItemProps) {\n const { setIsOpen, setFocusedIndex, triggerId } = useDropdownContext()\n const itemClasses = [active && 'active', disabled && 'disabled', className].filter(Boolean).join(' ')\n\n const handleClick = () => {\n if (!disabled) {\n onClick?.()\n setIsOpen(false)\n setFocusedIndex(-1)\n document.getElementById(triggerId)?.focus()\n }\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault()\n handleClick()\n }\n }\n\n return (\n <li className={itemClasses} role=\"none\">\n <a\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={danger ? 'text-error' : ''}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </a>\n </li>\n )\n}\n\nfunction DropdownDivider({ className = '' }: DropdownDividerProps) {\n const classes = ['border-base-content/10', className].filter(Boolean).join(' ')\n return (\n <li role=\"separator\" className=\"my-1\">\n <hr className={classes} />\n </li>\n )\n}\n\nexport const Dropdown = Object.assign(DropdownRoot, {\n Trigger: DropdownTrigger,\n Menu: DropdownMenu,\n Item: DropdownItem,\n Divider: DropdownDivider,\n})\n"],"names":["DropdownContext","createContext","useDropdownContext","context","useContext","DropdownRoot","children","hover","position","align","className","rest","menuId","useId","triggerId","isOpen","setIsOpen","useState","focusedIndex","setFocusedIndex","itemCount","setItemCount","itemRefs","useRef","dropdownRef","registerItem","useCallback","index","ref","disabled","useEffect","handleClickOutside","event","positionClasses","alignClasses","dropdownClasses","jsx","DropdownTrigger","handleKeyDown","handleClick","DropdownMenu","menuRef","childArray","React","child","DropdownItem","enabledCount","menuClasses","childrenWithIndex","onClick","active","danger","itemClasses","DropdownDivider","classes","Dropdown"],"mappings":"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"}