@alixpartners/ui-components 2.4.3 → 2.5.0

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,7 +1,7 @@
1
- import { jsxs as c, jsx as t, Fragment as ce } from "react/jsx-runtime";
2
- import { createContext as ae, useId as pe, useRef as ue, useState as M, useCallback as _, useEffect as me, useContext as de } from "react";
1
+ import { jsxs as r, jsx as t, Fragment as ce } from "react/jsx-runtime";
2
+ import { createContext as ae, useId as pe, useRef as ue, useState as A, useCallback as _, useEffect as me, useContext as de } from "react";
3
3
  import _e from "../Tooltip/Tooltip.js";
4
- import B from "../Icon/Icon.js";
4
+ import R from "../Icon/Icon.js";
5
5
  import y from "../Button/Button.js";
6
6
  import { c as D } from "../../clsx-OuTLNxxd.js";
7
7
  import '../../assets/FilePicker.css';const Fe = "FilePicker-module__container___knCCi", Ie = "FilePicker-module__containerMultiple___Psi5u", Le = "FilePicker-module__label___al7Xe", he = "FilePicker-module__required___41Vjd", ke = "FilePicker-module__labelTooltipIcon___Cc1QF", ge = "FilePicker-module__helpers___79-g5", fe = "FilePicker-module__helperText___ja9Rr", Ne = "FilePicker-module__errorMessage___TvHrL", Pe = "FilePicker-module__singleFileHelpLinkContainer___mpjUf", Ce = "FilePicker-module__singleFileHelpLinkReservedSpace___r8j2b", Te = "FilePicker-module__helpLink___uu45D", be = "FilePicker-module__input___cL1Hs", xe = "FilePicker-module__singleFileContainer___OFSDt", ye = "FilePicker-module__singleFileInputContainer___MOkES", De = "FilePicker-module__inputFileName___sMs7R", Se = "FilePicker-module__inputFileNamePlaceholder___-mkDD", we = "FilePicker-module__inputButton___ghLlD", Be = "FilePicker-module__multipleHelpText___5tnnn", Re = "FilePicker-module__multipleInputButton___WCJp9", He = "FilePicker-module__multipleFilesList___Kim0I", ve = "FilePicker-module__multipleFilesListItem___01PDS", Me = "FilePicker-module__multipleFilesListItemContent___pKbho", Ae = "FilePicker-module__multipleFilesListItemContentData___5GC-C", Ee = "FilePicker-module__multipleFilesListItemIconContainer___7sUL5", ze = "FilePicker-module__multipleFilesListItemIcon___nfMX9", je = "FilePicker-module__multipleFilesListItemText___nPqrL", Oe = "FilePicker-module__multipleFilesListItemName___NjHhX", Ve = "FilePicker-module__multipleFilesListItemSize___wc8LJ", Ke = "FilePicker-module__multipleFilesListItemError___x9qkT", qe = "FilePicker-module__multipleFilesListItemIconError___0RO46", Xe = "FilePicker-module__multipleFilesListItemAppendedRow___nzls7", $e = "FilePicker-module__multipleFilesListItemIconDelete___9Z9Dl", Ye = "FilePicker-module__disabled___szMiq", i = {
@@ -38,9 +38,9 @@ import '../../assets/FilePicker.css';const Fe = "FilePicker-module__container___
38
38
  multipleFilesListItemAppendedRow: Xe,
39
39
  multipleFilesListItemIconDelete: $e,
40
40
  disabled: Ye
41
- }, A = ae(null);
42
- function p() {
43
- const e = de(A);
41
+ }, E = ae(null);
42
+ function m() {
43
+ const e = de(E);
44
44
  if (!e)
45
45
  throw new Error("FilePicker compound components must be used within a FilePicker.");
46
46
  return e;
@@ -56,103 +56,103 @@ function Qe({
56
56
  fileExtensionsAllowed: s,
57
57
  maxSize: o = Number.POSITIVE_INFINITY,
58
58
  queueFiles: I = !1,
59
- disabled: a = !1,
60
- isUploadDisabled: z = !1,
61
- value: h,
62
- label: j,
63
- required: O = !1,
64
- placeholder: V,
65
- errorMessage: K,
66
- maxSizeErrorMessage: k,
67
- fileExtensionInvalidErrorMessage: g,
68
- helpText: q,
69
- helpLink: X,
70
- helpLinkText: $,
71
- multipleHelpText: Y,
72
- multipleButtonHelpText: G,
73
- labelTooltip: J,
74
- uploadedFileAppendedRow: Z,
59
+ disabled: c = !1,
60
+ isUploadDisabled: j = !1,
61
+ value: k,
62
+ label: O,
63
+ required: V = !1,
64
+ placeholder: K,
65
+ errorMessage: q,
66
+ maxSizeErrorMessage: g,
67
+ fileExtensionInvalidErrorMessage: f,
68
+ helpText: X,
69
+ helpLink: $,
70
+ helpLinkText: Y,
71
+ multipleHelpText: G,
72
+ multipleButtonHelpText: J,
73
+ labelTooltip: Z,
74
+ uploadedFileAppendedRow: Q,
75
75
  onUpload: d,
76
- onRemoveFile: f,
77
- children: N
76
+ onRemoveFile: N,
77
+ children: P
78
78
  }) {
79
- const R = pe(), P = ue(null), [u, C] = M(h ? h.map((n) => ({
79
+ const H = pe(), C = ue(null), [a, T] = A(k ? k.map((n) => ({
80
80
  file: n
81
- })) : []), [Q, S] = M(!1), T = s.join(", "), H = s.map((n) => `.${n.replace(/^\./, "")}`).join(","), b = _((n) => {
82
- const r = o ? o * 1024 * 1024 : Number.POSITIVE_INFINITY, m = new Set(s.map((L) => L.toLowerCase().replace(/^\./, ""))), x = (k == null ? void 0 : k.replace(/\{maxSize\}/g, String(o))) ?? Ge(o), se = (g == null ? void 0 : g.replace(/\{fileExtensionsAllowed\}/g, T)) ?? Je(T);
83
- return n.map((L) => {
84
- const oe = L.size <= r, re = m.size === 0 || m.has(Ze(L));
85
- let w;
86
- return oe || (w = x), re || (w = se), {
87
- file: L,
88
- error: w
81
+ })) : []), [U, S] = A(!1), b = s.join(", "), v = s.map((n) => `.${n.replace(/^\./, "")}`).join(","), x = _((n) => {
82
+ const p = o ? o * 1024 * 1024 : Number.POSITIVE_INFINITY, u = new Set(s.map((h) => h.toLowerCase().replace(/^\./, ""))), L = (g == null ? void 0 : g.replace(/\{maxSize\}/g, String(o))) ?? Ge(o), w = (f == null ? void 0 : f.replace(/\{fileExtensionsAllowed\}/g, b)) ?? Je(b);
83
+ return n.map((h) => {
84
+ const oe = h.size <= p, re = u.size === 0 || u.has(Ze(h));
85
+ let B;
86
+ return oe || (B = L), re || (B = w), {
87
+ file: h,
88
+ error: B
89
89
  };
90
90
  });
91
- }, [s, T, o, k, g]), v = _((n) => {
92
- const r = u.length;
93
- return S(r + n.length > l), b(n);
94
- }, [l, u.length, b]);
91
+ }, [s, b, o, g, f]), M = _((n) => {
92
+ const p = a.length;
93
+ return S(p + n.length > l), x(n);
94
+ }, [l, a.length, x]);
95
95
  me(() => {
96
- const n = b(h ?? []);
97
- C(n), S(n.length > l);
98
- }, [h, l, b]);
99
- const U = _((n) => (n / 1024).toFixed(2) + " KB", []), W = _(() => {
96
+ const n = x(k ?? []);
97
+ T(n), S(n.length > l);
98
+ }, [k, l, x]);
99
+ const W = _((n) => (n / 1024).toFixed(2) + " KB", []), ee = _(() => {
100
100
  var n;
101
- a || (n = P.current) == null || n.click();
102
- }, [a]), ee = _((n) => {
103
- var r;
104
- a || n.key === "Enter" && ((r = P.current) == null || r.click());
105
- }, [a]), le = _((n) => {
106
- if (a) return;
107
- const r = n.target.files, m = v(Array.from(r ?? []));
101
+ c || (n = C.current) == null || n.click();
102
+ }, [c]), le = _((n) => {
103
+ var p;
104
+ c || n.key === "Enter" && ((p = C.current) == null || p.click());
105
+ }, [c]), ie = _((n) => {
106
+ if (c) return;
107
+ const p = n.target.files, u = M(Array.from(p ?? []));
108
108
  if (e === "multiple" && I) {
109
- const x = [...u, ...m];
110
- C(x), d == null || d(x);
109
+ const L = [...a, ...u];
110
+ T(L), d == null || d(L);
111
111
  } else
112
- C(m), d == null || d(m);
112
+ T(u), d == null || d(u);
113
113
  n.target.value = "";
114
- }, [a, e, I, u, v, d]), ie = _((n) => {
115
- if (a || !u) return;
116
- const r = u.filter((m) => m.file.name !== n);
117
- S(r.length > l), C(r), f == null || f(n);
118
- }, [a, u, l, f]), te = {
119
- id: R,
114
+ }, [c, e, I, a, M, d]), te = _((n) => {
115
+ if (c || !a || n < 0 || n >= a.length) return;
116
+ const p = a[n], u = a.filter((L, w) => w !== n);
117
+ S(u.length > l), T(u), N == null || N(p.file, u);
118
+ }, [c, a, l, N]), ne = {
119
+ id: H,
120
120
  type: e,
121
121
  maxFiles: l,
122
122
  fileExtensionsAllowed: s,
123
- fileExtensionsAllowedText: T,
123
+ fileExtensionsAllowedText: b,
124
124
  maxSize: o,
125
125
  queueFiles: I,
126
- disabled: a,
127
- isUploadDisabled: z,
128
- uploadedFiles: u,
129
- isMaxFilesExceeded: Q,
130
- label: j,
131
- required: O,
132
- placeholder: V,
133
- errorMessage: K,
134
- helpText: q,
135
- helpLink: X,
136
- helpLinkText: $,
137
- multipleHelpText: Y,
138
- multipleButtonHelpText: G,
139
- labelTooltip: J,
140
- accept: H,
141
- inputRef: P,
142
- triggerInput: W,
143
- handleKeyDown: ee,
144
- handleRemoveFile: ie,
145
- displayFileSize: U,
146
- uploadedFileAppendedRow: Z
147
- }, ne = N != null && (Array.isArray(N) ? N.length > 0 : !0);
148
- return /* @__PURE__ */ c(A.Provider, { value: te, children: [
149
- /* @__PURE__ */ t("input", { accept: H, multiple: e === "multiple", ref: P, type: "file", id: R, className: i.input, onChange: le }),
150
- /* @__PURE__ */ t("div", { className: D(i.container, e === "multiple" && i.containerMultiple, a && i.disabled), children: ne ? N : /* @__PURE__ */ t(Ue, {}) })
126
+ disabled: c,
127
+ isUploadDisabled: j,
128
+ uploadedFiles: a,
129
+ isMaxFilesExceeded: U,
130
+ label: O,
131
+ required: V,
132
+ placeholder: K,
133
+ errorMessage: q,
134
+ helpText: X,
135
+ helpLink: $,
136
+ helpLinkText: Y,
137
+ multipleHelpText: G,
138
+ multipleButtonHelpText: J,
139
+ labelTooltip: Z,
140
+ accept: v,
141
+ inputRef: C,
142
+ triggerInput: ee,
143
+ handleKeyDown: le,
144
+ handleRemoveFile: te,
145
+ displayFileSize: W,
146
+ uploadedFileAppendedRow: Q
147
+ }, se = P != null && (Array.isArray(P) ? P.length > 0 : !0);
148
+ return /* @__PURE__ */ r(E.Provider, { value: ne, children: [
149
+ /* @__PURE__ */ t("input", { accept: v, multiple: e === "multiple", ref: C, type: "file", id: H, className: i.input, onChange: ie }),
150
+ /* @__PURE__ */ t("div", { className: D(i.container, e === "multiple" && i.containerMultiple, c && i.disabled), children: se ? P : /* @__PURE__ */ t(Ue, {}) })
151
151
  ] });
152
152
  }
153
153
  function Ue() {
154
- const e = p();
155
- return /* @__PURE__ */ c(ce, { children: [
154
+ const e = m();
155
+ return /* @__PURE__ */ r(ce, { children: [
156
156
  /* @__PURE__ */ t(F.Label, {}),
157
157
  e.type === "single" && /* @__PURE__ */ t(F.SingleFileRow, { children: /* @__PURE__ */ t(F.BrowseButton, {}) }),
158
158
  e.type === "single" && e.uploadedFiles.length > 0 && /* @__PURE__ */ t("span", { className: i.singleFileHelpLinkReservedSpace, children: /* @__PURE__ */ t(F.SingleFileDeleteButton, {}) }),
@@ -164,11 +164,11 @@ function Ue() {
164
164
  function We({
165
165
  children: e
166
166
  }) {
167
- const l = p(), s = e ?? l.label;
168
- return /* @__PURE__ */ c("label", { htmlFor: l.id, onClick: (o) => o.preventDefault(), className: D(i.label, l.type === "multiple" && i.labelMultiple), children: [
167
+ const l = m(), s = e ?? l.label;
168
+ return /* @__PURE__ */ r("label", { htmlFor: l.id, onClick: (o) => o.preventDefault(), className: D(i.label, l.type === "multiple" && i.labelMultiple), children: [
169
169
  /* @__PURE__ */ t("span", { title: l.label, className: i.labelText, children: s }),
170
170
  l.required && /* @__PURE__ */ t("span", { "aria-hidden": "true", className: i.required, children: "*" }),
171
- l.labelTooltip && /* @__PURE__ */ t(_e, { content: l.labelTooltip.content, size: l.labelTooltip.size, theme: l.labelTooltip.theme, tipSide: l.labelTooltip.tipSide, tipAlignment: l.labelTooltip.tipAlignment, startVisible: l.labelTooltip.startVisible, children: /* @__PURE__ */ t(B, { icon: "ap-icon-info", className: i.labelTooltipIcon }) }),
171
+ l.labelTooltip && /* @__PURE__ */ t(_e, { content: l.labelTooltip.content, size: l.labelTooltip.size, theme: l.labelTooltip.theme, tipSide: l.labelTooltip.tipSide, tipAlignment: l.labelTooltip.tipAlignment, startVisible: l.labelTooltip.startVisible, children: /* @__PURE__ */ t(R, { icon: "ap-icon-info", className: i.labelTooltipIcon }) }),
172
172
  l.type === "multiple" && l.multipleHelpText && /* @__PURE__ */ t("span", { className: i.multipleHelpText, children: l.multipleHelpText })
173
173
  ] });
174
174
  }
@@ -176,7 +176,7 @@ function el({
176
176
  children: e,
177
177
  className: l
178
178
  }) {
179
- const s = p();
179
+ const s = m();
180
180
  return s.type === "multiple" ? /* @__PURE__ */ t(y, { type: "secondary", variant: "default", size: "md", icon: "ap-icon-upload", className: D(i.multipleInputButton, l), onClick: s.triggerInput, onKeyDown: s.handleKeyDown, disabled: s.disabled || s.isUploadDisabled, children: /* @__PURE__ */ t("span", { children: e ?? `Browse files ${s.multipleButtonHelpText ?? ""}` }) }) : /* @__PURE__ */ t(y, { type: "tertiary", variant: "default", size: "md", icon: "ap-icon-upload", className: D(i.inputButton, l), tabIndex: -1, disabled: s.disabled || s.isUploadDisabled, onClick: (o) => {
181
181
  o.preventDefault(), o.stopPropagation(), s.triggerInput();
182
182
  }, children: /* @__PURE__ */ t("span", { children: e ?? "Browse file" }) });
@@ -184,52 +184,50 @@ function el({
184
184
  function ll({
185
185
  children: e
186
186
  }) {
187
- return p().type !== "single" ? null : /* @__PURE__ */ t("div", { className: i.singleFileContainer, children: e });
187
+ return m().type !== "single" ? null : /* @__PURE__ */ t("div", { className: i.singleFileContainer, children: e });
188
188
  }
189
189
  function il({
190
190
  children: e
191
191
  }) {
192
- const l = p();
193
- return l.type !== "single" ? null : /* @__PURE__ */ c("div", { tabIndex: l.disabled ? -1 : 0, onClick: l.triggerInput, onKeyDown: l.handleKeyDown, className: i.singleFileInputContainer, children: [
192
+ const l = m();
193
+ return l.type !== "single" ? null : /* @__PURE__ */ r("div", { tabIndex: l.disabled ? -1 : 0, onClick: l.triggerInput, onKeyDown: l.handleKeyDown, className: i.singleFileInputContainer, children: [
194
194
  /* @__PURE__ */ t("span", { className: i.inputFileName, children: l.uploadedFiles.length > 0 ? /* @__PURE__ */ t("span", { className: i.inputFileNameText, children: l.uploadedFiles[0].file.name }) : /* @__PURE__ */ t("span", { className: i.inputFileNamePlaceholder, children: l.placeholder }) }),
195
195
  e
196
196
  ] });
197
197
  }
198
198
  function tl() {
199
- return p().type !== "single" ? null : /* @__PURE__ */ t("span", { className: i.singleFileHelpLinkReservedSpace, children: /* @__PURE__ */ t(E, {}) });
199
+ return m().type !== "single" ? null : /* @__PURE__ */ t("span", { className: i.singleFileHelpLinkReservedSpace, children: /* @__PURE__ */ t(z, {}) });
200
200
  }
201
- function E() {
202
- const e = p();
203
- if (e.type !== "single" || e.uploadedFiles.length === 0) return null;
204
- const l = e.uploadedFiles[0].file.name;
205
- return /* @__PURE__ */ t(y, { type: "tertiary", variant: "default", size: "md", icon: "ap-icon-delete", className: i.singleFileDeleteButton, onClick: () => e.handleRemoveFile(l), disabled: e.disabled });
201
+ function z() {
202
+ const e = m();
203
+ return e.type !== "single" || e.uploadedFiles.length === 0 ? null : /* @__PURE__ */ t(y, { type: "tertiary", variant: "default", size: "md", icon: "ap-icon-delete", className: i.singleFileDeleteButton, onClick: () => e.handleRemoveFile(0), disabled: e.disabled });
206
204
  }
207
205
  function nl() {
208
206
  var o, I;
209
- const e = p(), l = e.errorMessage || e.isMaxFilesExceeded || e.type === "single" && ((o = e.uploadedFiles[0]) == null ? void 0 : o.error), s = e.type === "single" ? e.errorMessage || ((I = e.uploadedFiles[0]) == null ? void 0 : I.error) : e.errorMessage || (e.isMaxFilesExceeded ? `You can only upload up to ${e.maxFiles} files.` : "");
210
- return e.type === "multiple" && !s ? null : /* @__PURE__ */ c("div", { className: i.helpers, children: [
207
+ const e = m(), l = e.errorMessage || e.isMaxFilesExceeded || e.type === "single" && ((o = e.uploadedFiles[0]) == null ? void 0 : o.error), s = e.type === "single" ? e.errorMessage || ((I = e.uploadedFiles[0]) == null ? void 0 : I.error) : e.errorMessage || (e.isMaxFilesExceeded ? `You can only upload up to ${e.maxFiles} files.` : "");
208
+ return e.type === "multiple" && !s ? null : /* @__PURE__ */ r("div", { className: i.helpers, children: [
211
209
  l ? /* @__PURE__ */ t("span", { title: e.errorMessage, className: i.errorMessage, children: s }) : e.helpText && e.type === "single" && /* @__PURE__ */ t("span", { title: e.helpText, className: i.helperText, children: e.helpText }),
212
- e.type === "single" && e.helpLink && e.helpLinkText && /* @__PURE__ */ c("span", { className: i.singleFileHelpLinkContainer, children: [
210
+ e.type === "single" && e.helpLink && e.helpLinkText && /* @__PURE__ */ r("span", { className: i.singleFileHelpLinkContainer, children: [
213
211
  /* @__PURE__ */ t("a", { href: e.helpLink, className: i.helpLink, target: "_blank", rel: "noopener noreferrer", tabIndex: e.disabled ? -1 : 0, children: e.helpLinkText }),
214
212
  /* @__PURE__ */ t("span", { className: i.singleFileHelpLinkReservedSpace })
215
213
  ] })
216
214
  ] });
217
215
  }
218
216
  function sl() {
219
- const e = p();
220
- return e.type !== "multiple" || !e.uploadedFiles.length ? null : /* @__PURE__ */ t("ul", { className: i.multipleFilesList, children: e.uploadedFiles.map((l, s) => /* @__PURE__ */ c("li", { className: i.multipleFilesListItem, children: [
221
- /* @__PURE__ */ c("div", { className: i.multipleFilesListItemContent, children: [
222
- /* @__PURE__ */ t("span", { className: i.multipleFilesListItemIconContainer, children: /* @__PURE__ */ t(B, { icon: "ap-icon-document", className: i.multipleFilesListItemIcon }) }),
223
- /* @__PURE__ */ c("div", { className: i.multipleFilesListItemContentData, children: [
224
- /* @__PURE__ */ c("div", { className: i.multipleFilesListItemText, children: [
217
+ const e = m();
218
+ return e.type !== "multiple" || !e.uploadedFiles.length ? null : /* @__PURE__ */ t("ul", { className: i.multipleFilesList, children: e.uploadedFiles.map((l, s) => /* @__PURE__ */ r("li", { className: i.multipleFilesListItem, children: [
219
+ /* @__PURE__ */ r("div", { className: i.multipleFilesListItemContent, children: [
220
+ /* @__PURE__ */ t("span", { className: i.multipleFilesListItemIconContainer, children: /* @__PURE__ */ t(R, { icon: "ap-icon-document", className: i.multipleFilesListItemIcon }) }),
221
+ /* @__PURE__ */ r("div", { className: i.multipleFilesListItemContentData, children: [
222
+ /* @__PURE__ */ r("div", { className: i.multipleFilesListItemText, children: [
225
223
  /* @__PURE__ */ t("span", { className: i.multipleFilesListItemName, children: l.file.name }),
226
224
  /* @__PURE__ */ t("span", { className: i.multipleFilesListItemSize, children: e.displayFileSize(l.file.size) }),
227
- l.error && /* @__PURE__ */ c("span", { className: i.multipleFilesListItemError, children: [
228
- /* @__PURE__ */ t(B, { icon: "ap-icon-alert", className: i.multipleFilesListItemIconError }),
225
+ l.error && /* @__PURE__ */ r("span", { className: i.multipleFilesListItemError, children: [
226
+ /* @__PURE__ */ t(R, { icon: "ap-icon-alert", className: i.multipleFilesListItemIconError }),
229
227
  l.error
230
228
  ] })
231
229
  ] }),
232
- /* @__PURE__ */ t(y, { type: "tertiary", variant: "default", size: "sm", onClick: () => e.handleRemoveFile(l.file.name), icon: "ap-icon-delete", iconClassName: i.multipleFilesListItemIconDelete, disabled: e.disabled })
230
+ /* @__PURE__ */ t(y, { type: "tertiary", variant: "default", size: "sm", onClick: () => e.handleRemoveFile(s), icon: "ap-icon-delete", iconClassName: i.multipleFilesListItemIconDelete, disabled: e.disabled })
233
231
  ] })
234
232
  ] }),
235
233
  e.uploadedFileAppendedRow && /* @__PURE__ */ t("div", { className: i.multipleFilesListItemAppendedRow, children: e.uploadedFileAppendedRow(l, s) })
@@ -243,9 +241,9 @@ const F = Object.assign(Qe, {
243
241
  SingleFileContainer: ll,
244
242
  SingleFileRow: il,
245
243
  SingleFileActions: tl,
246
- SingleFileDeleteButton: E
244
+ SingleFileDeleteButton: z
247
245
  });
248
246
  export {
249
247
  F as default,
250
- p as useFilePickerContext
248
+ m as useFilePickerContext
251
249
  };
@@ -1,8 +1,8 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- import { d as h, i as o, r as n, g as e, s as l, w as x, v as f, f as B } from "../../vi.bdSIJ99Y-017e_Pkz.js";
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import { d as B, i as n, r as s, g as e, s as l, w as m, v as f, f as T } from "../../vi.bdSIJ99Y-017e_Pkz.js";
3
3
  import { u as r } from "../../index-DkTDHhag.js";
4
- import s from "./FilePicker.js";
5
- const a = {
4
+ import a from "./FilePicker.js";
5
+ const c = {
6
6
  fileExtensionsAllowed: ["xlsx", "csv"],
7
7
  maxSize: 5,
8
8
  maxFiles: 10,
@@ -13,141 +13,145 @@ const a = {
13
13
  helpLink: "https://example.com",
14
14
  helpLinkText: "Help link"
15
15
  };
16
- function d(t, c = 100, u = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
17
- return new File(["x".repeat(c)], t, {
16
+ function d(t, i = 100, u = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
17
+ return new File(["x".repeat(i)], t, {
18
18
  type: u
19
19
  });
20
20
  }
21
- h("FilePicker", () => {
22
- h("Rendering", () => {
23
- o("should render with required props", () => {
24
- n(/* @__PURE__ */ i(s, { type: "single", ...a })), e(l.getByText("Upload files")).toBeInTheDocument(), e(l.getByText("Select a file")).toBeInTheDocument(), e(l.getByText("Browse file")).toBeInTheDocument();
25
- }), o("should render required asterisk when required is true", () => {
26
- n(/* @__PURE__ */ i(s, { type: "single", ...a, required: !0 }));
21
+ B("FilePicker", () => {
22
+ B("Rendering", () => {
23
+ n("should render with required props", () => {
24
+ s(/* @__PURE__ */ o(a, { type: "single", ...c })), e(l.getByText("Upload files")).toBeInTheDocument(), e(l.getByText("Select a file")).toBeInTheDocument(), e(l.getByText("Browse file")).toBeInTheDocument();
25
+ }), n("should render required asterisk when required is true", () => {
26
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, required: !0 }));
27
27
  const t = document.querySelector('[aria-hidden="true"]');
28
28
  e(t).toBeInTheDocument(), e(t).toHaveTextContent("*");
29
- }), o("should render single mode with Browse file button", () => {
30
- n(/* @__PURE__ */ i(s, { type: "single", ...a })), e(l.getByText("Browse file")).toBeInTheDocument(), e(l.queryByText(/Browse files \(max/)).not.toBeInTheDocument();
31
- }), o("should render multiple mode with Browse files button and max count", () => {
32
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a, maxFiles: 5, multipleHelpText: "Only xlsx, csv files with max size of 5MB", multipleButtonHelpText: "(max 5 files)" })), e(l.getByText("Browse files (max 5 files)")).toBeInTheDocument(), e(l.getByText(/Only xlsx, csv files with max size of 5MB/)).toBeInTheDocument();
33
- }), o("should display custom multipleHelpText when provided in multiple mode", () => {
34
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a, multipleHelpText: "Custom extensions and size info" })), e(l.getByText("Custom extensions and size info")).toBeInTheDocument();
35
- }), o("should not render multipleHelpText in single mode", () => {
36
- n(/* @__PURE__ */ i(s, { type: "single", ...a, multipleHelpText: "This should not appear" })), e(l.queryByText("This should not appear")).not.toBeInTheDocument();
37
- }), o("should display custom multipleButtonHelpText in button when provided in multiple mode", () => {
38
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a, multipleButtonHelpText: "(max 3 files, 2MB each)" })), e(l.getByText("Browse files (max 3 files, 2MB each)")).toBeInTheDocument();
39
- }), o("should render file input with correct accept and multiple attributes", () => {
40
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a }));
29
+ }), n("should render single mode with Browse file button", () => {
30
+ s(/* @__PURE__ */ o(a, { type: "single", ...c })), e(l.getByText("Browse file")).toBeInTheDocument(), e(l.queryByText(/Browse files \(max/)).not.toBeInTheDocument();
31
+ }), n("should render multiple mode with Browse files button and max count", () => {
32
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c, maxFiles: 5, multipleHelpText: "Only xlsx, csv files with max size of 5MB", multipleButtonHelpText: "(max 5 files)" })), e(l.getByText("Browse files (max 5 files)")).toBeInTheDocument(), e(l.getByText(/Only xlsx, csv files with max size of 5MB/)).toBeInTheDocument();
33
+ }), n("should display custom multipleHelpText when provided in multiple mode", () => {
34
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c, multipleHelpText: "Custom extensions and size info" })), e(l.getByText("Custom extensions and size info")).toBeInTheDocument();
35
+ }), n("should not render multipleHelpText in single mode", () => {
36
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, multipleHelpText: "This should not appear" })), e(l.queryByText("This should not appear")).not.toBeInTheDocument();
37
+ }), n("should display custom multipleButtonHelpText in button when provided in multiple mode", () => {
38
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c, multipleButtonHelpText: "(max 3 files, 2MB each)" })), e(l.getByText("Browse files (max 3 files, 2MB each)")).toBeInTheDocument();
39
+ }), n("should render file input with correct accept and multiple attributes", () => {
40
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c }));
41
41
  const t = l.getByTestId("file-picker-input");
42
42
  e(t).toHaveAttribute("accept", ".xlsx,.csv"), e(t).toHaveAttribute("multiple");
43
- }), o("should render single file input without multiple attribute", () => {
44
- n(/* @__PURE__ */ i(s, { type: "single", ...a }));
43
+ }), n("should render single file input without multiple attribute", () => {
44
+ s(/* @__PURE__ */ o(a, { type: "single", ...c }));
45
45
  const t = l.getByTestId("file-picker-input");
46
46
  e(t).not.toHaveAttribute("multiple");
47
- }), o("should display selected file name in single mode", async () => {
47
+ }), n("should display selected file name in single mode", async () => {
48
48
  const t = d("report.xlsx");
49
- n(/* @__PURE__ */ i(s, { type: "single", ...a }));
50
- const c = l.getByTestId("file-picker-input");
51
- await r.upload(c, t), await x(() => {
49
+ s(/* @__PURE__ */ o(a, { type: "single", ...c }));
50
+ const i = l.getByTestId("file-picker-input");
51
+ await r.upload(i, t), await m(() => {
52
52
  e(l.getByText("report.xlsx")).toBeInTheDocument();
53
53
  });
54
- }), o("should display error message when provided", () => {
55
- n(/* @__PURE__ */ i(s, { type: "single", ...a, errorMessage: "Please select a file" })), e(l.getByText("Please select a file")).toBeInTheDocument();
54
+ }), n("should display error message when provided", () => {
55
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, errorMessage: "Please select a file" })), e(l.getByText("Please select a file")).toBeInTheDocument();
56
56
  });
57
- }), h("onUpload", () => {
58
- o("should call onUpload with uploaded file when single file is selected", async () => {
59
- const t = f.fn(), c = d("document.xlsx");
60
- n(/* @__PURE__ */ i(s, { type: "single", ...a, onUpload: t }));
57
+ }), B("onUpload", () => {
58
+ n("should call onUpload with uploaded file when single file is selected", async () => {
59
+ const t = f.fn(), i = d("document.xlsx");
60
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, onUpload: t }));
61
61
  const u = l.getByTestId("file-picker-input");
62
- await r.upload(u, c), await x(() => {
62
+ await r.upload(u, i), await m(() => {
63
63
  e(t).toHaveBeenCalledTimes(1), e(t).toHaveBeenCalledWith([e.objectContaining({
64
64
  file: e.any(File),
65
65
  error: void 0
66
66
  })]), e(t.mock.calls[0][0][0].file.name).toBe("document.xlsx");
67
67
  });
68
- }), o("should call onUpload with all selected files when multiple files selected (non-queue)", async () => {
69
- const t = f.fn(), c = d("a.xlsx"), u = d("b.xlsx");
70
- n(/* @__PURE__ */ i(s, { type: "multiple", queueFiles: !1, ...a, onUpload: t }));
71
- const m = l.getByTestId("file-picker-input");
72
- await r.upload(m, [c, u]), await x(() => {
68
+ }), n("should call onUpload with all selected files when multiple files selected (non-queue)", async () => {
69
+ const t = f.fn(), i = d("a.xlsx"), u = d("b.xlsx");
70
+ s(/* @__PURE__ */ o(a, { type: "multiple", queueFiles: !1, ...c, onUpload: t }));
71
+ const x = l.getByTestId("file-picker-input");
72
+ await r.upload(x, [i, u]), await m(() => {
73
73
  e(t).toHaveBeenCalledTimes(1);
74
74
  const p = t.mock.calls[0][0];
75
75
  e(p).toHaveLength(2), e(p[0].file.name).toBe("a.xlsx"), e(p[1].file.name).toBe("b.xlsx");
76
76
  });
77
- }), o("should call onUpload with accumulated files when queueFiles is true", async () => {
78
- const t = f.fn(), c = d("first.xlsx"), u = d("second.xlsx");
79
- n(/* @__PURE__ */ i(s, { type: "multiple", queueFiles: !0, ...a, maxFiles: 10, onUpload: t }));
80
- const m = l.getByTestId("file-picker-input");
81
- await r.upload(m, c), await x(() => {
77
+ }), n("should call onUpload with accumulated files when queueFiles is true", async () => {
78
+ const t = f.fn(), i = d("first.xlsx"), u = d("second.xlsx");
79
+ s(/* @__PURE__ */ o(a, { type: "multiple", queueFiles: !0, ...c, maxFiles: 10, onUpload: t }));
80
+ const x = l.getByTestId("file-picker-input");
81
+ await r.upload(x, i), await m(() => {
82
82
  e(t).toHaveBeenCalledTimes(1);
83
83
  const p = t.mock.calls[0][0];
84
84
  e(p).toHaveLength(1), e(p[0].file.name).toBe("first.xlsx");
85
- }), await r.upload(m, u), await x(() => {
85
+ }), await r.upload(x, u), await m(() => {
86
86
  e(t).toHaveBeenCalledTimes(2);
87
87
  const p = t.mock.calls[1][0];
88
88
  e(p).toHaveLength(2), e(p[0].file.name).toBe("first.xlsx"), e(p[1].file.name).toBe("second.xlsx");
89
89
  });
90
- }), o("should include validation error in onUpload when file extension is invalid", async () => {
91
- const t = f.fn(), c = d("document.pdf", 100, "application/pdf");
92
- n(/* @__PURE__ */ i(s, { type: "single", ...a, fileExtensionsAllowed: ["xlsx"], onUpload: t }));
90
+ }), n("should include validation error in onUpload when file extension is invalid", async () => {
91
+ const t = f.fn(), i = d("document.pdf", 100, "application/pdf");
92
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, fileExtensionsAllowed: ["xlsx"], onUpload: t }));
93
93
  const u = l.getByTestId("file-picker-input");
94
- B.change(u, {
94
+ T.change(u, {
95
95
  target: {
96
- files: [c]
96
+ files: [i]
97
97
  }
98
- }), await x(() => {
98
+ }), await m(() => {
99
99
  e(t).toHaveBeenCalledWith([e.objectContaining({
100
100
  file: e.any(File),
101
101
  error: e.stringContaining("file format is incorrect")
102
102
  })]);
103
103
  });
104
104
  });
105
- }), h("onRemoveFile", () => {
106
- o("should call onRemoveFile when remove button is clicked in single mode", async () => {
107
- const t = f.fn(), c = d("to-remove.xlsx");
108
- n(/* @__PURE__ */ i(s, { type: "single", ...a, onRemoveFile: t }));
105
+ }), B("onRemoveFile", () => {
106
+ n("should call onRemoveFile when remove button is clicked in single mode", async () => {
107
+ const t = f.fn(), i = d("to-remove.xlsx");
108
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, onRemoveFile: t }));
109
109
  const u = l.getByTestId("file-picker-input");
110
- await r.upload(u, c), await x(() => {
110
+ await r.upload(u, i), await m(() => {
111
111
  e(l.getByText("to-remove.xlsx")).toBeInTheDocument();
112
112
  });
113
- const m = l.getByTestId("file-picker-remove-single");
114
- await r.click(m), e(t).toHaveBeenCalledWith("to-remove.xlsx");
115
- }), o("should call onRemoveFile when remove button is clicked in multiple mode", async () => {
116
- const t = f.fn(), c = d("one.xlsx"), u = d("two.xlsx");
117
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a, onRemoveFile: t }));
118
- const m = l.getByTestId("file-picker-input");
119
- await r.upload(m, [c, u]), await x(() => {
113
+ const x = l.getByTestId("file-picker-remove-single");
114
+ await r.click(x), e(t).toHaveBeenCalledTimes(1);
115
+ const [p, h] = t.mock.calls[0];
116
+ e(p).toBe(i), e(h).toHaveLength(0);
117
+ }), n("should call onRemoveFile when remove button is clicked in multiple mode", async () => {
118
+ const t = f.fn(), i = d("one.xlsx"), u = d("two.xlsx");
119
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c, onRemoveFile: t }));
120
+ const x = l.getByTestId("file-picker-input");
121
+ await r.upload(x, [i, u]), await m(() => {
120
122
  e(l.getByText("one.xlsx")).toBeInTheDocument(), e(l.getByText("two.xlsx")).toBeInTheDocument();
121
123
  });
122
- const p = l.getByTestId("file-picker-remove-two.xlsx");
123
- await r.click(p), e(t).toHaveBeenCalledWith("two.xlsx");
124
+ const p = l.getByTestId("file-picker-remove-1");
125
+ await r.click(p), e(t).toHaveBeenCalledTimes(1);
126
+ const [h, y] = t.mock.calls[0];
127
+ e(h).toBe(u), e(y).toHaveLength(1), e(y[0].file).toBe(i);
124
128
  });
125
- }), h("Disabled state", () => {
126
- o("should not call onUpload when disabled and file is selected", async () => {
127
- const t = f.fn(), c = d("doc.xlsx");
128
- n(/* @__PURE__ */ i(s, { type: "single", ...a, disabled: !0, onUpload: t }));
129
+ }), B("Disabled state", () => {
130
+ n("should not call onUpload when disabled and file is selected", async () => {
131
+ const t = f.fn(), i = d("doc.xlsx");
132
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, disabled: !0, onUpload: t }));
129
133
  const u = l.getByTestId("file-picker-input");
130
- await r.upload(u, c), e(t).not.toHaveBeenCalled();
131
- }), o("should not call onRemoveFile when disabled and remove is clicked", async () => {
132
- const t = f.fn(), c = d("doc.xlsx");
133
- n(/* @__PURE__ */ i(s, { type: "single", ...a, disabled: !0, value: [c], onRemoveFile: t })), e(l.getByText("doc.xlsx")).toBeInTheDocument();
134
+ await r.upload(u, i), e(t).not.toHaveBeenCalled();
135
+ }), n("should not call onRemoveFile when disabled and remove is clicked", async () => {
136
+ const t = f.fn(), i = d("doc.xlsx");
137
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, disabled: !0, value: [i], onRemoveFile: t })), e(l.getByText("doc.xlsx")).toBeInTheDocument();
134
138
  const u = l.getByTestId("file-picker-remove-single");
135
139
  e(u).toBeDisabled(), await r.click(u), e(t).not.toHaveBeenCalled();
136
140
  });
137
- }), h("Controlled value", () => {
138
- o("should display files from value prop", () => {
141
+ }), B("Controlled value", () => {
142
+ n("should display files from value prop", () => {
139
143
  const t = d("controlled.xlsx");
140
- n(/* @__PURE__ */ i(s, { type: "single", ...a, value: [t] })), e(l.getByText("controlled.xlsx")).toBeInTheDocument();
141
- }), o("should display multiple files from value prop", () => {
144
+ s(/* @__PURE__ */ o(a, { type: "single", ...c, value: [t] })), e(l.getByText("controlled.xlsx")).toBeInTheDocument();
145
+ }), n("should display multiple files from value prop", () => {
142
146
  const t = [d("a.xlsx"), d("b.xlsx")];
143
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a, value: t })), e(l.getByText("a.xlsx")).toBeInTheDocument(), e(l.getByText("b.xlsx")).toBeInTheDocument();
147
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c, value: t })), e(l.getByText("a.xlsx")).toBeInTheDocument(), e(l.getByText("b.xlsx")).toBeInTheDocument();
144
148
  });
145
- }), h("Max files exceeded", () => {
146
- o("should show max files exceeded message when over limit in multiple mode", async () => {
149
+ }), B("Max files exceeded", () => {
150
+ n("should show max files exceeded message when over limit in multiple mode", async () => {
147
151
  const t = [d("1.xlsx"), d("2.xlsx"), d("3.xlsx")];
148
- n(/* @__PURE__ */ i(s, { type: "multiple", ...a, maxFiles: 2 }));
149
- const c = l.getByTestId("file-picker-input");
150
- await r.upload(c, t), await x(() => {
152
+ s(/* @__PURE__ */ o(a, { type: "multiple", ...c, maxFiles: 2 }));
153
+ const i = l.getByTestId("file-picker-input");
154
+ await r.upload(i, t), await m(() => {
151
155
  e(l.getByText(/You can only upload up to 2 files/)).toBeInTheDocument();
152
156
  });
153
157
  });
@@ -0,0 +1,3 @@
1
+ import { IllustrationCategory, IllustrationLevel, IllustrationName, IllustrationProps } from './types';
2
+ export default function Illustration(props: IllustrationProps): import("react/jsx-runtime").JSX.Element | null;
3
+ export type { IllustrationCategory, IllustrationLevel, IllustrationName, IllustrationProps };