asterui 0.12.17 → 0.12.19

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.
package/dist/index106.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=index106.js.map
@@ -1 +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;"}
1
+ {"version":3,"file":"index106.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=index107.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index107.js","sources":["../src/hooks/useWindowSize.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\n\nexport interface WindowSize {\n width: number\n height: number\n}\n\n/**\n * Hook that tracks window dimensions.\n * Updates on window resize.\n *\n * @returns Object with current width and height\n *\n * @example\n * const { width, height } = useWindowSize()\n *\n * return (\n * <div>\n * Window: {width} x {height}\n * {width < 768 && <MobileNav />}\n * </div>\n * )\n */\nexport function useWindowSize(): WindowSize {\n const [windowSize, setWindowSize] = useState<WindowSize>(() => {\n if (typeof window === 'undefined') {\n return { width: 0, height: 0 }\n }\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n })\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const handleResize = () => {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n return windowSize\n}\n"],"names":["useWindowSize","windowSize","setWindowSize","useState","useEffect","handleResize"],"mappings":";AAuBO,SAASA,IAA4B;AAC1C,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAqB,MACnD,OAAO,SAAW,MACb,EAAE,OAAO,GAAG,QAAQ,EAAA,IAEtB;AAAA,IACL,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,EAAA,CAElB;AAED,SAAAC,EAAU,MAAM;AACd,QAAI,OAAO,SAAW,IAAa;AAEnC,UAAMC,IAAe,MAAM;AACzB,MAAAH,EAAc;AAAA,QACZ,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MAAA,CAChB;AAAA,IACH;AAEA,kBAAO,iBAAiB,UAAUG,CAAY,GACvC,MAAM,OAAO,oBAAoB,UAAUA,CAAY;AAAA,EAChE,GAAG,CAAA,CAAE,GAEEJ;AACT;"}
package/dist/index13.js CHANGED
@@ -1,98 +1,116 @@
1
- import { jsxs as e, jsx as s, Fragment as h } from "react/jsx-runtime";
2
- function g({ children: r, hoverable: a = !1, className: d = "", style: c, ...o }) {
3
- const n = [
1
+ import { jsxs as s, jsx as e, Fragment as o } from "react/jsx-runtime";
2
+ function y({ children: d, hoverable: a = !1, className: l = "", style: c, ...n }) {
3
+ const m = [
4
4
  "p-6 border border-base-content/10",
5
5
  a && "cursor-pointer hover:shadow-md transition-shadow",
6
- d
6
+ l
7
7
  ].filter(Boolean).join(" ");
8
- return /* @__PURE__ */ s("div", { className: n, style: c, ...o, children: r });
8
+ return /* @__PURE__ */ e("div", { className: m, style: c, ...n, children: d });
9
9
  }
10
- function j({
11
- children: r,
10
+ function C({ avatar: d, title: a, description: l, className: c = "", ...n }) {
11
+ return /* @__PURE__ */ s("div", { className: `flex gap-4 ${c}`, ...n, children: [
12
+ d && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: d }),
13
+ /* @__PURE__ */ s("div", { className: "flex-1 min-w-0", children: [
14
+ a && /* @__PURE__ */ e("div", { className: "font-medium", children: a }),
15
+ l && /* @__PURE__ */ e("div", { className: "text-sm opacity-70 mt-1", children: l })
16
+ ] })
17
+ ] });
18
+ }
19
+ function M({
20
+ children: d,
12
21
  title: a,
13
- cover: d,
14
- actions: c,
15
- className: o = "",
16
- style: n,
17
- size: m,
18
- bordered: v = !0,
19
- side: w = !1,
20
- imageFull: x = !1,
21
- actionsJustify: t = "end",
22
- loading: b = !1,
23
- hoverable: k = !1,
24
- avatar: l,
22
+ extra: l,
23
+ cover: c,
24
+ actions: n,
25
+ className: m = "",
26
+ style: h,
27
+ size: t,
28
+ bordered: b = !0,
29
+ side: k = !1,
30
+ imageFull: f = !1,
31
+ actionsJustify: N = "end",
32
+ loading: g = !1,
33
+ hoverable: j = !1,
34
+ avatar: r,
25
35
  description: i,
26
- ...f
36
+ ...u
27
37
  }) {
28
- const N = [
38
+ const v = [
29
39
  "card",
30
40
  "bg-base-100",
31
- m && {
41
+ t && {
32
42
  xs: "card-xs",
33
43
  sm: "card-sm",
34
44
  md: "card-md",
35
45
  lg: "card-lg",
36
46
  xl: "card-xl"
37
- }[m],
38
- v && "border border-base-content/10 shadow-sm",
39
- w && "card-side",
40
- x && "image-full",
41
- k && "transition-shadow hover:shadow-lg cursor-pointer",
42
- o
43
- ].filter(Boolean).join(" "), u = {
47
+ }[t],
48
+ // Don't add border when imageFull is used (it breaks the overlay effect)
49
+ b && !f && "border border-base-content/10 shadow-sm",
50
+ k && "card-side",
51
+ f && "image-full shadow-sm",
52
+ j && "transition-shadow hover:shadow-lg cursor-pointer",
53
+ m
54
+ ].filter(Boolean).join(" "), w = {
44
55
  start: "justify-start",
45
56
  center: "justify-center",
46
57
  end: "justify-end"
47
58
  };
48
- return b ? /* @__PURE__ */ e("div", { className: N, style: n, ...f, children: [
49
- d && /* @__PURE__ */ s("figure", { children: /* @__PURE__ */ s("div", { className: "skeleton h-48 w-full rounded-none" }) }),
50
- /* @__PURE__ */ e("div", { className: "card-body", children: [
51
- (l || a) && /* @__PURE__ */ e("div", { className: "flex gap-4 mb-4", children: [
52
- l && /* @__PURE__ */ s("div", { className: "skeleton w-12 h-12 rounded-full flex-shrink-0" }),
53
- /* @__PURE__ */ e("div", { className: "flex-1 space-y-2", children: [
54
- /* @__PURE__ */ s("div", { className: "skeleton h-6 w-2/3" }),
55
- i && /* @__PURE__ */ s("div", { className: "skeleton h-4 w-full" })
56
- ] })
57
- ] }),
58
- !l && !a && /* @__PURE__ */ e(h, { children: [
59
- /* @__PURE__ */ s("div", { className: "skeleton h-6 w-2/3 mb-4" }),
60
- /* @__PURE__ */ e("div", { className: "space-y-2", children: [
61
- /* @__PURE__ */ s("div", { className: "skeleton h-4 w-full" }),
62
- /* @__PURE__ */ s("div", { className: "skeleton h-4 w-5/6" }),
63
- /* @__PURE__ */ s("div", { className: "skeleton h-4 w-4/6" })
59
+ if (g)
60
+ return /* @__PURE__ */ s("div", { className: v, style: h, ...u, children: [
61
+ c && /* @__PURE__ */ e("figure", { children: /* @__PURE__ */ e("div", { className: "skeleton h-48 w-full rounded-none" }) }),
62
+ /* @__PURE__ */ s("div", { className: "card-body", children: [
63
+ (r || a) && /* @__PURE__ */ s("div", { className: "flex gap-4 mb-4", children: [
64
+ r && /* @__PURE__ */ e("div", { className: "skeleton w-12 h-12 rounded-full flex-shrink-0" }),
65
+ /* @__PURE__ */ s("div", { className: "flex-1 space-y-2", children: [
66
+ /* @__PURE__ */ e("div", { className: "skeleton h-6 w-2/3" }),
67
+ i && /* @__PURE__ */ e("div", { className: "skeleton h-4 w-full" })
68
+ ] })
69
+ ] }),
70
+ !r && !a && /* @__PURE__ */ s(o, { children: [
71
+ /* @__PURE__ */ e("div", { className: "skeleton h-6 w-2/3 mb-4" }),
72
+ /* @__PURE__ */ s("div", { className: "space-y-2", children: [
73
+ /* @__PURE__ */ e("div", { className: "skeleton h-4 w-full" }),
74
+ /* @__PURE__ */ e("div", { className: "skeleton h-4 w-5/6" }),
75
+ /* @__PURE__ */ e("div", { className: "skeleton h-4 w-4/6" })
76
+ ] })
77
+ ] }),
78
+ n && /* @__PURE__ */ s("div", { className: `card-actions ${w[N]} mt-4`, children: [
79
+ /* @__PURE__ */ e("div", { className: "skeleton h-10 w-20" }),
80
+ /* @__PURE__ */ e("div", { className: "skeleton h-10 w-20" })
64
81
  ] })
65
- ] }),
66
- c && /* @__PURE__ */ e("div", { className: `card-actions ${u[t]} mt-4`, children: [
67
- /* @__PURE__ */ s("div", { className: "skeleton h-10 w-20" }),
68
- /* @__PURE__ */ s("div", { className: "skeleton h-10 w-20" })
69
82
  ] })
70
- ] })
71
- ] }) : /* @__PURE__ */ e("div", { className: N, style: n, ...f, children: [
72
- d && /* @__PURE__ */ s("figure", { children: d }),
73
- /* @__PURE__ */ e("div", { className: "card-body", children: [
74
- l || a && i ? /* @__PURE__ */ e(h, { children: [
75
- /* @__PURE__ */ e("div", { className: "flex gap-4", children: [
76
- l && /* @__PURE__ */ s("div", { className: "flex-shrink-0", children: l }),
77
- /* @__PURE__ */ e("div", { className: "flex-1 min-w-0", children: [
78
- a && /* @__PURE__ */ s("h2", { className: "card-title", children: a }),
79
- i && /* @__PURE__ */ s("p", { className: "text-sm opacity-70 mt-1", children: i })
83
+ ] });
84
+ const p = r || a && i, x = () => !a && !l ? null : l ? /* @__PURE__ */ s("div", { className: "flex justify-between items-start gap-4", children: [
85
+ a && /* @__PURE__ */ e("h2", { className: "card-title", children: a }),
86
+ /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: l })
87
+ ] }) : a ? /* @__PURE__ */ e("h2", { className: "card-title", children: a }) : null;
88
+ return /* @__PURE__ */ s("div", { className: v, style: h, ...u, children: [
89
+ c && /* @__PURE__ */ e("figure", { children: c }),
90
+ /* @__PURE__ */ s("div", { className: "card-body", children: [
91
+ p ? /* @__PURE__ */ s(o, { children: [
92
+ /* @__PURE__ */ s("div", { className: "flex gap-4", children: [
93
+ r && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: r }),
94
+ /* @__PURE__ */ s("div", { className: "flex-1 min-w-0", children: [
95
+ x(),
96
+ i && /* @__PURE__ */ e("p", { className: "text-sm opacity-70 mt-1", children: i })
80
97
  ] })
81
98
  ] }),
82
- r
83
- ] }) : /* @__PURE__ */ e(h, { children: [
84
- a && /* @__PURE__ */ s("h2", { className: "card-title", children: a }),
85
- r
99
+ d
100
+ ] }) : /* @__PURE__ */ s(o, { children: [
101
+ x(),
102
+ d
86
103
  ] }),
87
- c && /* @__PURE__ */ s("div", { className: `card-actions ${u[t]}`, children: c })
104
+ n && /* @__PURE__ */ e("div", { className: `card-actions ${w[N]}`, children: n })
88
105
  ] })
89
106
  ] });
90
107
  }
91
- const B = Object.assign(j, {
92
- Grid: g
108
+ const G = Object.assign(M, {
109
+ Grid: y,
110
+ Meta: C
93
111
  });
94
112
  export {
95
- B as Card,
96
- B as default
113
+ G as Card,
114
+ G as default
97
115
  };
98
116
  //# sourceMappingURL=index13.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index13.js","sources":["../src/components/Card.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n children: React.ReactNode\n title?: React.ReactNode\n cover?: React.ReactNode\n actions?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n bordered?: boolean\n side?: boolean\n imageFull?: boolean\n actionsJustify?: 'start' | 'center' | 'end'\n loading?: boolean\n hoverable?: boolean\n // Meta props for avatar + description layout\n avatar?: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface CardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n hoverable?: boolean\n}\n\nfunction CardGrid({ children, hoverable = false, className = '', style, ...rest }: CardGridProps) {\n const classes = [\n 'p-6 border border-base-content/10',\n hoverable && 'cursor-pointer hover:shadow-md transition-shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={classes} style={style} {...rest}>\n {children}\n </div>\n )\n}\n\nfunction CardRoot({\n children,\n title,\n cover,\n actions,\n className = '',\n style,\n size,\n bordered = true,\n side = false,\n imageFull = false,\n actionsJustify = 'end',\n loading = false,\n hoverable = false,\n avatar,\n description,\n ...rest\n}: CardProps) {\n const sizeClasses: Record<string, string> = {\n xs: 'card-xs',\n sm: 'card-sm',\n md: 'card-md',\n lg: 'card-lg',\n xl: 'card-xl',\n }\n\n const classes = [\n 'card',\n 'bg-base-100',\n size && sizeClasses[size],\n bordered && 'border border-base-content/10 shadow-sm',\n side && 'card-side',\n imageFull && 'image-full',\n hoverable && 'transition-shadow hover:shadow-lg cursor-pointer',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n }\n\n if (loading) {\n return (\n <div className={classes} style={style} {...rest}>\n {cover && (\n <figure>\n <div className=\"skeleton h-48 w-full rounded-none\" />\n </figure>\n )}\n <div className=\"card-body\">\n {(avatar || title) && (\n <div className=\"flex gap-4 mb-4\">\n {avatar && <div className=\"skeleton w-12 h-12 rounded-full flex-shrink-0\" />}\n <div className=\"flex-1 space-y-2\">\n <div className=\"skeleton h-6 w-2/3\" />\n {description && <div className=\"skeleton h-4 w-full\" />}\n </div>\n </div>\n )}\n {!avatar && !title && (\n <>\n <div className=\"skeleton h-6 w-2/3 mb-4\" />\n <div className=\"space-y-2\">\n <div className=\"skeleton h-4 w-full\" />\n <div className=\"skeleton h-4 w-5/6\" />\n <div className=\"skeleton h-4 w-4/6\" />\n </div>\n </>\n )}\n {actions && (\n <div className={`card-actions ${justifyClasses[actionsJustify]} mt-4`}>\n <div className=\"skeleton h-10 w-20\" />\n <div className=\"skeleton h-10 w-20\" />\n </div>\n )}\n </div>\n </div>\n )\n }\n\n // Render with avatar + title + description layout (meta style)\n const hasMetaLayout = avatar || (title && description)\n\n return (\n <div className={classes} style={style} {...rest}>\n {cover && <figure>{cover}</figure>}\n <div className=\"card-body\">\n {hasMetaLayout ? (\n <>\n <div className=\"flex gap-4\">\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && <h2 className=\"card-title\">{title}</h2>}\n {description && <p className=\"text-sm opacity-70 mt-1\">{description}</p>}\n </div>\n </div>\n {children}\n </>\n ) : (\n <>\n {title && <h2 className=\"card-title\">{title}</h2>}\n {children}\n </>\n )}\n {actions && <div className={`card-actions ${justifyClasses[actionsJustify]}`}>{actions}</div>}\n </div>\n </div>\n )\n}\n\nexport const Card = Object.assign(CardRoot, {\n Grid: CardGrid,\n})\n\nexport default Card\n"],"names":["CardGrid","children","hoverable","className","style","rest","classes","CardRoot","title","cover","actions","size","bordered","side","imageFull","actionsJustify","loading","avatar","description","justifyClasses","jsx","jsxs","Fragment","Card"],"mappings":"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"}
1
+ {"version":3,"file":"index13.js","sources":["../src/components/Card.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n children?: React.ReactNode\n title?: React.ReactNode\n /** Content in the top-right corner of the card header */\n extra?: React.ReactNode\n cover?: React.ReactNode\n actions?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n bordered?: boolean\n side?: boolean\n imageFull?: boolean\n actionsJustify?: 'start' | 'center' | 'end'\n loading?: boolean\n hoverable?: boolean\n // Meta props for avatar + description layout\n avatar?: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface CardMetaProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Avatar or icon element */\n avatar?: React.ReactNode\n /** Title content */\n title?: React.ReactNode\n /** Description content */\n description?: React.ReactNode\n}\n\nexport interface CardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n hoverable?: boolean\n}\n\nfunction CardGrid({ children, hoverable = false, className = '', style, ...rest }: CardGridProps) {\n const classes = [\n 'p-6 border border-base-content/10',\n hoverable && 'cursor-pointer hover:shadow-md transition-shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={classes} style={style} {...rest}>\n {children}\n </div>\n )\n}\n\nfunction CardMeta({ avatar, title, description, className = '', ...rest }: CardMetaProps) {\n return (\n <div className={`flex gap-4 ${className}`} {...rest}>\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"font-medium\">{title}</div>}\n {description && <div className=\"text-sm opacity-70 mt-1\">{description}</div>}\n </div>\n </div>\n )\n}\n\nfunction CardRoot({\n children,\n title,\n extra,\n cover,\n actions,\n className = '',\n style,\n size,\n bordered = true,\n side = false,\n imageFull = false,\n actionsJustify = 'end',\n loading = false,\n hoverable = false,\n avatar,\n description,\n ...rest\n}: CardProps) {\n const sizeClasses: Record<string, string> = {\n xs: 'card-xs',\n sm: 'card-sm',\n md: 'card-md',\n lg: 'card-lg',\n xl: 'card-xl',\n }\n\n const classes = [\n 'card',\n 'bg-base-100',\n size && sizeClasses[size],\n // Don't add border when imageFull is used (it breaks the overlay effect)\n bordered && !imageFull && 'border border-base-content/10 shadow-sm',\n side && 'card-side',\n imageFull && 'image-full shadow-sm',\n hoverable && 'transition-shadow hover:shadow-lg cursor-pointer',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n }\n\n if (loading) {\n return (\n <div className={classes} style={style} {...rest}>\n {cover && (\n <figure>\n <div className=\"skeleton h-48 w-full rounded-none\" />\n </figure>\n )}\n <div className=\"card-body\">\n {(avatar || title) && (\n <div className=\"flex gap-4 mb-4\">\n {avatar && <div className=\"skeleton w-12 h-12 rounded-full flex-shrink-0\" />}\n <div className=\"flex-1 space-y-2\">\n <div className=\"skeleton h-6 w-2/3\" />\n {description && <div className=\"skeleton h-4 w-full\" />}\n </div>\n </div>\n )}\n {!avatar && !title && (\n <>\n <div className=\"skeleton h-6 w-2/3 mb-4\" />\n <div className=\"space-y-2\">\n <div className=\"skeleton h-4 w-full\" />\n <div className=\"skeleton h-4 w-5/6\" />\n <div className=\"skeleton h-4 w-4/6\" />\n </div>\n </>\n )}\n {actions && (\n <div className={`card-actions ${justifyClasses[actionsJustify]} mt-4`}>\n <div className=\"skeleton h-10 w-20\" />\n <div className=\"skeleton h-10 w-20\" />\n </div>\n )}\n </div>\n </div>\n )\n }\n\n // Render with avatar + title + description layout (meta style)\n const hasMetaLayout = avatar || (title && description)\n\n // Header with title and extra\n const renderHeader = () => {\n if (!title && !extra) return null\n\n if (extra) {\n return (\n <div className=\"flex justify-between items-start gap-4\">\n {title && <h2 className=\"card-title\">{title}</h2>}\n <div className=\"flex-shrink-0\">{extra}</div>\n </div>\n )\n }\n\n return title ? <h2 className=\"card-title\">{title}</h2> : null\n }\n\n return (\n <div className={classes} style={style} {...rest}>\n {cover && <figure>{cover}</figure>}\n <div className=\"card-body\">\n {hasMetaLayout ? (\n <>\n <div className=\"flex gap-4\">\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {renderHeader()}\n {description && <p className=\"text-sm opacity-70 mt-1\">{description}</p>}\n </div>\n </div>\n {children}\n </>\n ) : (\n <>\n {renderHeader()}\n {children}\n </>\n )}\n {actions && <div className={`card-actions ${justifyClasses[actionsJustify]}`}>{actions}</div>}\n </div>\n </div>\n )\n}\n\nexport const Card = Object.assign(CardRoot, {\n Grid: CardGrid,\n Meta: CardMeta,\n})\n\nexport default Card\n"],"names":["CardGrid","children","hoverable","className","style","rest","classes","CardMeta","avatar","title","description","jsx","jsxs","CardRoot","extra","cover","actions","size","bordered","side","imageFull","actionsJustify","loading","justifyClasses","Fragment","hasMetaLayout","renderHeader","Card"],"mappings":"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"}
package/dist/index72.js CHANGED
@@ -1,22 +1,29 @@
1
- import { jsx as f } from "react/jsx-runtime";
2
- import { forwardRef as d } from "react";
3
- const u = d(
1
+ import { jsx as s, jsxs as C } from "react/jsx-runtime";
2
+ import { forwardRef as N, useRef as y } from "react";
3
+ const R = N(
4
4
  ({
5
5
  size: e,
6
- color: s,
7
- ghost: l = !1,
8
- bordered: c = !0,
9
- className: t = "",
10
- children: r,
11
- ...o
12
- }, a) => {
13
- const n = {
6
+ color: r,
7
+ status: o,
8
+ ghost: b = !1,
9
+ bordered: p = !0,
10
+ floatingLabel: a,
11
+ addonBefore: l,
12
+ addonAfter: t,
13
+ className: i = "",
14
+ children: f,
15
+ ...m
16
+ }, w) => {
17
+ const h = y(null), u = w || h, c = {
14
18
  xs: "select-xs",
15
19
  sm: "select-sm",
16
20
  md: "select-md",
17
21
  lg: "select-lg",
18
22
  xl: "select-xl"
19
- }, m = {
23
+ }, d = o ? {
24
+ error: "select-error",
25
+ warning: "select-warning"
26
+ }[o] : r ? {
20
27
  neutral: "select-neutral",
21
28
  primary: "select-primary",
22
29
  secondary: "select-secondary",
@@ -25,20 +32,46 @@ const u = d(
25
32
  success: "select-success",
26
33
  warning: "select-warning",
27
34
  error: "select-error"
28
- }, i = [
35
+ }[r] : "", g = l || t, j = g ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", i].filter(Boolean).join(" ") : [
29
36
  "select",
30
37
  "w-full",
31
- c && "select-bordered",
32
- l && "select-ghost",
33
- e && n[e],
34
- s && m[s],
35
- t
36
- ].filter(Boolean).join(" ");
37
- return /* @__PURE__ */ f("select", { ref: a, className: i, ...o, children: r });
38
+ p && "select-bordered",
39
+ b && "select-ghost",
40
+ e && c[e],
41
+ d,
42
+ i
43
+ ].filter(Boolean).join(" "), x = /* @__PURE__ */ s("select", { ref: u, className: j, ...m, children: f });
44
+ if (a) {
45
+ const n = [
46
+ "floating-label",
47
+ e && c[e]
48
+ ].filter(Boolean).join(" ");
49
+ return /* @__PURE__ */ C("label", { className: n, children: [
50
+ /* @__PURE__ */ s("select", { ref: u, className: "select select-bordered w-full", ...m, children: f }),
51
+ /* @__PURE__ */ s("span", { children: a })
52
+ ] });
53
+ }
54
+ if (g) {
55
+ const n = [
56
+ "select",
57
+ "select-bordered",
58
+ "flex",
59
+ "items-center",
60
+ "gap-2",
61
+ e && c[e],
62
+ d
63
+ ].filter(Boolean).join(" ");
64
+ return /* @__PURE__ */ C("label", { className: n, children: [
65
+ l && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: l }),
66
+ x,
67
+ t && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: t })
68
+ ] });
69
+ }
70
+ return x;
38
71
  }
39
72
  );
40
- u.displayName = "Select";
73
+ R.displayName = "Select";
41
74
  export {
42
- u as Select
75
+ R as Select
43
76
  };
44
77
  //# sourceMappingURL=index72.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index72.js","sources":["../src/components/Select.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\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 children?: React.ReactNode\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size,\n color,\n ghost = false,\n bordered = true,\n className = '',\n children,\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n xs: 'select-xs',\n sm: 'select-sm',\n md: 'select-md',\n lg: 'select-lg',\n xl: 'select-xl',\n }\n\n const colorClasses = {\n neutral: 'select-neutral',\n primary: 'select-primary',\n secondary: 'select-secondary',\n accent: 'select-accent',\n info: 'select-info',\n success: 'select-success',\n warning: 'select-warning',\n error: 'select-error',\n }\n\n const selectClasses = [\n 'select',\n 'w-full',\n bordered && 'select-bordered',\n ghost && 'select-ghost',\n size && sizeClasses[size],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <select ref={ref} className={selectClasses} {...props}>\n {children}\n </select>\n )\n }\n)\n\nSelect.displayName = 'Select'\n"],"names":["Select","forwardRef","size","color","ghost","bordered","className","children","props","ref","sizeClasses","colorClasses","selectClasses"],"mappings":";;AAWO,MAAMA,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,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,IAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACAP,KAAY;AAAA,MACZD,KAAS;AAAA,MACTF,KAAQQ,EAAYR,CAAI;AAAA,MACxBC,KAASQ,EAAaR,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACG,UAAA,EAAO,KAAAG,GAAU,WAAWG,GAAgB,GAAGJ,GAC7C,UAAAD,GACH;AAAA,EAEJ;AACF;AAEAP,EAAO,cAAc;"}
1
+ {"version":3,"file":"index72.js","sources":["../src/components/Select.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react'\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n /** Floating label text (uses DaisyUI floating-label) */\n floatingLabel?: string\n /** Text/element before select (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after select (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n className?: string\n children?: React.ReactNode\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n floatingLabel,\n addonBefore,\n addonAfter,\n className = '',\n children,\n ...props\n },\n ref\n ) => {\n const innerRef = useRef<HTMLSelectElement>(null)\n const selectRef = (ref as React.RefObject<HTMLSelectElement>) || innerRef\n\n const sizeClasses = {\n xs: 'select-xs',\n sm: 'select-sm',\n md: 'select-md',\n lg: 'select-lg',\n xl: 'select-xl',\n }\n\n const colorClasses = {\n neutral: 'select-neutral',\n primary: 'select-primary',\n secondary: 'select-secondary',\n accent: 'select-accent',\n info: 'select-info',\n success: 'select-success',\n warning: 'select-warning',\n error: 'select-error',\n }\n\n const statusClasses = {\n error: 'select-error',\n warning: 'select-warning',\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n // When wrapped with external addons, the wrapper has the styling\n const hasExternalAddons = addonBefore || addonAfter\n\n const selectClasses = hasExternalAddons\n ? ['grow', 'bg-transparent', 'border-0', 'outline-none', 'focus:outline-none', className].filter(Boolean).join(' ')\n : [\n 'select',\n 'w-full',\n bordered && 'select-bordered',\n ghost && 'select-ghost',\n size && sizeClasses[size],\n effectiveColorClass,\n className,\n ].filter(Boolean).join(' ')\n\n // Build the core select element\n const selectElement = (\n <select ref={selectRef} className={selectClasses} {...props}>\n {children}\n </select>\n )\n\n // Wrap with floating label if specified\n if (floatingLabel) {\n const floatingClasses = [\n 'floating-label',\n size && sizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n <select ref={selectRef} className=\"select select-bordered w-full\" {...props}>\n {children}\n </select>\n <span>{floatingLabel}</span>\n </label>\n )\n }\n\n // Wrap with external addons if specified\n if (hasExternalAddons) {\n const addonClasses = [\n 'select',\n 'select-bordered',\n 'flex',\n 'items-center',\n 'gap-2',\n size && sizeClasses[size],\n effectiveColorClass,\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses}>\n {addonBefore && <span className=\"text-base-content/70\">{addonBefore}</span>}\n {selectElement}\n {addonAfter && <span className=\"text-base-content/70\">{addonAfter}</span>}\n </label>\n )\n }\n\n return selectElement\n }\n)\n\nSelect.displayName = 'Select'\n"],"names":["Select","forwardRef","size","color","status","ghost","bordered","floatingLabel","addonBefore","addonAfter","className","children","props","ref","innerRef","useRef","selectRef","sizeClasses","effectiveColorClass","hasExternalAddons","selectClasses","selectElement","floatingClasses","jsxs","jsx","addonClasses"],"mappings":";;AAmBO,MAAMA,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAWC,EAA0B,IAAI,GACzCC,IAAaH,KAA8CC,GAE3DG,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAoBAC,IAAsBd,IANN;AAAA,MACpB,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,EAIwCA,CAAM,IAAKD,IAjBzC;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,EAS0EA,CAAK,IAAI,IAGtFgB,IAAoBX,KAAeC,GAEnCW,IAAgBD,IAClB,CAAC,QAAQ,kBAAkB,YAAY,gBAAgB,sBAAsBT,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,IAChH;AAAA,MACE;AAAA,MACA;AAAA,MACAJ,KAAY;AAAA,MACZD,KAAS;AAAA,MACTH,KAAQe,EAAYf,CAAI;AAAA,MACxBgB;AAAA,MACAR;AAAA,IAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG,GAGxBW,sBACH,UAAA,EAAO,KAAKL,GAAW,WAAWI,GAAgB,GAAGR,GACnD,UAAAD,EAAA,CACH;AAIF,QAAIJ,GAAe;AACjB,YAAMe,IAAkB;AAAA,QACtB;AAAA,QACApB,KAAQe,EAAYf,CAAI;AAAA,MAAA,EACxB,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACE,gBAAAqB,EAAC,SAAA,EAAM,WAAWD,GAChB,UAAA;AAAA,QAAA,gBAAAE,EAAC,YAAO,KAAKR,GAAW,WAAU,iCAAiC,GAAGJ,GACnE,UAAAD,GACH;AAAA,QACA,gBAAAa,EAAC,UAAM,UAAAjB,EAAA,CAAc;AAAA,MAAA,GACvB;AAAA,IAEJ;AAGA,QAAIY,GAAmB;AACrB,YAAMM,IAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAvB,KAAQe,EAAYf,CAAI;AAAA,QACxBgB;AAAA,MAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACE,gBAAAK,EAAC,SAAA,EAAM,WAAWE,GACf,UAAA;AAAA,QAAAjB,KAAe,gBAAAgB,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAhB,GAAY;AAAA,QACnEa;AAAA,QACAZ,KAAc,gBAAAe,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAf,EAAA,CAAW;AAAA,MAAA,GACpE;AAAA,IAEJ;AAEA,WAAOY;AAAA,EACT;AACF;AAEArB,EAAO,cAAc;"}
package/dist/index96.js CHANGED
@@ -1,17 +1,129 @@
1
- import { jsx as v, Fragment as A } from "react/jsx-runtime";
2
- import { useBreakpoint as m } from "./index97.js";
3
- function h({ children: f, above: o, below: r, at: s, between: e }) {
4
- const { isAbove: d, isBelow: n, isAt: l, isBetween: u } = m();
5
- let i = !1;
6
- return o !== void 0 ? i = d(o) : r !== void 0 ? i = n(r) : s !== void 0 ? Array.isArray(s) ? i = s.some((t) => l(t)) : i = l(s) : e !== void 0 ? i = u(e[0], e[1]) : i = !0, i ? /* @__PURE__ */ v(A, { children: f }) : null;
7
- }
8
- function p({ children: f, above: o, below: r, at: s, between: e }) {
9
- const { isAbove: d, isBelow: n, isAt: l, isBetween: u } = m();
10
- let i = !1;
11
- return o !== void 0 ? i = d(o) : r !== void 0 ? i = n(r) : s !== void 0 ? Array.isArray(s) ? i = s.some((t) => l(t)) : i = l(s) : e !== void 0 && (i = u(e[0], e[1])), i ? null : /* @__PURE__ */ v(A, { children: f });
12
- }
1
+ import { jsxs as z, jsx as R } from "react/jsx-runtime";
2
+ import { useState as V, useMemo as P, useEffect as Y } from "react";
3
+ const D = "asterui", O = 0.22, U = (t, c = O) => {
4
+ const r = `rgba(0,0,0,${c})`;
5
+ if (t && t.includes("var(--bc")) {
6
+ if (typeof window < "u") {
7
+ const a = getComputedStyle(document.documentElement).getPropertyValue("--bc").trim(), g = getComputedStyle(document.body).getPropertyValue("--bc").trim(), m = a || g;
8
+ if (m)
9
+ return t.replace(/var\(--bc\)/g, m);
10
+ }
11
+ return r;
12
+ }
13
+ if (t) return t;
14
+ if (typeof window > "u") return r;
15
+ const i = getComputedStyle(document.documentElement).getPropertyValue("--bc").trim(), d = getComputedStyle(document.body).getPropertyValue("--bc").trim(), s = i || d;
16
+ return s ? `hsl(${s} / ${c})` : r;
17
+ }, M = (t, c) => {
18
+ const r = t?.fontSize ?? 16;
19
+ return {
20
+ color: c,
21
+ fontSize: r,
22
+ fontWeight: t?.fontWeight ?? 600,
23
+ fontStyle: t?.fontStyle ?? "normal",
24
+ fontFamily: t?.fontFamily ?? "sans-serif",
25
+ lineHeight: t?.lineHeight ?? r * 1.2
26
+ };
27
+ }, X = ({
28
+ children: t,
29
+ className: c = "",
30
+ style: r,
31
+ content: i,
32
+ image: d,
33
+ width: s = 120,
34
+ height: a = 64,
35
+ gap: g,
36
+ offset: m,
37
+ rotate: T = -22,
38
+ zIndex: W = 1e3,
39
+ font: S,
40
+ ...A
41
+ }) => {
42
+ const [y, $] = V(null), u = g?.[0] ?? 120, f = g?.[1] ?? 120, B = m?.[0] ?? u / 2, F = m?.[1] ?? f / 2, E = P(
43
+ () => typeof i == "string" ? [i] : Array.isArray(i) ? i : [D],
44
+ [i]
45
+ ), k = U(S?.color), l = P(
46
+ () => M(S, k),
47
+ [S, k]
48
+ ), h = Math.PI / 180 * T, I = E.join("|");
49
+ Y(() => {
50
+ if (typeof window > "u") return;
51
+ let p = !1;
52
+ const n = window.devicePixelRatio || 1, w = s + u, C = a + f, v = document.createElement("canvas");
53
+ v.width = w * n, v.height = C * n;
54
+ const e = v.getContext("2d");
55
+ if (!e) return;
56
+ const L = () => {
57
+ const o = v.toDataURL();
58
+ p || $({ url: o, width: w, height: C });
59
+ }, N = () => {
60
+ e.save(), e.translate((u / 2 + s / 2) * n, (f / 2 + a / 2) * n), e.rotate(h), e.fillStyle = l.color, e.textAlign = "center", e.textBaseline = "middle", e.font = `${l.fontStyle} normal ${l.fontWeight} ${l.fontSize * n}px ${l.fontFamily}`;
61
+ const o = l.lineHeight * n, b = -((E.length - 1) * o) / 2;
62
+ E.forEach((x, j) => {
63
+ e.fillText(x, 0, b + j * o);
64
+ }), e.restore();
65
+ };
66
+ if (d) {
67
+ const o = new Image();
68
+ o.crossOrigin = "anonymous", o.referrerPolicy = "no-referrer";
69
+ const b = () => {
70
+ e.save(), e.translate((u / 2 + s / 2) * n, (f / 2 + a / 2) * n), e.rotate(h), e.drawImage(
71
+ o,
72
+ -s / 2 * n,
73
+ -a / 2 * n,
74
+ s * n,
75
+ a * n
76
+ ), e.restore(), L();
77
+ }, x = () => {
78
+ p || $(null);
79
+ };
80
+ return o.addEventListener("load", b), o.addEventListener("error", x), o.src = d, () => {
81
+ p = !0, o.removeEventListener("load", b), o.removeEventListener("error", x);
82
+ };
83
+ } else
84
+ N(), L();
85
+ return () => {
86
+ p = !0;
87
+ };
88
+ }, [
89
+ l,
90
+ u,
91
+ f,
92
+ a,
93
+ d,
94
+ h,
95
+ I,
96
+ s
97
+ ]);
98
+ const H = ["relative", c].filter(Boolean).join(" ");
99
+ return /* @__PURE__ */ z(
100
+ "div",
101
+ {
102
+ className: H,
103
+ style: { position: r?.position ?? "relative", ...r },
104
+ ...A,
105
+ children: [
106
+ t,
107
+ y && /* @__PURE__ */ R(
108
+ "div",
109
+ {
110
+ "aria-hidden": !0,
111
+ className: "pointer-events-none absolute inset-0",
112
+ style: {
113
+ zIndex: W,
114
+ backgroundImage: `url(${y.url})`,
115
+ backgroundRepeat: "repeat",
116
+ backgroundSize: `${y.width}px ${y.height}px`,
117
+ backgroundPosition: `${B}px ${F}px`
118
+ }
119
+ }
120
+ )
121
+ ]
122
+ }
123
+ );
124
+ };
125
+ X.displayName = "Watermark";
13
126
  export {
14
- p as Hide,
15
- h as Show
127
+ X as Watermark
16
128
  };
17
129
  //# sourceMappingURL=index96.js.map