laif-ds 0.2.80 → 0.2.83

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,12 +1,12 @@
1
1
  "use client";
2
- import { jsxs as v, jsx as r, Fragment as B } from "react/jsx-runtime";
2
+ import { jsxs as z, jsx as i, Fragment as P } from "react/jsx-runtime";
3
3
  import l from "react";
4
- import { Button as S } from "./button.js";
5
- import { Card as P, CardHeader as _, CardTitle as W, CardContent as H } from "./card.js";
6
- import { FilePreview as k } from "./file-preview/index.js";
7
- import { Icon as K } from "./icon.js";
8
- import { Input as O } from "./input.js";
9
- const U = {
4
+ import { Button as _ } from "./button.js";
5
+ import { Card as U, CardHeader as W, CardTitle as H, CardContent as K } from "./card.js";
6
+ import { FilePreview as R } from "./file-preview/index.js";
7
+ import { Icon as O } from "./icon.js";
8
+ import { Input as V } from "./input.js";
9
+ const Z = {
10
10
  pdf: "application/pdf",
11
11
  doc: ".doc",
12
12
  docx: ".docx",
@@ -31,161 +31,165 @@ const U = {
31
31
  tar: ".tar,application/x-tar",
32
32
  gz: ".gz,application/gzip,application/x-gzip",
33
33
  tgz: ".tgz,.tar.gz,application/gzip,application/x-compressed-tar"
34
- }, R = (g) => Math.ceil(g / (1024 * 1024)), ee = ({
35
- extensions: g = ["pdf", "image", "video", "audio"],
36
- multiple: p = !1,
37
- onUpload: z,
38
- description: I = "Trascina un file o clicca per selezionare",
39
- formatDescription: b = "Formato accettato: PDF, Immagini, Video, Audio",
40
- selectedLabel: y = "File selezionati",
41
- maxTotalSize: c,
42
- removeAllLabel: N = "rimuovi tutto",
43
- maxFiles: x,
44
- id: s,
45
- "data-testid": j
34
+ }, A = (f) => Math.ceil(f / (1024 * 1024)), re = ({
35
+ extensions: f = ["pdf", "image", "video", "audio"],
36
+ multiple: d = !1,
37
+ onUpload: D,
38
+ onRemove: b,
39
+ description: w = "Trascina un file o clicca per selezionare",
40
+ formatDescription: I = "Formato accettato: PDF, Immagini, Video, Audio",
41
+ selectedLabel: u = "File selezionati",
42
+ maxTotalSize: p,
43
+ removeAllLabel: y = "rimuovi tutto",
44
+ maxFiles: o,
45
+ id: N,
46
+ "data-testid": g
46
47
  }) => {
47
- const f = g.map((e) => U[e]).join(","), [a, u] = l.useState([]), [w, D] = l.useState(""), o = (e) => {
48
- const n = Array.from(e).filter(
49
- (i) => f.split(",").some((t) => (t = t.trim(), i.type.startsWith(t.replace("/*", "")) || i.name.toLowerCase().endsWith(t.replace("*", ""))))
48
+ const x = f.map((e) => Z[e]).join(","), [t, m] = l.useState([]), [j, n] = l.useState(""), C = (e) => {
49
+ const s = Array.from(e).filter(
50
+ (r) => x.split(",").some((a) => (a = a.trim(), r.type.startsWith(a.replace("/*", "")) || r.name.toLowerCase().endsWith(a.replace("*", ""))))
50
51
  );
51
- let d = [];
52
- const m = [];
53
- if (p) {
54
- let i = n;
55
- if (typeof x == "number") {
56
- const t = Math.max(x - a.length, 0);
57
- t < n.length && (i = n.slice(0, t), m.push(`Max ${x} file`));
52
+ let c = [];
53
+ const h = [];
54
+ if (d) {
55
+ let r = s;
56
+ if (typeof o == "number") {
57
+ const a = Math.max(o - t.length, 0);
58
+ a < s.length && (r = s.slice(0, a), h.push(`Max ${o} file`));
58
59
  }
59
- if (typeof c == "number") {
60
- const t = c;
61
- let F = a.reduce((h, A) => h + (A.size || 0), 0);
62
- const M = [];
63
- let $ = !1;
64
- for (const h of i)
65
- F + (h.size || 0) <= t ? (M.push(h), F += h.size || 0) : $ || (m.push(`Max ${R(t)} MB`), $ = !0);
66
- i = M;
60
+ if (typeof p == "number") {
61
+ const a = p;
62
+ let F = t.reduce((v, S) => v + (S.size || 0), 0);
63
+ const $ = [];
64
+ let k = !1;
65
+ for (const v of r)
66
+ F + (v.size || 0) <= a ? ($.push(v), F += v.size || 0) : k || (h.push(`Max ${A(a)} MB`), k = !0);
67
+ r = $;
67
68
  }
68
- d = [...a, ...i];
69
+ c = [...t, ...r];
69
70
  } else {
70
- const i = n[0] ? [n[0]] : [];
71
- if (typeof c == "number" && i[0]) {
72
- const t = c;
73
- (i[0].size || 0) > t ? (m.push(`Max ${R(t)} MB`), d = a) : d = i;
71
+ const r = s[0] ? [s[0]] : [];
72
+ if (typeof p == "number" && r[0]) {
73
+ const a = p;
74
+ (r[0].size || 0) > a ? (h.push(`Max ${A(a)} MB`), c = t) : c = r;
74
75
  } else
75
- d = i;
76
+ c = r;
76
77
  }
77
- u(d), D(m.join(" • ")), z?.(d);
78
+ m(c), n(h.join(" • ")), D?.(c);
78
79
  }, E = (e) => {
79
- e.target.files && o(e.target.files), e.target.value = "";
80
+ e.target.files && C(e.target.files), e.target.value = "";
80
81
  }, L = (e) => {
81
- e.preventDefault(), o(e.dataTransfer.files);
82
- }, C = (e) => {
83
- const n = a.filter((d, m) => m !== e);
84
- u(n), D(""), z?.(n);
82
+ e.preventDefault(), C(e.dataTransfer.files);
83
+ }, M = (e) => {
84
+ const s = t[e], c = t.filter((h, r) => r !== e);
85
+ m(c), n(""), b?.(s ? [s] : [], c);
86
+ }, B = () => {
87
+ const e = t;
88
+ m([]), n(""), b?.(e, []);
85
89
  };
86
- return /* @__PURE__ */ v("div", { className: "mx-auto w-full space-y-4", children: [
87
- (p || a.length === 0) && /* @__PURE__ */ r(
88
- V,
90
+ return /* @__PURE__ */ z("div", { className: "mx-auto w-full space-y-4", children: [
91
+ (d || t.length === 0) && /* @__PURE__ */ i(
92
+ q,
89
93
  {
90
- accept: f,
91
- multiple: p,
94
+ accept: x,
95
+ multiple: d,
92
96
  onDrop: L,
93
97
  onChange: E,
94
- description: I,
95
- formatDescription: b,
96
- errorCaption: w,
97
- id: s,
98
- "data-testid": j
98
+ description: w,
99
+ formatDescription: I,
100
+ errorCaption: j,
101
+ id: N,
102
+ "data-testid": g
99
103
  }
100
104
  ),
101
- a.length > 0 && /* @__PURE__ */ r(B, { children: /* @__PURE__ */ v(P, { size: "sm", className: "shadow-none", children: [
102
- /* @__PURE__ */ v(_, { className: "flex justify-between", children: [
103
- /* @__PURE__ */ r(W, { children: y }),
104
- /* @__PURE__ */ r(
105
- S,
105
+ t.length > 0 && /* @__PURE__ */ i(P, { children: /* @__PURE__ */ z(U, { size: "sm", className: "shadow-none", children: [
106
+ /* @__PURE__ */ z(W, { className: "flex justify-between", children: [
107
+ /* @__PURE__ */ i(H, { children: u }),
108
+ /* @__PURE__ */ i(
109
+ _,
106
110
  {
107
111
  size: "sm",
108
112
  variant: "ghost",
109
113
  className: "text-xs",
110
- onClick: () => u([]),
111
- children: N
114
+ onClick: B,
115
+ children: y
112
116
  }
113
117
  )
114
118
  ] }),
115
- /* @__PURE__ */ r(H, { children: p ? /* @__PURE__ */ r("div", { className: "flex flex-nowrap gap-2 overflow-x-auto py-2", children: a.map((e, n) => /* @__PURE__ */ r(
116
- k,
119
+ /* @__PURE__ */ i(K, { children: d ? /* @__PURE__ */ i("div", { className: "flex flex-nowrap gap-2 overflow-x-auto py-2", children: t.map((e, s) => /* @__PURE__ */ i(
120
+ R,
117
121
  {
118
122
  file: e,
119
- onRemove: () => C(n)
123
+ onRemove: () => M(s)
120
124
  },
121
- e.name + n
122
- )) }) : /* @__PURE__ */ r(k, { file: a[0], onRemove: () => C(0) }) })
125
+ e.name + s
126
+ )) }) : /* @__PURE__ */ i(R, { file: t[0], onRemove: () => M(0) }) })
123
127
  ] }) })
124
128
  ] });
125
- }, V = ({
126
- accept: g,
127
- multiple: p,
128
- onDrop: z,
129
- onChange: I,
130
- description: b,
131
- formatDescription: y,
132
- errorCaption: c,
133
- id: N,
134
- "data-testid": x
129
+ }, q = ({
130
+ accept: f,
131
+ multiple: d,
132
+ onDrop: D,
133
+ onChange: b,
134
+ description: w,
135
+ formatDescription: I,
136
+ errorCaption: u,
137
+ id: p,
138
+ "data-testid": y
135
139
  }) => {
136
- const s = l.useRef(null), [j, f] = l.useState(!1), a = l.useId(), u = l.useId(), w = l.useId(), D = l.useId();
137
- return /* @__PURE__ */ v(
140
+ const o = l.useRef(null), [N, g] = l.useState(!1), x = l.useId(), t = l.useId(), m = l.useId(), j = l.useId();
141
+ return /* @__PURE__ */ z(
138
142
  "div",
139
143
  {
140
- id: N,
141
- "data-testid": x,
144
+ id: p,
145
+ "data-testid": y,
142
146
  role: "button",
143
147
  tabIndex: 0,
144
- "aria-label": b || "Seleziona file",
145
- "aria-describedby": `${a} ${u}${c ? ` ${w}` : ""}`,
146
- onKeyDown: (o) => {
147
- (o.key === "Enter" || o.key === " ") && (o.preventDefault(), s.current && (s.current.value = "", s.current.click()));
148
+ "aria-label": w || "Seleziona file",
149
+ "aria-describedby": `${x} ${t}${u ? ` ${m}` : ""}`,
150
+ onKeyDown: (n) => {
151
+ (n.key === "Enter" || n.key === " ") && (n.preventDefault(), o.current && (o.current.value = "", o.current.click()));
148
152
  },
149
153
  onClick: () => {
150
- s.current && (s.current.value = "", s.current.click());
154
+ o.current && (o.current.value = "", o.current.click());
151
155
  },
152
- onDragEnter: () => f(!0),
153
- onDragOver: (o) => o.preventDefault(),
154
- onDragLeave: () => f(!1),
155
- onDrop: (o) => {
156
- f(!1), z(o);
156
+ onDragEnter: () => g(!0),
157
+ onDragOver: (n) => n.preventDefault(),
158
+ onDragLeave: () => g(!1),
159
+ onDrop: (n) => {
160
+ g(!1), D(n);
157
161
  },
158
- className: `border-d-border flex w-full cursor-pointer flex-col items-center gap-3 rounded-lg border-2 border-dashed px-4 py-8 ${j ? "bg-muted/40" : ""}`,
162
+ className: `border-d-border flex w-full cursor-pointer flex-col items-center gap-3 rounded-lg border-2 border-dashed px-4 py-8 ${N ? "bg-muted/40" : ""}`,
159
163
  children: [
160
- /* @__PURE__ */ r(
161
- K,
164
+ /* @__PURE__ */ i(
165
+ O,
162
166
  {
163
167
  name: "ArrowUpFromLine",
164
168
  className: "text-d-muted-foreground h-10 w-10"
165
169
  }
166
170
  ),
167
- /* @__PURE__ */ v("div", { className: "max-w-xs text-center", children: [
168
- /* @__PURE__ */ r("p", { id: a, className: "text-d-muted-foreground text-sm font-medium", children: b }),
169
- /* @__PURE__ */ r(
171
+ /* @__PURE__ */ z("div", { className: "max-w-xs text-center", children: [
172
+ /* @__PURE__ */ i("p", { id: x, className: "text-d-muted-foreground text-sm font-medium", children: w }),
173
+ /* @__PURE__ */ i(
170
174
  "p",
171
175
  {
172
- id: u,
176
+ id: t,
173
177
  className: "text-d-muted-foreground text-muted-foreground mt-1 text-xs",
174
- children: y
178
+ children: I
175
179
  }
176
180
  ),
177
- c ? /* @__PURE__ */ r("p", { id: w, className: "mt-2 text-xs font-medium text-red-600", children: c }) : null
181
+ u ? /* @__PURE__ */ i("p", { id: m, className: "mt-2 text-xs font-medium text-red-600", children: u }) : null
178
182
  ] }),
179
- /* @__PURE__ */ r(
180
- O,
183
+ /* @__PURE__ */ i(
184
+ V,
181
185
  {
182
- ref: s,
183
- id: D,
186
+ ref: o,
187
+ id: j,
184
188
  type: "file",
185
189
  className: "hidden",
186
- accept: g,
187
- multiple: p,
188
- onChange: I
190
+ accept: f,
191
+ multiple: d,
192
+ onChange: b
189
193
  }
190
194
  )
191
195
  ]
@@ -193,5 +197,5 @@ const U = {
193
197
  );
194
198
  };
195
199
  export {
196
- ee as FileUploader
200
+ re as FileUploader
197
201
  };
package/dist/index.d.ts CHANGED
@@ -979,7 +979,7 @@ export declare function ChartTooltipContent({ active, payload, className, indica
979
979
  labelKey?: string;
980
980
  } & React_2.HTMLAttributes<HTMLDivElement>): JSX.Element | null;
981
981
 
982
- export declare function Chat({ messages, welcomeTitle, handleSubmit, input, handleInputChange, stop, isGenerating, append, suggestions, className, onRateResponse, setMessages, transcribeAudio, allowAttachments, onEdit, onMessageSave, }: ChatProps): JSX.Element;
982
+ export declare function Chat({ messages, welcomeTitle, handleSubmit, input, handleInputChange, stop, isGenerating, append, suggestions, className, onRateResponse, setMessages, transcribeAudio, allowAttachments, onEdit, onMessageSave, placeholder, }: ChatProps): JSX.Element;
983
983
 
984
984
  export declare namespace Chat {
985
985
  var displayName: string;
@@ -1042,6 +1042,7 @@ declare interface ChatPropsBase {
1042
1042
  onEdit?: (messageId: string, newContent: string) => void;
1043
1043
  onMessageSave?: (messageId: string, content: string) => void;
1044
1044
  welcomeTitle?: string;
1045
+ placeholder?: string;
1045
1046
  }
1046
1047
 
1047
1048
  declare interface ChatPropsWithoutSuggestions extends ChatPropsBase {
@@ -2092,6 +2093,7 @@ declare interface FileUploaderProps {
2092
2093
  extensions?: AcceptItem[];
2093
2094
  multiple?: boolean;
2094
2095
  onUpload?: (files: File[]) => void;
2096
+ onRemove?: (removed: File[], remaining: File[]) => void;
2095
2097
  description?: string;
2096
2098
  formatDescription?: string;
2097
2099
  selectedLabel?: string;
@@ -2736,6 +2738,7 @@ declare interface PreviewOptions {
2736
2738
  title?: default_2.ReactNode;
2737
2739
  readOnly?: boolean;
2738
2740
  page?: number;
2741
+ size?: "sm" | "default" | "lg" | "xl" | "full";
2739
2742
  }
2740
2743
 
2741
2744
  export declare function Progress({ className, value, ...props }: React_2.ComponentProps<typeof ProgressPrimitive.Root>): JSX.Element;