asterui 0.12.15 → 0.12.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +1 -1
  2. package/dist/components/HoverGallery.d.ts +10 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +156 -154
  5. package/dist/index.js.map +1 -1
  6. package/dist/index100.js +11 -43
  7. package/dist/index100.js.map +1 -1
  8. package/dist/index101.js +44 -11
  9. package/dist/index101.js.map +1 -1
  10. package/dist/index102.js +10 -12
  11. package/dist/index102.js.map +1 -1
  12. package/dist/index103.js +14 -7
  13. package/dist/index103.js.map +1 -1
  14. package/dist/index104.js +7 -12
  15. package/dist/index104.js.map +1 -1
  16. package/dist/index105.js +11 -29
  17. package/dist/index105.js.map +1 -1
  18. package/dist/index106.js +29 -16
  19. package/dist/index106.js.map +1 -1
  20. package/dist/index107.js +21 -0
  21. package/dist/index107.js.map +1 -0
  22. package/dist/index21.js +1 -1
  23. package/dist/index37.js +15 -120
  24. package/dist/index37.js.map +1 -1
  25. package/dist/index38.js +119 -37
  26. package/dist/index38.js.map +1 -1
  27. package/dist/index39.js +40 -398
  28. package/dist/index39.js.map +1 -1
  29. package/dist/index40.js +390 -89
  30. package/dist/index40.js.map +1 -1
  31. package/dist/index41.js +90 -215
  32. package/dist/index41.js.map +1 -1
  33. package/dist/index42.js +211 -144
  34. package/dist/index42.js.map +1 -1
  35. package/dist/index43.js +155 -15
  36. package/dist/index43.js.map +1 -1
  37. package/dist/index44.js +15 -17
  38. package/dist/index44.js.map +1 -1
  39. package/dist/index45.js +17 -21
  40. package/dist/index45.js.map +1 -1
  41. package/dist/index46.js +18 -134
  42. package/dist/index46.js.map +1 -1
  43. package/dist/index47.js +134 -10
  44. package/dist/index47.js.map +1 -1
  45. package/dist/index48.js +13 -35
  46. package/dist/index48.js.map +1 -1
  47. package/dist/index49.js +35 -34
  48. package/dist/index49.js.map +1 -1
  49. package/dist/index50.js +34 -81
  50. package/dist/index50.js.map +1 -1
  51. package/dist/index51.js +71 -166
  52. package/dist/index51.js.map +1 -1
  53. package/dist/index52.js +167 -144
  54. package/dist/index52.js.map +1 -1
  55. package/dist/index53.js +152 -11
  56. package/dist/index53.js.map +1 -1
  57. package/dist/index54.js +10 -20
  58. package/dist/index54.js.map +1 -1
  59. package/dist/index55.js +22 -14
  60. package/dist/index55.js.map +1 -1
  61. package/dist/index56.js +14 -7
  62. package/dist/index56.js.map +1 -1
  63. package/dist/index57.js +6 -333
  64. package/dist/index57.js.map +1 -1
  65. package/dist/index58.js +334 -47
  66. package/dist/index58.js.map +1 -1
  67. package/dist/index59.js +47 -122
  68. package/dist/index59.js.map +1 -1
  69. package/dist/index60.js +120 -108
  70. package/dist/index60.js.map +1 -1
  71. package/dist/index61.js +107 -167
  72. package/dist/index61.js.map +1 -1
  73. package/dist/index62.js +167 -29
  74. package/dist/index62.js.map +1 -1
  75. package/dist/index63.js +30 -120
  76. package/dist/index63.js.map +1 -1
  77. package/dist/index64.js +116 -80
  78. package/dist/index64.js.map +1 -1
  79. package/dist/index65.js +85 -19
  80. package/dist/index65.js.map +1 -1
  81. package/dist/index66.js +19 -73
  82. package/dist/index66.js.map +1 -1
  83. package/dist/index67.js +71 -54
  84. package/dist/index67.js.map +1 -1
  85. package/dist/index68.js +56 -44
  86. package/dist/index68.js.map +1 -1
  87. package/dist/index69.js +42 -49
  88. package/dist/index69.js.map +1 -1
  89. package/dist/index70.js +50 -121
  90. package/dist/index70.js.map +1 -1
  91. package/dist/index71.js +118 -102
  92. package/dist/index71.js.map +1 -1
  93. package/dist/index72.js +107 -41
  94. package/dist/index72.js.map +1 -1
  95. package/dist/index73.js +41 -68
  96. package/dist/index73.js.map +1 -1
  97. package/dist/index74.js +66 -19
  98. package/dist/index74.js.map +1 -1
  99. package/dist/index75.js +18 -55
  100. package/dist/index75.js.map +1 -1
  101. package/dist/index76.js +55 -251
  102. package/dist/index76.js.map +1 -1
  103. package/dist/index77.js +254 -22
  104. package/dist/index77.js.map +1 -1
  105. package/dist/index78.js +22 -31
  106. package/dist/index78.js.map +1 -1
  107. package/dist/index79.js +30 -93
  108. package/dist/index79.js.map +1 -1
  109. package/dist/index80.js +89 -324
  110. package/dist/index80.js.map +1 -1
  111. package/dist/index81.js +322 -73
  112. package/dist/index81.js.map +1 -1
  113. package/dist/index82.js +79 -39
  114. package/dist/index82.js.map +1 -1
  115. package/dist/index83.js +40 -23
  116. package/dist/index83.js.map +1 -1
  117. package/dist/index84.js +21 -93
  118. package/dist/index84.js.map +1 -1
  119. package/dist/index85.js +87 -148
  120. package/dist/index85.js.map +1 -1
  121. package/dist/index86.js +147 -152
  122. package/dist/index86.js.map +1 -1
  123. package/dist/index87.js +159 -63
  124. package/dist/index87.js.map +1 -1
  125. package/dist/index88.js +65 -35
  126. package/dist/index88.js.map +1 -1
  127. package/dist/index89.js +35 -234
  128. package/dist/index89.js.map +1 -1
  129. package/dist/index90.js +231 -31
  130. package/dist/index90.js.map +1 -1
  131. package/dist/index91.js +34 -210
  132. package/dist/index91.js.map +1 -1
  133. package/dist/index92.js +195 -198
  134. package/dist/index92.js.map +1 -1
  135. package/dist/index93.js +159 -241
  136. package/dist/index93.js.map +1 -1
  137. package/dist/index94.js +283 -166
  138. package/dist/index94.js.map +1 -1
  139. package/dist/index95.js +173 -253
  140. package/dist/index95.js.map +1 -1
  141. package/dist/index96.js +258 -14
  142. package/dist/index96.js.map +1 -1
  143. package/dist/index97.js +12 -31
  144. package/dist/index97.js.map +1 -1
  145. package/dist/index98.js +32 -5
  146. package/dist/index98.js.map +1 -1
  147. package/dist/index99.js +5 -13
  148. package/dist/index99.js.map +1 -1
  149. package/package.json +1 -1
package/dist/index95.js CHANGED
@@ -1,261 +1,181 @@
1
- import { jsxs as p, jsx as t } from "react/jsx-runtime";
2
- import { useState as U, useRef as x } from "react";
3
- const K = ({
4
- action: N,
5
- accept: O,
6
- multiple: A = !1,
7
- maxCount: v,
8
- maxSize: b,
9
- listType: y = "text",
10
- fileList: L,
11
- defaultFileList: I = [],
12
- beforeUpload: D,
13
- onChange: m,
14
- onRemove: F,
15
- customRequest: k,
16
- showUploadList: B = !0,
17
- disabled: i = !1,
18
- children: R,
19
- className: T = "",
20
- ...W
21
- }) => {
22
- const [z, H] = U(I), [E, w] = U(!1), j = x(null), P = x(0), h = x(0), d = L !== void 0 ? L : z, S = () => (P.current += 1, `upload-${Date.now()}-${P.current}`), f = (e) => {
23
- L === void 0 && H(e);
24
- }, $ = (e) => {
25
- const r = {
26
- uid: S(),
27
- name: e.name,
28
- status: "uploading",
29
- percent: 0,
30
- originFileObj: e
31
- }, n = [...d, r];
32
- f(n), m?.({ file: r, fileList: n });
33
- const l = (o) => {
34
- const s = n.map(
35
- (a) => a.uid === r.uid ? { ...a, percent: o } : a
36
- );
37
- f(s), m?.({ file: { ...r, percent: o }, fileList: s });
38
- }, u = (o) => {
39
- const s = {
40
- ...r,
41
- status: "done",
42
- percent: 100,
43
- response: o
44
- }, a = n.map(
45
- (c) => c.uid === r.uid ? s : c
46
- );
47
- f(a), m?.({ file: s, fileList: a });
48
- }, g = (o) => {
49
- const s = {
50
- ...r,
51
- status: "error",
52
- error: o
53
- }, a = n.map(
54
- (c) => c.uid === r.uid ? s : c
55
- );
56
- f(a), m?.({ file: s, fileList: a });
57
- };
58
- if (k)
59
- k({
60
- file: e,
61
- onProgress: l,
62
- onSuccess: u,
63
- onError: g
64
- });
65
- else if (N) {
66
- const o = new FormData();
67
- o.append("file", e);
68
- const s = new XMLHttpRequest();
69
- s.upload.addEventListener("progress", (a) => {
70
- if (a.lengthComputable) {
71
- const c = Math.round(a.loaded / a.total * 100);
72
- l(c);
1
+ import { jsx as e, jsxs as u, Fragment as C } from "react/jsx-runtime";
2
+ import { useState as g } from "react";
3
+ function f({ text: a }) {
4
+ const [t, r] = g(!1);
5
+ return /* @__PURE__ */ e(
6
+ "button",
7
+ {
8
+ onClick: async () => {
9
+ try {
10
+ await navigator.clipboard.writeText(a), r(!0), setTimeout(() => r(!1), 2e3);
11
+ } catch (s) {
12
+ console.error("Failed to copy:", s);
73
13
  }
74
- }), s.addEventListener("load", () => {
75
- s.status >= 200 && s.status < 300 ? u(s.response) : g(new Error(`Upload failed with status ${s.status}`));
76
- }), s.addEventListener("error", () => {
77
- g(new Error("Upload failed"));
78
- }), s.open("POST", N), s.send(o);
79
- } else
80
- u(null);
81
- }, C = async (e) => {
82
- if (i) return;
83
- const r = Array.from(e);
84
- if (v && d.length + r.length > v) {
85
- console.warn(`Cannot upload more than ${v} files`);
86
- return;
87
- }
88
- if (b) {
89
- const n = r.filter((l) => l.size > b);
90
- if (n.length > 0) {
91
- console.warn(
92
- `Files exceed maximum size of ${b} bytes:`,
93
- n.map((l) => l.name)
94
- );
95
- return;
96
- }
14
+ },
15
+ className: "btn btn-ghost btn-xs ml-2 opacity-0 group-hover:opacity-100 transition-opacity",
16
+ title: "Copy to clipboard",
17
+ children: t ? /* @__PURE__ */ e("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ e(
18
+ "path",
19
+ {
20
+ fillRule: "evenodd",
21
+ 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",
22
+ clipRule: "evenodd"
23
+ }
24
+ ) }) : /* @__PURE__ */ u("svg", { className: "w-4 h-4", fill: "currentColor", viewBox: "0 0 20 20", children: [
25
+ /* @__PURE__ */ e("path", { d: "M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" }),
26
+ /* @__PURE__ */ e("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" })
27
+ ] })
97
28
  }
98
- if (D) {
99
- const n = await Promise.all(
100
- r.map((u) => D(u, r))
101
- );
102
- r.filter((u, g) => n[g] !== !1).forEach($);
103
- } else
104
- r.forEach($);
105
- }, X = (e) => {
106
- e.target.files && C(e.target.files), e.target.value = "";
107
- }, _ = (e) => {
108
- e.preventDefault(), e.stopPropagation(), i || (h.current++, w(!0));
109
- }, q = (e) => {
110
- e.preventDefault(), e.stopPropagation(), i || (h.current--, h.current === 0 && w(!1));
111
- }, G = (e) => {
112
- e.preventDefault(), e.stopPropagation();
113
- }, J = (e) => {
114
- e.preventDefault(), e.stopPropagation(), h.current = 0, w(!1), !i && e.dataTransfer.files && C(e.dataTransfer.files);
115
- }, M = async (e) => {
116
- if (F && await F(e) === !1)
117
- return;
118
- const r = d.filter((n) => n.uid !== e.uid);
119
- f(r), m?.({ file: e, fileList: r });
120
- };
121
- return /* @__PURE__ */ p("div", { className: T, "data-state": E ? "dragging" : "idle", ...W, children: [
122
- /* @__PURE__ */ t(
123
- "div",
124
- {
125
- onDragEnter: _,
126
- onDragOver: G,
127
- onDragLeave: q,
128
- onDrop: J,
129
- onClick: () => !i && j.current?.click(),
130
- className: `
131
- border-2 border-dashed rounded-lg p-4 cursor-pointer transition-colors
132
- ${E ? "border-primary bg-primary/5" : "border-base-content/20"}
133
- ${i ? "opacity-50 cursor-not-allowed" : "hover:border-primary"}
134
- `,
135
- children: R || /* @__PURE__ */ p("div", { className: "flex flex-col items-center gap-2 py-4", children: [
136
- /* @__PURE__ */ t(
137
- "svg",
138
- {
139
- className: "w-12 h-12 text-base-content/40",
140
- fill: "none",
141
- viewBox: "0 0 24 24",
142
- stroke: "currentColor",
143
- children: /* @__PURE__ */ t(
144
- "path",
145
- {
146
- strokeLinecap: "round",
147
- strokeLinejoin: "round",
148
- strokeWidth: 2,
149
- d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"
150
- }
151
- )
152
- }
153
- ),
154
- /* @__PURE__ */ p("div", { className: "text-sm text-center", children: [
155
- /* @__PURE__ */ t("span", { className: "font-semibold text-primary", children: "Click to upload" }),
156
- /* @__PURE__ */ t("span", { className: "text-base-content/60", children: " or drag and drop" })
157
- ] })
158
- ] })
159
- }
160
- ),
161
- /* @__PURE__ */ t(
162
- "input",
29
+ );
30
+ }
31
+ function v({ children: a, size: t = "base", className: r = "", ...l }) {
32
+ const m = [
33
+ // Prose classes (only apply if @tailwindcss/typography is installed)
34
+ "prose dark:prose-invert max-w-none",
35
+ // Fallback styles (always apply)
36
+ "text-base-content leading-relaxed",
37
+ {
38
+ sm: "prose-sm text-sm",
39
+ base: "prose-base text-base",
40
+ lg: "prose-lg text-lg",
41
+ xl: "prose-xl text-xl",
42
+ "2xl": "prose-2xl text-2xl"
43
+ }[t],
44
+ r
45
+ ].filter(Boolean).join(" ");
46
+ return /* @__PURE__ */ e("div", { className: m, ...l, children: a });
47
+ }
48
+ function N({ level: a = 1, children: t, copyable: r, ellipsis: l, className: s = "", id: m, ...c }) {
49
+ const o = typeof t == "string" ? t : "", i = m || (o ? o.toLowerCase().replace(/\s+/g, "-") : void 0), h = {
50
+ 1: "text-4xl font-bold mb-4",
51
+ 2: "text-3xl font-bold mb-3",
52
+ 3: "text-2xl font-semibold mb-3",
53
+ 4: "text-xl font-semibold mb-2",
54
+ 5: "text-lg font-semibold mb-2"
55
+ }, p = l ? "truncate" : "", x = `group ${h[a]} ${p} ${s}`.trim(), d = /* @__PURE__ */ u(C, { children: [
56
+ t,
57
+ r && /* @__PURE__ */ e(f, { text: o })
58
+ ] });
59
+ switch (a) {
60
+ case 1:
61
+ return /* @__PURE__ */ e("h1", { id: i, className: x, ...c, children: d });
62
+ case 2:
63
+ return /* @__PURE__ */ e("h2", { id: i, className: x, ...c, children: d });
64
+ case 3:
65
+ return /* @__PURE__ */ e("h3", { id: i, className: x, ...c, children: d });
66
+ case 4:
67
+ return /* @__PURE__ */ e("h4", { id: i, className: x, ...c, children: d });
68
+ case 5:
69
+ return /* @__PURE__ */ e("h5", { id: i, className: x, ...c, children: d });
70
+ default:
71
+ return /* @__PURE__ */ e("h1", { id: i, className: x, ...c, children: d });
72
+ }
73
+ }
74
+ const w = {
75
+ 1: "line-clamp-1",
76
+ 2: "line-clamp-2",
77
+ 3: "line-clamp-3",
78
+ 4: "line-clamp-4",
79
+ 5: "line-clamp-5",
80
+ 6: "line-clamp-6"
81
+ };
82
+ function k({ children: a, ellipsis: t, copyable: r, size: l, align: s, className: m = "", ...c }) {
83
+ const [o, i] = g(!1), h = typeof a == "string" ? a : "", p = typeof t == "object", x = p && t.rows || 3, d = p ? t.expandable : !1, n = Math.min(Math.max(x, 1), 6), y = [
84
+ "group",
85
+ "mb-4",
86
+ t && !o ? w[n] : "",
87
+ l === "sm" && "text-sm",
88
+ l === "base" && "text-base",
89
+ l === "lg" && "text-lg",
90
+ l === "xl" && "text-xl",
91
+ l === "2xl" && "text-2xl",
92
+ s === "left" && "text-left",
93
+ s === "center" && "text-center",
94
+ s === "right" && "text-right",
95
+ m
96
+ ].filter(Boolean).join(" ");
97
+ return /* @__PURE__ */ u("div", { ...c, children: [
98
+ /* @__PURE__ */ u("p", { className: y, children: [
99
+ a,
100
+ r && /* @__PURE__ */ e(f, { text: h })
101
+ ] }),
102
+ d && t && /* @__PURE__ */ e(
103
+ "button",
163
104
  {
164
- ref: j,
165
- type: "file",
166
- accept: O,
167
- multiple: A,
168
- onChange: X,
169
- disabled: i,
170
- className: "hidden"
105
+ onClick: () => {
106
+ i(!o), p && t.onExpand && t.onExpand();
107
+ },
108
+ className: "text-primary text-sm hover:underline",
109
+ children: o ? "Show less" : "Show more"
171
110
  }
172
- ),
173
- !B || d.length === 0 ? null : y === "picture-card" ? /* @__PURE__ */ t("div", { className: "flex flex-wrap gap-2 mt-2", children: d.map((e) => /* @__PURE__ */ p(
174
- "div",
175
- {
176
- className: "relative w-24 h-24 border border-base-content/20 rounded-lg overflow-hidden",
177
- children: [
178
- e.status === "uploading" && /* @__PURE__ */ t("div", { className: "absolute inset-0 bg-base-300/80 flex items-center justify-center", children: /* @__PURE__ */ t("span", { className: "loading loading-spinner loading-sm" }) }),
179
- e.status === "done" && e.url && /* @__PURE__ */ t(
180
- "img",
181
- {
182
- src: e.url,
183
- alt: e.name,
184
- className: "w-full h-full object-cover"
185
- }
186
- ),
187
- e.status === "error" && /* @__PURE__ */ t("div", { className: "absolute inset-0 bg-error/10 flex items-center justify-center", children: /* @__PURE__ */ t(
188
- "svg",
189
- {
190
- className: "w-8 h-8 text-error",
191
- fill: "none",
192
- viewBox: "0 0 24 24",
193
- stroke: "currentColor",
194
- children: /* @__PURE__ */ t(
195
- "path",
196
- {
197
- strokeLinecap: "round",
198
- strokeLinejoin: "round",
199
- strokeWidth: 2,
200
- d: "M6 18L18 6M6 6l12 12"
201
- }
202
- )
203
- }
204
- ) }),
205
- /* @__PURE__ */ t(
206
- "button",
207
- {
208
- onClick: () => M(e),
209
- className: "absolute top-1 right-1 btn btn-xs btn-circle btn-error",
210
- type: "button",
211
- children: "✕"
212
- }
213
- )
214
- ]
215
- },
216
- e.uid
217
- )) }) : /* @__PURE__ */ t("div", { className: "mt-2 space-y-2", children: d.map((e) => /* @__PURE__ */ p(
218
- "div",
219
- {
220
- className: "flex items-center gap-2 p-2 border border-base-content/10 rounded-lg",
221
- children: [
222
- y === "picture" && e.url && /* @__PURE__ */ t(
223
- "img",
224
- {
225
- src: e.url,
226
- alt: e.name,
227
- className: "w-12 h-12 object-cover rounded"
228
- }
229
- ),
230
- /* @__PURE__ */ p("div", { className: "flex-1 min-w-0", children: [
231
- /* @__PURE__ */ t("div", { className: "truncate text-sm", children: e.name }),
232
- e.status === "uploading" && e.percent !== void 0 && /* @__PURE__ */ t("div", { className: "w-full bg-base-200 rounded-full h-1.5 mt-1", children: /* @__PURE__ */ t(
233
- "div",
234
- {
235
- className: "bg-primary h-1.5 rounded-full transition-all",
236
- style: { width: `${e.percent}%` }
237
- }
238
- ) }),
239
- e.status === "error" && /* @__PURE__ */ t("div", { className: "text-xs text-error mt-1", children: "Upload failed" })
240
- ] }),
241
- /* @__PURE__ */ t(
242
- "button",
243
- {
244
- onClick: () => M(e),
245
- className: "btn btn-xs btn-ghost btn-circle",
246
- type: "button",
247
- children: "✕"
248
- }
249
- )
250
- ]
251
- },
252
- e.uid
253
- )) })
111
+ )
254
112
  ] });
255
- };
256
- K.displayName = "Upload";
113
+ }
114
+ function j({
115
+ children: a,
116
+ code: t,
117
+ mark: r,
118
+ strong: l,
119
+ italic: s,
120
+ underline: m,
121
+ delete: c,
122
+ type: o = "default",
123
+ copyable: i,
124
+ className: h = "",
125
+ ...p
126
+ }) {
127
+ const x = typeof a == "string" ? a : "", d = {
128
+ default: "",
129
+ secondary: "text-base-content/70",
130
+ success: "text-success",
131
+ warning: "text-warning",
132
+ error: "text-error"
133
+ };
134
+ let n = a;
135
+ t && (n = /* @__PURE__ */ e("code", { className: "px-1.5 py-0.5 bg-base-200 rounded text-sm font-mono", children: n })), r && (n = /* @__PURE__ */ e("mark", { className: "bg-warning/30 px-1", children: n })), l && (n = /* @__PURE__ */ e("strong", { className: "font-bold", children: n })), s && (n = /* @__PURE__ */ e("em", { className: "italic", children: n })), m && (n = /* @__PURE__ */ e("u", { className: "underline", children: n })), c && (n = /* @__PURE__ */ e("del", { className: "line-through opacity-70", children: n }));
136
+ const b = `group inline ${d[o]} ${h}`.trim();
137
+ return /* @__PURE__ */ u("span", { className: b, ...p, children: [
138
+ n,
139
+ i && /* @__PURE__ */ e(f, { text: x })
140
+ ] });
141
+ }
142
+ function B({ href: a = "#", children: t, target: r, external: l, size: s, className: m = "", ...c }) {
143
+ const o = l || a && a.startsWith("http"), i = r || (o ? "_blank" : void 0), h = o ? "noopener noreferrer" : void 0, p = [
144
+ "link",
145
+ "link-primary",
146
+ s === "sm" && "text-sm",
147
+ s === "base" && "text-base",
148
+ s === "lg" && "text-lg",
149
+ s === "xl" && "text-xl",
150
+ s === "2xl" && "text-2xl",
151
+ m
152
+ ].filter(Boolean).join(" ");
153
+ return /* @__PURE__ */ u(
154
+ "a",
155
+ {
156
+ href: a,
157
+ target: i,
158
+ rel: h,
159
+ className: p,
160
+ ...c,
161
+ children: [
162
+ t,
163
+ o && /* @__PURE__ */ u("svg", { className: "w-3 h-3 inline-block ml-1", fill: "currentColor", viewBox: "0 0 20 20", children: [
164
+ /* @__PURE__ */ e("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" }),
165
+ /* @__PURE__ */ e("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" })
166
+ ] })
167
+ ]
168
+ }
169
+ );
170
+ }
171
+ const E = Object.assign(v, {
172
+ Title: N,
173
+ Paragraph: k,
174
+ Text: j,
175
+ Link: B
176
+ });
257
177
  export {
258
- K as Upload,
259
- K as default
178
+ E as Typography,
179
+ E as default
260
180
  };
261
181
  //# sourceMappingURL=index95.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index95.js","sources":["../src/components/Upload.tsx"],"sourcesContent":["import React, { useState, useRef, DragEvent, ChangeEvent } from 'react'\n\nexport interface UploadFile {\n uid: string\n name: string\n status: 'uploading' | 'done' | 'error'\n percent?: number\n url?: string\n response?: any\n error?: any\n originFileObj?: File\n}\n\nexport interface UploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n action?: string\n accept?: string\n multiple?: boolean\n maxCount?: number\n maxSize?: number // in bytes\n listType?: 'text' | 'picture' | 'picture-card'\n fileList?: UploadFile[]\n defaultFileList?: UploadFile[]\n beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<boolean>\n onChange?: (info: { file: UploadFile; fileList: UploadFile[] }) => void\n onRemove?: (file: UploadFile) => void | boolean | Promise<void | boolean>\n customRequest?: (options: {\n file: File\n onProgress: (percent: number) => void\n onSuccess: (response: any) => void\n onError: (error: any) => void\n }) => void\n showUploadList?: boolean\n disabled?: boolean\n children?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = ({\n action,\n accept,\n multiple = false,\n maxCount,\n maxSize,\n listType = 'text',\n fileList: controlledFileList,\n defaultFileList = [],\n beforeUpload,\n onChange,\n onRemove,\n customRequest,\n showUploadList = true,\n disabled = false,\n children,\n className = '',\n ...rest\n}) => {\n const [internalFileList, setInternalFileList] = useState<UploadFile[]>(defaultFileList)\n const [isDragging, setIsDragging] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const uidCounter = useRef(0)\n const dragCounter = useRef(0)\n\n const fileList = controlledFileList !== undefined ? controlledFileList : internalFileList\n\n const generateUid = () => {\n uidCounter.current += 1\n return `upload-${Date.now()}-${uidCounter.current}`\n }\n\n const updateFileList = (newFileList: UploadFile[]) => {\n if (controlledFileList === undefined) {\n setInternalFileList(newFileList)\n }\n }\n\n const uploadFile = (file: File) => {\n const uploadFile: UploadFile = {\n uid: generateUid(),\n name: file.name,\n status: 'uploading',\n percent: 0,\n originFileObj: file,\n }\n\n const newFileList = [...fileList, uploadFile]\n updateFileList(newFileList)\n onChange?.({ file: uploadFile, fileList: newFileList })\n\n const updateProgress = (percent: number) => {\n const updatedList = newFileList.map((f) =>\n f.uid === uploadFile.uid ? { ...f, percent } : f\n )\n updateFileList(updatedList)\n onChange?.({ file: { ...uploadFile, percent }, fileList: updatedList })\n }\n\n const onSuccess = (response: any) => {\n const successFile = {\n ...uploadFile,\n status: 'done' as const,\n percent: 100,\n response,\n }\n const updatedList = newFileList.map((f) =>\n f.uid === uploadFile.uid ? successFile : f\n )\n updateFileList(updatedList)\n onChange?.({ file: successFile, fileList: updatedList })\n }\n\n const onError = (error: any) => {\n const errorFile = {\n ...uploadFile,\n status: 'error' as const,\n error,\n }\n const updatedList = newFileList.map((f) =>\n f.uid === uploadFile.uid ? errorFile : f\n )\n updateFileList(updatedList)\n onChange?.({ file: errorFile, fileList: updatedList })\n }\n\n if (customRequest) {\n customRequest({\n file,\n onProgress: updateProgress,\n onSuccess,\n onError,\n })\n } else if (action) {\n const formData = new FormData()\n formData.append('file', file)\n\n const xhr = new XMLHttpRequest()\n\n xhr.upload.addEventListener('progress', (e) => {\n if (e.lengthComputable) {\n const percent = Math.round((e.loaded / e.total) * 100)\n updateProgress(percent)\n }\n })\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n onSuccess(xhr.response)\n } else {\n onError(new Error(`Upload failed with status ${xhr.status}`))\n }\n })\n\n xhr.addEventListener('error', () => {\n onError(new Error('Upload failed'))\n })\n\n xhr.open('POST', action)\n xhr.send(formData)\n } else {\n // No upload action, just mark as done\n onSuccess(null)\n }\n }\n\n const handleFiles = async (files: FileList | File[]) => {\n if (disabled) return\n\n const fileArray = Array.from(files)\n\n // Check maxCount\n if (maxCount && fileList.length + fileArray.length > maxCount) {\n console.warn(`Cannot upload more than ${maxCount} files`)\n return\n }\n\n // Check maxSize\n if (maxSize) {\n const oversizedFiles = fileArray.filter((file) => file.size > maxSize)\n if (oversizedFiles.length > 0) {\n console.warn(\n `Files exceed maximum size of ${maxSize} bytes:`,\n oversizedFiles.map((f) => f.name)\n )\n return\n }\n }\n\n // beforeUpload hook\n if (beforeUpload) {\n const results = await Promise.all(\n fileArray.map((file) => beforeUpload(file, fileArray))\n )\n const filteredFiles = fileArray.filter((_, index) => results[index] !== false)\n filteredFiles.forEach(uploadFile)\n } else {\n fileArray.forEach(uploadFile)\n }\n }\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n handleFiles(e.target.files)\n }\n // Reset input value to allow uploading the same file again\n e.target.value = ''\n }\n\n const handleDragEnter = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n dragCounter.current++\n setIsDragging(true)\n }\n }\n\n const handleDragLeave = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n dragCounter.current--\n if (dragCounter.current === 0) {\n setIsDragging(false)\n }\n }\n }\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n const handleDrop = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragCounter.current = 0\n setIsDragging(false)\n\n if (disabled) return\n\n if (e.dataTransfer.files) {\n handleFiles(e.dataTransfer.files)\n }\n }\n\n const handleRemove = async (file: UploadFile) => {\n if (onRemove) {\n const result = await onRemove(file)\n if (result === false) return\n }\n\n const newFileList = fileList.filter((f) => f.uid !== file.uid)\n updateFileList(newFileList)\n onChange?.({ file, fileList: newFileList })\n }\n\n const renderFileList = () => {\n if (!showUploadList || fileList.length === 0) return null\n\n if (listType === 'picture-card') {\n return (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {fileList.map((file) => (\n <div\n key={file.uid}\n className=\"relative w-24 h-24 border border-base-content/20 rounded-lg overflow-hidden\"\n >\n {file.status === 'uploading' && (\n <div className=\"absolute inset-0 bg-base-300/80 flex items-center justify-center\">\n <span className=\"loading loading-spinner loading-sm\"></span>\n </div>\n )}\n {file.status === 'done' && file.url && (\n <img\n src={file.url}\n alt={file.name}\n className=\"w-full h-full object-cover\"\n />\n )}\n {file.status === 'error' && (\n <div className=\"absolute inset-0 bg-error/10 flex items-center justify-center\">\n <svg\n className=\"w-8 h-8 text-error\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n )}\n <button\n onClick={() => handleRemove(file)}\n className=\"absolute top-1 right-1 btn btn-xs btn-circle btn-error\"\n type=\"button\"\n >\n ✕\n </button>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div className=\"mt-2 space-y-2\">\n {fileList.map((file) => (\n <div\n key={file.uid}\n className=\"flex items-center gap-2 p-2 border border-base-content/10 rounded-lg\"\n >\n {listType === 'picture' && file.url && (\n <img\n src={file.url}\n alt={file.name}\n className=\"w-12 h-12 object-cover rounded\"\n />\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate text-sm\">{file.name}</div>\n {file.status === 'uploading' && file.percent !== undefined && (\n <div className=\"w-full bg-base-200 rounded-full h-1.5 mt-1\">\n <div\n className=\"bg-primary h-1.5 rounded-full transition-all\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n )}\n {file.status === 'error' && (\n <div className=\"text-xs text-error mt-1\">Upload failed</div>\n )}\n </div>\n <button\n onClick={() => handleRemove(file)}\n className=\"btn btn-xs btn-ghost btn-circle\"\n type=\"button\"\n >\n ✕\n </button>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div className={className} data-state={isDragging ? 'dragging' : 'idle'} {...rest}>\n <div\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !disabled && fileInputRef.current?.click()}\n className={`\n border-2 border-dashed rounded-lg p-4 cursor-pointer transition-colors\n ${isDragging ? 'border-primary bg-primary/5' : 'border-base-content/20'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:border-primary'}\n `}\n >\n {children || (\n <div className=\"flex flex-col items-center gap-2 py-4\">\n <svg\n className=\"w-12 h-12 text-base-content/40\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\"\n />\n </svg>\n <div className=\"text-sm text-center\">\n <span className=\"font-semibold text-primary\">Click to upload</span>\n <span className=\"text-base-content/60\"> or drag and drop</span>\n </div>\n </div>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n />\n\n {renderFileList()}\n </div>\n )\n}\n\nUpload.displayName = 'Upload'\n\nexport default Upload\n"],"names":["Upload","action","accept","multiple","maxCount","maxSize","listType","controlledFileList","defaultFileList","beforeUpload","onChange","onRemove","customRequest","showUploadList","disabled","children","className","rest","internalFileList","setInternalFileList","useState","isDragging","setIsDragging","fileInputRef","useRef","uidCounter","dragCounter","fileList","generateUid","updateFileList","newFileList","uploadFile","file","updateProgress","percent","updatedList","f","onSuccess","response","successFile","onError","error","errorFile","formData","xhr","e","handleFiles","files","fileArray","oversizedFiles","results","_","index","handleChange","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleRemove","jsxs","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index95.js","sources":["../src/components/Typography.tsx"],"sourcesContent":["import React, { useState } from 'react'\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}\n\nexport interface TitleProps extends Omit<React.HTMLAttributes<HTMLHeadingElement>, 'title'> {\n level?: TitleLevel\n children: React.ReactNode\n copyable?: boolean\n ellipsis?: boolean\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}\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}\n\nexport interface TypographyLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n href?: string\n children: React.ReactNode\n external?: boolean\n size?: TypographySize\n}\n\nfunction CopyButton({ text }: { text: 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=\"btn btn-ghost btn-xs ml-2 opacity-0 group-hover:opacity-100 transition-opacity\"\n title=\"Copy to clipboard\"\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 = '', ...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} {...rest}>{children}</div>\n}\n\nfunction Title({ level = 1, children, copyable, ellipsis, className = '', id, ...rest }: TitleProps) {\n const textContent = typeof children === 'string' ? children : ''\n const generatedId = id || (textContent ? textContent.toLowerCase().replace(/\\s+/g, '-') : 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} />}\n </>\n )\n\n switch (level) {\n case 1:\n return <h1 id={generatedId} className={classes} {...rest}>{content}</h1>\n case 2:\n return <h2 id={generatedId} className={classes} {...rest}>{content}</h2>\n case 3:\n return <h3 id={generatedId} className={classes} {...rest}>{content}</h3>\n case 4:\n return <h4 id={generatedId} className={classes} {...rest}>{content}</h4>\n case 5:\n return <h5 id={generatedId} className={classes} {...rest}>{content}</h5>\n default:\n return <h1 id={generatedId} className={classes} {...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 = '', ...rest }: ParagraphProps) {\n const [expanded, setExpanded] = useState(false)\n const textContent = typeof children === 'string' ? children : ''\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 {...rest}>\n <p className={classes}>\n {children}\n {copyable && <CopyButton text={textContent} />}\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 ...rest\n}: TextProps) {\n const textContent = typeof children === 'string' ? children : ''\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} {...rest}>\n {content}\n {copyable && <CopyButton text={textContent} />}\n </span>\n )\n}\n\nfunction Link({ href = '#', children, target, external, size, className = '', ...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 'link',\n 'link-primary',\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 {...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":["CopyButton","text","copied","setCopied","useState","jsx","err","jsxs","TypographyRoot","children","size","className","rest","classes","Title","level","copyable","ellipsis","id","textContent","generatedId","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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"}