asterui 0.12.73 → 0.12.75

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.
@@ -1,4 +1,9 @@
1
1
  import { default as React } from 'react';
2
+ export interface ClosableType {
3
+ onClose?: () => void;
4
+ closeIcon?: React.ReactNode;
5
+ afterClose?: () => void;
6
+ }
2
7
  export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
3
8
  children: React.ReactNode;
4
9
  type?: 'info' | 'success' | 'warning' | 'error';
@@ -6,6 +11,7 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
6
11
  dash?: boolean;
7
12
  soft?: boolean;
8
13
  vertical?: boolean;
14
+ closable?: boolean | ClosableType;
9
15
  /** Test ID for testing */
10
16
  'data-testid'?: string;
11
17
  }
@@ -1,31 +1,47 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- const d = "alert", f = "alert-info", A = "alert-success", u = "alert-warning", g = "alert-error", m = "alert-outline", p = "alert-dash", h = "alert-soft", j = "alert-vertical", x = ({
3
- children: t,
4
- className: r = "",
5
- type: e,
6
- outline: s = !1,
7
- dash: l = !1,
8
- soft: o = !1,
9
- vertical: a = !1,
10
- ...n
1
+ import { jsxs as h, jsx as y } from "react/jsx-runtime";
2
+ import { useState as g } from "react";
3
+ const j = "alert", v = "alert-info", x = "alert-success", I = "alert-warning", S = "alert-error", k = "alert-outline", w = "alert-dash", N = "alert-soft", V = "alert-vertical", O = ({
4
+ children: r,
5
+ className: n = "",
6
+ type: s,
7
+ outline: a = !1,
8
+ dash: c = !1,
9
+ soft: i = !1,
10
+ vertical: f = !1,
11
+ closable: e = !1,
12
+ ...d
11
13
  }) => {
12
- const c = [
13
- d,
14
- e && {
15
- info: f,
16
- success: A,
17
- warning: u,
18
- error: g
19
- }[e],
20
- s && m,
21
- l && p,
22
- o && h,
23
- a && j,
24
- r
25
- ].filter(Boolean).join(" ");
26
- return /* @__PURE__ */ i("div", { role: "alert", className: c, ...n, children: t });
14
+ const [u, C] = g(!0), A = [
15
+ j,
16
+ s && {
17
+ info: v,
18
+ success: x,
19
+ warning: I,
20
+ error: S
21
+ }[s],
22
+ a && k,
23
+ c && w,
24
+ i && N,
25
+ f && V,
26
+ n
27
+ ].filter(Boolean).join(" "), b = e !== !1, t = typeof e == "object" ? e : {}, l = t.onClose, o = t.afterClose, m = t.closeIcon, p = () => {
28
+ l && l(), C(!1), o && o();
29
+ };
30
+ return u ? /* @__PURE__ */ h("div", { role: "alert", className: A, ...d, children: [
31
+ r,
32
+ b && /* @__PURE__ */ y(
33
+ "button",
34
+ {
35
+ type: "button",
36
+ className: "btn btn-sm btn-circle ml-auto opacity-70 hover:opacity-100",
37
+ onClick: p,
38
+ "aria-label": "Close",
39
+ children: m || "✕"
40
+ }
41
+ )
42
+ ] }) : null;
27
43
  };
28
44
  export {
29
- x as Alert
45
+ O as Alert
30
46
  };
31
47
  //# sourceMappingURL=Alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.js","sources":["../../src/components/Alert.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dAlert = 'alert'\nconst dAlertInfo = 'alert-info'\nconst dAlertSuccess = 'alert-success'\nconst dAlertWarning = 'alert-warning'\nconst dAlertError = 'alert-error'\nconst dAlertOutline = 'alert-outline'\nconst dAlertDash = 'alert-dash'\nconst dAlertSoft = 'alert-soft'\nconst dAlertVertical = 'alert-vertical'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n type?: 'info' | 'success' | 'warning' | 'error'\n outline?: boolean\n dash?: boolean\n soft?: boolean\n vertical?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n className = '',\n type,\n outline = false,\n dash = false,\n soft = false,\n vertical = false,\n ...rest\n}) => {\n const typeClasses = {\n info: dAlertInfo,\n success: dAlertSuccess,\n warning: dAlertWarning,\n error: dAlertError,\n }\n\n const classes = [\n dAlert,\n type && typeClasses[type],\n outline && dAlertOutline,\n dash && dAlertDash,\n soft && dAlertSoft,\n vertical && dAlertVertical,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div role=\"alert\" className={classes} {...rest}>\n {children}\n </div>\n )\n}\n"],"names":["dAlert","dAlertInfo","dAlertSuccess","dAlertWarning","dAlertError","dAlertOutline","dAlertDash","dAlertSoft","dAlertVertical","Alert","children","className","type","outline","dash","soft","vertical","rest","classes","jsx"],"mappings":";AAGA,MAAMA,IAAS,SACTC,IAAa,cACbC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAc,eACdC,IAAgB,iBAChBC,IAAa,cACbC,IAAa,cACbC,IAAiB,kBAaVC,IAA8B,CAAC;AAAA,EAC1C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,GAAGC;AACL,MAAM;AAQJ,QAAMC,IAAU;AAAA,IACdlB;AAAA,IACAY,KATkB;AAAA,MAClB,MAAMX;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,EAKaQ,CAAI;AAAA,IACxBC,KAAWR;AAAA,IACXS,KAAQR;AAAA,IACRS,KAAQR;AAAA,IACRS,KAAYR;AAAA,IACZG;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAQ,EAAC,SAAI,MAAK,SAAQ,WAAWD,GAAU,GAAGD,GACvC,UAAAP,GACH;AAEJ;"}
1
+ {"version":3,"file":"Alert.js","sources":["../../src/components/Alert.tsx"],"sourcesContent":["import React, { useState } from 'react'\n\n// DaisyUI classes\nconst dAlert = 'alert'\nconst dAlertInfo = 'alert-info'\nconst dAlertSuccess = 'alert-success'\nconst dAlertWarning = 'alert-warning'\nconst dAlertError = 'alert-error'\nconst dAlertOutline = 'alert-outline'\nconst dAlertDash = 'alert-dash'\nconst dAlertSoft = 'alert-soft'\nconst dAlertVertical = 'alert-vertical'\n\nexport interface ClosableType {\n onClose?: () => void\n closeIcon?: React.ReactNode\n afterClose?: () => void\n}\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n type?: 'info' | 'success' | 'warning' | 'error'\n outline?: boolean\n dash?: boolean\n soft?: boolean\n vertical?: boolean\n closable?: boolean | ClosableType\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n className = '',\n type,\n outline = false,\n dash = false,\n soft = false,\n vertical = false,\n closable = false,\n ...rest\n}) => {\n const [visible, setVisible] = useState(true)\n\n const typeClasses = {\n info: dAlertInfo,\n success: dAlertSuccess,\n warning: dAlertWarning,\n error: dAlertError,\n }\n\n const classes = [\n dAlert,\n type && typeClasses[type],\n outline && dAlertOutline,\n dash && dAlertDash,\n soft && dAlertSoft,\n vertical && dAlertVertical,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine close config from props\n const isClosable = closable !== false\n const closableConfig = typeof closable === 'object' ? closable : {}\n const handleClose = closableConfig.onClose\n const afterClose = closableConfig.afterClose\n const closeIcon = closableConfig.closeIcon\n\n const handleCloseClick = () => {\n if (handleClose) {\n handleClose()\n }\n setVisible(false)\n if (afterClose) {\n afterClose()\n }\n }\n\n if (!visible) {\n return null\n }\n\n return (\n <div role=\"alert\" className={classes} {...rest}>\n {children}\n {isClosable && (\n <button\n type=\"button\"\n className=\"btn btn-sm btn-circle ml-auto opacity-70 hover:opacity-100\"\n onClick={handleCloseClick}\n aria-label=\"Close\"\n >\n {closeIcon || '✕'}\n </button>\n )}\n </div>\n )\n}\n"],"names":["dAlert","dAlertInfo","dAlertSuccess","dAlertWarning","dAlertError","dAlertOutline","dAlertDash","dAlertSoft","dAlertVertical","Alert","children","className","type","outline","dash","soft","vertical","closable","rest","visible","setVisible","useState","classes","isClosable","closableConfig","handleClose","afterClose","closeIcon","handleCloseClick","jsx"],"mappings":";;AAGA,MAAMA,IAAS,SACTC,IAAa,cACbC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAc,eACdC,IAAgB,iBAChBC,IAAa,cACbC,IAAa,cACbC,IAAiB,kBAoBVC,IAA8B,CAAC;AAAA,EAC1C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,UAAAC,IAAW;AAAA,EACX,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAI,GASrCC,IAAU;AAAA,IACdtB;AAAA,IACAY,KATkB;AAAA,MAClB,MAAMX;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,EAKaQ,CAAI;AAAA,IACxBC,KAAWR;AAAA,IACXS,KAAQR;AAAA,IACRS,KAAQR;AAAA,IACRS,KAAYR;AAAA,IACZG;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGLY,IAAaN,MAAa,IAC1BO,IAAiB,OAAOP,KAAa,WAAWA,IAAW,CAAA,GAC3DQ,IAAcD,EAAe,SAC7BE,IAAaF,EAAe,YAC5BG,IAAYH,EAAe,WAE3BI,IAAmB,MAAM;AAC7B,IAAIH,KACFA,EAAA,GAEFL,EAAW,EAAK,GACZM,KACFA,EAAA;AAAA,EAEJ;AAEA,SAAKP,sBAKF,OAAA,EAAI,MAAK,SAAQ,WAAWG,GAAU,GAAGJ,GACvC,UAAA;AAAA,IAAAR;AAAA,IACAa,KACC,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAASD;AAAA,QACT,cAAW;AAAA,QAEV,UAAAD,KAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB,GAEJ,IAhBO;AAkBX;"}
@@ -1,9 +1,11 @@
1
1
  import { default as React } from 'react';
2
2
  type BaseButtonProps = {
3
+ /** Syntactic sugar for setting variant and color together. Will be overridden by explicit variant & color props. */
4
+ type?: 'primary' | 'default' | 'dashed' | 'link' | 'text';
3
5
  /** Button color */
4
6
  color?: 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral';
5
7
  /** Button style variant */
6
- variant?: 'solid' | 'outline' | 'dash' | 'soft' | 'ghost' | 'link';
8
+ variant?: 'solid' | 'outline' | 'dash' | 'soft' | 'ghost' | 'link' | 'text';
7
9
  /** Button size */
8
10
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
9
11
  /** Active/pressed visual state */
@@ -12,6 +14,10 @@ type BaseButtonProps = {
12
14
  loading?: boolean;
13
15
  /** Button shape */
14
16
  shape?: 'square' | 'circle' | 'wide' | 'block' | 'round';
17
+ /** Make the button full width */
18
+ block?: boolean;
19
+ /** Make background transparent and invert text and border colors */
20
+ ghost?: boolean;
15
21
  /** Disable click animation */
16
22
  noAnimation?: boolean;
17
23
  /** Icon element to display */
@@ -24,6 +30,8 @@ type BaseButtonProps = {
24
30
  danger?: boolean;
25
31
  /** Toggle button pressed state (sets aria-pressed) */
26
32
  pressed?: boolean;
33
+ /** Accessible label for icon-only buttons */
34
+ 'aria-label'?: string;
27
35
  /** Test ID for testing */
28
36
  'data-testid'?: string;
29
37
  };
@@ -1,124 +1,160 @@
1
- import { jsx as o, jsxs as W, Fragment as X } from "react/jsx-runtime";
2
- import { forwardRef as F } from "react";
3
- import { SizeProvider as G } from "../contexts/SizeContext.js";
4
- import { useConfig as M } from "../providers/ConfigProvider.js";
5
- const O = "btn", R = "btn-primary", H = "btn-secondary", J = "btn-accent", Q = "btn-info", U = "btn-success", V = "btn-warning", Y = "btn-error", Z = "btn-neutral", _ = "btn-outline", tt = "btn-dash", nt = "btn-soft", st = "btn-ghost", et = "btn-link", ot = "btn-xs", ct = "btn-sm", rt = "btn-md", at = "btn-lg", it = "btn-xl", dt = "btn-active", lt = "btn-square", mt = "btn-circle", bt = "btn-wide", ut = "btn-block", ft = "loading", Bt = "loading-spinner", ht = F(
1
+ import { jsx as o, jsxs as U, Fragment as Y } from "react/jsx-runtime";
2
+ import { forwardRef as Z } from "react";
3
+ import { SizeProvider as _ } from "../contexts/SizeContext.js";
4
+ import { useConfig as tt } from "../providers/ConfigProvider.js";
5
+ const nt = "btn", st = "btn-primary", et = "btn-secondary", at = "btn-accent", ot = "btn-info", it = "btn-success", rt = "btn-warning", ct = "btn-error", dt = "btn-neutral", lt = "btn-outline", bt = "btn-dash", mt = "btn-soft", N = "btn-ghost", ft = "btn-link", ut = "btn-xs", Bt = "btn-sm", ht = "btn-md", kt = "btn-lg", pt = "btn-xl", vt = "btn-active", yt = "btn-square", gt = "btn-circle", xt = "btn-wide", Ct = "btn-block", St = "loading", wt = "loading-spinner", Dt = Z(
6
6
  ({
7
- children: c,
8
- color: g,
9
- variant: d,
10
- size: C,
11
- active: k = !1,
7
+ children: i,
8
+ type: m,
9
+ color: f,
10
+ variant: u,
11
+ size: P,
12
+ active: l = !1,
12
13
  loading: t = !1,
13
- shape: l,
14
- noAnimation: S = !1,
14
+ shape: B,
15
+ block: K = !1,
16
+ ghost: j = !1,
17
+ noAnimation: q = !1,
15
18
  icon: r,
16
- iconPlacement: x,
17
- iconPosition: v,
18
- danger: w = !1,
19
- pressed: m,
20
- className: D = "",
21
- "data-testid": b,
22
- ...a
23
- }, u) => {
24
- const { componentSize: z } = M(), i = C ?? z ?? "md", f = w ? "error" : g, n = x ?? v ?? "start", N = {
25
- primary: R,
26
- secondary: H,
27
- accent: J,
28
- info: Q,
29
- success: U,
30
- warning: V,
31
- error: Y,
32
- neutral: Z
33
- }, P = {
19
+ iconPlacement: L,
20
+ iconPosition: T,
21
+ danger: $ = !1,
22
+ pressed: c,
23
+ className: A = "",
24
+ "aria-label": h,
25
+ "data-testid": k,
26
+ ...d
27
+ }, p) => {
28
+ const { componentSize: E } = tt(), b = P ?? E ?? "md";
29
+ let n = u, v = f;
30
+ if (m && !u && !f)
31
+ switch (m) {
32
+ case "primary":
33
+ n = "solid", v = "primary";
34
+ break;
35
+ case "default":
36
+ n = "outline";
37
+ break;
38
+ case "dashed":
39
+ n = "dash";
40
+ break;
41
+ case "link":
42
+ n = "link";
43
+ break;
44
+ case "text":
45
+ n = "text";
46
+ break;
47
+ }
48
+ const y = $ ? "error" : v, g = j && !n ? "ghost" : n, s = L ?? T ?? "start", x = K && !B ? "block" : B, I = {
49
+ primary: st,
50
+ secondary: et,
51
+ accent: at,
52
+ info: ot,
53
+ success: it,
54
+ warning: rt,
55
+ error: ct,
56
+ neutral: dt
57
+ }, V = {
34
58
  solid: "",
35
59
  // default, no extra class needed
36
- outline: _,
37
- dash: tt,
38
- soft: nt,
39
- ghost: st,
40
- link: et
41
- }, K = {
42
- xs: ot,
43
- sm: ct,
44
- md: rt,
45
- lg: at,
46
- xl: it
47
- }, L = {
48
- square: lt,
49
- circle: mt,
50
- wide: bt,
51
- block: ut,
60
+ outline: lt,
61
+ dash: bt,
62
+ soft: mt,
63
+ ghost: N,
64
+ link: ft,
65
+ text: N
66
+ // text variant uses ghost styling
67
+ }, W = {
68
+ xs: ut,
69
+ sm: Bt,
70
+ md: ht,
71
+ lg: kt,
72
+ xl: pt
73
+ }, X = {
74
+ square: yt,
75
+ circle: gt,
76
+ wide: xt,
77
+ block: Ct,
52
78
  round: "rounded-full"
53
- }, B = [
54
- O,
55
- f && N[f],
56
- d && P[d],
57
- K[i],
58
- k && dt,
59
- l && L[l],
60
- S && "no-animation",
61
- D
62
- ].filter(Boolean).join(" "), T = c != null && c !== "" ? {
63
- xs: n === "start" ? "mr-1" : "ml-1",
64
- sm: n === "start" ? "mr-1" : "ml-1",
65
- md: n === "start" ? "mr-1.5" : "ml-1.5",
66
- lg: n === "start" ? "mr-2" : "ml-2",
67
- xl: n === "start" ? "mr-2" : "ml-2"
68
- }[i] : "", h = r && /* @__PURE__ */ o(G, { size: i, children: /* @__PURE__ */ o("span", { className: `inline-flex items-center ${T}`, "aria-hidden": "true", children: r }) }), y = /* @__PURE__ */ W(X, { children: [
69
- t && /* @__PURE__ */ o("span", { className: `${ft} ${Bt}`, "aria-hidden": "true" }),
70
- !t && r && n === "start" && h,
71
- c,
72
- !t && r && n === "end" && h
79
+ }, C = [
80
+ nt,
81
+ y && I[y],
82
+ g && V[g],
83
+ W[b],
84
+ l && vt,
85
+ x && X[x],
86
+ q && "no-animation",
87
+ A
88
+ ].filter(Boolean).join(" "), F = i != null && i !== "" ? {
89
+ xs: s === "start" ? "mr-1" : "ml-1",
90
+ sm: s === "start" ? "mr-1" : "ml-1",
91
+ md: s === "start" ? "mr-1.5" : "ml-1.5",
92
+ lg: s === "start" ? "mr-2" : "ml-2",
93
+ xl: s === "start" ? "mr-2" : "ml-2"
94
+ }[b] : "", S = r && /* @__PURE__ */ o(_, { size: b, children: /* @__PURE__ */ o("span", { className: `inline-flex items-center ${F}`, "aria-hidden": "true", children: r }) }), w = /* @__PURE__ */ U(Y, { children: [
95
+ t && /* @__PURE__ */ o("span", { className: `${St} ${wt}`, "aria-hidden": "true" }),
96
+ !t && r && s === "start" && S,
97
+ i,
98
+ !t && r && s === "end" && S
73
99
  ] });
74
- if ("href" in a && a.href !== void 0) {
75
- const { href: q, disabled: $, onKeyDown: A, onClick: E, ...I } = a, e = $ || t;
100
+ if ("href" in d && d.href !== void 0) {
101
+ const { href: O, disabled: R, onKeyDown: H, onClick: J, ...Q } = d, a = R || t;
76
102
  return /* @__PURE__ */ o(
77
103
  "a",
78
104
  {
79
- ref: u,
80
- href: e ? void 0 : q,
105
+ ref: p,
106
+ href: a ? void 0 : O,
81
107
  role: "button",
82
- className: B,
83
- "aria-disabled": e || void 0,
108
+ className: C,
109
+ "aria-disabled": a || void 0,
84
110
  "aria-busy": t || void 0,
85
- "aria-pressed": m,
86
- tabIndex: e ? -1 : 0,
87
- onKeyDown: (s) => {
88
- s.key === " " && !e && (s.preventDefault(), s.currentTarget.click()), A?.(s);
111
+ "aria-pressed": c,
112
+ "aria-label": h,
113
+ tabIndex: a ? -1 : 0,
114
+ onKeyDown: (e) => {
115
+ e.key === " " && !a && (e.preventDefault(), e.currentTarget.click()), H?.(e);
89
116
  },
90
- onClick: (s) => {
91
- if (e) {
92
- s.preventDefault();
117
+ onClick: (e) => {
118
+ if (a) {
119
+ e.preventDefault();
93
120
  return;
94
121
  }
95
- E?.(s);
122
+ J?.(e);
96
123
  },
97
- "data-testid": b,
98
- ...I,
99
- children: y
124
+ "data-testid": k,
125
+ "data-state-loading": t || void 0,
126
+ "data-state-disabled": a || void 0,
127
+ "data-state-active": l || void 0,
128
+ "data-state-pressed": c,
129
+ ...Q,
130
+ children: w
100
131
  }
101
132
  );
102
133
  }
103
- const { htmlType: j, ...p } = a;
134
+ const { htmlType: G, ...D } = d, M = G ?? "button", z = t || D.disabled;
104
135
  return /* @__PURE__ */ o(
105
136
  "button",
106
137
  {
107
- ref: u,
108
- type: j ?? "button",
109
- className: B,
138
+ ref: p,
139
+ type: M,
140
+ className: C,
110
141
  "aria-busy": t || void 0,
111
- "aria-pressed": m,
112
- disabled: t || p.disabled,
113
- "data-testid": b,
114
- ...p,
115
- children: y
142
+ "aria-pressed": c,
143
+ "aria-label": h,
144
+ disabled: z,
145
+ "data-testid": k,
146
+ "data-state-loading": t || void 0,
147
+ "data-state-disabled": z || void 0,
148
+ "data-state-active": l || void 0,
149
+ "data-state-pressed": c,
150
+ ...D,
151
+ children: w
116
152
  }
117
153
  );
118
154
  }
119
155
  );
120
- ht.displayName = "Button";
156
+ Dt.displayName = "Button";
121
157
  export {
122
- ht as Button
158
+ Dt as Button
123
159
  };
124
160
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { SizeProvider } from '../contexts/SizeContext'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnPrimary = 'btn-primary'\nconst dBtnSecondary = 'btn-secondary'\nconst dBtnAccent = 'btn-accent'\nconst dBtnInfo = 'btn-info'\nconst dBtnSuccess = 'btn-success'\nconst dBtnWarning = 'btn-warning'\nconst dBtnError = 'btn-error'\nconst dBtnNeutral = 'btn-neutral'\nconst dBtnOutline = 'btn-outline'\nconst dBtnDash = 'btn-dash'\nconst dBtnSoft = 'btn-soft'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnLink = 'btn-link'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnMd = 'btn-md'\nconst dBtnLg = 'btn-lg'\nconst dBtnXl = 'btn-xl'\nconst dBtnActive = 'btn-active'\nconst dBtnSquare = 'btn-square'\nconst dBtnCircle = 'btn-circle'\nconst dBtnWide = 'btn-wide'\nconst dBtnBlock = 'btn-block'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\n\ntype BaseButtonProps = {\n /** Button color */\n color?: 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral'\n /** Button style variant */\n variant?: 'solid' | 'outline' | 'dash' | 'soft' | 'ghost' | 'link'\n /** Button size */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Active/pressed visual state */\n active?: boolean\n /** Show loading spinner and disable button */\n loading?: boolean\n /** Button shape */\n shape?: 'square' | 'circle' | 'wide' | 'block' | 'round'\n /** Disable click animation */\n noAnimation?: boolean\n /** Icon element to display */\n icon?: React.ReactNode\n /** Position of the icon */\n iconPlacement?: 'start' | 'end'\n /** @deprecated Use iconPlacement instead */\n iconPosition?: 'start' | 'end'\n /** Applies error/danger styling (shorthand for color=\"error\") */\n danger?: boolean\n /** Toggle button pressed state (sets aria-pressed) */\n pressed?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\ntype ButtonAsButton = BaseButtonProps &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> & {\n href?: undefined\n htmlType?: 'button' | 'submit' | 'reset'\n }\n\ntype ButtonAsAnchor = BaseButtonProps &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'type'> & {\n href: string\n htmlType?: undefined\n /** Disable the link button */\n disabled?: boolean\n }\n\nexport type ButtonProps = ButtonAsButton | ButtonAsAnchor\n\nexport const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(\n (\n {\n children,\n color,\n variant,\n size,\n active = false,\n loading = false,\n shape,\n noAnimation = false,\n icon,\n iconPlacement,\n iconPosition,\n danger = false,\n pressed,\n className = '',\n 'data-testid': testId,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n // danger prop is a shorthand for color=\"error\"\n const effectiveColor = danger ? 'error' : color\n // iconPlacement takes precedence over deprecated iconPosition\n const effectiveIconPlacement = iconPlacement ?? iconPosition ?? 'start'\n\n const colorClasses = {\n primary: dBtnPrimary,\n secondary: dBtnSecondary,\n accent: dBtnAccent,\n info: dBtnInfo,\n success: dBtnSuccess,\n warning: dBtnWarning,\n error: dBtnError,\n neutral: dBtnNeutral,\n }\n\n const variantClasses = {\n solid: '', // default, no extra class needed\n outline: dBtnOutline,\n dash: dBtnDash,\n soft: dBtnSoft,\n ghost: dBtnGhost,\n link: dBtnLink,\n }\n\n const sizeClasses = {\n xs: dBtnXs,\n sm: dBtnSm,\n md: dBtnMd,\n lg: dBtnLg,\n xl: dBtnXl,\n }\n\n const shapeClasses = {\n square: dBtnSquare,\n circle: dBtnCircle,\n wide: dBtnWide,\n block: dBtnBlock,\n round: 'rounded-full',\n }\n\n const classes = [\n dBtn,\n effectiveColor && colorClasses[effectiveColor],\n variant && variantClasses[variant],\n sizeClasses[effectiveSize],\n active && dBtnActive,\n shape && shapeClasses[shape],\n noAnimation && 'no-animation',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine icon spacing based on whether there's text content and button size\n const hasChildren = children !== undefined && children !== null && children !== ''\n const spacingBySize = {\n xs: effectiveIconPlacement === 'start' ? 'mr-1' : 'ml-1',\n sm: effectiveIconPlacement === 'start' ? 'mr-1' : 'ml-1',\n md: effectiveIconPlacement === 'start' ? 'mr-1.5' : 'ml-1.5',\n lg: effectiveIconPlacement === 'start' ? 'mr-2' : 'ml-2',\n xl: effectiveIconPlacement === 'start' ? 'mr-2' : 'ml-2',\n }\n const iconSpacing = hasChildren ? spacingBySize[effectiveSize] : ''\n\n const iconElement = icon && (\n <SizeProvider size={effectiveSize}>\n <span className={`inline-flex items-center ${iconSpacing}`} aria-hidden=\"true\">\n {icon}\n </span>\n </SizeProvider>\n )\n\n const content = (\n <>\n {loading && <span className={`${dLoading} ${dLoadingSpinner}`} aria-hidden=\"true\"></span>}\n {!loading && icon && effectiveIconPlacement === 'start' && iconElement}\n {children}\n {!loading && icon && effectiveIconPlacement === 'end' && iconElement}\n </>\n )\n\n if ('href' in props && props.href !== undefined) {\n const { href, disabled, onKeyDown, onClick, ...anchorProps } = props as ButtonAsAnchor & {\n onKeyDown?: React.KeyboardEventHandler<HTMLAnchorElement>\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n }\n const isDisabled = disabled || loading\n\n // Handle Space key for anchor buttons (links only respond to Enter natively)\n const handleKeyDown = (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (event.key === ' ' && !isDisabled) {\n event.preventDefault()\n event.currentTarget.click()\n }\n onKeyDown?.(event)\n }\n\n // Prevent click when disabled\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault()\n return\n }\n onClick?.(event)\n }\n\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={isDisabled ? undefined : href}\n role=\"button\"\n className={classes}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || undefined}\n aria-pressed={pressed}\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n data-testid={testId}\n {...anchorProps}\n >\n {content}\n </a>\n )\n }\n\n const { htmlType, ...buttonProps } = props as Omit<ButtonAsButton, keyof BaseButtonProps>\n const buttonType: 'button' | 'submit' | 'reset' = htmlType ?? 'button'\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={buttonType}\n className={classes}\n aria-busy={loading || undefined}\n aria-pressed={pressed}\n disabled={loading || buttonProps.disabled}\n data-testid={testId}\n {...buttonProps}\n >\n {content}\n </button>\n )\n }\n)\n\nButton.displayName = 'Button'\n"],"names":["dBtn","dBtnPrimary","dBtnSecondary","dBtnAccent","dBtnInfo","dBtnSuccess","dBtnWarning","dBtnError","dBtnNeutral","dBtnOutline","dBtnDash","dBtnSoft","dBtnGhost","dBtnLink","dBtnXs","dBtnSm","dBtnMd","dBtnLg","dBtnXl","dBtnActive","dBtnSquare","dBtnCircle","dBtnWide","dBtnBlock","dLoading","dLoadingSpinner","Button","forwardRef","children","color","variant","size","active","loading","shape","noAnimation","icon","iconPlacement","iconPosition","danger","pressed","className","testId","props","ref","componentSize","useConfig","effectiveSize","effectiveColor","effectiveIconPlacement","colorClasses","variantClasses","sizeClasses","shapeClasses","classes","iconSpacing","iconElement","jsx","SizeProvider","content","jsxs","Fragment","href","disabled","onKeyDown","onClick","anchorProps","isDisabled","event","htmlType","buttonProps"],"mappings":"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"}
1
+ {"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { SizeProvider } from '../contexts/SizeContext'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnPrimary = 'btn-primary'\nconst dBtnSecondary = 'btn-secondary'\nconst dBtnAccent = 'btn-accent'\nconst dBtnInfo = 'btn-info'\nconst dBtnSuccess = 'btn-success'\nconst dBtnWarning = 'btn-warning'\nconst dBtnError = 'btn-error'\nconst dBtnNeutral = 'btn-neutral'\nconst dBtnOutline = 'btn-outline'\nconst dBtnDash = 'btn-dash'\nconst dBtnSoft = 'btn-soft'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnLink = 'btn-link'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnMd = 'btn-md'\nconst dBtnLg = 'btn-lg'\nconst dBtnXl = 'btn-xl'\nconst dBtnActive = 'btn-active'\nconst dBtnSquare = 'btn-square'\nconst dBtnCircle = 'btn-circle'\nconst dBtnWide = 'btn-wide'\nconst dBtnBlock = 'btn-block'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\n\ntype BaseButtonProps = {\n /** Syntactic sugar for setting variant and color together. Will be overridden by explicit variant & color props. */\n type?: 'primary' | 'default' | 'dashed' | 'link' | 'text'\n /** Button color */\n color?: 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral'\n /** Button style variant */\n variant?: 'solid' | 'outline' | 'dash' | 'soft' | 'ghost' | 'link' | 'text'\n /** Button size */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Active/pressed visual state */\n active?: boolean\n /** Show loading spinner and disable button */\n loading?: boolean\n /** Button shape */\n shape?: 'square' | 'circle' | 'wide' | 'block' | 'round'\n /** Make the button full width */\n block?: boolean\n /** Make background transparent and invert text and border colors */\n ghost?: boolean\n /** Disable click animation */\n noAnimation?: boolean\n /** Icon element to display */\n icon?: React.ReactNode\n /** Position of the icon */\n iconPlacement?: 'start' | 'end'\n /** @deprecated Use iconPlacement instead */\n iconPosition?: 'start' | 'end'\n /** Applies error/danger styling (shorthand for color=\"error\") */\n danger?: boolean\n /** Toggle button pressed state (sets aria-pressed) */\n pressed?: boolean\n /** Accessible label for icon-only buttons */\n 'aria-label'?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\ntype ButtonAsButton = BaseButtonProps &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> & {\n href?: undefined\n htmlType?: 'button' | 'submit' | 'reset'\n }\n\ntype ButtonAsAnchor = BaseButtonProps &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'type'> & {\n href: string\n htmlType?: undefined\n /** Disable the link button */\n disabled?: boolean\n }\n\nexport type ButtonProps = ButtonAsButton | ButtonAsAnchor\n\nexport const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(\n (\n {\n children,\n type,\n color,\n variant,\n size,\n active = false,\n loading = false,\n shape,\n block = false,\n ghost = false,\n noAnimation = false,\n icon,\n iconPlacement,\n iconPosition,\n danger = false,\n pressed,\n className = '',\n 'aria-label': ariaLabel,\n 'data-testid': testId,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n // Apply type prop (syntactic sugar) - explicit variant/color takes precedence\n let derivedVariant = variant\n let derivedColor = color\n if (type && !variant && !color) {\n switch (type) {\n case 'primary':\n derivedVariant = 'solid'\n derivedColor = 'primary'\n break\n case 'default':\n derivedVariant = 'outline'\n break\n case 'dashed':\n derivedVariant = 'dash'\n break\n case 'link':\n derivedVariant = 'link'\n break\n case 'text':\n derivedVariant = 'text'\n break\n }\n }\n\n // danger prop is a shorthand for color=\"error\"\n const effectiveColor = danger ? 'error' : derivedColor\n const effectiveVariant = ghost && !derivedVariant ? 'ghost' : derivedVariant\n // iconPlacement takes precedence over deprecated iconPosition\n const effectiveIconPlacement = iconPlacement ?? iconPosition ?? 'start'\n // block prop is a shorthand for shape=\"block\"\n const effectiveShape = block && !shape ? 'block' : shape\n\n const colorClasses = {\n primary: dBtnPrimary,\n secondary: dBtnSecondary,\n accent: dBtnAccent,\n info: dBtnInfo,\n success: dBtnSuccess,\n warning: dBtnWarning,\n error: dBtnError,\n neutral: dBtnNeutral,\n }\n\n const variantClasses = {\n solid: '', // default, no extra class needed\n outline: dBtnOutline,\n dash: dBtnDash,\n soft: dBtnSoft,\n ghost: dBtnGhost,\n link: dBtnLink,\n text: dBtnGhost, // text variant uses ghost styling\n }\n\n const sizeClasses = {\n xs: dBtnXs,\n sm: dBtnSm,\n md: dBtnMd,\n lg: dBtnLg,\n xl: dBtnXl,\n }\n\n const shapeClasses = {\n square: dBtnSquare,\n circle: dBtnCircle,\n wide: dBtnWide,\n block: dBtnBlock,\n round: 'rounded-full',\n }\n\n const classes = [\n dBtn,\n effectiveColor && colorClasses[effectiveColor],\n effectiveVariant && variantClasses[effectiveVariant],\n sizeClasses[effectiveSize],\n active && dBtnActive,\n effectiveShape && shapeClasses[effectiveShape],\n noAnimation && 'no-animation',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine icon spacing based on whether there's text content and button size\n const hasChildren = children !== undefined && children !== null && children !== ''\n const spacingBySize = {\n xs: effectiveIconPlacement === 'start' ? 'mr-1' : 'ml-1',\n sm: effectiveIconPlacement === 'start' ? 'mr-1' : 'ml-1',\n md: effectiveIconPlacement === 'start' ? 'mr-1.5' : 'ml-1.5',\n lg: effectiveIconPlacement === 'start' ? 'mr-2' : 'ml-2',\n xl: effectiveIconPlacement === 'start' ? 'mr-2' : 'ml-2',\n }\n const iconSpacing = hasChildren ? spacingBySize[effectiveSize] : ''\n\n const iconElement = icon && (\n <SizeProvider size={effectiveSize}>\n <span className={`inline-flex items-center ${iconSpacing}`} aria-hidden=\"true\">\n {icon}\n </span>\n </SizeProvider>\n )\n\n const content = (\n <>\n {loading && <span className={`${dLoading} ${dLoadingSpinner}`} aria-hidden=\"true\"></span>}\n {!loading && icon && effectiveIconPlacement === 'start' && iconElement}\n {children}\n {!loading && icon && effectiveIconPlacement === 'end' && iconElement}\n </>\n )\n\n if ('href' in props && props.href !== undefined) {\n const { href, disabled, onKeyDown, onClick, ...anchorProps } = props as ButtonAsAnchor & {\n onKeyDown?: React.KeyboardEventHandler<HTMLAnchorElement>\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n }\n const isDisabled = disabled || loading\n\n // Handle Space key for anchor buttons (links only respond to Enter natively)\n const handleKeyDown = (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (event.key === ' ' && !isDisabled) {\n event.preventDefault()\n event.currentTarget.click()\n }\n onKeyDown?.(event)\n }\n\n // Prevent click when disabled\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault()\n return\n }\n onClick?.(event)\n }\n\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={isDisabled ? undefined : href}\n role=\"button\"\n className={classes}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || undefined}\n aria-pressed={pressed}\n aria-label={ariaLabel}\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n data-testid={testId}\n data-state-loading={loading || undefined}\n data-state-disabled={isDisabled || undefined}\n data-state-active={active || undefined}\n data-state-pressed={pressed}\n {...anchorProps}\n >\n {content}\n </a>\n )\n }\n\n const { htmlType, ...buttonProps } = props as Omit<ButtonAsButton, keyof BaseButtonProps>\n const buttonType: 'button' | 'submit' | 'reset' = htmlType ?? 'button'\n const isDisabled = loading || buttonProps.disabled\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={buttonType}\n className={classes}\n aria-busy={loading || undefined}\n aria-pressed={pressed}\n aria-label={ariaLabel}\n disabled={isDisabled}\n data-testid={testId}\n data-state-loading={loading || undefined}\n data-state-disabled={isDisabled || undefined}\n data-state-active={active || undefined}\n data-state-pressed={pressed}\n {...buttonProps}\n >\n {content}\n </button>\n )\n }\n)\n\nButton.displayName = 'Button'\n"],"names":["dBtn","dBtnPrimary","dBtnSecondary","dBtnAccent","dBtnInfo","dBtnSuccess","dBtnWarning","dBtnError","dBtnNeutral","dBtnOutline","dBtnDash","dBtnSoft","dBtnGhost","dBtnLink","dBtnXs","dBtnSm","dBtnMd","dBtnLg","dBtnXl","dBtnActive","dBtnSquare","dBtnCircle","dBtnWide","dBtnBlock","dLoading","dLoadingSpinner","Button","forwardRef","children","type","color","variant","size","active","loading","shape","block","ghost","noAnimation","icon","iconPlacement","iconPosition","danger","pressed","className","ariaLabel","testId","props","ref","componentSize","useConfig","effectiveSize","derivedVariant","derivedColor","effectiveColor","effectiveVariant","effectiveIconPlacement","effectiveShape","colorClasses","variantClasses","sizeClasses","shapeClasses","classes","iconSpacing","iconElement","jsx","SizeProvider","content","jsxs","Fragment","href","disabled","onKeyDown","onClick","anchorProps","isDisabled","event","htmlType","buttonProps","buttonType"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- export type TypographySize = 'sm' | 'base' | 'lg' | 'xl' | '2xl';
2
+ export type TypographySize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';
3
3
  export type TitleLevel = 1 | 2 | 3 | 4 | 5;
4
4
  export interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {
5
5
  children: React.ReactNode;
@@ -34,6 +34,7 @@ export interface TextProps extends React.HTMLAttributes<HTMLSpanElement> {
34
34
  underline?: boolean;
35
35
  delete?: boolean;
36
36
  type?: 'default' | 'secondary' | 'success' | 'warning' | 'error';
37
+ size?: TypographySize;
37
38
  copyable?: boolean;
38
39
  'data-testid'?: string;
39
40
  }
@@ -47,7 +48,7 @@ export interface TypographyLinkProps extends React.AnchorHTMLAttributes<HTMLAnch
47
48
  declare function TypographyRoot({ children, size, className, 'data-testid': testId, ...rest }: TypographyProps): import("react/jsx-runtime").JSX.Element;
48
49
  declare function Title({ level, children, copyable, ellipsis, className, id, 'data-testid': testId, ...rest }: TitleProps): import("react/jsx-runtime").JSX.Element;
49
50
  declare function Paragraph({ children, ellipsis, copyable, size, align, className, 'data-testid': testId, ...rest }: ParagraphProps): import("react/jsx-runtime").JSX.Element;
50
- declare function Text({ children, code, mark, strong, italic, underline, delete: del, type, copyable, className, 'data-testid': testId, ...rest }: TextProps): import("react/jsx-runtime").JSX.Element;
51
+ declare function Text({ children, code, mark, strong, italic, underline, delete: del, type, size, copyable, className, 'data-testid': testId, ...rest }: TextProps): import("react/jsx-runtime").JSX.Element;
51
52
  declare function Link({ href, children, target, external, size, className, 'data-testid': testId, ...rest }: TypographyLinkProps): import("react/jsx-runtime").JSX.Element;
52
53
  export declare const Typography: typeof TypographyRoot & {
53
54
  Title: typeof Title;
@@ -1,8 +1,8 @@
1
1
  import { jsx as t, jsxs as g, Fragment as w } from "react/jsx-runtime";
2
- import { useState as C } from "react";
3
- const $ = "btn", k = "btn-ghost", B = "btn-xs", T = "link", j = "link-primary";
4
- function y({ text: a, "data-testid": e }) {
5
- const [d, o] = C(!1);
2
+ import { useState as N } from "react";
3
+ const k = "btn", $ = "btn-ghost", B = "btn-xs", T = "link", j = "link-primary";
4
+ function C({ text: a, "data-testid": e }) {
5
+ const [d, o] = N(!1);
6
6
  return /* @__PURE__ */ t(
7
7
  "button",
8
8
  {
@@ -13,7 +13,7 @@ function y({ text: a, "data-testid": e }) {
13
13
  console.error("Failed to copy:", x);
14
14
  }
15
15
  },
16
- className: `${$} ${k} ${B} ml-2 opacity-0 group-hover:opacity-100 transition-opacity`,
16
+ className: `${k} ${$} ${B} ml-2 opacity-0 group-hover:opacity-100 transition-opacity`,
17
17
  title: "Copy to clipboard",
18
18
  "data-testid": e,
19
19
  children: d ? /* @__PURE__ */ t("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ t(
@@ -37,6 +37,7 @@ function M({ children: a, size: e = "base", className: d = "", "data-testid": o,
37
37
  // Fallback styles (always apply)
38
38
  "text-base-content leading-relaxed",
39
39
  {
40
+ xs: "prose-xs text-xs",
40
41
  sm: "prose-sm text-sm",
41
42
  base: "prose-base text-base",
42
43
  lg: "prose-lg text-lg",
@@ -47,30 +48,30 @@ function M({ children: a, size: e = "base", className: d = "", "data-testid": o,
47
48
  ].filter(Boolean).join(" ");
48
49
  return /* @__PURE__ */ t("div", { className: s, "data-testid": o, ...l, children: a });
49
50
  }
50
- function L({ level: a = 1, children: e, copyable: d, ellipsis: o, className: l = "", id: x, "data-testid": s, ...i }) {
51
- const c = typeof e == "string" ? e : "", r = x || (c ? c.toLowerCase().replace(/\s+/g, "-") : void 0), h = (n) => s ? `${s}-${n}` : void 0, u = {
51
+ function L({ level: a = 1, children: e, copyable: d, ellipsis: o, className: l = "", id: x, "data-testid": s, ...r }) {
52
+ const n = typeof e == "string" ? e : "", i = x || (n ? n.toLowerCase().replace(/\s+/g, "-") : void 0), u = (b) => s ? `${s}-${b}` : void 0, p = {
52
53
  1: "text-4xl font-bold mb-4",
53
54
  2: "text-3xl font-bold mb-3",
54
55
  3: "text-2xl font-semibold mb-3",
55
56
  4: "text-xl font-semibold mb-2",
56
57
  5: "text-lg font-semibold mb-2"
57
- }, f = o ? "truncate" : "", p = `group ${u[a]} ${f} ${l}`.trim(), m = /* @__PURE__ */ g(w, { children: [
58
+ }, f = o ? "truncate" : "", m = `group ${p[a]} ${f} ${l}`.trim(), h = /* @__PURE__ */ g(w, { children: [
58
59
  e,
59
- d && /* @__PURE__ */ t(y, { text: c, "data-testid": h("copy") })
60
+ d && /* @__PURE__ */ t(C, { text: n, "data-testid": u("copy") })
60
61
  ] });
61
62
  switch (a) {
62
63
  case 1:
63
- return /* @__PURE__ */ t("h1", { id: r, className: p, "data-testid": s, ...i, children: m });
64
+ return /* @__PURE__ */ t("h1", { id: i, className: m, "data-testid": s, ...r, children: h });
64
65
  case 2:
65
- return /* @__PURE__ */ t("h2", { id: r, className: p, "data-testid": s, ...i, children: m });
66
+ return /* @__PURE__ */ t("h2", { id: i, className: m, "data-testid": s, ...r, children: h });
66
67
  case 3:
67
- return /* @__PURE__ */ t("h3", { id: r, className: p, "data-testid": s, ...i, children: m });
68
+ return /* @__PURE__ */ t("h3", { id: i, className: m, "data-testid": s, ...r, children: h });
68
69
  case 4:
69
- return /* @__PURE__ */ t("h4", { id: r, className: p, "data-testid": s, ...i, children: m });
70
+ return /* @__PURE__ */ t("h4", { id: i, className: m, "data-testid": s, ...r, children: h });
70
71
  case 5:
71
- return /* @__PURE__ */ t("h5", { id: r, className: p, "data-testid": s, ...i, children: m });
72
+ return /* @__PURE__ */ t("h5", { id: i, className: m, "data-testid": s, ...r, children: h });
72
73
  default:
73
- return /* @__PURE__ */ t("h1", { id: r, className: p, "data-testid": s, ...i, children: m });
74
+ return /* @__PURE__ */ t("h1", { id: i, className: m, "data-testid": s, ...r, children: h });
74
75
  }
75
76
  }
76
77
  const E = {
@@ -81,11 +82,11 @@ const E = {
81
82
  5: "line-clamp-5",
82
83
  6: "line-clamp-6"
83
84
  };
84
- function H({ children: a, ellipsis: e, copyable: d, size: o, align: l, className: x = "", "data-testid": s, ...i }) {
85
- const [c, r] = C(!1), h = typeof a == "string" ? a : "", u = (N) => s ? `${s}-${N}` : void 0, f = typeof e == "object", p = f && e.rows || 3, m = f ? e.expandable : !1, n = Math.min(Math.max(p, 1), 6), b = [
85
+ function H({ children: a, ellipsis: e, copyable: d, size: o, align: l, className: x = "", "data-testid": s, ...r }) {
86
+ const [n, i] = N(!1), u = typeof a == "string" ? a : "", p = (v) => s ? `${s}-${v}` : void 0, f = typeof e == "object", m = f && e.rows || 3, h = f ? e.expandable : !1, b = Math.min(Math.max(m, 1), 6), y = [
86
87
  "group",
87
88
  "mb-4",
88
- e && !c ? E[n] : "",
89
+ e && !n ? E[b] : "",
89
90
  o === "sm" && "text-sm",
90
91
  o === "base" && "text-base",
91
92
  o === "lg" && "text-lg",
@@ -96,19 +97,19 @@ function H({ children: a, ellipsis: e, copyable: d, size: o, align: l, className
96
97
  l === "right" && "text-right",
97
98
  x
98
99
  ].filter(Boolean).join(" ");
99
- return /* @__PURE__ */ g("div", { "data-testid": s, ...i, children: [
100
- /* @__PURE__ */ g("p", { className: b, "data-testid": u("text"), children: [
100
+ return /* @__PURE__ */ g("div", { "data-testid": s, ...r, children: [
101
+ /* @__PURE__ */ g("p", { className: y, "data-testid": p("text"), children: [
101
102
  a,
102
- d && /* @__PURE__ */ t(y, { text: h, "data-testid": u("copy") })
103
+ d && /* @__PURE__ */ t(C, { text: u, "data-testid": p("copy") })
103
104
  ] }),
104
- m && e && /* @__PURE__ */ t(
105
+ h && e && /* @__PURE__ */ t(
105
106
  "button",
106
107
  {
107
108
  onClick: () => {
108
- r(!c), f && e.onExpand && e.onExpand();
109
+ i(!n), f && e.onExpand && e.onExpand();
109
110
  },
110
111
  className: "text-primary text-sm hover:underline",
111
- children: c ? "Show less" : "Show more"
112
+ children: n ? "Show less" : "Show more"
112
113
  }
113
114
  )
114
115
  ] });
@@ -121,29 +122,41 @@ function R({
121
122
  italic: l,
122
123
  underline: x,
123
124
  delete: s,
124
- type: i = "default",
125
- copyable: c,
126
- className: r = "",
127
- "data-testid": h,
128
- ...u
125
+ type: r = "default",
126
+ size: n,
127
+ copyable: i,
128
+ className: u = "",
129
+ "data-testid": p,
130
+ ...f
129
131
  }) {
130
- const f = typeof a == "string" ? a : "", p = (b) => h ? `${h}-${b}` : void 0, m = {
132
+ const m = typeof a == "string" ? a : "", h = (v) => p ? `${p}-${v}` : void 0, b = {
131
133
  default: "",
132
134
  secondary: "text-base-content/70",
133
135
  success: "text-success",
134
136
  warning: "text-warning",
135
137
  error: "text-error"
136
138
  };
137
- let n = a;
138
- e && (n = /* @__PURE__ */ t("code", { className: "px-1.5 py-0.5 bg-base-200 rounded text-sm font-mono", children: n })), d && (n = /* @__PURE__ */ t("mark", { className: "bg-warning/30 px-1", children: n })), o && (n = /* @__PURE__ */ t("strong", { className: "font-bold", children: n })), l && (n = /* @__PURE__ */ t("em", { className: "italic", children: n })), x && (n = /* @__PURE__ */ t("u", { className: "underline", children: n })), s && (n = /* @__PURE__ */ t("del", { className: "line-through opacity-70", children: n }));
139
- const v = `group inline ${m[i]} ${r}`.trim();
140
- return /* @__PURE__ */ g("span", { className: v, "data-testid": h, ...u, children: [
141
- n,
142
- c && /* @__PURE__ */ t(y, { text: f, "data-testid": p("copy") })
139
+ let c = a;
140
+ e && (c = /* @__PURE__ */ t("code", { className: "px-1.5 py-0.5 bg-base-200 rounded text-sm font-mono", children: c })), d && (c = /* @__PURE__ */ t("mark", { className: "bg-warning/30 px-1", children: c })), o && (c = /* @__PURE__ */ t("strong", { className: "font-bold", children: c })), l && (c = /* @__PURE__ */ t("em", { className: "italic", children: c })), x && (c = /* @__PURE__ */ t("u", { className: "underline", children: c })), s && (c = /* @__PURE__ */ t("del", { className: "line-through opacity-70", children: c }));
141
+ const y = [
142
+ "group",
143
+ "inline",
144
+ b[r],
145
+ n === "xs" && "text-xs",
146
+ n === "sm" && "text-sm",
147
+ n === "base" && "text-base",
148
+ n === "lg" && "text-lg",
149
+ n === "xl" && "text-xl",
150
+ n === "2xl" && "text-2xl",
151
+ u
152
+ ].filter(Boolean).join(" ");
153
+ return /* @__PURE__ */ g("span", { className: y, "data-testid": p, ...f, children: [
154
+ c,
155
+ i && /* @__PURE__ */ t(C, { text: m, "data-testid": h("copy") })
143
156
  ] });
144
157
  }
145
- function V({ href: a = "#", children: e, target: d, external: o, size: l, className: x = "", "data-testid": s, ...i }) {
146
- const c = o || a && a.startsWith("http"), r = d || (c ? "_blank" : void 0), h = c ? "noopener noreferrer" : void 0, u = [
158
+ function V({ href: a = "#", children: e, target: d, external: o, size: l, className: x = "", "data-testid": s, ...r }) {
159
+ const n = o || a && a.startsWith("http"), i = d || (n ? "_blank" : void 0), u = n ? "noopener noreferrer" : void 0, p = [
147
160
  T,
148
161
  j,
149
162
  l === "sm" && "text-sm",
@@ -157,14 +170,14 @@ function V({ href: a = "#", children: e, target: d, external: o, size: l, classN
157
170
  "a",
158
171
  {
159
172
  href: a,
160
- target: r,
161
- rel: h,
162
- className: u,
173
+ target: i,
174
+ rel: u,
175
+ className: p,
163
176
  "data-testid": s,
164
- ...i,
177
+ ...r,
165
178
  children: [
166
179
  e,
167
- c && /* @__PURE__ */ g("svg", { className: "w-3 h-3 inline-block ml-1", fill: "currentColor", viewBox: "0 0 20 20", children: [
180
+ n && /* @__PURE__ */ g("svg", { className: "w-3 h-3 inline-block ml-1", fill: "currentColor", viewBox: "0 0 20 20", children: [
168
181
  /* @__PURE__ */ t("path", { d: "M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z" }),
169
182
  /* @__PURE__ */ t("path", { d: "M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z" })
170
183
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"Typography.js","sources":["../../src/components/Typography.tsx"],"sourcesContent":["import React, { useState } from 'react'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnXs = 'btn-xs'\nconst dLink = 'link'\nconst dLinkPrimary = 'link-primary'\n\nexport type TypographySize = 'sm' | 'base' | 'lg' | 'xl' | '2xl'\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n size?: TypographySize\n 'data-testid'?: string\n}\n\nexport interface TitleProps extends Omit<React.HTMLAttributes<HTMLHeadingElement>, 'title'> {\n level?: TitleLevel\n children: React.ReactNode\n copyable?: boolean\n ellipsis?: boolean\n 'data-testid'?: string\n}\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n ellipsis?: boolean | { rows?: number; expandable?: boolean; onExpand?: () => void }\n copyable?: boolean\n size?: TypographySize\n align?: 'left' | 'center' | 'right'\n 'data-testid'?: string\n}\n\nexport interface TextProps extends React.HTMLAttributes<HTMLSpanElement> {\n children: React.ReactNode\n code?: boolean\n mark?: boolean\n strong?: boolean\n italic?: boolean\n underline?: boolean\n delete?: boolean\n type?: 'default' | 'secondary' | 'success' | 'warning' | 'error'\n copyable?: boolean\n 'data-testid'?: string\n}\n\nexport interface TypographyLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n href?: string\n children: React.ReactNode\n external?: boolean\n size?: TypographySize\n 'data-testid'?: string\n}\n\nfunction CopyButton({ text, 'data-testid': testId }: { text: string; 'data-testid'?: string }) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n return (\n <button\n onClick={handleCopy}\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ml-2 opacity-0 group-hover:opacity-100 transition-opacity`}\n title=\"Copy to clipboard\"\n data-testid={testId}\n >\n {copied ? (\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z\" />\n <path d=\"M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z\" />\n </svg>\n )}\n </button>\n )\n}\n\nfunction TypographyRoot({ children, size = 'base', className = '', 'data-testid': testId, ...rest }: TypographyProps) {\n const sizeClasses = {\n sm: 'prose-sm text-sm',\n base: 'prose-base text-base',\n lg: 'prose-lg text-lg',\n xl: 'prose-xl text-xl',\n '2xl': 'prose-2xl text-2xl',\n }\n\n const classes = [\n // Prose classes (only apply if @tailwindcss/typography is installed)\n 'prose dark:prose-invert max-w-none',\n // Fallback styles (always apply)\n 'text-base-content leading-relaxed',\n sizeClasses[size],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} data-testid={testId} {...rest}>{children}</div>\n}\n\nfunction Title({ level = 1, children, copyable, ellipsis, className = '', id, 'data-testid': testId, ...rest }: TitleProps) {\n const textContent = typeof children === 'string' ? children : ''\n const generatedId = id || (textContent ? textContent.toLowerCase().replace(/\\s+/g, '-') : undefined)\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const levelClasses = {\n 1: 'text-4xl font-bold mb-4',\n 2: 'text-3xl font-bold mb-3',\n 3: 'text-2xl font-semibold mb-3',\n 4: 'text-xl font-semibold mb-2',\n 5: 'text-lg font-semibold mb-2',\n }\n\n const ellipsisClass = ellipsis ? 'truncate' : ''\n const classes = `group ${levelClasses[level]} ${ellipsisClass} ${className}`.trim()\n\n const content = (\n <>\n {children}\n {copyable && <CopyButton text={textContent} data-testid={getTestId('copy')} />}\n </>\n )\n\n switch (level) {\n case 1:\n return <h1 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h1>\n case 2:\n return <h2 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h2>\n case 3:\n return <h3 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h3>\n case 4:\n return <h4 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h4>\n case 5:\n return <h5 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h5>\n default:\n return <h1 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h1>\n }\n}\n\nconst lineClampClasses = {\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6',\n} as const\n\nfunction Paragraph({ children, ellipsis, copyable, size, align, className = '', 'data-testid': testId, ...rest }: ParagraphProps) {\n const [expanded, setExpanded] = useState(false)\n const textContent = typeof children === 'string' ? children : ''\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const isEllipsisObject = typeof ellipsis === 'object'\n const rows = isEllipsisObject ? ellipsis.rows || 3 : 3\n const expandable = isEllipsisObject ? ellipsis.expandable : false\n\n const clampedRows = Math.min(Math.max(rows, 1), 6) as 1 | 2 | 3 | 4 | 5 | 6\n const ellipsisClass =\n ellipsis && !expanded ? lineClampClasses[clampedRows] : ''\n\n const classes = [\n 'group',\n 'mb-4',\n ellipsisClass,\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n align === 'left' && 'text-left',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div data-testid={testId} {...rest}>\n <p className={classes} data-testid={getTestId('text')}>\n {children}\n {copyable && <CopyButton text={textContent} data-testid={getTestId('copy')} />}\n </p>\n {expandable && ellipsis && (\n <button\n onClick={() => {\n setExpanded(!expanded)\n if (isEllipsisObject && ellipsis.onExpand) {\n ellipsis.onExpand()\n }\n }}\n className=\"text-primary text-sm hover:underline\"\n >\n {expanded ? 'Show less' : 'Show more'}\n </button>\n )}\n </div>\n )\n}\n\nfunction Text({\n children,\n code,\n mark,\n strong,\n italic,\n underline,\n delete: del,\n type = 'default',\n copyable,\n className = '',\n 'data-testid': testId,\n ...rest\n}: TextProps) {\n const textContent = typeof children === 'string' ? children : ''\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const typeClasses = {\n default: '',\n secondary: 'text-base-content/70',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n }\n\n let content = children\n\n if (code) {\n content = (\n <code className=\"px-1.5 py-0.5 bg-base-200 rounded text-sm font-mono\">{content}</code>\n )\n }\n\n if (mark) {\n content = <mark className=\"bg-warning/30 px-1\">{content}</mark>\n }\n\n if (strong) {\n content = <strong className=\"font-bold\">{content}</strong>\n }\n\n if (italic) {\n content = <em className=\"italic\">{content}</em>\n }\n\n if (underline) {\n content = <u className=\"underline\">{content}</u>\n }\n\n if (del) {\n content = <del className=\"line-through opacity-70\">{content}</del>\n }\n\n const classes = `group inline ${typeClasses[type]} ${className}`.trim()\n\n return (\n <span className={classes} data-testid={testId} {...rest}>\n {content}\n {copyable && <CopyButton text={textContent} data-testid={getTestId('copy')} />}\n </span>\n )\n}\n\nfunction Link({ href = '#', children, target, external, size, className = '', 'data-testid': testId, ...rest }: TypographyLinkProps) {\n const isExternal = external || (href && href.startsWith('http'))\n const linkTarget = target || (isExternal ? '_blank' : undefined)\n const rel = isExternal ? 'noopener noreferrer' : undefined\n\n const classes = [\n dLink,\n dLinkPrimary,\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <a\n href={href}\n target={linkTarget}\n rel={rel}\n className={classes}\n data-testid={testId}\n {...rest}\n >\n {children}\n {isExternal && (\n <svg className=\"w-3 h-3 inline-block ml-1\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z\" />\n <path d=\"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z\" />\n </svg>\n )}\n </a>\n )\n}\n\nexport const Typography = Object.assign(TypographyRoot, {\n Title,\n Paragraph,\n Text,\n Link,\n})\n\nexport default Typography\n"],"names":["dBtn","dBtnGhost","dBtnXs","dLink","dLinkPrimary","CopyButton","text","testId","copied","setCopied","useState","jsx","err","jsxs","TypographyRoot","children","size","className","rest","classes","Title","level","copyable","ellipsis","id","textContent","generatedId","getTestId","suffix","levelClasses","ellipsisClass","content","Fragment","lineClampClasses","Paragraph","align","expanded","setExpanded","isEllipsisObject","rows","expandable","clampedRows","Text","code","mark","strong","italic","underline","del","type","typeClasses","Link","href","target","external","isExternal","linkTarget","rel","Typography"],"mappings":"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"}
1
+ {"version":3,"file":"Typography.js","sources":["../../src/components/Typography.tsx"],"sourcesContent":["import React, { useState } from 'react'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnXs = 'btn-xs'\nconst dLink = 'link'\nconst dLinkPrimary = 'link-primary'\n\nexport type TypographySize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl'\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n size?: TypographySize\n 'data-testid'?: string\n}\n\nexport interface TitleProps extends Omit<React.HTMLAttributes<HTMLHeadingElement>, 'title'> {\n level?: TitleLevel\n children: React.ReactNode\n copyable?: boolean\n ellipsis?: boolean\n 'data-testid'?: string\n}\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n ellipsis?: boolean | { rows?: number; expandable?: boolean; onExpand?: () => void }\n copyable?: boolean\n size?: TypographySize\n align?: 'left' | 'center' | 'right'\n 'data-testid'?: string\n}\n\nexport interface TextProps extends React.HTMLAttributes<HTMLSpanElement> {\n children: React.ReactNode\n code?: boolean\n mark?: boolean\n strong?: boolean\n italic?: boolean\n underline?: boolean\n delete?: boolean\n type?: 'default' | 'secondary' | 'success' | 'warning' | 'error'\n size?: TypographySize\n copyable?: boolean\n 'data-testid'?: string\n}\n\nexport interface TypographyLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n href?: string\n children: React.ReactNode\n external?: boolean\n size?: TypographySize\n 'data-testid'?: string\n}\n\nfunction CopyButton({ text, 'data-testid': testId }: { text: string; 'data-testid'?: string }) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n return (\n <button\n onClick={handleCopy}\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ml-2 opacity-0 group-hover:opacity-100 transition-opacity`}\n title=\"Copy to clipboard\"\n data-testid={testId}\n >\n {copied ? (\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z\" />\n <path d=\"M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z\" />\n </svg>\n )}\n </button>\n )\n}\n\nfunction TypographyRoot({ children, size = 'base', className = '', 'data-testid': testId, ...rest }: TypographyProps) {\n const sizeClasses = {\n xs: 'prose-xs text-xs',\n sm: 'prose-sm text-sm',\n base: 'prose-base text-base',\n lg: 'prose-lg text-lg',\n xl: 'prose-xl text-xl',\n '2xl': 'prose-2xl text-2xl',\n }\n\n const classes = [\n // Prose classes (only apply if @tailwindcss/typography is installed)\n 'prose dark:prose-invert max-w-none',\n // Fallback styles (always apply)\n 'text-base-content leading-relaxed',\n sizeClasses[size],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} data-testid={testId} {...rest}>{children}</div>\n}\n\nfunction Title({ level = 1, children, copyable, ellipsis, className = '', id, 'data-testid': testId, ...rest }: TitleProps) {\n const textContent = typeof children === 'string' ? children : ''\n const generatedId = id || (textContent ? textContent.toLowerCase().replace(/\\s+/g, '-') : undefined)\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const levelClasses = {\n 1: 'text-4xl font-bold mb-4',\n 2: 'text-3xl font-bold mb-3',\n 3: 'text-2xl font-semibold mb-3',\n 4: 'text-xl font-semibold mb-2',\n 5: 'text-lg font-semibold mb-2',\n }\n\n const ellipsisClass = ellipsis ? 'truncate' : ''\n const classes = `group ${levelClasses[level]} ${ellipsisClass} ${className}`.trim()\n\n const content = (\n <>\n {children}\n {copyable && <CopyButton text={textContent} data-testid={getTestId('copy')} />}\n </>\n )\n\n switch (level) {\n case 1:\n return <h1 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h1>\n case 2:\n return <h2 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h2>\n case 3:\n return <h3 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h3>\n case 4:\n return <h4 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h4>\n case 5:\n return <h5 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h5>\n default:\n return <h1 id={generatedId} className={classes} data-testid={testId} {...rest}>{content}</h1>\n }\n}\n\nconst lineClampClasses = {\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6',\n} as const\n\nfunction Paragraph({ children, ellipsis, copyable, size, align, className = '', 'data-testid': testId, ...rest }: ParagraphProps) {\n const [expanded, setExpanded] = useState(false)\n const textContent = typeof children === 'string' ? children : ''\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const isEllipsisObject = typeof ellipsis === 'object'\n const rows = isEllipsisObject ? ellipsis.rows || 3 : 3\n const expandable = isEllipsisObject ? ellipsis.expandable : false\n\n const clampedRows = Math.min(Math.max(rows, 1), 6) as 1 | 2 | 3 | 4 | 5 | 6\n const ellipsisClass =\n ellipsis && !expanded ? lineClampClasses[clampedRows] : ''\n\n const classes = [\n 'group',\n 'mb-4',\n ellipsisClass,\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n align === 'left' && 'text-left',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div data-testid={testId} {...rest}>\n <p className={classes} data-testid={getTestId('text')}>\n {children}\n {copyable && <CopyButton text={textContent} data-testid={getTestId('copy')} />}\n </p>\n {expandable && ellipsis && (\n <button\n onClick={() => {\n setExpanded(!expanded)\n if (isEllipsisObject && ellipsis.onExpand) {\n ellipsis.onExpand()\n }\n }}\n className=\"text-primary text-sm hover:underline\"\n >\n {expanded ? 'Show less' : 'Show more'}\n </button>\n )}\n </div>\n )\n}\n\nfunction Text({\n children,\n code,\n mark,\n strong,\n italic,\n underline,\n delete: del,\n type = 'default',\n size,\n copyable,\n className = '',\n 'data-testid': testId,\n ...rest\n}: TextProps) {\n const textContent = typeof children === 'string' ? children : ''\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const typeClasses = {\n default: '',\n secondary: 'text-base-content/70',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n }\n\n let content = children\n\n if (code) {\n content = (\n <code className=\"px-1.5 py-0.5 bg-base-200 rounded text-sm font-mono\">{content}</code>\n )\n }\n\n if (mark) {\n content = <mark className=\"bg-warning/30 px-1\">{content}</mark>\n }\n\n if (strong) {\n content = <strong className=\"font-bold\">{content}</strong>\n }\n\n if (italic) {\n content = <em className=\"italic\">{content}</em>\n }\n\n if (underline) {\n content = <u className=\"underline\">{content}</u>\n }\n\n if (del) {\n content = <del className=\"line-through opacity-70\">{content}</del>\n }\n\n const classes = [\n 'group',\n 'inline',\n typeClasses[type],\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <span className={classes} data-testid={testId} {...rest}>\n {content}\n {copyable && <CopyButton text={textContent} data-testid={getTestId('copy')} />}\n </span>\n )\n}\n\nfunction Link({ href = '#', children, target, external, size, className = '', 'data-testid': testId, ...rest }: TypographyLinkProps) {\n const isExternal = external || (href && href.startsWith('http'))\n const linkTarget = target || (isExternal ? '_blank' : undefined)\n const rel = isExternal ? 'noopener noreferrer' : undefined\n\n const classes = [\n dLink,\n dLinkPrimary,\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <a\n href={href}\n target={linkTarget}\n rel={rel}\n className={classes}\n data-testid={testId}\n {...rest}\n >\n {children}\n {isExternal && (\n <svg className=\"w-3 h-3 inline-block ml-1\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z\" />\n <path d=\"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z\" />\n </svg>\n )}\n </a>\n )\n}\n\nexport const Typography = Object.assign(TypographyRoot, {\n Title,\n Paragraph,\n Text,\n Link,\n})\n\nexport default Typography\n"],"names":["dBtn","dBtnGhost","dBtnXs","dLink","dLinkPrimary","CopyButton","text","testId","copied","setCopied","useState","jsx","err","jsxs","TypographyRoot","children","size","className","rest","classes","Title","level","copyable","ellipsis","id","textContent","generatedId","getTestId","suffix","levelClasses","ellipsisClass","content","Fragment","lineClampClasses","Paragraph","align","expanded","setExpanded","isEllipsisObject","rows","expandable","clampedRows","Text","code","mark","strong","italic","underline","del","type","typeClasses","Link","href","target","external","isExternal","linkTarget","rel","Typography"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asterui",
3
- "version": "0.12.73",
3
+ "version": "0.12.75",
4
4
  "description": "React UI component library with DaisyUI",
5
5
  "homepage": "https://asterui.com",
6
6
  "repository": {