asterui 0.12.13 → 0.12.15

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 (182) hide show
  1. package/dist/components/Autocomplete.d.ts +22 -2
  2. package/dist/components/Button.d.ts +14 -5
  3. package/dist/components/Drawer.d.ts +47 -6
  4. package/dist/components/Dropdown.d.ts +65 -9
  5. package/dist/components/Form.d.ts +11 -1
  6. package/dist/components/Input.d.ts +15 -1
  7. package/dist/components/Modal.d.ts +5 -1
  8. package/dist/components/Navbar.d.ts +15 -1
  9. package/dist/components/Rating.d.ts +12 -4
  10. package/dist/components/SidebarDrawer.d.ts +21 -0
  11. package/dist/components/Tabs.d.ts +30 -4
  12. package/dist/index.d.ts +6 -4
  13. package/dist/index.js +169 -167
  14. package/dist/index.js.map +1 -1
  15. package/dist/index100.js +44 -11
  16. package/dist/index100.js.map +1 -1
  17. package/dist/index101.js +10 -12
  18. package/dist/index101.js.map +1 -1
  19. package/dist/index102.js +14 -7
  20. package/dist/index102.js.map +1 -1
  21. package/dist/index103.js +7 -12
  22. package/dist/index103.js.map +1 -1
  23. package/dist/index104.js +11 -29
  24. package/dist/index104.js.map +1 -1
  25. package/dist/index105.js +29 -16
  26. package/dist/index105.js.map +1 -1
  27. package/dist/index106.js +21 -0
  28. package/dist/index106.js.map +1 -0
  29. package/dist/index21.js +1 -1
  30. package/dist/index26.js +171 -40
  31. package/dist/index26.js.map +1 -1
  32. package/dist/index27.js +41 -17
  33. package/dist/index27.js.map +1 -1
  34. package/dist/index28.js +17 -33
  35. package/dist/index28.js.map +1 -1
  36. package/dist/index29.js +33 -52
  37. package/dist/index29.js.map +1 -1
  38. package/dist/index30.js +50 -61
  39. package/dist/index30.js.map +1 -1
  40. package/dist/index31.js +60 -181
  41. package/dist/index31.js.map +1 -1
  42. package/dist/index32.js +184 -18
  43. package/dist/index32.js.map +1 -1
  44. package/dist/index33.js +15 -217
  45. package/dist/index33.js.map +1 -1
  46. package/dist/index34.js +230 -1083
  47. package/dist/index34.js.map +1 -1
  48. package/dist/index35.js +1086 -16
  49. package/dist/index35.js.map +1 -1
  50. package/dist/index36.js +16 -121
  51. package/dist/index36.js.map +1 -1
  52. package/dist/index37.js +119 -37
  53. package/dist/index37.js.map +1 -1
  54. package/dist/index38.js +34 -208
  55. package/dist/index38.js.map +1 -1
  56. package/dist/index39.js +390 -89
  57. package/dist/index39.js.map +1 -1
  58. package/dist/index40.js +93 -158
  59. package/dist/index40.js.map +1 -1
  60. package/dist/index41.js +211 -135
  61. package/dist/index41.js.map +1 -1
  62. package/dist/index42.js +155 -15
  63. package/dist/index42.js.map +1 -1
  64. package/dist/index43.js +15 -17
  65. package/dist/index43.js.map +1 -1
  66. package/dist/index44.js +17 -21
  67. package/dist/index44.js.map +1 -1
  68. package/dist/index45.js +18 -134
  69. package/dist/index45.js.map +1 -1
  70. package/dist/index46.js +134 -10
  71. package/dist/index46.js.map +1 -1
  72. package/dist/index47.js +13 -35
  73. package/dist/index47.js.map +1 -1
  74. package/dist/index48.js +35 -34
  75. package/dist/index48.js.map +1 -1
  76. package/dist/index49.js +34 -81
  77. package/dist/index49.js.map +1 -1
  78. package/dist/index5.js +161 -80
  79. package/dist/index5.js.map +1 -1
  80. package/dist/index50.js +71 -166
  81. package/dist/index50.js.map +1 -1
  82. package/dist/index51.js +167 -144
  83. package/dist/index51.js.map +1 -1
  84. package/dist/index52.js +152 -11
  85. package/dist/index52.js.map +1 -1
  86. package/dist/index53.js +10 -20
  87. package/dist/index53.js.map +1 -1
  88. package/dist/index54.js +22 -14
  89. package/dist/index54.js.map +1 -1
  90. package/dist/index55.js +14 -7
  91. package/dist/index55.js.map +1 -1
  92. package/dist/index56.js +6 -310
  93. package/dist/index56.js.map +1 -1
  94. package/dist/index57.js +334 -17
  95. package/dist/index57.js.map +1 -1
  96. package/dist/index58.js +47 -122
  97. package/dist/index58.js.map +1 -1
  98. package/dist/index59.js +120 -108
  99. package/dist/index59.js.map +1 -1
  100. package/dist/index60.js +107 -167
  101. package/dist/index60.js.map +1 -1
  102. package/dist/index61.js +167 -29
  103. package/dist/index61.js.map +1 -1
  104. package/dist/index62.js +30 -120
  105. package/dist/index62.js.map +1 -1
  106. package/dist/index63.js +116 -80
  107. package/dist/index63.js.map +1 -1
  108. package/dist/index64.js +85 -19
  109. package/dist/index64.js.map +1 -1
  110. package/dist/index65.js +19 -73
  111. package/dist/index65.js.map +1 -1
  112. package/dist/index66.js +71 -54
  113. package/dist/index66.js.map +1 -1
  114. package/dist/index67.js +56 -44
  115. package/dist/index67.js.map +1 -1
  116. package/dist/index68.js +42 -49
  117. package/dist/index68.js.map +1 -1
  118. package/dist/index69.js +52 -62
  119. package/dist/index69.js.map +1 -1
  120. package/dist/index70.js +118 -102
  121. package/dist/index70.js.map +1 -1
  122. package/dist/index71.js +107 -41
  123. package/dist/index71.js.map +1 -1
  124. package/dist/index72.js +41 -68
  125. package/dist/index72.js.map +1 -1
  126. package/dist/index73.js +66 -19
  127. package/dist/index73.js.map +1 -1
  128. package/dist/index74.js +18 -55
  129. package/dist/index74.js.map +1 -1
  130. package/dist/index75.js +55 -251
  131. package/dist/index75.js.map +1 -1
  132. package/dist/index76.js +254 -22
  133. package/dist/index76.js.map +1 -1
  134. package/dist/index77.js +22 -31
  135. package/dist/index77.js.map +1 -1
  136. package/dist/index78.js +30 -93
  137. package/dist/index78.js.map +1 -1
  138. package/dist/index79.js +89 -324
  139. package/dist/index79.js.map +1 -1
  140. package/dist/index80.js +323 -50
  141. package/dist/index80.js.map +1 -1
  142. package/dist/index81.js +79 -39
  143. package/dist/index81.js.map +1 -1
  144. package/dist/index82.js +40 -23
  145. package/dist/index82.js.map +1 -1
  146. package/dist/index83.js +21 -93
  147. package/dist/index83.js.map +1 -1
  148. package/dist/index84.js +87 -148
  149. package/dist/index84.js.map +1 -1
  150. package/dist/index85.js +147 -152
  151. package/dist/index85.js.map +1 -1
  152. package/dist/index86.js +159 -63
  153. package/dist/index86.js.map +1 -1
  154. package/dist/index87.js +65 -35
  155. package/dist/index87.js.map +1 -1
  156. package/dist/index88.js +35 -234
  157. package/dist/index88.js.map +1 -1
  158. package/dist/index89.js +231 -31
  159. package/dist/index89.js.map +1 -1
  160. package/dist/index9.js +73 -46
  161. package/dist/index9.js.map +1 -1
  162. package/dist/index90.js +34 -210
  163. package/dist/index90.js.map +1 -1
  164. package/dist/index91.js +195 -198
  165. package/dist/index91.js.map +1 -1
  166. package/dist/index92.js +159 -241
  167. package/dist/index92.js.map +1 -1
  168. package/dist/index93.js +283 -166
  169. package/dist/index93.js.map +1 -1
  170. package/dist/index94.js +173 -253
  171. package/dist/index94.js.map +1 -1
  172. package/dist/index95.js +258 -14
  173. package/dist/index95.js.map +1 -1
  174. package/dist/index96.js +12 -31
  175. package/dist/index96.js.map +1 -1
  176. package/dist/index97.js +32 -5
  177. package/dist/index97.js.map +1 -1
  178. package/dist/index98.js +5 -13
  179. package/dist/index98.js.map +1 -1
  180. package/dist/index99.js +11 -43
  181. package/dist/index99.js.map +1 -1
  182. package/package.json +1 -1
@@ -1 +1 @@
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;"}
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;"}
package/dist/index105.js CHANGED
@@ -1,21 +1,34 @@
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
- });
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);
14
18
  };
15
- return window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
16
- }, []), i;
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]);
17
29
  }
18
30
  export {
19
- r as useWindowSize
31
+ c as useKeyPress,
32
+ y as useKeyPressCallback
20
33
  };
21
34
  //# sourceMappingURL=index105.js.map
@@ -1 +1 @@
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;"}
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;"}
@@ -0,0 +1,21 @@
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
+ });
14
+ };
15
+ return window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
16
+ }, []), i;
17
+ }
18
+ export {
19
+ r as useWindowSize
20
+ };
21
+ //# sourceMappingURL=index106.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index106.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/index21.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsxs as m, jsx as n } from "react/jsx-runtime";
2
2
  import { useState as h, useRef as j, useEffect as y } from "react";
3
- import { Input as T } from "./index40.js";
3
+ import { Input as T } from "./index41.js";
4
4
  const $ = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], I = [
5
5
  "January",
6
6
  "February",
package/dist/index26.js CHANGED
@@ -1,44 +1,175 @@
1
- import { jsxs as s, jsx as e } from "react/jsx-runtime";
2
- import f from "react";
3
- const N = ({
4
- children: l,
5
- sidebar: d,
6
- open: a = !1,
7
- onOpenChange: o,
8
- end: c = !1,
9
- className: t = "",
10
- sidebarClassName: n = "",
11
- ...i
12
- }) => {
13
- const r = f.useId(), m = (b) => {
14
- o?.(b.target.checked);
15
- }, h = ["drawer", c && "drawer-end", t].filter(Boolean).join(" "), w = ["menu bg-base-200 min-h-full w-80 p-4", n].filter(Boolean).join(" ");
16
- return /* @__PURE__ */ s("div", { className: h, "data-state": a ? "open" : "closed", ...i, children: [
17
- /* @__PURE__ */ e(
18
- "input",
19
- {
20
- id: r,
21
- type: "checkbox",
22
- className: "drawer-toggle",
23
- checked: a,
24
- onChange: m
25
- }
26
- ),
27
- /* @__PURE__ */ e("div", { className: "drawer-content", children: l }),
28
- /* @__PURE__ */ s("div", { className: "drawer-side", children: [
29
- /* @__PURE__ */ e(
30
- "label",
31
- {
32
- htmlFor: r,
33
- "aria-label": "close sidebar",
34
- className: "drawer-overlay"
1
+ import { jsxs as c, jsx as o } from "react/jsx-runtime";
2
+ import { useRef as l, useId as $, useState as D, useEffect as R, useCallback as S } from "react";
3
+ import { createPortal as U } from "react-dom";
4
+ function ee({
5
+ children: j,
6
+ open: r = !1,
7
+ onClose: s,
8
+ title: a,
9
+ placement: i = "right",
10
+ size: u = "default",
11
+ width: M,
12
+ height: q,
13
+ closable: y = !0,
14
+ mask: I = !0,
15
+ maskClosable: K = !0,
16
+ keyboard: p = !0,
17
+ footer: v,
18
+ extra: x,
19
+ className: A = "",
20
+ rootClassName: B = "",
21
+ style: C,
22
+ zIndex: F = 1e3,
23
+ destroyOnClose: w = !1,
24
+ initialFocus: g = "close"
25
+ }) {
26
+ const d = l(null), f = l(null), m = l(null), k = l(null), E = $(), N = $(), [V, X] = D(!1), [Y, L] = D(r);
27
+ R(() => {
28
+ X(!0);
29
+ }, []);
30
+ const z = () => typeof u == "number" ? u : u === "large" ? 736 : 378, H = () => {
31
+ const e = i === "left" || i === "right", n = z();
32
+ if (e) {
33
+ const t = M ?? n;
34
+ return { width: typeof t == "number" ? `${t}px` : t };
35
+ } else {
36
+ const t = q ?? n;
37
+ return { height: typeof t == "number" ? `${t}px` : t };
38
+ }
39
+ }, b = S((e) => {
40
+ if (!d.current || e.key !== "Tab" || typeof document > "u") return;
41
+ const n = d.current.querySelectorAll(
42
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
43
+ ), t = n[0], T = n[n.length - 1];
44
+ e.shiftKey && document.activeElement === t ? (e.preventDefault(), T?.focus()) : !e.shiftKey && document.activeElement === T && (e.preventDefault(), t?.focus());
45
+ }, []), h = S((e) => {
46
+ p && e.key === "Escape" && s && (e.preventDefault(), s());
47
+ }, [p, s]);
48
+ R(() => {
49
+ if (!(typeof document > "u"))
50
+ if (r) {
51
+ L(!0), k.current = document.activeElement, document.body.style.overflow = "hidden";
52
+ const e = setTimeout(() => {
53
+ g === "close" && f.current ? f.current.focus() : m.current && m.current.querySelector(
54
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
55
+ )?.focus();
56
+ }, 0);
57
+ return document.addEventListener("keydown", h), document.addEventListener("keydown", b), () => {
58
+ clearTimeout(e), document.body.style.overflow = "", document.removeEventListener("keydown", h), document.removeEventListener("keydown", b);
59
+ };
60
+ } else {
61
+ const e = k.current;
62
+ if (e && document.body.contains(e) && e.focus(), w) {
63
+ const n = setTimeout(() => L(!1), 300);
64
+ return () => clearTimeout(n);
35
65
  }
36
- ),
37
- /* @__PURE__ */ e("div", { className: w, children: d })
38
- ] })
39
- ] });
40
- };
66
+ }
67
+ }, [r, h, b, w, g]);
68
+ const P = () => {
69
+ K && s && s();
70
+ }, W = {
71
+ top: "inset-x-0 top-0",
72
+ right: "inset-y-0 right-0",
73
+ bottom: "inset-x-0 bottom-0",
74
+ left: "inset-y-0 left-0"
75
+ }, G = (e) => {
76
+ if (e) return "translate(0, 0)";
77
+ switch (i) {
78
+ case "top":
79
+ return "translateY(-100%)";
80
+ case "right":
81
+ return "translateX(100%)";
82
+ case "bottom":
83
+ return "translateY(100%)";
84
+ case "left":
85
+ return "translateX(-100%)";
86
+ }
87
+ }, J = H(), Q = /* @__PURE__ */ c(
88
+ "div",
89
+ {
90
+ className: `fixed inset-0 ${r ? "" : "pointer-events-none"} ${B}`,
91
+ style: { zIndex: F },
92
+ role: "presentation",
93
+ "data-state": r ? "open" : "closed",
94
+ children: [
95
+ I && /* @__PURE__ */ o(
96
+ "div",
97
+ {
98
+ className: `absolute inset-0 bg-black transition-opacity duration-300 ${r ? "opacity-50" : "opacity-0"}`,
99
+ onClick: P,
100
+ "aria-hidden": "true"
101
+ }
102
+ ),
103
+ /* @__PURE__ */ c(
104
+ "div",
105
+ {
106
+ ref: d,
107
+ role: "dialog",
108
+ "aria-modal": "true",
109
+ "aria-labelledby": a ? E : void 0,
110
+ "aria-describedby": N,
111
+ className: `fixed flex flex-col bg-base-100 shadow-xl transition-transform duration-300 ease-in-out ${W[i]} ${A}`,
112
+ style: {
113
+ ...J,
114
+ transform: G(r),
115
+ ...C
116
+ },
117
+ children: [
118
+ (a || y || x) && /* @__PURE__ */ c("div", { className: "flex items-center justify-between px-6 py-4 border-b border-base-300", children: [
119
+ a && /* @__PURE__ */ o("h2", { id: E, className: "text-lg font-semibold", children: a }),
120
+ /* @__PURE__ */ c("div", { className: "flex items-center gap-2 ml-auto", children: [
121
+ x,
122
+ y && /* @__PURE__ */ o(
123
+ "button",
124
+ {
125
+ ref: f,
126
+ type: "button",
127
+ className: "btn btn-ghost btn-sm btn-square",
128
+ onClick: s,
129
+ "aria-label": "Close drawer",
130
+ children: /* @__PURE__ */ o(
131
+ "svg",
132
+ {
133
+ xmlns: "http://www.w3.org/2000/svg",
134
+ className: "h-5 w-5",
135
+ fill: "none",
136
+ viewBox: "0 0 24 24",
137
+ stroke: "currentColor",
138
+ "aria-hidden": "true",
139
+ children: /* @__PURE__ */ o(
140
+ "path",
141
+ {
142
+ strokeLinecap: "round",
143
+ strokeLinejoin: "round",
144
+ strokeWidth: 2,
145
+ d: "M6 18L18 6M6 6l12 12"
146
+ }
147
+ )
148
+ }
149
+ )
150
+ }
151
+ )
152
+ ] })
153
+ ] }),
154
+ /* @__PURE__ */ o(
155
+ "div",
156
+ {
157
+ ref: m,
158
+ id: N,
159
+ className: "flex-1 overflow-auto p-6",
160
+ children: j
161
+ }
162
+ ),
163
+ v && /* @__PURE__ */ o("div", { className: "px-6 py-4 border-t border-base-300", children: v })
164
+ ]
165
+ }
166
+ )
167
+ ]
168
+ }
169
+ );
170
+ return !V || !Y && !r ? null : U(Q, document.body);
171
+ }
41
172
  export {
42
- N as Drawer
173
+ ee as Drawer
43
174
  };
44
175
  //# sourceMappingURL=index26.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index26.js","sources":["../src/components/Drawer.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface DrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n children: React.ReactNode\n sidebar: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n end?: boolean\n sidebarClassName?: string\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n sidebar,\n open = false,\n onOpenChange,\n end = false,\n className = '',\n sidebarClassName = '',\n ...rest\n}) => {\n const drawerId = React.useId()\n\n const handleToggle = (e: React.ChangeEvent<HTMLInputElement>) => {\n onOpenChange?.(e.target.checked)\n }\n\n const drawerClasses = ['drawer', end && 'drawer-end', className]\n .filter(Boolean)\n .join(' ')\n\n const sidebarClasses = ['menu bg-base-200 min-h-full w-80 p-4', sidebarClassName]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={drawerClasses} data-state={open ? 'open' : 'closed'} {...rest}>\n <input\n id={drawerId}\n type=\"checkbox\"\n className=\"drawer-toggle\"\n checked={open}\n onChange={handleToggle}\n />\n <div className=\"drawer-content\">{children}</div>\n <div className=\"drawer-side\">\n <label\n htmlFor={drawerId}\n aria-label=\"close sidebar\"\n className=\"drawer-overlay\"\n />\n <div className={sidebarClasses}>{sidebar}</div>\n </div>\n </div>\n )\n}\n"],"names":["Drawer","children","sidebar","open","onOpenChange","end","className","sidebarClassName","rest","drawerId","React","handleToggle","e","drawerClasses","sidebarClasses","jsxs","jsx"],"mappings":";;AAWO,MAAMA,IAAgC,CAAC;AAAA,EAC5C,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,cAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AAAA,EACnB,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAWC,EAAM,MAAA,GAEjBC,IAAe,CAACC,MAA2C;AAC/D,IAAAR,IAAeQ,EAAE,OAAO,OAAO;AAAA,EACjC,GAEMC,IAAgB,CAAC,UAAUR,KAAO,cAAcC,CAAS,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG,GAELQ,IAAiB,CAAC,wCAAwCP,CAAgB,EAC7E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAQ,EAAC,SAAI,WAAWF,GAAe,cAAYV,IAAO,SAAS,UAAW,GAAGK,GACvE,UAAA;AAAA,IAAA,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAIP;AAAA,QACJ,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAASN;AAAA,QACT,UAAUQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAAK,EAAC,OAAA,EAAI,WAAU,kBAAkB,UAAAf,EAAA,CAAS;AAAA,IAC1C,gBAAAc,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASP;AAAA,UACT,cAAW;AAAA,UACX,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAAO,EAAC,OAAA,EAAI,WAAWF,GAAiB,UAAAZ,EAAA,CAAQ;AAAA,IAAA,EAAA,CAC3C;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"index26.js","sources":["../src/components/Drawer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useId, useCallback, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type DrawerPlacement = 'top' | 'right' | 'bottom' | 'left'\nexport type DrawerSize = 'default' | 'large' | number\n\nexport interface DrawerProps {\n /** Drawer content */\n children: React.ReactNode\n /** Whether the drawer is visible */\n open?: boolean\n /** Callback when drawer is closed */\n onClose?: () => void\n /** Drawer title */\n title?: React.ReactNode\n /** Direction drawer slides from */\n placement?: DrawerPlacement\n /** Preset size or custom width/height in pixels */\n size?: DrawerSize\n /** Custom width (overrides size for left/right placement) */\n width?: number | string\n /** Custom height (overrides size for top/bottom placement) */\n height?: number | string\n /** Whether to show close button */\n closable?: boolean\n /** Whether to show mask/backdrop */\n mask?: boolean\n /** Whether clicking mask closes drawer */\n maskClosable?: boolean\n /** Whether ESC closes drawer */\n keyboard?: boolean\n /** Footer content */\n footer?: React.ReactNode\n /** Extra content in header (right side) */\n extra?: React.ReactNode\n /** CSS class for drawer panel */\n className?: string\n /** CSS class for drawer wrapper */\n rootClassName?: string\n /** Style for drawer panel */\n style?: React.CSSProperties\n /** z-index of drawer */\n zIndex?: number\n /** Destroy content when closed */\n destroyOnClose?: boolean\n /** Where to place initial focus */\n initialFocus?: 'close' | 'content'\n}\n\n/**\n * Drawer - A panel that slides in from the edge of the screen.\n * Use for forms, details, or task panels.\n * For responsive sidebar navigation, use SidebarDrawer instead.\n */\nexport function Drawer({\n children,\n open = false,\n onClose,\n title,\n placement = 'right',\n size = 'default',\n width,\n height,\n closable = true,\n mask = true,\n maskClosable = true,\n keyboard = true,\n footer,\n extra,\n className = '',\n rootClassName = '',\n style,\n zIndex = 1000,\n destroyOnClose = false,\n initialFocus = 'close',\n}: DrawerProps) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const closeButtonRef = useRef<HTMLButtonElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n const titleId = useId()\n const contentId = useId()\n const [mounted, setMounted] = useState(false)\n const [shouldRender, setShouldRender] = useState(open)\n\n // Handle SSR - only render portal after mounting in browser\n useEffect(() => {\n setMounted(true)\n }, [])\n\n // Calculate dimensions\n const getSizeValue = (): number => {\n if (typeof size === 'number') return size\n return size === 'large' ? 736 : 378\n }\n\n const getDimension = (): { width?: string; height?: string } => {\n const isHorizontal = placement === 'left' || placement === 'right'\n const sizeValue = getSizeValue()\n\n if (isHorizontal) {\n const w = width ?? sizeValue\n return { width: typeof w === 'number' ? `${w}px` : w }\n } else {\n const h = height ?? sizeValue\n return { height: typeof h === 'number' ? `${h}px` : h }\n }\n }\n\n // Focus trap\n const trapFocus = useCallback((e: KeyboardEvent) => {\n if (!drawerRef.current || e.key !== 'Tab' || typeof document === 'undefined') return\n\n const focusableElements = drawerRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }, [])\n\n // Handle ESC key\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (keyboard && e.key === 'Escape' && onClose) {\n e.preventDefault()\n onClose()\n }\n }, [keyboard, onClose])\n\n // Open/close effects\n useEffect(() => {\n if (typeof document === 'undefined') return\n\n if (open) {\n setShouldRender(true)\n previousActiveElement.current = document.activeElement as HTMLElement\n document.body.style.overflow = 'hidden'\n\n // Set initial focus\n const focusTimeout = setTimeout(() => {\n if (initialFocus === 'close' && closeButtonRef.current) {\n closeButtonRef.current.focus()\n } else if (contentRef.current) {\n const firstFocusable = contentRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n firstFocusable?.focus()\n }\n }, 0)\n\n // Add event listeners\n document.addEventListener('keydown', handleKeyDown)\n document.addEventListener('keydown', trapFocus)\n\n return () => {\n clearTimeout(focusTimeout)\n document.body.style.overflow = ''\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('keydown', trapFocus)\n }\n } else {\n // Restore focus to previously focused element if it's still in the DOM\n const prevElement = previousActiveElement.current\n if (prevElement && document.body.contains(prevElement)) {\n prevElement.focus()\n }\n\n // Handle destroyOnClose\n if (destroyOnClose) {\n const timeout = setTimeout(() => setShouldRender(false), 300)\n return () => clearTimeout(timeout)\n }\n }\n }, [open, handleKeyDown, trapFocus, destroyOnClose, initialFocus])\n\n const handleMaskClick = () => {\n if (maskClosable && onClose) {\n onClose()\n }\n }\n\n // Position classes\n const placementClasses: Record<DrawerPlacement, string> = {\n top: 'inset-x-0 top-0',\n right: 'inset-y-0 right-0',\n bottom: 'inset-x-0 bottom-0',\n left: 'inset-y-0 left-0',\n }\n\n // Transform for animation\n const getTransform = (isOpen: boolean): string => {\n if (isOpen) return 'translate(0, 0)'\n switch (placement) {\n case 'top': return 'translateY(-100%)'\n case 'right': return 'translateX(100%)'\n case 'bottom': return 'translateY(100%)'\n case 'left': return 'translateX(-100%)'\n }\n }\n\n const dimension = getDimension()\n\n const drawerContent = (\n <div\n className={`fixed inset-0 ${open ? '' : 'pointer-events-none'} ${rootClassName}`}\n style={{ zIndex }}\n role=\"presentation\"\n data-state={open ? 'open' : 'closed'}\n >\n {/* Backdrop/Mask */}\n {mask && (\n <div\n className={`absolute inset-0 bg-black transition-opacity duration-300 ${\n open ? 'opacity-50' : 'opacity-0'\n }`}\n onClick={handleMaskClick}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Drawer Panel */}\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={contentId}\n className={`fixed flex flex-col bg-base-100 shadow-xl transition-transform duration-300 ease-in-out ${placementClasses[placement]} ${className}`}\n style={{\n ...dimension,\n transform: getTransform(open),\n ...style,\n }}\n >\n {/* Header */}\n {(title || closable || extra) && (\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-base-300\">\n {title && (\n <h2 id={titleId} className=\"text-lg font-semibold\">\n {title}\n </h2>\n )}\n <div className=\"flex items-center gap-2 ml-auto\">\n {extra}\n {closable && (\n <button\n ref={closeButtonRef}\n type=\"button\"\n className=\"btn btn-ghost btn-sm btn-square\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Content */}\n <div\n ref={contentRef}\n id={contentId}\n className=\"flex-1 overflow-auto p-6\"\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"px-6 py-4 border-t border-base-300\">\n {footer}\n </div>\n )}\n </div>\n </div>\n )\n\n // Don't render during SSR or when not needed\n if (!mounted || (!shouldRender && !open)) return null\n\n return createPortal(drawerContent, document.body)\n}\n"],"names":["Drawer","children","open","onClose","title","placement","size","width","height","closable","mask","maskClosable","keyboard","footer","extra","className","rootClassName","style","zIndex","destroyOnClose","initialFocus","drawerRef","useRef","closeButtonRef","contentRef","previousActiveElement","titleId","useId","contentId","mounted","setMounted","useState","shouldRender","setShouldRender","useEffect","getSizeValue","getDimension","isHorizontal","sizeValue","w","h","trapFocus","useCallback","focusableElements","firstElement","lastElement","handleKeyDown","focusTimeout","prevElement","timeout","handleMaskClick","placementClasses","getTransform","isOpen","dimension","drawerContent","jsxs","jsx","createPortal"],"mappings":"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"}
package/dist/index27.js CHANGED
@@ -1,20 +1,44 @@
1
- import { jsx as n } from "react/jsx-runtime";
2
- function i({ children: e, className: s = "", ...l }) {
3
- const t = ["fieldset", s].filter(Boolean).join(" ");
4
- return /* @__PURE__ */ n("fieldset", { className: t, ...l, children: e });
5
- }
6
- function o({ children: e, className: s = "" }) {
7
- return /* @__PURE__ */ n("legend", { className: `fieldset-legend ${s}`, children: e });
8
- }
9
- function a({ children: e, className: s = "", ...l }) {
10
- const t = ["fieldset-label", s].filter(Boolean).join(" ");
11
- return /* @__PURE__ */ n("label", { className: t, ...l, children: e });
12
- }
13
- const d = Object.assign(i, {
14
- Legend: o,
15
- Label: a
16
- });
1
+ import { jsxs as s, jsx as e } from "react/jsx-runtime";
2
+ import f from "react";
3
+ const N = ({
4
+ children: l,
5
+ sidebar: d,
6
+ open: a = !1,
7
+ onOpenChange: o,
8
+ end: c = !1,
9
+ className: t = "",
10
+ sidebarClassName: n = "",
11
+ ...i
12
+ }) => {
13
+ const r = f.useId(), m = (b) => {
14
+ o?.(b.target.checked);
15
+ }, h = ["drawer", c && "drawer-end", t].filter(Boolean).join(" "), w = ["menu bg-base-200 min-h-full w-80 p-4", n].filter(Boolean).join(" ");
16
+ return /* @__PURE__ */ s("div", { className: h, "data-state": a ? "open" : "closed", ...i, children: [
17
+ /* @__PURE__ */ e(
18
+ "input",
19
+ {
20
+ id: r,
21
+ type: "checkbox",
22
+ className: "drawer-toggle",
23
+ checked: a,
24
+ onChange: m
25
+ }
26
+ ),
27
+ /* @__PURE__ */ e("div", { className: "drawer-content", children: l }),
28
+ /* @__PURE__ */ s("div", { className: "drawer-side", children: [
29
+ /* @__PURE__ */ e(
30
+ "label",
31
+ {
32
+ htmlFor: r,
33
+ "aria-label": "close sidebar",
34
+ className: "drawer-overlay"
35
+ }
36
+ ),
37
+ /* @__PURE__ */ e("div", { className: w, children: d })
38
+ ] })
39
+ ] });
40
+ };
17
41
  export {
18
- d as Fieldset
42
+ N as SidebarDrawer
19
43
  };
20
44
  //# sourceMappingURL=index27.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index27.js","sources":["../src/components/Fieldset.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface FieldsetProps extends React.FieldsetHTMLAttributes<HTMLFieldSetElement> {\n children: React.ReactNode\n className?: string\n}\n\nexport interface FieldsetLegendProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface FieldsetLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode\n className?: string\n}\n\nfunction FieldsetRoot({ children, className = '', ...props }: FieldsetProps) {\n const classes = ['fieldset', className].filter(Boolean).join(' ')\n\n return (\n <fieldset className={classes} {...props}>\n {children}\n </fieldset>\n )\n}\n\nfunction FieldsetLegend({ children, className = '' }: FieldsetLegendProps) {\n return <legend className={`fieldset-legend ${className}`}>{children}</legend>\n}\n\nfunction FieldsetLabel({ children, className = '', ...props }: FieldsetLabelProps) {\n const classes = ['fieldset-label', className].filter(Boolean).join(' ')\n return <label className={classes} {...props}>{children}</label>\n}\n\nexport const Fieldset = Object.assign(FieldsetRoot, {\n Legend: FieldsetLegend,\n Label: FieldsetLabel,\n})\n"],"names":["FieldsetRoot","children","className","props","classes","FieldsetLegend","FieldsetLabel","Fieldset"],"mappings":";AAiBA,SAASA,EAAa,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAAwB;AAC3E,QAAMC,IAAU,CAAC,YAAYF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEhE,2BACG,YAAA,EAAS,WAAWE,GAAU,GAAGD,GAC/B,UAAAF,GACH;AAEJ;AAEA,SAASI,EAAe,EAAE,UAAAJ,GAAU,WAAAC,IAAY,MAA2B;AACzE,2BAAQ,UAAA,EAAO,WAAW,mBAAmBA,CAAS,IAAK,UAAAD,GAAS;AACtE;AAEA,SAASK,EAAc,EAAE,UAAAL,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAA6B;AACjF,QAAMC,IAAU,CAAC,kBAAkBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACtE,2BAAQ,SAAA,EAAM,WAAWE,GAAU,GAAGD,GAAQ,UAAAF,GAAS;AACzD;AAEO,MAAMM,IAAW,OAAO,OAAOP,GAAc;AAAA,EAClD,QAAQK;AAAA,EACR,OAAOC;AACT,CAAC;"}
1
+ {"version":3,"file":"index27.js","sources":["../src/components/SidebarDrawer.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface SidebarDrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Main content area */\n children: React.ReactNode\n /** Sidebar content */\n sidebar: React.ReactNode\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Position sidebar on the right side */\n end?: boolean\n /** Additional classes for sidebar container */\n sidebarClassName?: string\n}\n\n/**\n * SidebarDrawer - A responsive sidebar layout component using DaisyUI's drawer.\n * Use for navigation sidebars that toggle on mobile.\n * For overlay panel drawers (forms, details), use the Drawer component instead.\n */\nexport const SidebarDrawer: React.FC<SidebarDrawerProps> = ({\n children,\n sidebar,\n open = false,\n onOpenChange,\n end = false,\n className = '',\n sidebarClassName = '',\n ...rest\n}) => {\n const drawerId = React.useId()\n\n const handleToggle = (e: React.ChangeEvent<HTMLInputElement>) => {\n onOpenChange?.(e.target.checked)\n }\n\n const drawerClasses = ['drawer', end && 'drawer-end', className]\n .filter(Boolean)\n .join(' ')\n\n const sidebarClasses = ['menu bg-base-200 min-h-full w-80 p-4', sidebarClassName]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={drawerClasses} data-state={open ? 'open' : 'closed'} {...rest}>\n <input\n id={drawerId}\n type=\"checkbox\"\n className=\"drawer-toggle\"\n checked={open}\n onChange={handleToggle}\n />\n <div className=\"drawer-content\">{children}</div>\n <div className=\"drawer-side\">\n <label\n htmlFor={drawerId}\n aria-label=\"close sidebar\"\n className=\"drawer-overlay\"\n />\n <div className={sidebarClasses}>{sidebar}</div>\n </div>\n </div>\n )\n}\n"],"names":["SidebarDrawer","children","sidebar","open","onOpenChange","end","className","sidebarClassName","rest","drawerId","React","handleToggle","e","drawerClasses","sidebarClasses","jsxs","jsx"],"mappings":";;AAsBO,MAAMA,IAA8C,CAAC;AAAA,EAC1D,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,cAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AAAA,EACnB,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAWC,EAAM,MAAA,GAEjBC,IAAe,CAACC,MAA2C;AAC/D,IAAAR,IAAeQ,EAAE,OAAO,OAAO;AAAA,EACjC,GAEMC,IAAgB,CAAC,UAAUR,KAAO,cAAcC,CAAS,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG,GAELQ,IAAiB,CAAC,wCAAwCP,CAAgB,EAC7E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAQ,EAAC,SAAI,WAAWF,GAAe,cAAYV,IAAO,SAAS,UAAW,GAAGK,GACvE,UAAA;AAAA,IAAA,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAIP;AAAA,QACJ,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAASN;AAAA,QACT,UAAUQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAAK,EAAC,OAAA,EAAI,WAAU,kBAAkB,UAAAf,EAAA,CAAS;AAAA,IAC1C,gBAAAc,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASP;AAAA,UACT,cAAW;AAAA,UACX,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAAO,EAAC,OAAA,EAAI,WAAWF,GAAiB,UAAAZ,EAAA,CAAQ;AAAA,IAAA,EAAA,CAC3C;AAAA,EAAA,GACF;AAEJ;"}
package/dist/index28.js CHANGED
@@ -1,36 +1,20 @@
1
- import { jsx as o } from "react/jsx-runtime";
2
- import { forwardRef as a } from "react";
3
- const c = a(
4
- ({ size: i, color: e, ghost: n = !1, bordered: l = !0, className: t = "", ...s }, r) => {
5
- const f = {
6
- xs: "file-input-xs",
7
- sm: "file-input-sm",
8
- md: "file-input-md",
9
- lg: "file-input-lg",
10
- xl: "file-input-xl"
11
- }, p = {
12
- neutral: "file-input-neutral",
13
- primary: "file-input-primary",
14
- secondary: "file-input-secondary",
15
- accent: "file-input-accent",
16
- info: "file-input-info",
17
- success: "file-input-success",
18
- warning: "file-input-warning",
19
- error: "file-input-error"
20
- }, u = [
21
- "file-input",
22
- "w-full",
23
- l && "file-input-bordered",
24
- n && "file-input-ghost",
25
- i && f[i],
26
- e && p[e],
27
- t
28
- ].filter(Boolean).join(" ");
29
- return /* @__PURE__ */ o("input", { ref: r, type: "file", className: u, ...s });
30
- }
31
- );
32
- c.displayName = "FileInput";
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ function i({ children: e, className: s = "", ...l }) {
3
+ const t = ["fieldset", s].filter(Boolean).join(" ");
4
+ return /* @__PURE__ */ n("fieldset", { className: t, ...l, children: e });
5
+ }
6
+ function o({ children: e, className: s = "" }) {
7
+ return /* @__PURE__ */ n("legend", { className: `fieldset-legend ${s}`, children: e });
8
+ }
9
+ function a({ children: e, className: s = "", ...l }) {
10
+ const t = ["fieldset-label", s].filter(Boolean).join(" ");
11
+ return /* @__PURE__ */ n("label", { className: t, ...l, children: e });
12
+ }
13
+ const d = Object.assign(i, {
14
+ Legend: o,
15
+ Label: a
16
+ });
33
17
  export {
34
- c as FileInput
18
+ d as Fieldset
35
19
  };
36
20
  //# sourceMappingURL=index28.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index28.js","sources":["../src/components/FileInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport interface FileInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(\n ({ size, color, ghost = false, bordered = true, className = '', ...props }, ref) => {\n const sizeClasses = {\n xs: 'file-input-xs',\n sm: 'file-input-sm',\n md: 'file-input-md',\n lg: 'file-input-lg',\n xl: 'file-input-xl',\n }\n\n const colorClasses = {\n neutral: 'file-input-neutral',\n primary: 'file-input-primary',\n secondary: 'file-input-secondary',\n accent: 'file-input-accent',\n info: 'file-input-info',\n success: 'file-input-success',\n warning: 'file-input-warning',\n error: 'file-input-error',\n }\n\n const fileInputClasses = [\n 'file-input',\n 'w-full',\n bordered && 'file-input-bordered',\n ghost && 'file-input-ghost',\n size && sizeClasses[size],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <input ref={ref} type=\"file\" className={fileInputClasses} {...props} />\n }\n)\n\nFileInput.displayName = 'FileInput'\n"],"names":["FileInput","forwardRef","size","color","ghost","bordered","className","props","ref","sizeClasses","colorClasses","fileInputClasses","jsx"],"mappings":";;AAUO,MAAMA,IAAYC;AAAA,EACvB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,OAAAC,IAAQ,IAAO,UAAAC,IAAW,IAAM,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAClF,UAAMC,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAGAC,IAAe;AAAA,MACnB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAGHC,IAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACAN,KAAY;AAAA,MACZD,KAAS;AAAA,MACTF,KAAQO,EAAYP,CAAI;AAAA,MACxBC,KAASO,EAAaP,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WAAO,gBAAAM,EAAC,WAAM,KAAAJ,GAAU,MAAK,QAAO,WAAWG,GAAmB,GAAGJ,GAAO;AAAA,EAC9E;AACF;AAEAP,EAAU,cAAc;"}
1
+ {"version":3,"file":"index28.js","sources":["../src/components/Fieldset.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface FieldsetProps extends React.FieldsetHTMLAttributes<HTMLFieldSetElement> {\n children: React.ReactNode\n className?: string\n}\n\nexport interface FieldsetLegendProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface FieldsetLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode\n className?: string\n}\n\nfunction FieldsetRoot({ children, className = '', ...props }: FieldsetProps) {\n const classes = ['fieldset', className].filter(Boolean).join(' ')\n\n return (\n <fieldset className={classes} {...props}>\n {children}\n </fieldset>\n )\n}\n\nfunction FieldsetLegend({ children, className = '' }: FieldsetLegendProps) {\n return <legend className={`fieldset-legend ${className}`}>{children}</legend>\n}\n\nfunction FieldsetLabel({ children, className = '', ...props }: FieldsetLabelProps) {\n const classes = ['fieldset-label', className].filter(Boolean).join(' ')\n return <label className={classes} {...props}>{children}</label>\n}\n\nexport const Fieldset = Object.assign(FieldsetRoot, {\n Legend: FieldsetLegend,\n Label: FieldsetLabel,\n})\n"],"names":["FieldsetRoot","children","className","props","classes","FieldsetLegend","FieldsetLabel","Fieldset"],"mappings":";AAiBA,SAASA,EAAa,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAAwB;AAC3E,QAAMC,IAAU,CAAC,YAAYF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEhE,2BACG,YAAA,EAAS,WAAWE,GAAU,GAAGD,GAC/B,UAAAF,GACH;AAEJ;AAEA,SAASI,EAAe,EAAE,UAAAJ,GAAU,WAAAC,IAAY,MAA2B;AACzE,2BAAQ,UAAA,EAAO,WAAW,mBAAmBA,CAAS,IAAK,UAAAD,GAAS;AACtE;AAEA,SAASK,EAAc,EAAE,UAAAL,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAA6B;AACjF,QAAMC,IAAU,CAAC,kBAAkBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACtE,2BAAQ,SAAA,EAAM,WAAWE,GAAU,GAAGD,GAAQ,UAAAF,GAAS;AACzD;AAEO,MAAMM,IAAW,OAAO,OAAOP,GAAc;AAAA,EAClD,QAAQK;AAAA,EACR,OAAOC;AACT,CAAC;"}