asterui 0.12.2 → 0.12.4

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 (300) hide show
  1. package/dist/components/Kbd.d.ts +2 -1
  2. package/dist/components/Modal.d.ts +7 -1
  3. package/dist/index.d.ts +0 -3
  4. package/dist/index.js +196 -201
  5. package/dist/index.js.map +1 -1
  6. package/dist/index100.js +11 -44
  7. package/dist/index100.js.map +1 -1
  8. package/dist/index101.js +12 -10
  9. package/dist/index101.js.map +1 -1
  10. package/dist/index102.js +7 -14
  11. package/dist/index102.js.map +1 -1
  12. package/dist/index103.js +12 -7
  13. package/dist/index103.js.map +1 -1
  14. package/dist/index104.js +29 -11
  15. package/dist/index104.js.map +1 -1
  16. package/dist/index105.js +16 -29
  17. package/dist/index105.js.map +1 -1
  18. package/dist/index13.js +95 -35
  19. package/dist/index13.js.map +1 -1
  20. package/dist/index14.js +153 -90
  21. package/dist/index14.js.map +1 -1
  22. package/dist/index15.js +146 -154
  23. package/dist/index15.js.map +1 -1
  24. package/dist/index16.js +5 -150
  25. package/dist/index16.js.map +1 -1
  26. package/dist/index17.js +71 -5
  27. package/dist/index17.js.map +1 -1
  28. package/dist/index18.js +17 -71
  29. package/dist/index18.js.map +1 -1
  30. package/dist/index19.js +96 -15
  31. package/dist/index19.js.map +1 -1
  32. package/dist/index20.js +105 -89
  33. package/dist/index20.js.map +1 -1
  34. package/dist/index21.js +177 -107
  35. package/dist/index21.js.map +1 -1
  36. package/dist/index22.js +107 -181
  37. package/dist/index22.js.map +1 -1
  38. package/dist/index23.js +19 -110
  39. package/dist/index23.js.map +1 -1
  40. package/dist/index24.js +41 -17
  41. package/dist/index24.js.map +1 -1
  42. package/dist/index25.js +32 -43
  43. package/dist/index25.js.map +1 -1
  44. package/dist/index26.js +41 -32
  45. package/dist/index26.js.map +1 -1
  46. package/dist/index27.js +12 -41
  47. package/dist/index27.js.map +1 -1
  48. package/dist/index28.js +33 -12
  49. package/dist/index28.js.map +1 -1
  50. package/dist/index29.js +63 -33
  51. package/dist/index29.js.map +1 -1
  52. package/dist/index30.js +77 -60
  53. package/dist/index30.js.map +1 -1
  54. package/dist/index31.js +18 -80
  55. package/dist/index31.js.map +1 -1
  56. package/dist/index32.js +217 -15
  57. package/dist/index32.js.map +1 -1
  58. package/dist/index33.js +1078 -216
  59. package/dist/index33.js.map +1 -1
  60. package/dist/index34.js +17 -1081
  61. package/dist/index34.js.map +1 -1
  62. package/dist/index35.js +121 -17
  63. package/dist/index35.js.map +1 -1
  64. package/dist/index36.js +37 -119
  65. package/dist/index36.js.map +1 -1
  66. package/dist/index37.js +182 -31
  67. package/dist/index37.js.map +1 -1
  68. package/dist/index38.js +97 -191
  69. package/dist/index38.js.map +1 -1
  70. package/dist/index39.js +158 -93
  71. package/dist/index39.js.map +1 -1
  72. package/dist/index40.js +139 -155
  73. package/dist/index40.js.map +1 -1
  74. package/dist/index41.js +15 -146
  75. package/dist/index41.js.map +1 -1
  76. package/dist/index42.js +17 -15
  77. package/dist/index42.js.map +1 -1
  78. package/dist/index43.js +21 -18
  79. package/dist/index43.js.map +1 -1
  80. package/dist/index44.js +116 -18
  81. package/dist/index44.js.map +1 -1
  82. package/dist/index45.js +10 -116
  83. package/dist/index45.js.map +1 -1
  84. package/dist/index46.js +35 -13
  85. package/dist/index46.js.map +1 -1
  86. package/dist/index47.js +34 -35
  87. package/dist/index47.js.map +1 -1
  88. package/dist/index48.js +116 -10
  89. package/dist/index48.js.map +1 -1
  90. package/dist/index49.js +174 -114
  91. package/dist/index49.js.map +1 -1
  92. package/dist/index50.js +136 -165
  93. package/dist/index50.js.map +1 -1
  94. package/dist/index51.js +11 -146
  95. package/dist/index51.js.map +1 -1
  96. package/dist/index52.js +20 -10
  97. package/dist/index52.js.map +1 -1
  98. package/dist/index53.js +14 -22
  99. package/dist/index53.js.map +1 -1
  100. package/dist/index54.js +7 -14
  101. package/dist/index54.js.map +1 -1
  102. package/dist/index55.js +268 -6
  103. package/dist/index55.js.map +1 -1
  104. package/dist/index56.js +17 -266
  105. package/dist/index56.js.map +1 -1
  106. package/dist/index57.js +122 -17
  107. package/dist/index57.js.map +1 -1
  108. package/dist/index58.js +108 -120
  109. package/dist/index58.js.map +1 -1
  110. package/dist/index59.js +167 -107
  111. package/dist/index59.js.map +1 -1
  112. package/dist/index60.js +29 -167
  113. package/dist/index60.js.map +1 -1
  114. package/dist/index61.js +120 -30
  115. package/dist/index61.js.map +1 -1
  116. package/dist/index62.js +80 -116
  117. package/dist/index62.js.map +1 -1
  118. package/dist/index63.js +19 -85
  119. package/dist/index63.js.map +1 -1
  120. package/dist/index64.js +73 -19
  121. package/dist/index64.js.map +1 -1
  122. package/dist/index65.js +54 -71
  123. package/dist/index65.js.map +1 -1
  124. package/dist/index66.js +44 -56
  125. package/dist/index66.js.map +1 -1
  126. package/dist/index67.js +49 -42
  127. package/dist/index67.js.map +1 -1
  128. package/dist/index68.js +62 -52
  129. package/dist/index68.js.map +1 -1
  130. package/dist/index69.js +101 -56
  131. package/dist/index69.js.map +1 -1
  132. package/dist/index70.js +41 -107
  133. package/dist/index70.js.map +1 -1
  134. package/dist/index71.js +68 -41
  135. package/dist/index71.js.map +1 -1
  136. package/dist/index72.js +19 -66
  137. package/dist/index72.js.map +1 -1
  138. package/dist/index73.js +43 -18
  139. package/dist/index73.js.map +1 -1
  140. package/dist/index74.js +132 -44
  141. package/dist/index74.js.map +1 -1
  142. package/dist/index75.js +50 -132
  143. package/dist/index75.js.map +1 -1
  144. package/dist/index76.js +21 -51
  145. package/dist/index76.js.map +1 -1
  146. package/dist/index77.js +31 -22
  147. package/dist/index77.js.map +1 -1
  148. package/dist/index78.js +22 -31
  149. package/dist/index78.js.map +1 -1
  150. package/dist/index79.js +327 -20
  151. package/dist/index79.js.map +1 -1
  152. package/dist/index80.js +50 -323
  153. package/dist/index80.js.map +1 -1
  154. package/dist/index81.js +40 -56
  155. package/dist/index81.js.map +1 -1
  156. package/dist/index82.js +23 -40
  157. package/dist/index82.js.map +1 -1
  158. package/dist/index83.js +93 -21
  159. package/dist/index83.js.map +1 -1
  160. package/dist/index84.js +123 -88
  161. package/dist/index84.js.map +1 -1
  162. package/dist/index85.js +154 -123
  163. package/dist/index85.js.map +1 -1
  164. package/dist/index86.js +63 -159
  165. package/dist/index86.js.map +1 -1
  166. package/dist/index87.js +35 -65
  167. package/dist/index87.js.map +1 -1
  168. package/dist/index88.js +234 -35
  169. package/dist/index88.js.map +1 -1
  170. package/dist/index89.js +31 -231
  171. package/dist/index89.js.map +1 -1
  172. package/dist/index90.js +210 -34
  173. package/dist/index90.js.map +1 -1
  174. package/dist/index91.js +198 -195
  175. package/dist/index91.js.map +1 -1
  176. package/dist/index92.js +241 -159
  177. package/dist/index92.js.map +1 -1
  178. package/dist/index93.js +166 -283
  179. package/dist/index93.js.map +1 -1
  180. package/dist/index94.js +253 -173
  181. package/dist/index94.js.map +1 -1
  182. package/dist/index95.js +14 -258
  183. package/dist/index95.js.map +1 -1
  184. package/dist/index96.js +31 -12
  185. package/dist/index96.js.map +1 -1
  186. package/dist/index97.js +5 -32
  187. package/dist/index97.js.map +1 -1
  188. package/dist/index98.js +13 -5
  189. package/dist/index98.js.map +1 -1
  190. package/dist/index99.js +43 -11
  191. package/dist/index99.js.map +1 -1
  192. package/package.json +11 -5
  193. package/dist/components/Calendar.d.ts +0 -23
  194. package/dist/index.css +0 -1
  195. package/dist/index106.js +0 -21
  196. package/dist/index106.js.map +0 -1
  197. package/dist/index107.js +0 -177
  198. package/dist/index107.js.map +0 -1
  199. package/dist/index109.js +0 -10796
  200. package/dist/index109.js.map +0 -1
  201. package/dist/index110.js +0 -8
  202. package/dist/index110.js.map +0 -1
  203. package/dist/index111.js +0 -45
  204. package/dist/index111.js.map +0 -1
  205. package/dist/index112.js +0 -5
  206. package/dist/index112.js.map +0 -1
  207. package/dist/index113.js +0 -10
  208. package/dist/index113.js.map +0 -1
  209. package/dist/index114.js +0 -155
  210. package/dist/index114.js.map +0 -1
  211. package/dist/index115.js +0 -33
  212. package/dist/index115.js.map +0 -1
  213. package/dist/index116.js +0 -33
  214. package/dist/index116.js.map +0 -1
  215. package/dist/index117.js +0 -5
  216. package/dist/index117.js.map +0 -1
  217. package/dist/index118.js +0 -75
  218. package/dist/index118.js.map +0 -1
  219. package/dist/index119.js +0 -42
  220. package/dist/index119.js.map +0 -1
  221. package/dist/index120.js +0 -29
  222. package/dist/index120.js.map +0 -1
  223. package/dist/index121.js +0 -24
  224. package/dist/index121.js.map +0 -1
  225. package/dist/index122.js +0 -27
  226. package/dist/index122.js.map +0 -1
  227. package/dist/index123.js +0 -23
  228. package/dist/index123.js.map +0 -1
  229. package/dist/index124.js +0 -103
  230. package/dist/index124.js.map +0 -1
  231. package/dist/index125.js +0 -363
  232. package/dist/index125.js.map +0 -1
  233. package/dist/index126.js +0 -28
  234. package/dist/index126.js.map +0 -1
  235. package/dist/index127.js +0 -76
  236. package/dist/index127.js.map +0 -1
  237. package/dist/index128.js +0 -19
  238. package/dist/index128.js.map +0 -1
  239. package/dist/index129.js +0 -69
  240. package/dist/index129.js.map +0 -1
  241. package/dist/index130.js +0 -147
  242. package/dist/index130.js.map +0 -1
  243. package/dist/index131.js +0 -5
  244. package/dist/index131.js.map +0 -1
  245. package/dist/index132.js +0 -59
  246. package/dist/index132.js.map +0 -1
  247. package/dist/index133.js +0 -5
  248. package/dist/index133.js.map +0 -1
  249. package/dist/index134.js +0 -5
  250. package/dist/index134.js.map +0 -1
  251. package/dist/index135.js +0 -5
  252. package/dist/index135.js.map +0 -1
  253. package/dist/index136.js +0 -5
  254. package/dist/index136.js.map +0 -1
  255. package/dist/index137.js +0 -5
  256. package/dist/index137.js.map +0 -1
  257. package/dist/index138.js +0 -5
  258. package/dist/index138.js.map +0 -1
  259. package/dist/index139.js +0 -5
  260. package/dist/index139.js.map +0 -1
  261. package/dist/index140.js +0 -5
  262. package/dist/index140.js.map +0 -1
  263. package/dist/index141.js +0 -35
  264. package/dist/index141.js.map +0 -1
  265. package/dist/index142.js +0 -5
  266. package/dist/index142.js.map +0 -1
  267. package/dist/index143.js +0 -11
  268. package/dist/index143.js.map +0 -1
  269. package/dist/index144.js +0 -5
  270. package/dist/index144.js.map +0 -1
  271. package/dist/index145.js +0 -5
  272. package/dist/index145.js.map +0 -1
  273. package/dist/index146.js +0 -24
  274. package/dist/index146.js.map +0 -1
  275. package/dist/index147.js +0 -5
  276. package/dist/index147.js.map +0 -1
  277. package/dist/index148.js +0 -27
  278. package/dist/index148.js.map +0 -1
  279. package/dist/index149.js +0 -74
  280. package/dist/index149.js.map +0 -1
  281. package/dist/index150.js +0 -24
  282. package/dist/index150.js.map +0 -1
  283. package/dist/index151.js +0 -37
  284. package/dist/index151.js.map +0 -1
  285. package/dist/index152.js +0 -73
  286. package/dist/index152.js.map +0 -1
  287. package/dist/index153.js +0 -5
  288. package/dist/index153.js.map +0 -1
  289. package/dist/index154.js +0 -25
  290. package/dist/index154.js.map +0 -1
  291. package/dist/index155.js +0 -5
  292. package/dist/index155.js.map +0 -1
  293. package/dist/index156.js +0 -5
  294. package/dist/index156.js.map +0 -1
  295. package/dist/index157.js +0 -5
  296. package/dist/index157.js.map +0 -1
  297. package/dist/index158.js +0 -5
  298. package/dist/index158.js.map +0 -1
  299. package/dist/index159.js +0 -7
  300. package/dist/index159.js.map +0 -1
package/dist/index103.js CHANGED
@@ -1,11 +1,16 @@
1
- import { useRef as t, useEffect as o } from "react";
2
- function f(r) {
3
- const e = t(void 0);
4
- return o(() => {
5
- e.current = r;
6
- }, [r]), e.current;
1
+ import { useState as u, useRef as v, useEffect as a } from "react";
2
+ function f() {
3
+ const [o, t] = u(!1), n = v(null);
4
+ return a(() => {
5
+ const e = n.current;
6
+ if (!e) return;
7
+ const r = () => t(!0), s = () => t(!1);
8
+ return e.addEventListener("mouseenter", r), e.addEventListener("mouseleave", s), () => {
9
+ e.removeEventListener("mouseenter", r), e.removeEventListener("mouseleave", s);
10
+ };
11
+ }, []), { ref: n, isHovered: o };
7
12
  }
8
13
  export {
9
- f as usePrevious
14
+ f as useHover
10
15
  };
11
16
  //# sourceMappingURL=index103.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index103.js","sources":["../src/hooks/usePrevious.ts"],"sourcesContent":["import { useRef, useEffect } from 'react'\n\n/**\n * Hook that returns the previous value of a variable.\n * Useful for comparing current and previous values in effects.\n *\n * @param value - Current value\n * @returns Previous value (undefined on first render)\n *\n * @example\n * const [count, setCount] = useState(0)\n * const prevCount = usePrevious(count)\n *\n * // prevCount is the value from previous render\n * console.log(`Changed from ${prevCount} to ${count}`)\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n"],"names":["usePrevious","value","ref","useRef","useEffect"],"mappings":";AAgBO,SAASA,EAAeC,GAAyB;AACtD,QAAMC,IAAMC,EAAsB,MAAS;AAE3C,SAAAC,EAAU,MAAM;AACd,IAAAF,EAAI,UAAUD;AAAA,EAChB,GAAG,CAACA,CAAK,CAAC,GAEHC,EAAI;AACb;"}
1
+ {"version":3,"file":"index103.js","sources":["../src/hooks/useHover.ts"],"sourcesContent":["import { useState, useRef, useEffect, type RefObject } from 'react'\n\nexport interface UseHoverReturn<T extends HTMLElement> {\n ref: RefObject<T | null>\n isHovered: boolean\n}\n\n/**\n * Hook that tracks hover state of an element.\n *\n * @returns Object with ref and isHovered state\n *\n * @example\n * const { ref, isHovered } = useHover<HTMLDivElement>()\n *\n * <div ref={ref} className={isHovered ? 'bg-blue-500' : 'bg-gray-500'}>\n * Hover me!\n * </div>\n */\nexport function useHover<T extends HTMLElement = HTMLElement>(): UseHoverReturn<T> {\n const [isHovered, setIsHovered] = useState(false)\n const ref = useRef<T>(null)\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n\n const handleMouseEnter = () => setIsHovered(true)\n const handleMouseLeave = () => setIsHovered(false)\n\n node.addEventListener('mouseenter', handleMouseEnter)\n node.addEventListener('mouseleave', handleMouseLeave)\n\n return () => {\n node.removeEventListener('mouseenter', handleMouseEnter)\n node.removeEventListener('mouseleave', handleMouseLeave)\n }\n }, [])\n\n return { ref, isHovered }\n}\n"],"names":["useHover","isHovered","setIsHovered","useState","ref","useRef","useEffect","node","handleMouseEnter","handleMouseLeave"],"mappings":";AAmBO,SAASA,IAAmE;AACjF,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAMC,EAAU,IAAI;AAE1B,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAOH,EAAI;AACjB,QAAI,CAACG,EAAM;AAEX,UAAMC,IAAmB,MAAMN,EAAa,EAAI,GAC1CO,IAAmB,MAAMP,EAAa,EAAK;AAEjD,WAAAK,EAAK,iBAAiB,cAAcC,CAAgB,GACpDD,EAAK,iBAAiB,cAAcE,CAAgB,GAE7C,MAAM;AACX,MAAAF,EAAK,oBAAoB,cAAcC,CAAgB,GACvDD,EAAK,oBAAoB,cAAcE,CAAgB;AAAA,IACzD;AAAA,EACF,GAAG,CAAA,CAAE,GAEE,EAAE,KAAAL,GAAK,WAAAH,EAAA;AAChB;"}
package/dist/index104.js CHANGED
@@ -1,16 +1,34 @@
1
- import { useState as u, useRef as v, useEffect as a } from "react";
2
- function f() {
3
- const [o, t] = u(!1), n = v(null);
4
- return a(() => {
5
- const e = n.current;
6
- if (!e) return;
7
- const r = () => t(!0), s = () => t(!1);
8
- return e.addEventListener("mouseenter", r), e.addEventListener("mouseleave", s), () => {
9
- e.removeEventListener("mouseenter", r), e.removeEventListener("mouseleave", s);
1
+ import { useState as v, useCallback as i, useEffect as l } from "react";
2
+ function c(n, f = {}) {
3
+ const { target: u, event: o = "keydown", preventDefault: r = !1 } = f, [a, d] = v(!1), t = i(
4
+ (e) => {
5
+ e.key === n && (r && e.preventDefault(), d(!0));
6
+ },
7
+ [n, r]
8
+ ), s = i(
9
+ (e) => {
10
+ e.key === n && d(!1);
11
+ },
12
+ [n]
13
+ );
14
+ return l(() => {
15
+ const e = u ?? window;
16
+ return o === "keydown" ? (e.addEventListener("keydown", t), e.addEventListener("keyup", s)) : e.addEventListener("keyup", t), () => {
17
+ e.removeEventListener("keydown", t), e.removeEventListener("keyup", s);
10
18
  };
11
- }, []), { ref: n, isHovered: o };
19
+ }, [u, o, t, s]), a;
20
+ }
21
+ function y(n, f, u = {}) {
22
+ const { target: o, event: r = "keydown", preventDefault: a = !1 } = u;
23
+ l(() => {
24
+ const d = o ?? window, t = (s) => {
25
+ s.key === n && (a && s.preventDefault(), f(s));
26
+ };
27
+ return d.addEventListener(r, t), () => d.removeEventListener(r, t);
28
+ }, [o, n, f, r, a]);
12
29
  }
13
30
  export {
14
- f as useHover
31
+ c as useKeyPress,
32
+ y as useKeyPressCallback
15
33
  };
16
34
  //# sourceMappingURL=index104.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index104.js","sources":["../src/hooks/useHover.ts"],"sourcesContent":["import { useState, useRef, useEffect, type RefObject } from 'react'\n\nexport interface UseHoverReturn<T extends HTMLElement> {\n ref: RefObject<T | null>\n isHovered: boolean\n}\n\n/**\n * Hook that tracks hover state of an element.\n *\n * @returns Object with ref and isHovered state\n *\n * @example\n * const { ref, isHovered } = useHover<HTMLDivElement>()\n *\n * <div ref={ref} className={isHovered ? 'bg-blue-500' : 'bg-gray-500'}>\n * Hover me!\n * </div>\n */\nexport function useHover<T extends HTMLElement = HTMLElement>(): UseHoverReturn<T> {\n const [isHovered, setIsHovered] = useState(false)\n const ref = useRef<T>(null)\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n\n const handleMouseEnter = () => setIsHovered(true)\n const handleMouseLeave = () => setIsHovered(false)\n\n node.addEventListener('mouseenter', handleMouseEnter)\n node.addEventListener('mouseleave', handleMouseLeave)\n\n return () => {\n node.removeEventListener('mouseenter', handleMouseEnter)\n node.removeEventListener('mouseleave', handleMouseLeave)\n }\n }, [])\n\n return { ref, isHovered }\n}\n"],"names":["useHover","isHovered","setIsHovered","useState","ref","useRef","useEffect","node","handleMouseEnter","handleMouseLeave"],"mappings":";AAmBO,SAASA,IAAmE;AACjF,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAMC,EAAU,IAAI;AAE1B,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAOH,EAAI;AACjB,QAAI,CAACG,EAAM;AAEX,UAAMC,IAAmB,MAAMN,EAAa,EAAI,GAC1CO,IAAmB,MAAMP,EAAa,EAAK;AAEjD,WAAAK,EAAK,iBAAiB,cAAcC,CAAgB,GACpDD,EAAK,iBAAiB,cAAcE,CAAgB,GAE7C,MAAM;AACX,MAAAF,EAAK,oBAAoB,cAAcC,CAAgB,GACvDD,EAAK,oBAAoB,cAAcE,CAAgB;AAAA,IACzD;AAAA,EACF,GAAG,CAAA,CAAE,GAEE,EAAE,KAAAL,GAAK,WAAAH,EAAA;AAChB;"}
1
+ {"version":3,"file":"index104.js","sources":["../src/hooks/useKeyPress.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react'\n\nexport interface UseKeyPressOptions {\n /** Target element (default: window) */\n target?: HTMLElement | Window | null\n /** Event type: 'keydown' | 'keyup' (default: 'keydown') */\n event?: 'keydown' | 'keyup'\n /** Prevent default browser behavior */\n preventDefault?: boolean\n}\n\n/**\n * Hook that detects when a specific key is pressed.\n *\n * @param targetKey - Key to detect (e.g., 'Enter', 'Escape', 'a')\n * @param options - Configuration options\n * @returns Whether the key is currently pressed\n *\n * @example\n * const enterPressed = useKeyPress('Enter')\n * const escapePressed = useKeyPress('Escape')\n *\n * useEffect(() => {\n * if (escapePressed) closeModal()\n * }, [escapePressed])\n *\n * @example\n * // With callback for immediate action\n * useKeyPress('Escape', { preventDefault: true })\n */\nexport function useKeyPress(\n targetKey: string,\n options: UseKeyPressOptions = {}\n): boolean {\n const { target, event = 'keydown', preventDefault = false } = options\n const [keyPressed, setKeyPressed] = useState(false)\n\n const downHandler = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === targetKey) {\n if (preventDefault) e.preventDefault()\n setKeyPressed(true)\n }\n },\n [targetKey, preventDefault]\n )\n\n const upHandler = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === targetKey) {\n setKeyPressed(false)\n }\n },\n [targetKey]\n )\n\n useEffect(() => {\n const targetElement = target ?? window\n\n if (event === 'keydown') {\n targetElement.addEventListener('keydown', downHandler as EventListener)\n targetElement.addEventListener('keyup', upHandler as EventListener)\n } else {\n targetElement.addEventListener('keyup', downHandler as EventListener)\n }\n\n return () => {\n targetElement.removeEventListener('keydown', downHandler as EventListener)\n targetElement.removeEventListener('keyup', upHandler as EventListener)\n }\n }, [target, event, downHandler, upHandler])\n\n return keyPressed\n}\n\n/**\n * Hook that calls a callback when a specific key is pressed.\n *\n * @param targetKey - Key to detect\n * @param callback - Function to call when key is pressed\n * @param options - Configuration options\n *\n * @example\n * useKeyPressCallback('Escape', () => closeModal())\n * useKeyPressCallback('Enter', () => submitForm(), { preventDefault: true })\n */\nexport function useKeyPressCallback(\n targetKey: string,\n callback: (event: KeyboardEvent) => void,\n options: UseKeyPressOptions = {}\n): void {\n const { target, event = 'keydown', preventDefault = false } = options\n\n useEffect(() => {\n const targetElement = target ?? window\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === targetKey) {\n if (preventDefault) e.preventDefault()\n callback(e)\n }\n }\n\n targetElement.addEventListener(event, handler as EventListener)\n return () => targetElement.removeEventListener(event, handler as EventListener)\n }, [target, targetKey, callback, event, preventDefault])\n}\n"],"names":["useKeyPress","targetKey","options","target","event","preventDefault","keyPressed","setKeyPressed","useState","downHandler","useCallback","upHandler","useEffect","targetElement","useKeyPressCallback","callback","handler","e"],"mappings":";AA8BO,SAASA,EACdC,GACAC,IAA8B,IACrB;AACT,QAAM,EAAE,QAAAC,GAAQ,OAAAC,IAAQ,WAAW,gBAAAC,IAAiB,OAAUH,GACxD,CAACI,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAE5CC,IAAcC;AAAA,IAClB,CAAC,MAAqB;AACpB,MAAI,EAAE,QAAQT,MACRI,OAAkB,eAAA,GACtBE,EAAc,EAAI;AAAA,IAEtB;AAAA,IACA,CAACN,GAAWI,CAAc;AAAA,EAAA,GAGtBM,IAAYD;AAAA,IAChB,CAAC,MAAqB;AACpB,MAAI,EAAE,QAAQT,KACZM,EAAc,EAAK;AAAA,IAEvB;AAAA,IACA,CAACN,CAAS;AAAA,EAAA;AAGZ,SAAAW,EAAU,MAAM;AACd,UAAMC,IAAgBV,KAAU;AAEhC,WAAIC,MAAU,aACZS,EAAc,iBAAiB,WAAWJ,CAA4B,GACtEI,EAAc,iBAAiB,SAASF,CAA0B,KAElEE,EAAc,iBAAiB,SAASJ,CAA4B,GAG/D,MAAM;AACX,MAAAI,EAAc,oBAAoB,WAAWJ,CAA4B,GACzEI,EAAc,oBAAoB,SAASF,CAA0B;AAAA,IACvE;AAAA,EACF,GAAG,CAACR,GAAQC,GAAOK,GAAaE,CAAS,CAAC,GAEnCL;AACT;AAaO,SAASQ,EACdb,GACAc,GACAb,IAA8B,CAAA,GACxB;AACN,QAAM,EAAE,QAAAC,GAAQ,OAAAC,IAAQ,WAAW,gBAAAC,IAAiB,OAAUH;AAE9D,EAAAU,EAAU,MAAM;AACd,UAAMC,IAAgBV,KAAU,QAE1Ba,IAAU,CAACC,MAAqB;AACpC,MAAIA,EAAE,QAAQhB,MACRI,OAAkB,eAAA,GACtBU,EAASE,CAAC;AAAA,IAEd;AAEA,WAAAJ,EAAc,iBAAiBT,GAAOY,CAAwB,GACvD,MAAMH,EAAc,oBAAoBT,GAAOY,CAAwB;AAAA,EAChF,GAAG,CAACb,GAAQF,GAAWc,GAAUX,GAAOC,CAAc,CAAC;AACzD;"}
package/dist/index105.js CHANGED
@@ -1,34 +1,21 @@
1
- import { useState as v, useCallback as i, useEffect as l } from "react";
2
- function c(n, f = {}) {
3
- const { target: u, event: o = "keydown", preventDefault: r = !1 } = f, [a, d] = v(!1), t = i(
4
- (e) => {
5
- e.key === n && (r && e.preventDefault(), d(!0));
6
- },
7
- [n, r]
8
- ), s = i(
9
- (e) => {
10
- e.key === n && d(!1);
11
- },
12
- [n]
13
- );
14
- return l(() => {
15
- const e = u ?? window;
16
- return o === "keydown" ? (e.addEventListener("keydown", t), e.addEventListener("keyup", s)) : e.addEventListener("keyup", t), () => {
17
- e.removeEventListener("keydown", t), e.removeEventListener("keyup", s);
1
+ import { useState as t, useEffect as d } from "react";
2
+ function r() {
3
+ const [i, n] = t(() => typeof window > "u" ? { width: 0, height: 0 } : {
4
+ width: window.innerWidth,
5
+ height: window.innerHeight
6
+ });
7
+ return d(() => {
8
+ if (typeof window > "u") return;
9
+ const e = () => {
10
+ n({
11
+ width: window.innerWidth,
12
+ height: window.innerHeight
13
+ });
18
14
  };
19
- }, [u, o, t, s]), a;
20
- }
21
- function y(n, f, u = {}) {
22
- const { target: o, event: r = "keydown", preventDefault: a = !1 } = u;
23
- l(() => {
24
- const d = o ?? window, t = (s) => {
25
- s.key === n && (a && s.preventDefault(), f(s));
26
- };
27
- return d.addEventListener(r, t), () => d.removeEventListener(r, t);
28
- }, [o, n, f, r, a]);
15
+ return window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
16
+ }, []), i;
29
17
  }
30
18
  export {
31
- c as useKeyPress,
32
- y as useKeyPressCallback
19
+ r as useWindowSize
33
20
  };
34
21
  //# sourceMappingURL=index105.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index105.js","sources":["../src/hooks/useKeyPress.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react'\n\nexport interface UseKeyPressOptions {\n /** Target element (default: window) */\n target?: HTMLElement | Window | null\n /** Event type: 'keydown' | 'keyup' (default: 'keydown') */\n event?: 'keydown' | 'keyup'\n /** Prevent default browser behavior */\n preventDefault?: boolean\n}\n\n/**\n * Hook that detects when a specific key is pressed.\n *\n * @param targetKey - Key to detect (e.g., 'Enter', 'Escape', 'a')\n * @param options - Configuration options\n * @returns Whether the key is currently pressed\n *\n * @example\n * const enterPressed = useKeyPress('Enter')\n * const escapePressed = useKeyPress('Escape')\n *\n * useEffect(() => {\n * if (escapePressed) closeModal()\n * }, [escapePressed])\n *\n * @example\n * // With callback for immediate action\n * useKeyPress('Escape', { preventDefault: true })\n */\nexport function useKeyPress(\n targetKey: string,\n options: UseKeyPressOptions = {}\n): boolean {\n const { target, event = 'keydown', preventDefault = false } = options\n const [keyPressed, setKeyPressed] = useState(false)\n\n const downHandler = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === targetKey) {\n if (preventDefault) e.preventDefault()\n setKeyPressed(true)\n }\n },\n [targetKey, preventDefault]\n )\n\n const upHandler = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === targetKey) {\n setKeyPressed(false)\n }\n },\n [targetKey]\n )\n\n useEffect(() => {\n const targetElement = target ?? window\n\n if (event === 'keydown') {\n targetElement.addEventListener('keydown', downHandler as EventListener)\n targetElement.addEventListener('keyup', upHandler as EventListener)\n } else {\n targetElement.addEventListener('keyup', downHandler as EventListener)\n }\n\n return () => {\n targetElement.removeEventListener('keydown', downHandler as EventListener)\n targetElement.removeEventListener('keyup', upHandler as EventListener)\n }\n }, [target, event, downHandler, upHandler])\n\n return keyPressed\n}\n\n/**\n * Hook that calls a callback when a specific key is pressed.\n *\n * @param targetKey - Key to detect\n * @param callback - Function to call when key is pressed\n * @param options - Configuration options\n *\n * @example\n * useKeyPressCallback('Escape', () => closeModal())\n * useKeyPressCallback('Enter', () => submitForm(), { preventDefault: true })\n */\nexport function useKeyPressCallback(\n targetKey: string,\n callback: (event: KeyboardEvent) => void,\n options: UseKeyPressOptions = {}\n): void {\n const { target, event = 'keydown', preventDefault = false } = options\n\n useEffect(() => {\n const targetElement = target ?? window\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === targetKey) {\n if (preventDefault) e.preventDefault()\n callback(e)\n }\n }\n\n targetElement.addEventListener(event, handler as EventListener)\n return () => targetElement.removeEventListener(event, handler as EventListener)\n }, [target, targetKey, callback, event, preventDefault])\n}\n"],"names":["useKeyPress","targetKey","options","target","event","preventDefault","keyPressed","setKeyPressed","useState","downHandler","useCallback","upHandler","useEffect","targetElement","useKeyPressCallback","callback","handler","e"],"mappings":";AA8BO,SAASA,EACdC,GACAC,IAA8B,IACrB;AACT,QAAM,EAAE,QAAAC,GAAQ,OAAAC,IAAQ,WAAW,gBAAAC,IAAiB,OAAUH,GACxD,CAACI,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAE5CC,IAAcC;AAAA,IAClB,CAAC,MAAqB;AACpB,MAAI,EAAE,QAAQT,MACRI,OAAkB,eAAA,GACtBE,EAAc,EAAI;AAAA,IAEtB;AAAA,IACA,CAACN,GAAWI,CAAc;AAAA,EAAA,GAGtBM,IAAYD;AAAA,IAChB,CAAC,MAAqB;AACpB,MAAI,EAAE,QAAQT,KACZM,EAAc,EAAK;AAAA,IAEvB;AAAA,IACA,CAACN,CAAS;AAAA,EAAA;AAGZ,SAAAW,EAAU,MAAM;AACd,UAAMC,IAAgBV,KAAU;AAEhC,WAAIC,MAAU,aACZS,EAAc,iBAAiB,WAAWJ,CAA4B,GACtEI,EAAc,iBAAiB,SAASF,CAA0B,KAElEE,EAAc,iBAAiB,SAASJ,CAA4B,GAG/D,MAAM;AACX,MAAAI,EAAc,oBAAoB,WAAWJ,CAA4B,GACzEI,EAAc,oBAAoB,SAASF,CAA0B;AAAA,IACvE;AAAA,EACF,GAAG,CAACR,GAAQC,GAAOK,GAAaE,CAAS,CAAC,GAEnCL;AACT;AAaO,SAASQ,EACdb,GACAc,GACAb,IAA8B,CAAA,GACxB;AACN,QAAM,EAAE,QAAAC,GAAQ,OAAAC,IAAQ,WAAW,gBAAAC,IAAiB,OAAUH;AAE9D,EAAAU,EAAU,MAAM;AACd,UAAMC,IAAgBV,KAAU,QAE1Ba,IAAU,CAACC,MAAqB;AACpC,MAAIA,EAAE,QAAQhB,MACRI,OAAkB,eAAA,GACtBU,EAASE,CAAC;AAAA,IAEd;AAEA,WAAAJ,EAAc,iBAAiBT,GAAOY,CAAwB,GACvD,MAAMH,EAAc,oBAAoBT,GAAOY,CAAwB;AAAA,EAChF,GAAG,CAACb,GAAQF,GAAWc,GAAUX,GAAOC,CAAc,CAAC;AACzD;"}
1
+ {"version":3,"file":"index105.js","sources":["../src/hooks/useWindowSize.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\n\nexport interface WindowSize {\n width: number\n height: number\n}\n\n/**\n * Hook that tracks window dimensions.\n * Updates on window resize.\n *\n * @returns Object with current width and height\n *\n * @example\n * const { width, height } = useWindowSize()\n *\n * return (\n * <div>\n * Window: {width} x {height}\n * {width < 768 && <MobileNav />}\n * </div>\n * )\n */\nexport function useWindowSize(): WindowSize {\n const [windowSize, setWindowSize] = useState<WindowSize>(() => {\n if (typeof window === 'undefined') {\n return { width: 0, height: 0 }\n }\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n })\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const handleResize = () => {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n return windowSize\n}\n"],"names":["useWindowSize","windowSize","setWindowSize","useState","useEffect","handleResize"],"mappings":";AAuBO,SAASA,IAA4B;AAC1C,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAqB,MACnD,OAAO,SAAW,MACb,EAAE,OAAO,GAAG,QAAQ,EAAA,IAEtB;AAAA,IACL,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,EAAA,CAElB;AAED,SAAAC,EAAU,MAAM;AACd,QAAI,OAAO,SAAW,IAAa;AAEnC,UAAMC,IAAe,MAAM;AACzB,MAAAH,EAAc;AAAA,QACZ,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MAAA,CAChB;AAAA,IACH;AAEA,kBAAO,iBAAiB,UAAUG,CAAY,GACvC,MAAM,OAAO,oBAAoB,UAAUA,CAAY;AAAA,EAChE,GAAG,CAAA,CAAE,GAEEJ;AACT;"}
package/dist/index13.js CHANGED
@@ -1,38 +1,98 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import { forwardRef as o } from "react";
3
- import { WeekCalendar as s, MonthCalendar as i } from "./index107.js";
4
- import { en as k, fr as u } from "./index107.js";
5
- /* empty css */
6
- const n = o(
7
- ({ children: a, className: e = "" }, l) => /* @__PURE__ */ r(
8
- "div",
9
- {
10
- ref: l,
11
- className: `calendar-daisyui ${e}`,
12
- "data-testid": "calendar",
13
- children: a
14
- }
15
- )
16
- );
17
- n.displayName = "CalendarWrapper";
18
- const d = ({
19
- className: a = "",
20
- ...e
21
- }) => /* @__PURE__ */ r(n, { className: a, children: /* @__PURE__ */ r(i, { ...e }) });
22
- d.displayName = "Calendar.Month";
23
- const t = ({
24
- className: a = "",
25
- ...e
26
- }) => /* @__PURE__ */ r(n, { className: a, children: /* @__PURE__ */ r(s, { ...e }) });
27
- t.displayName = "Calendar.Week";
28
- const f = {
29
- Month: d,
30
- Week: t
31
- };
1
+ import { jsxs as e, jsx as s, Fragment as h } from "react/jsx-runtime";
2
+ function g({ children: r, hoverable: a = !1, className: d = "", style: c, ...o }) {
3
+ const n = [
4
+ "p-6 border border-base-content/10",
5
+ a && "cursor-pointer hover:shadow-md transition-shadow",
6
+ d
7
+ ].filter(Boolean).join(" ");
8
+ return /* @__PURE__ */ s("div", { className: n, style: c, ...o, children: r });
9
+ }
10
+ function j({
11
+ children: r,
12
+ title: a,
13
+ cover: d,
14
+ actions: c,
15
+ className: o = "",
16
+ style: n,
17
+ size: m,
18
+ bordered: v = !0,
19
+ side: w = !1,
20
+ imageFull: x = !1,
21
+ actionsJustify: t = "end",
22
+ loading: b = !1,
23
+ hoverable: k = !1,
24
+ avatar: l,
25
+ description: i,
26
+ ...f
27
+ }) {
28
+ const N = [
29
+ "card",
30
+ "bg-base-100",
31
+ m && {
32
+ xs: "card-xs",
33
+ sm: "card-sm",
34
+ md: "card-md",
35
+ lg: "card-lg",
36
+ xl: "card-xl"
37
+ }[m],
38
+ v && "border border-base-content/10 shadow-sm",
39
+ w && "card-side",
40
+ x && "image-full",
41
+ k && "transition-shadow hover:shadow-lg cursor-pointer",
42
+ o
43
+ ].filter(Boolean).join(" "), u = {
44
+ start: "justify-start",
45
+ center: "justify-center",
46
+ end: "justify-end"
47
+ };
48
+ return b ? /* @__PURE__ */ e("div", { className: N, style: n, ...f, children: [
49
+ d && /* @__PURE__ */ s("figure", { children: /* @__PURE__ */ s("div", { className: "skeleton h-48 w-full rounded-none" }) }),
50
+ /* @__PURE__ */ e("div", { className: "card-body", children: [
51
+ (l || a) && /* @__PURE__ */ e("div", { className: "flex gap-4 mb-4", children: [
52
+ l && /* @__PURE__ */ s("div", { className: "skeleton w-12 h-12 rounded-full flex-shrink-0" }),
53
+ /* @__PURE__ */ e("div", { className: "flex-1 space-y-2", children: [
54
+ /* @__PURE__ */ s("div", { className: "skeleton h-6 w-2/3" }),
55
+ i && /* @__PURE__ */ s("div", { className: "skeleton h-4 w-full" })
56
+ ] })
57
+ ] }),
58
+ !l && !a && /* @__PURE__ */ e(h, { children: [
59
+ /* @__PURE__ */ s("div", { className: "skeleton h-6 w-2/3 mb-4" }),
60
+ /* @__PURE__ */ e("div", { className: "space-y-2", children: [
61
+ /* @__PURE__ */ s("div", { className: "skeleton h-4 w-full" }),
62
+ /* @__PURE__ */ s("div", { className: "skeleton h-4 w-5/6" }),
63
+ /* @__PURE__ */ s("div", { className: "skeleton h-4 w-4/6" })
64
+ ] })
65
+ ] }),
66
+ c && /* @__PURE__ */ e("div", { className: `card-actions ${u[t]} mt-4`, children: [
67
+ /* @__PURE__ */ s("div", { className: "skeleton h-10 w-20" }),
68
+ /* @__PURE__ */ s("div", { className: "skeleton h-10 w-20" })
69
+ ] })
70
+ ] })
71
+ ] }) : /* @__PURE__ */ e("div", { className: N, style: n, ...f, children: [
72
+ d && /* @__PURE__ */ s("figure", { children: d }),
73
+ /* @__PURE__ */ e("div", { className: "card-body", children: [
74
+ l || a && i ? /* @__PURE__ */ e(h, { children: [
75
+ /* @__PURE__ */ e("div", { className: "flex gap-4", children: [
76
+ l && /* @__PURE__ */ s("div", { className: "flex-shrink-0", children: l }),
77
+ /* @__PURE__ */ e("div", { className: "flex-1 min-w-0", children: [
78
+ a && /* @__PURE__ */ s("h2", { className: "card-title", children: a }),
79
+ i && /* @__PURE__ */ s("p", { className: "text-sm opacity-70 mt-1", children: i })
80
+ ] })
81
+ ] }),
82
+ r
83
+ ] }) : /* @__PURE__ */ e(h, { children: [
84
+ a && /* @__PURE__ */ s("h2", { className: "card-title", children: a }),
85
+ r
86
+ ] }),
87
+ c && /* @__PURE__ */ s("div", { className: `card-actions ${u[t]}`, children: c })
88
+ ] })
89
+ ] });
90
+ }
91
+ const B = Object.assign(j, {
92
+ Grid: g
93
+ });
32
94
  export {
33
- f as Calendar,
34
- f as default,
35
- k as en,
36
- u as fr
95
+ B as Card,
96
+ B as default
37
97
  };
38
98
  //# sourceMappingURL=index13.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index13.js","sources":["../src/components/Calendar.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport {\n MonthCalendar as BaseMonthCalendar,\n WeekCalendar as BaseWeekCalendar,\n en,\n fr,\n} from '@vinctus/calendar'\nimport type {\n MonthCalendarProps as BaseMonthCalendarProps,\n WeekCalendarProps as BaseWeekCalendarProps,\n CalendarEvent,\n CalendarLocale,\n} from '@vinctus/calendar'\nimport '@vinctus/calendar/dist/index.css'\n\n// Re-export types and locales\nexport type { CalendarEvent, CalendarLocale }\nexport { en, fr }\n\nexport interface MonthCalendarProps<T extends CalendarEvent = CalendarEvent>\n extends Omit<BaseMonthCalendarProps<T>, 'theme'> {\n className?: string\n}\n\nexport interface WeekCalendarProps<T extends CalendarEvent = CalendarEvent>\n extends Omit<BaseWeekCalendarProps<T>, 'theme'> {\n className?: string\n}\n\ninterface CalendarWrapperProps {\n children: React.ReactNode\n className?: string\n}\n\nconst CalendarWrapper = forwardRef<HTMLDivElement, CalendarWrapperProps>(\n ({ children, className = '' }, ref) => {\n return (\n <div\n ref={ref}\n className={`calendar-daisyui ${className}`}\n data-testid=\"calendar\"\n >\n {children}\n </div>\n )\n }\n)\nCalendarWrapper.displayName = 'CalendarWrapper'\n\nconst MonthCalendar = <T extends CalendarEvent = CalendarEvent>({\n className = '',\n ...props\n}: MonthCalendarProps<T>) => {\n return (\n <CalendarWrapper className={className}>\n <BaseMonthCalendar {...props} />\n </CalendarWrapper>\n )\n}\nMonthCalendar.displayName = 'Calendar.Month'\n\nconst WeekCalendar = <T extends CalendarEvent = CalendarEvent>({\n className = '',\n ...props\n}: WeekCalendarProps<T>) => {\n return (\n <CalendarWrapper className={className}>\n <BaseWeekCalendar {...props} />\n </CalendarWrapper>\n )\n}\nWeekCalendar.displayName = 'Calendar.Week'\n\ninterface CalendarComponent {\n Month: typeof MonthCalendar\n Week: typeof WeekCalendar\n}\n\nexport const Calendar: CalendarComponent = {\n Month: MonthCalendar,\n Week: WeekCalendar,\n}\n\nexport default Calendar\n"],"names":["CalendarWrapper","forwardRef","children","className","ref","jsx","MonthCalendar","props","BaseMonthCalendar","WeekCalendar","BaseWeekCalendar","Calendar"],"mappings":";;;;;AAkCA,MAAMA,IAAkBC;AAAA,EACtB,CAAC,EAAE,UAAAC,GAAU,WAAAC,IAAY,GAAA,GAAMC,MAE3B,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW,oBAAoBD,CAAS;AAAA,MACxC,eAAY;AAAA,MAEX,UAAAD;AAAA,IAAA;AAAA,EAAA;AAIT;AACAF,EAAgB,cAAc;AAE9B,MAAMM,IAAgB,CAA0C;AAAA,EAC9D,WAAAH,IAAY;AAAA,EACZ,GAAGI;AACL,wBAEKP,GAAA,EAAgB,WAAAG,GACf,4BAACK,GAAA,EAAmB,GAAGD,GAAO,GAChC;AAGJD,EAAc,cAAc;AAE5B,MAAMG,IAAe,CAA0C;AAAA,EAC7D,WAAAN,IAAY;AAAA,EACZ,GAAGI;AACL,wBAEKP,GAAA,EAAgB,WAAAG,GACf,4BAACO,GAAA,EAAkB,GAAGH,GAAO,GAC/B;AAGJE,EAAa,cAAc;AAOpB,MAAME,IAA8B;AAAA,EACzC,OAAOL;AAAA,EACP,MAAMG;AACR;"}
1
+ {"version":3,"file":"index13.js","sources":["../src/components/Card.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n children: React.ReactNode\n title?: React.ReactNode\n cover?: React.ReactNode\n actions?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n bordered?: boolean\n side?: boolean\n imageFull?: boolean\n actionsJustify?: 'start' | 'center' | 'end'\n loading?: boolean\n hoverable?: boolean\n // Meta props for avatar + description layout\n avatar?: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface CardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n hoverable?: boolean\n}\n\nfunction CardGrid({ children, hoverable = false, className = '', style, ...rest }: CardGridProps) {\n const classes = [\n 'p-6 border border-base-content/10',\n hoverable && 'cursor-pointer hover:shadow-md transition-shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={classes} style={style} {...rest}>\n {children}\n </div>\n )\n}\n\nfunction CardRoot({\n children,\n title,\n cover,\n actions,\n className = '',\n style,\n size,\n bordered = true,\n side = false,\n imageFull = false,\n actionsJustify = 'end',\n loading = false,\n hoverable = false,\n avatar,\n description,\n ...rest\n}: CardProps) {\n const sizeClasses: Record<string, string> = {\n xs: 'card-xs',\n sm: 'card-sm',\n md: 'card-md',\n lg: 'card-lg',\n xl: 'card-xl',\n }\n\n const classes = [\n 'card',\n 'bg-base-100',\n size && sizeClasses[size],\n bordered && 'border border-base-content/10 shadow-sm',\n side && 'card-side',\n imageFull && 'image-full',\n hoverable && 'transition-shadow hover:shadow-lg cursor-pointer',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n }\n\n if (loading) {\n return (\n <div className={classes} style={style} {...rest}>\n {cover && (\n <figure>\n <div className=\"skeleton h-48 w-full rounded-none\" />\n </figure>\n )}\n <div className=\"card-body\">\n {(avatar || title) && (\n <div className=\"flex gap-4 mb-4\">\n {avatar && <div className=\"skeleton w-12 h-12 rounded-full flex-shrink-0\" />}\n <div className=\"flex-1 space-y-2\">\n <div className=\"skeleton h-6 w-2/3\" />\n {description && <div className=\"skeleton h-4 w-full\" />}\n </div>\n </div>\n )}\n {!avatar && !title && (\n <>\n <div className=\"skeleton h-6 w-2/3 mb-4\" />\n <div className=\"space-y-2\">\n <div className=\"skeleton h-4 w-full\" />\n <div className=\"skeleton h-4 w-5/6\" />\n <div className=\"skeleton h-4 w-4/6\" />\n </div>\n </>\n )}\n {actions && (\n <div className={`card-actions ${justifyClasses[actionsJustify]} mt-4`}>\n <div className=\"skeleton h-10 w-20\" />\n <div className=\"skeleton h-10 w-20\" />\n </div>\n )}\n </div>\n </div>\n )\n }\n\n // Render with avatar + title + description layout (meta style)\n const hasMetaLayout = avatar || (title && description)\n\n return (\n <div className={classes} style={style} {...rest}>\n {cover && <figure>{cover}</figure>}\n <div className=\"card-body\">\n {hasMetaLayout ? (\n <>\n <div className=\"flex gap-4\">\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && <h2 className=\"card-title\">{title}</h2>}\n {description && <p className=\"text-sm opacity-70 mt-1\">{description}</p>}\n </div>\n </div>\n {children}\n </>\n ) : (\n <>\n {title && <h2 className=\"card-title\">{title}</h2>}\n {children}\n </>\n )}\n {actions && <div className={`card-actions ${justifyClasses[actionsJustify]}`}>{actions}</div>}\n </div>\n </div>\n )\n}\n\nexport const Card = Object.assign(CardRoot, {\n Grid: CardGrid,\n})\n\nexport default Card\n"],"names":["CardGrid","children","hoverable","className","style","rest","classes","CardRoot","title","cover","actions","size","bordered","side","imageFull","actionsJustify","loading","avatar","description","justifyClasses","jsx","jsxs","Fragment","Card"],"mappings":"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"}
package/dist/index14.js CHANGED
@@ -1,98 +1,161 @@
1
- import { jsxs as e, jsx as s, Fragment as h } from "react/jsx-runtime";
2
- function g({ children: r, hoverable: a = !1, className: d = "", style: c, ...o }) {
3
- const n = [
4
- "p-6 border border-base-content/10",
5
- a && "cursor-pointer hover:shadow-md transition-shadow",
6
- d
7
- ].filter(Boolean).join(" ");
8
- return /* @__PURE__ */ s("div", { className: n, style: c, ...o, children: r });
9
- }
10
- function j({
11
- children: r,
12
- title: a,
13
- cover: d,
14
- actions: c,
15
- className: o = "",
16
- style: n,
17
- size: m,
18
- bordered: v = !0,
19
- side: w = !1,
20
- imageFull: x = !1,
21
- actionsJustify: t = "end",
22
- loading: b = !1,
23
- hoverable: k = !1,
24
- avatar: l,
25
- description: i,
26
- ...f
1
+ import { jsxs as m, jsx as n } from "react/jsx-runtime";
2
+ import { useState as g, useRef as I, useId as j, useEffect as $, useCallback as E } from "react";
3
+ function T({
4
+ options: c,
5
+ value: b,
6
+ onChange: k,
7
+ placeholder: M = "Please select",
8
+ disabled: i = !1,
9
+ allowClear: S = !0,
10
+ expandTrigger: D = "click",
11
+ displayRender: w,
12
+ size: C = "md",
13
+ className: B = "",
14
+ ...H
27
15
  }) {
28
- const N = [
29
- "card",
30
- "bg-base-100",
31
- m && {
32
- xs: "card-xs",
33
- sm: "card-sm",
34
- md: "card-md",
35
- lg: "card-lg",
36
- xl: "card-xl"
37
- }[m],
38
- v && "border border-base-content/10 shadow-sm",
39
- w && "card-side",
40
- x && "image-full",
41
- k && "transition-shadow hover:shadow-lg cursor-pointer",
42
- o
43
- ].filter(Boolean).join(" "), u = {
44
- start: "justify-start",
45
- center: "justify-center",
46
- end: "justify-end"
16
+ const [r, d] = g(!1), [o, p] = g(b || []), [y, u] = g([]), x = I(null), W = j(), N = j();
17
+ $(() => {
18
+ b !== void 0 && p(b);
19
+ }, [b]), $(() => {
20
+ const e = (s) => {
21
+ x.current && !x.current.contains(s.target) && (d(!1), u([]));
22
+ };
23
+ if (r)
24
+ return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
25
+ }, [r]);
26
+ const z = E((e, s) => {
27
+ if (e === 0) return c;
28
+ let t = c;
29
+ for (let l = 0; l < e; l++) {
30
+ const a = t.find((f) => f.value === s[l]);
31
+ if (!a?.children) return [];
32
+ t = a.children;
33
+ }
34
+ return t;
35
+ }, [c]), O = E((e) => {
36
+ const s = [];
37
+ let t = c;
38
+ for (const l of e) {
39
+ const a = t.find((f) => f.value === l);
40
+ if (!a) break;
41
+ s.push(a), t = a.children || [];
42
+ }
43
+ return s;
44
+ }, [c]), h = r && y.length > 0 ? y : o, v = [];
45
+ v.push(c);
46
+ for (let e = 0; e < h.length; e++) {
47
+ const s = z(e + 1, h);
48
+ s.length > 0 && v.push(s);
49
+ }
50
+ const K = (e, s) => {
51
+ if (e.disabled) return;
52
+ const t = [...h.slice(0, s), e.value];
53
+ e.children && e.children.length > 0 ? u(t) : (p(t), d(!1), u([]), k?.(t, O(t)));
54
+ }, A = (e, s) => {
55
+ if (D !== "hover" || e.disabled) return;
56
+ const t = [...h.slice(0, s), e.value];
57
+ u(t);
58
+ }, R = (e) => {
59
+ e.stopPropagation(), p([]), k?.([], []);
60
+ }, V = (e) => {
61
+ if (!i)
62
+ switch (e.key) {
63
+ case "Enter":
64
+ case " ":
65
+ e.preventDefault(), d(!r);
66
+ break;
67
+ case "Escape":
68
+ e.preventDefault(), d(!1), u([]);
69
+ break;
70
+ }
71
+ }, L = O(o), P = L.map((e) => e.label), q = w ? w(P, L) : P.join(" / "), F = {
72
+ xs: "input-xs text-xs",
73
+ sm: "input-sm text-sm",
74
+ md: "input-md",
75
+ lg: "input-lg text-lg"
76
+ }, G = {
77
+ xs: "text-xs",
78
+ sm: "text-sm",
79
+ md: "text-base",
80
+ lg: "text-lg"
47
81
  };
48
- return b ? /* @__PURE__ */ e("div", { className: N, style: n, ...f, children: [
49
- d && /* @__PURE__ */ s("figure", { children: /* @__PURE__ */ s("div", { className: "skeleton h-48 w-full rounded-none" }) }),
50
- /* @__PURE__ */ e("div", { className: "card-body", children: [
51
- (l || a) && /* @__PURE__ */ e("div", { className: "flex gap-4 mb-4", children: [
52
- l && /* @__PURE__ */ s("div", { className: "skeleton w-12 h-12 rounded-full flex-shrink-0" }),
53
- /* @__PURE__ */ e("div", { className: "flex-1 space-y-2", children: [
54
- /* @__PURE__ */ s("div", { className: "skeleton h-6 w-2/3" }),
55
- i && /* @__PURE__ */ s("div", { className: "skeleton h-4 w-full" })
56
- ] })
57
- ] }),
58
- !l && !a && /* @__PURE__ */ e(h, { children: [
59
- /* @__PURE__ */ s("div", { className: "skeleton h-6 w-2/3 mb-4" }),
60
- /* @__PURE__ */ e("div", { className: "space-y-2", children: [
61
- /* @__PURE__ */ s("div", { className: "skeleton h-4 w-full" }),
62
- /* @__PURE__ */ s("div", { className: "skeleton h-4 w-5/6" }),
63
- /* @__PURE__ */ s("div", { className: "skeleton h-4 w-4/6" })
64
- ] })
65
- ] }),
66
- c && /* @__PURE__ */ e("div", { className: `card-actions ${u[t]} mt-4`, children: [
67
- /* @__PURE__ */ s("div", { className: "skeleton h-10 w-20" }),
68
- /* @__PURE__ */ s("div", { className: "skeleton h-10 w-20" })
69
- ] })
70
- ] })
71
- ] }) : /* @__PURE__ */ e("div", { className: N, style: n, ...f, children: [
72
- d && /* @__PURE__ */ s("figure", { children: d }),
73
- /* @__PURE__ */ e("div", { className: "card-body", children: [
74
- l || a && i ? /* @__PURE__ */ e(h, { children: [
75
- /* @__PURE__ */ e("div", { className: "flex gap-4", children: [
76
- l && /* @__PURE__ */ s("div", { className: "flex-shrink-0", children: l }),
77
- /* @__PURE__ */ e("div", { className: "flex-1 min-w-0", children: [
78
- a && /* @__PURE__ */ s("h2", { className: "card-title", children: a }),
79
- i && /* @__PURE__ */ s("p", { className: "text-sm opacity-70 mt-1", children: i })
82
+ return /* @__PURE__ */ m("div", { ref: x, className: `relative inline-block w-full ${B}`, "data-state": r ? "open" : "closed", ...H, children: [
83
+ /* @__PURE__ */ m(
84
+ "div",
85
+ {
86
+ id: W,
87
+ role: "combobox",
88
+ "aria-expanded": r,
89
+ "aria-haspopup": "listbox",
90
+ "aria-controls": N,
91
+ tabIndex: i ? -1 : 0,
92
+ className: `input input-bordered w-full flex items-center justify-between cursor-pointer ${F[C]} ${i ? "input-disabled cursor-not-allowed" : ""} ${r ? "border-primary" : ""}`,
93
+ onClick: () => !i && d(!r),
94
+ onKeyDown: V,
95
+ children: [
96
+ /* @__PURE__ */ n("span", { className: o.length === 0 ? "text-base-content/50" : "", children: o.length > 0 ? q : M }),
97
+ /* @__PURE__ */ m("div", { className: "flex items-center gap-1", children: [
98
+ S && o.length > 0 && !i && /* @__PURE__ */ n(
99
+ "button",
100
+ {
101
+ type: "button",
102
+ className: "btn btn-ghost btn-xs btn-circle",
103
+ onClick: R,
104
+ "aria-label": "Clear selection",
105
+ children: /* @__PURE__ */ n("svg", { className: "w-3 h-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
106
+ }
107
+ ),
108
+ /* @__PURE__ */ n(
109
+ "svg",
110
+ {
111
+ className: `w-4 h-4 transition-transform ${r ? "rotate-180" : ""}`,
112
+ fill: "none",
113
+ viewBox: "0 0 24 24",
114
+ stroke: "currentColor",
115
+ children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
116
+ }
117
+ )
80
118
  ] })
81
- ] }),
82
- r
83
- ] }) : /* @__PURE__ */ e(h, { children: [
84
- a && /* @__PURE__ */ s("h2", { className: "card-title", children: a }),
85
- r
86
- ] }),
87
- c && /* @__PURE__ */ s("div", { className: `card-actions ${u[t]}`, children: c })
88
- ] })
119
+ ]
120
+ }
121
+ ),
122
+ r && /* @__PURE__ */ n(
123
+ "div",
124
+ {
125
+ id: N,
126
+ className: `absolute z-50 mt-1 bg-base-100 border border-base-300 rounded-lg shadow-lg flex ${G[C]}`,
127
+ children: v.map((e, s) => /* @__PURE__ */ n(
128
+ "ul",
129
+ {
130
+ role: "listbox",
131
+ className: `min-w-[120px] max-h-[200px] overflow-y-auto py-1 ${s > 0 ? "border-l border-base-300" : ""}`,
132
+ children: e.map((t) => {
133
+ const l = o[s] === t.value, a = h[s] === t.value, f = t.children && t.children.length > 0;
134
+ return /* @__PURE__ */ m(
135
+ "li",
136
+ {
137
+ role: "option",
138
+ "aria-selected": l,
139
+ "aria-disabled": t.disabled,
140
+ className: `px-3 py-2 cursor-pointer flex items-center justify-between gap-2 ${t.disabled ? "text-base-content/30 cursor-not-allowed" : l ? "bg-primary text-primary-content" : a ? "bg-base-200" : "hover:bg-base-200"}`,
141
+ onClick: () => K(t, s),
142
+ onMouseEnter: () => A(t, s),
143
+ children: [
144
+ /* @__PURE__ */ n("span", { children: t.label }),
145
+ f && /* @__PURE__ */ n("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
146
+ ]
147
+ },
148
+ t.value
149
+ );
150
+ })
151
+ },
152
+ s
153
+ ))
154
+ }
155
+ )
89
156
  ] });
90
157
  }
91
- const B = Object.assign(j, {
92
- Grid: g
93
- });
94
158
  export {
95
- B as Card,
96
- B as default
159
+ T as Cascader
97
160
  };
98
161
  //# sourceMappingURL=index14.js.map