asterui 0.12.19 → 0.12.21

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 (204) hide show
  1. package/dist/components/Code.d.ts +2 -0
  2. package/dist/components/CopyButton.d.ts +34 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +205 -203
  5. package/dist/index.js.map +1 -1
  6. package/dist/index10.js +91 -121
  7. package/dist/index10.js.map +1 -1
  8. package/dist/index100.js +5 -13
  9. package/dist/index100.js.map +1 -1
  10. package/dist/index101.js +11 -43
  11. package/dist/index101.js.map +1 -1
  12. package/dist/index102.js +44 -11
  13. package/dist/index102.js.map +1 -1
  14. package/dist/index103.js +10 -12
  15. package/dist/index103.js.map +1 -1
  16. package/dist/index104.js +14 -7
  17. package/dist/index104.js.map +1 -1
  18. package/dist/index105.js +7 -12
  19. package/dist/index105.js.map +1 -1
  20. package/dist/index106.js +11 -29
  21. package/dist/index106.js.map +1 -1
  22. package/dist/index107.js +29 -16
  23. package/dist/index107.js.map +1 -1
  24. package/dist/index108.js +21 -0
  25. package/dist/index108.js.map +1 -0
  26. package/dist/index11.js +123 -30
  27. package/dist/index11.js.map +1 -1
  28. package/dist/index12.js +28 -263
  29. package/dist/index12.js.map +1 -1
  30. package/dist/index13.js +257 -105
  31. package/dist/index13.js.map +1 -1
  32. package/dist/index14.js +108 -153
  33. package/dist/index14.js.map +1 -1
  34. package/dist/index15.js +154 -146
  35. package/dist/index15.js.map +1 -1
  36. package/dist/index16.js +150 -5
  37. package/dist/index16.js.map +1 -1
  38. package/dist/index17.js +5 -71
  39. package/dist/index17.js.map +1 -1
  40. package/dist/index18.js +70 -24
  41. package/dist/index18.js.map +1 -1
  42. package/dist/index19.js +23 -194
  43. package/dist/index19.js.map +1 -1
  44. package/dist/index20.js +188 -106
  45. package/dist/index20.js.map +1 -1
  46. package/dist/index21.js +107 -177
  47. package/dist/index21.js.map +1 -1
  48. package/dist/index22.js +181 -107
  49. package/dist/index22.js.map +1 -1
  50. package/dist/index23.js +110 -19
  51. package/dist/index23.js.map +1 -1
  52. package/dist/index24.js +17 -41
  53. package/dist/index24.js.map +1 -1
  54. package/dist/index25.js +43 -32
  55. package/dist/index25.js.map +1 -1
  56. package/dist/index26.js +30 -170
  57. package/dist/index26.js.map +1 -1
  58. package/dist/index27.js +171 -40
  59. package/dist/index27.js.map +1 -1
  60. package/dist/index28.js +41 -17
  61. package/dist/index28.js.map +1 -1
  62. package/dist/index29.js +17 -33
  63. package/dist/index29.js.map +1 -1
  64. package/dist/index30.js +33 -52
  65. package/dist/index30.js.map +1 -1
  66. package/dist/index31.js +50 -61
  67. package/dist/index31.js.map +1 -1
  68. package/dist/index32.js +60 -181
  69. package/dist/index32.js.map +1 -1
  70. package/dist/index33.js +184 -18
  71. package/dist/index33.js.map +1 -1
  72. package/dist/index34.js +15 -271
  73. package/dist/index34.js.map +1 -1
  74. package/dist/index35.js +270 -1083
  75. package/dist/index35.js.map +1 -1
  76. package/dist/index36.js +1086 -16
  77. package/dist/index36.js.map +1 -1
  78. package/dist/index37.js +17 -17
  79. package/dist/index37.js.map +1 -1
  80. package/dist/index38.js +15 -120
  81. package/dist/index38.js.map +1 -1
  82. package/dist/index39.js +119 -37
  83. package/dist/index39.js.map +1 -1
  84. package/dist/index40.js +40 -398
  85. package/dist/index40.js.map +1 -1
  86. package/dist/index41.js +390 -89
  87. package/dist/index41.js.map +1 -1
  88. package/dist/index42.js +91 -253
  89. package/dist/index42.js.map +1 -1
  90. package/dist/index43.js +249 -145
  91. package/dist/index43.js.map +1 -1
  92. package/dist/index44.js +155 -15
  93. package/dist/index44.js.map +1 -1
  94. package/dist/index45.js +15 -17
  95. package/dist/index45.js.map +1 -1
  96. package/dist/index46.js +16 -136
  97. package/dist/index46.js.map +1 -1
  98. package/dist/index47.js +134 -10
  99. package/dist/index47.js.map +1 -1
  100. package/dist/index48.js +13 -35
  101. package/dist/index48.js.map +1 -1
  102. package/dist/index49.js +35 -34
  103. package/dist/index49.js.map +1 -1
  104. package/dist/index50.js +34 -81
  105. package/dist/index50.js.map +1 -1
  106. package/dist/index51.js +71 -166
  107. package/dist/index51.js.map +1 -1
  108. package/dist/index52.js +167 -144
  109. package/dist/index52.js.map +1 -1
  110. package/dist/index53.js +152 -11
  111. package/dist/index53.js.map +1 -1
  112. package/dist/index54.js +10 -20
  113. package/dist/index54.js.map +1 -1
  114. package/dist/index55.js +55 -12
  115. package/dist/index55.js.map +1 -1
  116. package/dist/index56.js +14 -7
  117. package/dist/index56.js.map +1 -1
  118. package/dist/index57.js +6 -333
  119. package/dist/index57.js.map +1 -1
  120. package/dist/index58.js +334 -47
  121. package/dist/index58.js.map +1 -1
  122. package/dist/index59.js +47 -122
  123. package/dist/index59.js.map +1 -1
  124. package/dist/index60.js +120 -108
  125. package/dist/index60.js.map +1 -1
  126. package/dist/index61.js +107 -167
  127. package/dist/index61.js.map +1 -1
  128. package/dist/index62.js +167 -29
  129. package/dist/index62.js.map +1 -1
  130. package/dist/index63.js +30 -120
  131. package/dist/index63.js.map +1 -1
  132. package/dist/index64.js +116 -80
  133. package/dist/index64.js.map +1 -1
  134. package/dist/index65.js +85 -19
  135. package/dist/index65.js.map +1 -1
  136. package/dist/index66.js +19 -73
  137. package/dist/index66.js.map +1 -1
  138. package/dist/index67.js +71 -54
  139. package/dist/index67.js.map +1 -1
  140. package/dist/index68.js +56 -44
  141. package/dist/index68.js.map +1 -1
  142. package/dist/index69.js +42 -49
  143. package/dist/index69.js.map +1 -1
  144. package/dist/index70.js +50 -121
  145. package/dist/index70.js.map +1 -1
  146. package/dist/index71.js +118 -102
  147. package/dist/index71.js.map +1 -1
  148. package/dist/index72.js +105 -72
  149. package/dist/index72.js.map +1 -1
  150. package/dist/index73.js +73 -67
  151. package/dist/index73.js.map +1 -1
  152. package/dist/index74.js +66 -19
  153. package/dist/index74.js.map +1 -1
  154. package/dist/index75.js +18 -55
  155. package/dist/index75.js.map +1 -1
  156. package/dist/index76.js +55 -251
  157. package/dist/index76.js.map +1 -1
  158. package/dist/index77.js +254 -22
  159. package/dist/index77.js.map +1 -1
  160. package/dist/index78.js +22 -31
  161. package/dist/index78.js.map +1 -1
  162. package/dist/index79.js +30 -93
  163. package/dist/index79.js.map +1 -1
  164. package/dist/index80.js +89 -324
  165. package/dist/index80.js.map +1 -1
  166. package/dist/index81.js +322 -73
  167. package/dist/index81.js.map +1 -1
  168. package/dist/index82.js +79 -39
  169. package/dist/index82.js.map +1 -1
  170. package/dist/index83.js +40 -23
  171. package/dist/index83.js.map +1 -1
  172. package/dist/index84.js +21 -93
  173. package/dist/index84.js.map +1 -1
  174. package/dist/index85.js +87 -148
  175. package/dist/index85.js.map +1 -1
  176. package/dist/index86.js +147 -152
  177. package/dist/index86.js.map +1 -1
  178. package/dist/index87.js +159 -63
  179. package/dist/index87.js.map +1 -1
  180. package/dist/index88.js +65 -35
  181. package/dist/index88.js.map +1 -1
  182. package/dist/index89.js +35 -234
  183. package/dist/index89.js.map +1 -1
  184. package/dist/index90.js +231 -31
  185. package/dist/index90.js.map +1 -1
  186. package/dist/index91.js +34 -210
  187. package/dist/index91.js.map +1 -1
  188. package/dist/index92.js +195 -198
  189. package/dist/index92.js.map +1 -1
  190. package/dist/index93.js +159 -241
  191. package/dist/index93.js.map +1 -1
  192. package/dist/index94.js +283 -166
  193. package/dist/index94.js.map +1 -1
  194. package/dist/index95.js +173 -253
  195. package/dist/index95.js.map +1 -1
  196. package/dist/index96.js +253 -121
  197. package/dist/index96.js.map +1 -1
  198. package/dist/index97.js +126 -14
  199. package/dist/index97.js.map +1 -1
  200. package/dist/index98.js +12 -31
  201. package/dist/index98.js.map +1 -1
  202. package/dist/index99.js +32 -5
  203. package/dist/index99.js.map +1 -1
  204. package/package.json +1 -1
package/dist/index25.js CHANGED
@@ -1,35 +1,46 @@
1
- import { jsx as c } from "react/jsx-runtime";
2
- function l({
3
- children: r,
4
- orientation: e = "horizontal",
5
- position: d = "center",
6
- type: i,
7
- className: n = "",
8
- ...s
9
- }) {
10
- const o = {
11
- start: "divider-start",
12
- center: "",
13
- end: "divider-end"
14
- }, t = {
15
- neutral: "divider-neutral",
16
- primary: "divider-primary",
17
- secondary: "divider-secondary",
18
- accent: "divider-accent",
19
- success: "divider-success",
20
- warning: "divider-warning",
21
- info: "divider-info",
22
- error: "divider-error"
23
- }, a = [
24
- "divider",
25
- e === "vertical" && "divider-horizontal",
26
- o[d],
27
- i && t[i],
28
- n
29
- ].filter(Boolean).join(" ");
30
- return /* @__PURE__ */ c("div", { className: a, ...s, children: r });
31
- }
1
+ import { jsx as a, jsxs as f } from "react/jsx-runtime";
2
+ import { forwardRef as m } from "react";
3
+ const b = m(
4
+ ({ active: o, children: c, className: l = "", ...e }, d) => {
5
+ const n = [o && "dock-active", l].filter(Boolean).join(" ");
6
+ return /* @__PURE__ */ a("button", { ref: d, className: n || void 0, ...e, children: c });
7
+ }
8
+ );
9
+ b.displayName = "Dock.Item";
10
+ const v = m(
11
+ ({ items: o, size: c, activeIndex: l, onChange: e, children: d, className: n = "", ...i }, r) => {
12
+ const k = ["dock", c && {
13
+ xs: "dock-xs",
14
+ sm: "dock-sm",
15
+ md: "dock-md",
16
+ lg: "dock-lg",
17
+ xl: "dock-xl"
18
+ }[c], n].filter(Boolean).join(" ");
19
+ return o ? /* @__PURE__ */ a("div", { ref: r, className: k, ...i, children: o.map((s, t) => {
20
+ const N = l !== void 0 ? l === t : s.active;
21
+ return /* @__PURE__ */ f(
22
+ "button",
23
+ {
24
+ className: N ? "dock-active" : void 0,
25
+ disabled: s.disabled,
26
+ onClick: () => {
27
+ s.onClick?.(), e?.(t);
28
+ },
29
+ children: [
30
+ s.icon,
31
+ s.label && /* @__PURE__ */ a("span", { className: "dock-label", children: s.label })
32
+ ]
33
+ },
34
+ t
35
+ );
36
+ }) }) : /* @__PURE__ */ a("div", { ref: r, className: k, ...i, children: d });
37
+ }
38
+ );
39
+ v.displayName = "Dock";
40
+ const D = Object.assign(v, {
41
+ Item: b
42
+ });
32
43
  export {
33
- l as Divider
44
+ D as Dock
34
45
  };
35
46
  //# sourceMappingURL=index25.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index25.js","sources":["../src/components/Divider.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode\n orientation?: 'horizontal' | 'vertical'\n position?: 'start' | 'center' | 'end'\n type?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error'\n}\n\nexport function Divider({\n children,\n orientation = 'horizontal',\n position = 'center',\n type,\n className = '',\n ...rest\n}: DividerProps) {\n const positionClasses: Record<string, string> = {\n start: 'divider-start',\n center: '',\n end: 'divider-end',\n }\n\n const typeClasses: Record<string, string> = {\n neutral: 'divider-neutral',\n primary: 'divider-primary',\n secondary: 'divider-secondary',\n accent: 'divider-accent',\n success: 'divider-success',\n warning: 'divider-warning',\n info: 'divider-info',\n error: 'divider-error',\n }\n\n const classes = [\n 'divider',\n orientation === 'vertical' && 'divider-horizontal',\n positionClasses[position],\n type && typeClasses[type],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} {...rest}>{children}</div>\n}\n"],"names":["Divider","children","orientation","position","type","className","rest","positionClasses","typeClasses","classes"],"mappings":";AASO,SAASA,EAAQ;AAAA,EACtB,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA,EACX,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAiB;AACf,QAAMC,IAA0C;AAAA,IAC9C,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EAAA,GAGDC,IAAsC;AAAA,IAC1C,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,GAGHC,IAAU;AAAA,IACd;AAAA,IACAP,MAAgB,cAAc;AAAA,IAC9BK,EAAgBJ,CAAQ;AAAA,IACxBC,KAAQI,EAAYJ,CAAI;AAAA,IACxBC;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BAAQ,OAAA,EAAI,WAAWI,GAAU,GAAGH,GAAO,UAAAL,GAAS;AACtD;"}
1
+ {"version":3,"file":"index25.js","sources":["../src/components/Dock.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport interface DockItemConfig {\n /** Icon element */\n icon: React.ReactNode\n /** Label text */\n label?: string\n /** Whether this item is active */\n active?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for this item */\n onClick?: () => void\n}\n\nexport interface DockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Dock items configuration */\n items?: DockItemConfig[]\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Controlled active index */\n activeIndex?: number\n /** Callback when an item is clicked */\n onChange?: (index: number) => void\n /** Children (alternative to items prop) */\n children?: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nexport interface DockItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Whether this item is active */\n active?: boolean\n /** Children (icon and optional label) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst DockItem = forwardRef<HTMLButtonElement, DockItemProps>(\n ({ active, children, className = '', ...props }, ref) => {\n const classes = [active && 'dock-active', className].filter(Boolean).join(' ')\n\n return (\n <button ref={ref} className={classes || undefined} {...props}>\n {children}\n </button>\n )\n }\n)\n\nDockItem.displayName = 'Dock.Item'\n\nconst DockRoot = forwardRef<HTMLDivElement, DockProps>(\n ({ items, size, activeIndex, onChange, children, className = '', ...props }, ref) => {\n const sizeClasses = {\n xs: 'dock-xs',\n sm: 'dock-sm',\n md: 'dock-md',\n lg: 'dock-lg',\n xl: 'dock-xl',\n }\n\n const classes = ['dock', size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n // If items array is provided, render from config\n if (items) {\n return (\n <div ref={ref} className={classes} {...props}>\n {items.map((item, index) => {\n const isActive = activeIndex !== undefined ? activeIndex === index : item.active\n\n return (\n <button\n key={index}\n className={isActive ? 'dock-active' : undefined}\n disabled={item.disabled}\n onClick={() => {\n item.onClick?.()\n onChange?.(index)\n }}\n >\n {item.icon}\n {item.label && <span className=\"dock-label\">{item.label}</span>}\n </button>\n )\n })}\n </div>\n )\n }\n\n // Otherwise render children\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nDockRoot.displayName = 'Dock'\n\nexport const Dock = Object.assign(DockRoot, {\n Item: DockItem,\n})\n"],"names":["DockItem","forwardRef","active","children","className","props","ref","classes","jsx","DockRoot","items","size","activeIndex","onChange","item","index","isActive","jsxs","Dock"],"mappings":";;AAuCA,MAAMA,IAAWC;AAAA,EACf,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AACvD,UAAMC,IAAU,CAACL,KAAU,eAAeE,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE7E,WACE,gBAAAI,EAAC,YAAO,KAAAF,GAAU,WAAWC,KAAW,QAAY,GAAGF,GACpD,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAH,EAAS,cAAc;AAEvB,MAAMS,IAAWR;AAAA,EACf,CAAC,EAAE,OAAAS,GAAO,MAAAC,GAAM,aAAAC,GAAa,UAAAC,GAAU,UAAAV,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AASnF,UAAMC,IAAU,CAAC,QAAQI,KARL;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,EAGuCA,CAAI,GAAGP,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGvF,WAAIM,IAEA,gBAAAF,EAAC,OAAA,EAAI,KAAAF,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAK,EAAM,IAAI,CAACI,GAAMC,MAAU;AAC1B,YAAMC,IAAWJ,MAAgB,SAAYA,MAAgBG,IAAQD,EAAK;AAE1E,aACE,gBAAAG;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWD,IAAW,gBAAgB;AAAA,UACtC,UAAUF,EAAK;AAAA,UACf,SAAS,MAAM;AACb,YAAAA,EAAK,UAAA,GACLD,IAAWE,CAAK;AAAA,UAClB;AAAA,UAEC,UAAA;AAAA,YAAAD,EAAK;AAAA,YACLA,EAAK,SAAS,gBAAAN,EAAC,UAAK,WAAU,cAAc,YAAK,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QATnDO;AAAA,MAAA;AAAA,IAYX,CAAC,EAAA,CACH,sBAMD,OAAA,EAAI,KAAAT,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAM,EAAS,cAAc;AAEhB,MAAMS,IAAO,OAAO,OAAOT,GAAU;AAAA,EAC1C,MAAMT;AACR,CAAC;"}
package/dist/index26.js CHANGED
@@ -1,175 +1,35 @@
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"
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ function l({
3
+ children: r,
4
+ orientation: e = "horizontal",
5
+ position: d = "center",
6
+ type: i,
7
+ className: n = "",
8
+ ...s
25
9
  }) {
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);
65
- }
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);
10
+ const o = {
11
+ start: "divider-start",
12
+ center: "",
13
+ end: "divider-end"
14
+ }, t = {
15
+ neutral: "divider-neutral",
16
+ primary: "divider-primary",
17
+ secondary: "divider-secondary",
18
+ accent: "divider-accent",
19
+ success: "divider-success",
20
+ warning: "divider-warning",
21
+ info: "divider-info",
22
+ error: "divider-error"
23
+ }, a = [
24
+ "divider",
25
+ e === "vertical" && "divider-horizontal",
26
+ o[d],
27
+ i && t[i],
28
+ n
29
+ ].filter(Boolean).join(" ");
30
+ return /* @__PURE__ */ c("div", { className: a, ...s, children: r });
171
31
  }
172
32
  export {
173
- ee as Drawer
33
+ l as Divider
174
34
  };
175
35
  //# sourceMappingURL=index26.js.map
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"index26.js","sources":["../src/components/Divider.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode\n orientation?: 'horizontal' | 'vertical'\n position?: 'start' | 'center' | 'end'\n type?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error'\n}\n\nexport function Divider({\n children,\n orientation = 'horizontal',\n position = 'center',\n type,\n className = '',\n ...rest\n}: DividerProps) {\n const positionClasses: Record<string, string> = {\n start: 'divider-start',\n center: '',\n end: 'divider-end',\n }\n\n const typeClasses: Record<string, string> = {\n neutral: 'divider-neutral',\n primary: 'divider-primary',\n secondary: 'divider-secondary',\n accent: 'divider-accent',\n success: 'divider-success',\n warning: 'divider-warning',\n info: 'divider-info',\n error: 'divider-error',\n }\n\n const classes = [\n 'divider',\n orientation === 'vertical' && 'divider-horizontal',\n positionClasses[position],\n type && typeClasses[type],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} {...rest}>{children}</div>\n}\n"],"names":["Divider","children","orientation","position","type","className","rest","positionClasses","typeClasses","classes"],"mappings":";AASO,SAASA,EAAQ;AAAA,EACtB,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA,EACX,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAiB;AACf,QAAMC,IAA0C;AAAA,IAC9C,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EAAA,GAGDC,IAAsC;AAAA,IAC1C,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,GAGHC,IAAU;AAAA,IACd;AAAA,IACAP,MAAgB,cAAc;AAAA,IAC9BK,EAAgBJ,CAAQ;AAAA,IACxBC,KAAQI,EAAYJ,CAAI;AAAA,IACxBC;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BAAQ,OAAA,EAAI,WAAWI,GAAU,GAAGH,GAAO,UAAAL,GAAS;AACtD;"}
package/dist/index27.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 SidebarDrawer
173
+ ee as Drawer
43
174
  };
44
175
  //# sourceMappingURL=index27.js.map
@@ -1 +1 @@
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;"}
1
+ {"version":3,"file":"index27.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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"}