laif-ds 0.2.53 → 0.2.54

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,316 +1,263 @@
1
1
  "use client";
2
- import { jsx as t, jsxs as o } from "react/jsx-runtime";
3
- import { getExt as C, imageExts as W } from "../../lib/file-preview.js";
4
- import { motion as F } from "framer-motion";
5
- import f, { useEffect as E } from "react";
6
- import { Button as R } from "./button.js";
7
- import { Command as B, CommandGroup as $, CommandItem as v } from "./command.js";
8
- import { Icon as y } from "./icon.js";
9
- import { Popover as A, PopoverTrigger as S, PopoverContent as D } from "./popover.js";
10
- import { Tooltip as G, TooltipTrigger as M, TooltipContent as V } from "./tooltip.js";
11
- import { cn as N } from "../../lib/utils.js";
12
- import z from "../../node_modules/lucide-react/dist/esm/icons/x.js";
13
- import O from "../../node_modules/lucide-react/dist/esm/icons/file-audio.js";
14
- import P from "../../node_modules/lucide-react/dist/esm/icons/file-video.js";
15
- import h from "../../node_modules/lucide-react/dist/esm/icons/file-text.js";
16
- import X from "../../node_modules/lucide-react/dist/esm/icons/file.js";
17
- import _ from "../../node_modules/lucide-react/dist/esm/icons/file-code.js";
18
- import K from "../../node_modules/lucide-react/dist/esm/icons/file-archive.js";
19
- import q from "../../node_modules/lucide-react/dist/esm/icons/file-spreadsheet.js";
20
- const d = (e) => "type" in e && typeof e.type == "string" && e instanceof File, T = (e) => e.name || "url" in e && e.url || "", U = (e) => {
21
- if (d(e)) return e.type || "";
22
- const r = e.type;
23
- return typeof r == "string" ? r : "";
24
- }, H = (e, r) => {
25
- if (!e && r) {
26
- if (r.startsWith("audio/"))
27
- return { icon: O, colorClass: "text-violet-600" };
28
- if (r.startsWith("video/"))
29
- return { icon: P, colorClass: "text-rose-600" };
30
- if (r.startsWith("text/"))
31
- return { icon: h, colorClass: "text-gray-600" };
32
- }
33
- switch (e) {
34
- case "pdf":
35
- return { icon: h, colorClass: "text-red-600" };
36
- case "doc":
37
- case "docx":
38
- return { icon: h, colorClass: "text-blue-600" };
39
- case "xls":
40
- case "xlsx":
41
- case "csv":
42
- return { icon: q, colorClass: "text-green-600" };
43
- case "ppt":
44
- case "pptx":
45
- return { icon: h, colorClass: "text-orange-600" };
46
- case "txt":
47
- case "md":
48
- return { icon: h, colorClass: "text-gray-600" };
49
- case "zip":
50
- case "rar":
51
- case "7z":
52
- case "tar":
53
- case "gz":
54
- case "tgz":
55
- return { icon: K, colorClass: "text-amber-600" };
56
- case "mp3":
57
- case "wav":
58
- case "ogg":
59
- case "flac":
60
- case "m4a":
61
- return { icon: O, colorClass: "text-violet-600" };
62
- case "mp4":
63
- case "mov":
64
- case "avi":
65
- case "mkv":
66
- case "webm":
67
- return { icon: P, colorClass: "text-rose-600" };
68
- case "js":
69
- case "ts":
70
- case "jsx":
71
- case "tsx":
72
- case "json":
73
- case "xml":
74
- case "yml":
75
- case "yaml":
76
- case "html":
77
- case "css":
78
- case "scss":
79
- return { icon: _, colorClass: "text-indigo-600" };
80
- default:
81
- return { icon: X, colorClass: "text-d-secondary-foreground" };
82
- }
83
- }, L = (e) => {
2
+ import { jsx as i, jsxs as a, Fragment as g } from "react/jsx-runtime";
3
+ import { getExt as h, imageExts as P } from "../../lib/file-preview.js";
4
+ import { motion as k } from "framer-motion";
5
+ import c, { useEffect as j } from "react";
6
+ import { AppTextTooltip as z } from "./app-tooltip.js";
7
+ import { Button as L } from "./button.js";
8
+ import { Command as A, CommandGroup as T, CommandItem as B } from "./command.js";
9
+ import { Icon as p } from "./icon.js";
10
+ import { Popover as I, PopoverTrigger as U, PopoverContent as E } from "./popover.js";
11
+ import { cn as b } from "../../lib/utils.js";
12
+ import l from "../../node_modules/lucide-react/dist/esm/icons/file-text.js";
13
+ import F from "../../node_modules/lucide-react/dist/esm/icons/file-audio.js";
14
+ import N from "../../node_modules/lucide-react/dist/esm/icons/file-video.js";
15
+ import S from "../../node_modules/lucide-react/dist/esm/icons/file.js";
16
+ import O from "../../node_modules/lucide-react/dist/esm/icons/file-spreadsheet.js";
17
+ import R from "../../node_modules/lucide-react/dist/esm/icons/file-archive.js";
18
+ import $ from "../../node_modules/lucide-react/dist/esm/icons/file-code.js";
19
+ const u = (e) => "type" in e && typeof e.type == "string" && e instanceof File, d = (e) => e.name || "url" in e && e.url || "", v = (e) => {
20
+ if (u(e)) return e.type || "";
21
+ const t = e.type;
22
+ return typeof t == "string" ? t : "";
23
+ }, W = (e, t) => {
24
+ const o = {
25
+ pdf: { icon: l, colorClass: "text-red-600" },
26
+ doc: { icon: l, colorClass: "text-blue-600" },
27
+ docx: { icon: l, colorClass: "text-blue-600" },
28
+ ppt: { icon: l, colorClass: "text-orange-600" },
29
+ pptx: { icon: l, colorClass: "text-orange-600" },
30
+ txt: { icon: l, colorClass: "text-gray-600" },
31
+ md: { icon: l, colorClass: "text-gray-600" }
32
+ }, r = (s, n) => s.forEach((m) => o[m] = n);
33
+ return r(["xls", "xlsx", "csv"], {
34
+ icon: O,
35
+ colorClass: "text-green-600"
36
+ }), r(["zip", "rar", "7z", "tar", "gz", "tgz"], {
37
+ icon: R,
38
+ colorClass: "text-amber-600"
39
+ }), r(["mp3", "wav", "ogg", "flac", "m4a"], {
40
+ icon: F,
41
+ colorClass: "text-violet-600"
42
+ }), r(["mp4", "mov", "avi", "mkv", "webm"], {
43
+ icon: N,
44
+ colorClass: "text-rose-600"
45
+ }), r(
46
+ [
47
+ "js",
48
+ "ts",
49
+ "jsx",
50
+ "tsx",
51
+ "json",
52
+ "xml",
53
+ "yml",
54
+ "yaml",
55
+ "html",
56
+ "css",
57
+ "scss"
58
+ ],
59
+ {
60
+ icon: $,
61
+ colorClass: "text-indigo-600"
62
+ }
63
+ ), e && o[e] ? o[e] : t?.startsWith("audio/") ? { icon: F, colorClass: "text-violet-600" } : t?.startsWith("video/") ? { icon: N, colorClass: "text-rose-600" } : t?.startsWith("text/") ? { icon: l, colorClass: "text-gray-600" } : { icon: S, colorClass: "text-d-secondary-foreground" };
64
+ }, _ = (e) => {
84
65
  if (!Number.isFinite(e) || e < 0) return "";
85
- const r = ["B", "KB", "MB", "GB", "TB"];
86
- let s = 0, a = e;
87
- for (; a >= 1024 && s < r.length - 1; )
88
- a /= 1024, s++;
89
- const n = s > 0 && a < 100 ? 2 : 0;
90
- return `${a.toFixed(n)}${r[s]}`;
91
- }, j = (e) => {
92
- const r = C(T(e));
93
- if (r) return r.toUpperCase();
94
- const s = U(e);
95
- return s ? s === "application/pdf" ? "PDF" : s.startsWith("image/") ? s.split("/")[1]?.toUpperCase() || "IMAGE" : s.startsWith("audio/") ? "AUDIO" : s.startsWith("video/") ? "VIDEO" : s.startsWith("text/") ? "TEXT" : s.includes("officedocument") || s.includes("msword") || s.includes("ms-excel") || s.includes("ms-powerpoint") ? "OFFICE" : "" : "";
96
- }, k = ({
66
+ if (e === 0) return "0B";
67
+ const t = ["B", "KB", "MB", "GB", "TB"], o = Math.min(
68
+ Math.floor(Math.log(e) / Math.log(1024)),
69
+ t.length - 1
70
+ ), r = e / 1024 ** o, s = o > 0 && r < 100 ? 2 : 0;
71
+ return `${r.toFixed(s)}${t[o]}`;
72
+ }, G = (e) => {
73
+ const t = u(e) ? _(e.size) : "", o = V(e);
74
+ return { sizeLabel: t, formatLabel: o };
75
+ }, D = (e, t) => e && t ? `${e} · ${t}` : e || t || null, K = {
76
+ layout: !0,
77
+ initial: { opacity: 0, y: "100%" },
78
+ animate: { opacity: 1, y: 0 },
79
+ exit: { opacity: 0, y: "100%" }
80
+ }, y = ({
81
+ sizeLabel: e,
82
+ formatLabel: t
83
+ }) => {
84
+ const o = D(e, t);
85
+ return o ? /* @__PURE__ */ i("div", { className: "text-d-secondary-foreground/70 text-xs", children: o }) : null;
86
+ }, V = (e) => {
87
+ const t = h(d(e));
88
+ if (t) return t.toUpperCase();
89
+ const o = v(e);
90
+ if (!o) return "";
91
+ if (o === "application/pdf") return "PDF";
92
+ const [r, s] = o.split("/");
93
+ return r === "image" ? s?.toUpperCase() || "IMAGE" : r === "audio" || r === "video" || r === "text" ? r.toUpperCase() : /(officedocument|msword|ms-excel|ms-powerpoint)/.test(o) ? "OFFICE" : "";
94
+ }, X = ({
97
95
  url: e,
98
- onPreview: r,
99
- onDownload: s,
100
- onRemove: a
101
- }) => /* @__PURE__ */ o(A, { children: [
102
- /* @__PURE__ */ t(S, { asChild: !0, children: /* @__PURE__ */ t(R, { variant: "ghost", size: "icon", children: /* @__PURE__ */ t(y, { name: "Menu", size: "sm" }) }) }),
103
- /* @__PURE__ */ t(D, { className: "w-42 p-0", align: "end", children: /* @__PURE__ */ t(B, { children: /* @__PURE__ */ o($, { children: [
104
- r && /* @__PURE__ */ o(v, { onSelect: () => r(e), children: [
105
- /* @__PURE__ */ t(y, { name: "Presentation", size: "sm" }),
106
- /* @__PURE__ */ t("span", { children: "Anteprima" })
107
- ] }),
108
- s && /* @__PURE__ */ o(v, { onSelect: () => s(e), children: [
109
- /* @__PURE__ */ t(y, { name: "Download", size: "sm" }),
110
- /* @__PURE__ */ t("span", { children: "Download" })
111
- ] }),
112
- a && /* @__PURE__ */ o(
113
- v,
96
+ onPreview: t,
97
+ onDownload: o,
98
+ onRemove: r
99
+ }) => /* @__PURE__ */ a(I, { children: [
100
+ /* @__PURE__ */ i(U, { asChild: !0, children: /* @__PURE__ */ i(L, { variant: "ghost", size: "icon", children: /* @__PURE__ */ i(p, { name: "Menu", size: "sm" }) }) }),
101
+ /* @__PURE__ */ i(E, { className: "w-42 p-0", align: "end", children: /* @__PURE__ */ i(A, { children: /* @__PURE__ */ i(T, { children: [
102
+ {
103
+ key: "preview",
104
+ cond: !!t,
105
+ icon: "Presentation",
106
+ label: "Anteprima",
107
+ onSelect: t
108
+ },
109
+ {
110
+ key: "download",
111
+ cond: !!o,
112
+ icon: "Download",
113
+ label: "Download",
114
+ onSelect: o
115
+ },
116
+ {
117
+ key: "remove",
118
+ cond: !!r,
119
+ icon: "Trash",
120
+ label: "Elimina",
121
+ onSelect: r,
122
+ danger: !0
123
+ }
124
+ ].map(
125
+ (n) => n.cond && /* @__PURE__ */ a(
126
+ B,
114
127
  {
115
- onSelect: () => a(e),
116
- className: "text-red-500",
128
+ onSelect: () => n.onSelect?.(e),
129
+ className: n.danger ? "text-d-destructive" : void 0,
117
130
  children: [
118
- /* @__PURE__ */ t(y, { name: "Trash", className: "text-red-500", size: "sm" }),
119
- /* @__PURE__ */ t("span", { children: "Elimina" })
131
+ /* @__PURE__ */ i(
132
+ p,
133
+ {
134
+ name: n.icon,
135
+ size: "sm",
136
+ className: n.danger ? "text-d-destructive" : void 0
137
+ }
138
+ ),
139
+ /* @__PURE__ */ i("span", { children: n.label })
120
140
  ]
121
- }
141
+ },
142
+ n.key
122
143
  )
123
- ] }) }) })
124
- ] });
125
- function I({ text: e }) {
126
- return /* @__PURE__ */ o(G, { children: [
127
- /* @__PURE__ */ t(M, { "data-slot": "tooltip-trigger", className: "w-full min-w-0", children: /* @__PURE__ */ t("span", { className: "text-d-secondary-foreground block w-full truncate", children: e }) }),
128
- /* @__PURE__ */ t(V, { children: /* @__PURE__ */ t("span", { children: e }) })
129
- ] });
130
- }
131
- const be = f.forwardRef(
132
- (e, r) => {
133
- const s = T(e.file), a = C(s), n = U(e.file), m = a === "csv" || n === "text/csv";
134
- return n && n.startsWith("image/") || a && W.has(a) ? /* @__PURE__ */ t(J, { ...e, ref: r }) : !m && (a === "txt" || a === "md" || n && n.startsWith("text/")) ? /* @__PURE__ */ t(Q, { ...e, ref: r }) : /* @__PURE__ */ t(Y, { ...e, ref: r });
144
+ ) }) }) })
145
+ ] }), xe = c.forwardRef(
146
+ (e, t) => {
147
+ const o = d(e.file), r = h(o), s = v(e.file), n = r === "csv" || s === "text/csv";
148
+ return s && s.startsWith("image/") || r && P.has(r) ? /* @__PURE__ */ i(q, { ...e, ref: t }) : !n && (r === "txt" || r === "md" || s && s.startsWith("text/")) ? /* @__PURE__ */ i(H, { ...e, ref: t }) : /* @__PURE__ */ i(J, { ...e, ref: t });
135
149
  }
136
- ), J = f.forwardRef(
150
+ ), C = c.forwardRef(
137
151
  ({
138
152
  file: e,
139
- onRemove: r,
140
- onPreview: s,
141
- onDownload: a,
142
- showActionMenu: n = !1,
143
- className: m
144
- }, p) => {
145
- const i = d(e) ? URL.createObjectURL(e) : e.url, l = d(e) ? L(e.size) : "", c = j(e);
146
- return /* @__PURE__ */ o(
147
- F.div,
153
+ onRemove: t,
154
+ onPreview: o,
155
+ onDownload: r,
156
+ showActionMenu: s = !1,
157
+ className: n,
158
+ defaultClassName: m,
159
+ children: w
160
+ }, f) => {
161
+ const x = u(e) ? URL.createObjectURL(e) : e.url, M = G(e);
162
+ return /* @__PURE__ */ a(
163
+ k.div,
148
164
  {
149
- ref: p,
150
- className: N(
151
- "border-d-border relative flex max-w-[200px] rounded-md border p-1.5 pr-2 text-xs",
152
- m
165
+ ref: f,
166
+ className: b(
167
+ "border-d-border relative flex items-center rounded-md border text-xs",
168
+ m,
169
+ n
153
170
  ),
154
- layout: !0,
155
- initial: { opacity: 0, y: "100%" },
156
- animate: { opacity: 1, y: 0 },
157
- exit: { opacity: 0, y: "100%" },
171
+ ...K,
158
172
  children: [
159
- /* @__PURE__ */ o("div", { className: "flex w-full min-w-0 items-center space-x-2", children: [
160
- /* @__PURE__ */ t(
161
- "img",
162
- {
163
- alt: `Attachment ${e.name}`,
164
- className: "bg-d-secondary border-d-border grid h-10 w-10 shrink-0 place-items-center rounded-sm border object-cover",
165
- src: i
166
- }
167
- ),
168
- /* @__PURE__ */ o("div", { className: "min-w-0", children: [
169
- /* @__PURE__ */ t(I, { text: e.name }),
170
- (l || c) && /* @__PURE__ */ o("div", { className: "text-d-secondary-foreground/70 mt-0.5 text-[10px] leading-3", children: [
171
- l,
172
- c ? l ? ` · ${c}` : c : ""
173
- ] })
174
- ] }),
175
- n && /* @__PURE__ */ t(
176
- k,
173
+ /* @__PURE__ */ a("div", { className: "flex w-full min-w-0 items-center gap-2", children: [
174
+ w(x, M),
175
+ s && /* @__PURE__ */ i(
176
+ X,
177
177
  {
178
- url: i,
179
- onPreview: s,
180
- onDownload: a,
181
- onRemove: r
178
+ url: x,
179
+ onPreview: o,
180
+ onDownload: r,
181
+ onRemove: t
182
182
  }
183
183
  )
184
184
  ] }),
185
- !n && r ? /* @__PURE__ */ t(
186
- "button",
185
+ !s && t ? /* @__PURE__ */ i(
186
+ L,
187
187
  {
188
- className: "bg-d-background border-d-border absolute -top-2 -right-2 flex h-4 w-4 items-center justify-center rounded-full border",
189
- type: "button",
190
- onClick: () => r(i),
191
- "aria-label": "Remove attachment",
192
- children: /* @__PURE__ */ t(z, { className: "h-2.5 w-2.5" })
188
+ className: "bg-d-background hover:bg-d-background absolute -top-2 -right-2 flex !size-3.5 rounded-full text-xs",
189
+ variant: "outline",
190
+ size: "icon",
191
+ onClick: () => t(x),
192
+ children: /* @__PURE__ */ i(p, { name: "X", className: "h-2.5 max-w-2.5" })
193
193
  }
194
194
  ) : null
195
195
  ]
196
196
  }
197
197
  );
198
198
  }
199
- ), Q = f.forwardRef(({ file: e, onRemove: r, onPreview: s, onDownload: a, showActionMenu: n = !1 }, m) => {
200
- const [p, i] = f.useState(""), l = d(e) ? URL.createObjectURL(e) : e.url, c = d(e) ? L(e.size) : "", u = j(e);
201
- return E(() => {
202
- if (d(e)) {
203
- const b = new FileReader();
204
- b.onload = (x) => {
205
- x.target?.result && i(
206
- typeof x.target.result == "string" ? x.target.result.slice(0, 100) : ""
207
- );
208
- }, b.readAsText(e);
209
- } else
210
- i("Anteprima non disponibile");
211
- }, [e]), /* @__PURE__ */ o(
212
- F.div,
199
+ ), q = c.forwardRef((e, t) => /* @__PURE__ */ i(C, { ...e, ref: t, defaultClassName: "gap-2 p-1.5 pr-2", children: (o, r) => /* @__PURE__ */ a(g, { children: [
200
+ /* @__PURE__ */ i(
201
+ "img",
213
202
  {
214
- ref: m,
215
- className: "border-d-border relative flex max-w-[200px] rounded-md border p-1.5 pr-2 text-xs",
216
- layout: !0,
217
- initial: { opacity: 0, y: "100%" },
218
- animate: { opacity: 1, y: 0 },
219
- exit: { opacity: 0, y: "100%" },
220
- children: [
221
- /* @__PURE__ */ o("div", { className: "flex w-full min-w-0 items-center space-x-2", children: [
222
- /* @__PURE__ */ t("div", { className: "bg-d-secondary border-d-border grid h-10 w-10 shrink-0 place-items-center rounded rounded-sm border p-1 text-[8px]", children: p }),
223
- /* @__PURE__ */ o("div", { className: "min-w-0", children: [
224
- /* @__PURE__ */ t(I, { text: e.name }),
225
- (c || u) && /* @__PURE__ */ o("div", { className: "text-d-secondary-foreground/70 mt-0.5 text-[10px] leading-3", children: [
226
- c,
227
- u ? c ? ` · ${u}` : u : ""
228
- ] })
229
- ] }),
230
- n && /* @__PURE__ */ t(
231
- k,
232
- {
233
- url: l,
234
- onPreview: s,
235
- onDownload: a,
236
- onRemove: r
237
- }
238
- )
239
- ] }),
240
- !n && r ? /* @__PURE__ */ t(
241
- "button",
242
- {
243
- className: "bg-d-background border-d-border absolute -top-2 -right-2 flex h-4 w-4 items-center justify-center rounded-full border",
244
- type: "button",
245
- onClick: () => r(l),
246
- "aria-label": "Remove attachment",
247
- children: /* @__PURE__ */ t(z, { className: "h-2.5 w-2.5" })
248
- }
249
- ) : null
250
- ]
203
+ alt: `Attachment ${d(e.file)}`,
204
+ className: b(
205
+ "bg-d-secondary border-d-border h-10 w-10 shrink-0 rounded-sm border object-cover"
206
+ ),
207
+ src: o
251
208
  }
252
- );
253
- }), Y = f.forwardRef(
254
- ({
255
- file: e,
256
- onRemove: r,
257
- onPreview: s,
258
- onDownload: a,
259
- showActionMenu: n = !1,
260
- className: m
261
- }, p) => {
262
- const i = d(e) ? URL.createObjectURL(e) : e.url, l = T(e), c = C(l), u = U(e), { icon: b, colorClass: x } = H(c, u), w = d(e) ? L(e.size) : "", g = j(e);
263
- return /* @__PURE__ */ o(
264
- F.div,
209
+ ),
210
+ /* @__PURE__ */ a("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
211
+ /* @__PURE__ */ i(z, { text: d(e.file) }),
212
+ /* @__PURE__ */ i(
213
+ y,
265
214
  {
266
- ref: p,
267
- className: N(
268
- "border-d-border relative flex max-w-[200px] rounded-md border p-1.5 pr-2 text-xs",
269
- m
270
- ),
271
- layout: !0,
272
- initial: { opacity: 0, y: "100%" },
273
- animate: { opacity: 1, y: 0 },
274
- exit: { opacity: 0, y: "100%" },
275
- children: [
276
- /* @__PURE__ */ o("div", { className: "flex w-full min-w-0 cursor-pointer items-center space-x-2", children: [
277
- /* @__PURE__ */ t("div", { className: "bg-d-secondary grid h-10 w-10 shrink-0 place-items-center rounded-sm", children: /* @__PURE__ */ t(b, { className: N("h-5 w-5", x) }) }),
278
- /* @__PURE__ */ o("div", { className: "min-w-0", children: [
279
- /* @__PURE__ */ t(I, { text: e.name }),
280
- (w || g) && /* @__PURE__ */ o("div", { className: "text-d-secondary-foreground/70 mt-0.5 text-[10px] leading-3", children: [
281
- w,
282
- g ? w ? ` · ${g}` : g : ""
283
- ] })
284
- ] }),
285
- n && /* @__PURE__ */ t(
286
- k,
287
- {
288
- url: i,
289
- onPreview: s,
290
- onDownload: a,
291
- onRemove: r
292
- }
293
- )
294
- ] }),
295
- !n && r ? /* @__PURE__ */ t(
296
- "button",
297
- {
298
- className: "bg-d-background border-d-border absolute -top-2 -right-2 flex h-4 w-4 items-center justify-center rounded-full border",
299
- type: "button",
300
- onClick: () => r(i),
301
- "aria-label": "Remove attachment",
302
- children: /* @__PURE__ */ t(z, { className: "h-2.5 w-2.5" })
303
- }
304
- ) : null
305
- ]
215
+ sizeLabel: r.sizeLabel,
216
+ formatLabel: r.formatLabel
306
217
  }
307
- );
308
- }
309
- );
218
+ )
219
+ ] })
220
+ ] }) })), H = c.forwardRef((e, t) => {
221
+ const [o, r] = c.useState("");
222
+ return j(() => {
223
+ if (u(e.file)) {
224
+ const s = new FileReader();
225
+ s.onload = (n) => {
226
+ n.target?.result && r(
227
+ typeof n.target.result == "string" ? n.target.result.slice(0, 100) : ""
228
+ );
229
+ }, s.readAsText(e.file);
230
+ } else
231
+ r("Anteprima non disponibile");
232
+ }, [e.file]), /* @__PURE__ */ i(C, { ...e, ref: t, defaultClassName: "gap-2 p-1.5 pr-2", children: (s, n) => /* @__PURE__ */ a(g, { children: [
233
+ /* @__PURE__ */ i("div", { className: "bg-d-secondary border-d-border flex h-10 w-10 shrink-0 items-center justify-center rounded-sm border p-1 text-[8px]", children: o }),
234
+ /* @__PURE__ */ i("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ i(
235
+ y,
236
+ {
237
+ sizeLabel: n.sizeLabel,
238
+ formatLabel: n.formatLabel
239
+ }
240
+ ) })
241
+ ] }) });
242
+ }), J = c.forwardRef((e, t) => {
243
+ const o = d(e.file), r = h(o), s = v(e.file), { icon: n, colorClass: m } = W(r, s);
244
+ return /* @__PURE__ */ i(C, { ...e, ref: t, defaultClassName: "gap-2 p-1.5 pr-2", children: (w, f) => /* @__PURE__ */ a(g, { children: [
245
+ /* @__PURE__ */ i("div", { className: "bg-d-secondary flex h-10 w-10 shrink-0 items-center justify-center rounded-sm", children: /* @__PURE__ */ i(n, { className: b("h-5 w-5", m) }) }),
246
+ /* @__PURE__ */ a("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
247
+ /* @__PURE__ */ i(z, { text: o }),
248
+ /* @__PURE__ */ i(
249
+ y,
250
+ {
251
+ sizeLabel: f.sizeLabel,
252
+ formatLabel: f.formatLabel
253
+ }
254
+ )
255
+ ] })
256
+ ] }) });
257
+ });
310
258
  export {
311
- be as FilePreview,
312
- Y as GenericFilePreview,
313
- J as ImageFilePreview,
314
- Q as TextFilePreview,
315
- I as default
259
+ xe as FilePreview,
260
+ J as GenericFilePreview,
261
+ q as ImageFilePreview,
262
+ H as TextFilePreview
316
263
  };
package/dist/index.d.ts CHANGED
@@ -306,6 +306,53 @@ declare interface AppStepperProps extends Omit<StepperProps, "children"> {
306
306
  indicators?: StepIndicators_2;
307
307
  }
308
308
 
309
+ export declare function AppTooltip({ content, children, label, labelClassName, header, variant, triggerVariant, size, className, wrpClassName, contentClassName, side, align, sideOffset, matchTriggerWidth, delayDuration, disabled, asChild, }: AppTooltipProps): JSX.Element;
310
+
311
+ export declare type AppTooltipAlign = "start" | "center" | "end";
312
+
313
+ declare interface AppTooltipProps {
314
+ /** Content displayed inside the tooltip */
315
+ content: React_2.ReactNode;
316
+ /** Element that triggers the tooltip on hover/focus */
317
+ children: React_2.ReactNode;
318
+ /** Optional label displayed above the tooltip trigger */
319
+ label?: string | React_2.ReactNode;
320
+ /** Optional header displayed at the top of the tooltip content */
321
+ header?: string | React_2.ReactNode;
322
+ /** Tooltip content variant - affects background and styling */
323
+ variant?: AppTooltipVariant;
324
+ /** Trigger element variant - affects hover states */
325
+ triggerVariant?: VariantProps<typeof tooltipTriggerVariants>["variant"];
326
+ /** Size of the trigger element */
327
+ size?: VariantProps<typeof tooltipTriggerVariants>["size"];
328
+ /** Additional className for the trigger wrapper */
329
+ className?: string;
330
+ /** Additional className for the outer wrapper (includes label) */
331
+ wrpClassName?: string;
332
+ /** Additional className for the tooltip content */
333
+ contentClassName?: string;
334
+ /** Additional className for the label */
335
+ labelClassName?: string;
336
+ /** Side where the tooltip appears */
337
+ side?: AppTooltipSide;
338
+ /** Alignment of the tooltip relative to the trigger */
339
+ align?: AppTooltipAlign;
340
+ /** Offset from the trigger in pixels */
341
+ sideOffset?: number;
342
+ /** Whether the tooltip should match the trigger's width */
343
+ matchTriggerWidth?: boolean;
344
+ /** Delay before showing tooltip (ms) */
345
+ delayDuration?: number;
346
+ /** Whether to disable the tooltip */
347
+ disabled?: boolean;
348
+ /** Whether to use asChild pattern for trigger (for custom elements) */
349
+ asChild?: boolean;
350
+ }
351
+
352
+ export declare type AppTooltipSide = "top" | "right" | "bottom" | "left";
353
+
354
+ export declare type AppTooltipVariant = "primary" | "card";
355
+
309
356
  export declare function AspectRatio({ ...props }: AspectRatioProps): JSX.Element;
310
357
 
311
358
  declare type AspectRatioProps = React.ComponentProps<typeof AspectRatioPrimitive.Root>;
@@ -422,6 +469,7 @@ declare type BaseProps = {
422
469
  maxSelectedMessage?: (max: number) => string;
423
470
  label?: string | React.ReactNode;
424
471
  className?: string;
472
+ labelClassName?: string;
425
473
  wrpClassName?: string;
426
474
  searchable?: boolean;
427
475
  creatable?: boolean;
@@ -2586,6 +2634,11 @@ export declare function TooltipProvider({ delayDuration, ...props }: React_2.Com
2586
2634
 
2587
2635
  export declare function TooltipTrigger({ ...props }: React_2.ComponentProps<typeof TooltipPrimitive.Trigger>): JSX.Element;
2588
2636
 
2637
+ declare const tooltipTriggerVariants: (props?: ({
2638
+ variant?: "default" | "secondary" | "ghost" | "primary" | "muted" | "accent" | null | undefined;
2639
+ size?: "default" | "sm" | "lg" | null | undefined;
2640
+ } & ClassProp) | undefined) => string;
2641
+
2589
2642
  declare const tooltipVariants: (props?: ({
2590
2643
  variant?: "primary" | "card" | null | undefined;
2591
2644
  } & ClassProp) | undefined) => string;