@vkzstudio/muza-ui 1.0.20 → 1.0.22

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 (40) hide show
  1. package/dist/components/Dialog/Dialog.js +8 -8
  2. package/dist/components/FileUpload/FileItem.js +1 -1
  3. package/dist/components/FileUpload/FileUpload.d.ts +9 -1
  4. package/dist/components/FileUpload/FileUpload.d.ts.map +1 -1
  5. package/dist/components/FileUpload/FileUpload.js +152 -117
  6. package/dist/components/FileUpload/FileUpload.stories.d.ts +2 -0
  7. package/dist/components/FileUpload/FileUpload.stories.d.ts.map +1 -1
  8. package/dist/components/FormField/FormField.d.ts +4 -0
  9. package/dist/components/FormField/FormField.d.ts.map +1 -1
  10. package/dist/components/FormField/FormField.js +62 -49
  11. package/dist/components/Input/Input.d.ts +4 -0
  12. package/dist/components/Input/Input.d.ts.map +1 -1
  13. package/dist/components/Input/Input.js +25 -21
  14. package/dist/components/Input/Input.stories.d.ts.map +1 -1
  15. package/dist/components/MultiSelect/MultiSelect.d.ts +4 -0
  16. package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  17. package/dist/components/MultiSelect/MultiSelect.js +42 -38
  18. package/dist/components/MultiSelect/MultiSelect.stories.d.ts.map +1 -1
  19. package/dist/components/Select/Select.d.ts +4 -0
  20. package/dist/components/Select/Select.d.ts.map +1 -1
  21. package/dist/components/Select/Select.js +36 -32
  22. package/dist/components/Select/Select.stories.d.ts.map +1 -1
  23. package/dist/components/TextEditor/TextEditor.d.ts.map +1 -1
  24. package/dist/components/TextEditor/TextEditor.js +66 -71
  25. package/dist/components/TextEditor/ToolbarButton.js +6 -6
  26. package/dist/components/Textarea/Textarea.d.ts +7 -1
  27. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  28. package/dist/components/Textarea/Textarea.js +106 -53
  29. package/dist/components/Textarea/Textarea.stories.d.ts +1 -0
  30. package/dist/components/Textarea/Textarea.stories.d.ts.map +1 -1
  31. package/dist/muza-ui.css +1 -1
  32. package/dist/translations/locales/cs.d.ts.map +1 -1
  33. package/dist/translations/locales/cs.js +1 -0
  34. package/dist/translations/locales/en.d.ts.map +1 -1
  35. package/dist/translations/locales/en.js +1 -0
  36. package/dist/translations/locales/sk.d.ts.map +1 -1
  37. package/dist/translations/locales/sk.js +1 -0
  38. package/dist/translations/types.d.ts +2 -0
  39. package/dist/translations/types.d.ts.map +1 -1
  40. package/package.json +1 -1
@@ -25,19 +25,19 @@ const Q = o.Root, U = o.Title, Z = o.Description, A = ({
25
25
  children: s,
26
26
  title: c,
27
27
  hideCloseButton: n = !1,
28
- closeAriaLabel: u,
29
- ...f
28
+ closeAriaLabel: f,
29
+ ...u
30
30
  }, h) => {
31
- const y = T(), x = u ?? y.dialog.closeAriaLabel;
31
+ const y = T(), x = f ?? y.dialog.closeAriaLabel;
32
32
  return /* @__PURE__ */ a(
33
33
  "div",
34
34
  {
35
35
  ref: h,
36
36
  className: i(
37
- "-mx-comp-dialog-p -mt-comp-dialog-p border-b border-stroke-base-primary px-comp-dialog-p py-comp-dialog-p-hor",
37
+ "-mx-comp-dialog-p -mt-comp-dialog-p border-b border-stroke-base-primary px-comp-dialog-p py-comp-dialog-p-hor-def",
38
38
  l
39
39
  ),
40
- ...f,
40
+ ...u,
41
41
  children: /* @__PURE__ */ g("div", { className: "flex items-center gap-4xl", children: [
42
42
  /* @__PURE__ */ g("div", { className: "flex min-w-0 flex-1 items-center gap-sm", children: [
43
43
  t && /* @__PURE__ */ a("span", { className: "text-surface-brand-primary [&>svg]:size-icon-medium", children: t }),
@@ -105,8 +105,8 @@ const X = b(
105
105
  size: s = "medium",
106
106
  closeAriaLabel: c,
107
107
  ...n
108
- }, u) => {
109
- const f = T(), h = c ?? f.dialog.closeAriaLabel, [y, x] = O(!1), d = E(null), v = S.toArray(t), w = v.find(
108
+ }, f) => {
109
+ const u = T(), h = c ?? u.dialog.closeAriaLabel, [y, x] = O(!1), d = E(null), v = S.toArray(t), w = v.find(
110
110
  (e) => {
111
111
  var r;
112
112
  return C(e) && ((r = e.type) == null ? void 0 : r.displayName) === "DialogHeader";
@@ -131,7 +131,7 @@ const X = b(
131
131
  return /* @__PURE__ */ a(W, { children: /* @__PURE__ */ a(L, { children: /* @__PURE__ */ a(
132
132
  o.Content,
133
133
  {
134
- ref: u,
134
+ ref: f,
135
135
  className: i(
136
136
  "relative flex w-full flex-col rounded-2xl bg-surface-base-secondary p-comp-dialog-p duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
137
137
  {
@@ -34,7 +34,7 @@ const E = (e, a, t) => {
34
34
  "border-comp-file-upload-stroke-def-def",
35
35
  "bg-comp-input-fill-def leading-[140%]",
36
36
  "text-comp-file-upload-text-dark-secondary",
37
- "font-regular"
37
+ "font-medium"
38
38
  ],
39
39
  error: [
40
40
  "border-comp-file-upload-stroke-error-def",
@@ -42,6 +42,10 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
42
42
  maxSize?: number;
43
43
  /** Custom error message when a file exceeds `maxSize`. Defaults to a translated message with the size in MB. */
44
44
  maxSizeErrorMessage?: string;
45
+ /** Maximum number of files allowed. When reached, the dropzone is hidden. */
46
+ maxFiles?: number;
47
+ /** Custom error message when file count exceeds `maxFiles`. Defaults to a translated message. */
48
+ maxFilesErrorMessage?: string;
45
49
  /** Controls the visual size of file items in the list. @default 'base' */
46
50
  size?: 'sm' | 'base' | 'lg';
47
51
  /** Prevents interaction and applies disabled styling. @default false */
@@ -65,7 +69,7 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
65
69
  * Props managed by the component (`onDrop`, `accept`, `multiple`, `maxSize`, `disabled`) are excluded.
66
70
  * @see DropzoneOptions
67
71
  */
68
- dropzoneOptions?: Omit<DropzoneOptions, 'onDrop' | 'accept' | 'multiple' | 'maxSize' | 'disabled'>;
72
+ dropzoneOptions?: Omit<DropzoneOptions, 'onDrop' | 'accept' | 'multiple' | 'maxSize' | 'maxFiles' | 'disabled'>;
69
73
  /** Files displayed in the list on mount. @default [] */
70
74
  preselectedFiles?: File[];
71
75
  /**
@@ -103,6 +107,10 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
103
107
  preselectedUrls?: PreselectedUrl[];
104
108
  /** Fires when a URL-backed item is deleted. Receives the item and its index in the `preselectedUrls` array. */
105
109
  onDeleteUrl?: (item: PreselectedUrl, index: number) => void;
110
+ /** Extra content rendered inline next to the label (e.g. a tooltip icon). */
111
+ labelExtra?: React.ReactNode;
112
+ /** Tooltip content shown in an info icon next to the label. Overridden by `labelExtra` if both are provided. */
113
+ infoTooltip?: string;
106
114
  }
107
115
  declare const FileUpload: React.ForwardRefExoticComponent<FileUploadProps & React.RefAttributes<HTMLDivElement>>;
108
116
  export { FileUpload };
@@ -1 +1 @@
1
- {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
- import { jsxs as f, jsx as a, Fragment as ee } from "react/jsx-runtime";
2
- import * as F from "react";
3
- import { cva as B } from "class-variance-authority";
4
- import { useDropzone as oe } from "react-dropzone";
5
- import { FileItem as K } from "./FileItem.js";
6
- import { useMuzaTranslations as te } from "../../translations/TranslationContext.js";
7
- import { Flex as re } from "../Flex/Flex.js";
8
- import { FormField as le } from "../FormField/FormField.js";
9
- import { cn as _ } from "../../utils/cn.js";
10
- import { CloudUploadOutline as se } from "@solar-icons/react-perf";
11
- import { Typography as S } from "../Typography/Typography.js";
12
- const ie = B(
1
+ import { jsxs as n, jsx as a, Fragment as pe } from "react/jsx-runtime";
2
+ import * as v from "react";
3
+ import { cva as Y } from "class-variance-authority";
4
+ import { useDropzone as ue } from "react-dropzone";
5
+ import { FileItem as Q } from "./FileItem.js";
6
+ import { useMuzaTranslations as fe } from "../../translations/TranslationContext.js";
7
+ import { Flex as W } from "../Flex/Flex.js";
8
+ import { FormField as ne } from "../FormField/FormField.js";
9
+ import { cn as X } from "../../utils/cn.js";
10
+ import { CloudUploadOutline as me } from "@solar-icons/react-perf";
11
+ import { Typography as M } from "../Typography/Typography.js";
12
+ const ge = Y(
13
13
  [
14
14
  "group relative cursor-pointer rounded-xl border-1 border-dashed transition-colors",
15
15
  "p-4xl pt-3xl pr-4xl pb-3xl",
@@ -45,7 +45,7 @@ const ie = B(
45
45
  }
46
46
  }
47
47
  }
48
- ), ae = B(
48
+ ), xe = Y(
49
49
  [
50
50
  "text-center transition-colors",
51
51
  "text-comp-file-upload-text-dark-secondary"
@@ -57,115 +57,139 @@ const ie = B(
57
57
  }
58
58
  }
59
59
  }
60
- ), de = F.forwardRef(
60
+ ), he = v.forwardRef(
61
61
  ({
62
- className: y,
63
- onDrop: x,
64
- accept: u,
65
- multiple: k = !0,
66
- maxSize: g,
67
- maxSizeErrorMessage: G,
68
- size: $ = "base",
62
+ className: U,
63
+ onDrop: z,
64
+ accept: m,
65
+ multiple: A = !0,
66
+ maxSize: y,
67
+ maxSizeErrorMessage: Z,
68
+ maxFiles: i,
69
+ maxFilesErrorMessage: q,
70
+ size: P = "base",
69
71
  disabled: p = !1,
70
- readOnly: m = !1,
71
- dropzoneOptions: J,
72
- label: w,
73
- title: L,
74
- subtitle: N,
75
- preselectedFiles: Q = [],
76
- fileStatus: W = [],
77
- itemErrors: b,
78
- itemHints: h,
79
- error: X,
80
- required: v,
81
- disableRequiredAsterisk: Y,
72
+ readOnly: g = !1,
73
+ dropzoneOptions: O,
74
+ label: V,
75
+ title: H,
76
+ subtitle: K,
77
+ preselectedFiles: D = [],
78
+ fileStatus: C = [],
79
+ itemErrors: S,
80
+ itemHints: F,
81
+ error: E,
82
+ required: k,
83
+ disableRequiredAsterisk: ee,
82
84
  onError: t,
83
- onDelete: z,
84
- onChange: c,
85
- preselectedUrls: U = [],
86
- onDeleteUrl: M,
87
- ...Z
88
- }, q) => {
89
- const n = te(), [I, R] = F.useState(Q), [j, A] = F.useState(!1), O = L ?? n.fileUpload.title, P = g ? n.fileUpload.maxSizeError.replace(
85
+ onDelete: w,
86
+ onChange: u,
87
+ preselectedUrls: x = [],
88
+ onDeleteUrl: $,
89
+ labelExtra: te,
90
+ infoTooltip: oe,
91
+ ...le
92
+ }, se) => {
93
+ const f = fe(), [h, _] = v.useState(D), [j, N] = v.useState(!1), [B, b] = v.useState(!1), T = h.length + x.length, re = H ?? f.fileUpload.title, I = i != null ? f.fileUpload.maxFilesError.replace("{count}", String(i)) : "", R = q ?? I, G = y ? f.fileUpload.maxSizeError.replace(
90
94
  "{size}",
91
- (g / (1024 * 1024)).toFixed(0)
92
- ) : "", T = G ?? P, { getRootProps: H, getInputProps: D, isDragActive: E } = oe({
93
- onDrop: (e, l) => {
95
+ (y / (1024 * 1024)).toFixed(0)
96
+ ) : "", J = Z ?? G, { getRootProps: ae, getInputProps: ie, isDragActive: de } = ue({
97
+ onDrop: (e, s) => {
94
98
  try {
95
- if (A(!1), l.length > 0 && l.some(
96
- (r) => r.errors.some((s) => s.code === "file-too-large")
97
- )) {
98
- A(!0);
99
- const r = T || P;
100
- t == null || t(r, l[0].file);
99
+ if (N(!1), b(!1), s.length > 0) {
100
+ const o = s.some(
101
+ (l) => l.errors.some((r) => r.code === "file-too-large")
102
+ );
103
+ if (s.some(
104
+ (l) => l.errors.some((r) => r.code === "too-many-files")
105
+ )) {
106
+ b(!0);
107
+ const l = R || I;
108
+ t == null || t(l, s[0].file);
109
+ return;
110
+ }
111
+ if (o) {
112
+ N(!0);
113
+ const l = J || G;
114
+ t == null || t(l, s[0].file);
115
+ return;
116
+ }
117
+ }
118
+ if (i != null && T + e.length > i) {
119
+ b(!0);
120
+ const o = R || I;
121
+ t == null || t(o);
101
122
  return;
102
123
  }
103
- R((o) => {
104
- const r = new Set(
105
- o.map((i) => `${i.name}-${i.size}-${i.lastModified}`)
106
- ), s = e.filter(
107
- (i) => !r.has(`${i.name}-${i.size}-${i.lastModified}`)
108
- ), d = [...o, ...s];
109
- return c == null || c(d), d;
110
- }), x == null || x(e);
124
+ _((o) => {
125
+ const c = new Set(
126
+ o.map((d) => `${d.name}-${d.size}-${d.lastModified}`)
127
+ ), l = e.filter(
128
+ (d) => !c.has(`${d.name}-${d.size}-${d.lastModified}`)
129
+ ), r = [...o, ...l];
130
+ return u == null || u(r), r;
131
+ }), z == null || z(e);
111
132
  } catch (o) {
112
- const r = o instanceof Error ? o.message : n.fileUpload.processingError;
113
- t == null || t(r);
133
+ const c = o instanceof Error ? o.message : f.fileUpload.processingError;
134
+ t == null || t(c);
114
135
  }
115
136
  },
116
- accept: typeof u == "string" ? { [u]: [] } : u ? Object.fromEntries(u.map((e) => [e, []])) : void 0,
117
- multiple: k,
118
- maxSize: g,
137
+ accept: typeof m == "string" ? { [m]: [] } : m ? Object.fromEntries(m.map((e) => [e, []])) : void 0,
138
+ multiple: A,
139
+ maxSize: y,
140
+ maxFiles: i != null ? i - T : void 0,
119
141
  disabled: p,
120
- ...J
121
- }), V = m || !k && (I.length > 0 || U.length > 0);
122
- return /* @__PURE__ */ f(re, { direction: "column", gap: "lg", children: [
123
- (!V || w) && /* @__PURE__ */ a(
124
- le,
142
+ ...O
143
+ }), L = g || !A && (h.length > 0 || x.length > 0) || i != null && T >= i;
144
+ return /* @__PURE__ */ n(W, { direction: "column", gap: "lg", children: [
145
+ (!L || V) && /* @__PURE__ */ a(
146
+ ne,
125
147
  {
126
- label: w,
127
- required: v,
128
- disableRequiredAsterisk: Y,
129
- children: !V && /* @__PURE__ */ f(ee, { children: [
130
- /* @__PURE__ */ f(
148
+ label: V,
149
+ required: k,
150
+ disableRequiredAsterisk: ee,
151
+ labelExtra: te,
152
+ infoTooltip: oe,
153
+ children: !L && /* @__PURE__ */ n(pe, { children: [
154
+ /* @__PURE__ */ n(
131
155
  "div",
132
156
  {
133
- ref: q,
157
+ ref: se,
134
158
  tabIndex: p ? void 0 : 0,
135
- className: _(
136
- ie({
137
- error: X || j,
159
+ className: X(
160
+ ge({
161
+ error: E || j || B,
138
162
  disabled: p,
139
- className: y,
140
- isDragActive: E
163
+ className: U,
164
+ isDragActive: de
141
165
  })
142
166
  ),
143
- ...H(),
144
- ...Z,
167
+ ...ae(),
168
+ ...le,
145
169
  children: [
146
170
  /* @__PURE__ */ a(
147
171
  "input",
148
172
  {
149
- ...D({ required: v }),
150
- "aria-required": v
173
+ ...ie({ required: k }),
174
+ "aria-required": k
151
175
  }
152
176
  ),
153
- /* @__PURE__ */ a(se, { className: "inline size-comp-file-upload-ico-size" }),
154
- /* @__PURE__ */ f("div", { children: [
155
- /* @__PURE__ */ a(S, { size: "base", component: "p", weight: "medium", children: O }),
156
- N && /* @__PURE__ */ a(
157
- S,
177
+ /* @__PURE__ */ a(me, { className: "inline size-comp-file-upload-ico-size" }),
178
+ /* @__PURE__ */ n("div", { children: [
179
+ /* @__PURE__ */ a(M, { size: "base", component: "p", weight: "medium", children: re }),
180
+ K && /* @__PURE__ */ a(
181
+ M,
158
182
  {
159
183
  size: "sm",
160
184
  component: "p",
161
185
  weight: "regular",
162
- className: _(
163
- ae({
186
+ className: X(
187
+ xe({
164
188
  disabled: p,
165
- className: y
189
+ className: U
166
190
  })
167
191
  ),
168
- children: N
192
+ children: K
169
193
  }
170
194
  )
171
195
  ] })
@@ -173,22 +197,33 @@ const ie = B(
173
197
  }
174
198
  ),
175
199
  j && /* @__PURE__ */ a(
176
- S,
200
+ M,
201
+ {
202
+ size: "sm",
203
+ variant: "body",
204
+ component: "p",
205
+ weight: "regular",
206
+ className: "text-comp-file-upload-text-error-def",
207
+ children: J
208
+ }
209
+ ),
210
+ B && /* @__PURE__ */ a(
211
+ M,
177
212
  {
178
213
  size: "sm",
179
214
  variant: "body",
180
215
  component: "p",
181
216
  weight: "regular",
182
217
  className: "text-comp-file-upload-text-error-def",
183
- children: T
218
+ children: R
184
219
  }
185
220
  )
186
221
  ] })
187
222
  }
188
223
  ),
189
- /* @__PURE__ */ f("ul", { className: "flex flex-col gap-md", children: [
190
- U.map((e, l) => /* @__PURE__ */ a(
191
- K,
224
+ (x.length > 0 || h.length > 0) && /* @__PURE__ */ n(W, { component: "ul", direction: "column", gap: "md", children: [
225
+ x.map((e, s) => /* @__PURE__ */ a(
226
+ Q,
192
227
  {
193
228
  source: "url",
194
229
  url: e.url,
@@ -196,36 +231,36 @@ const ie = B(
196
231
  type: e.type,
197
232
  uploaded: !0,
198
233
  disabled: p,
199
- readOnly: m,
200
- size: $,
201
- onDelete: () => M == null ? void 0 : M(e, l)
234
+ readOnly: g,
235
+ size: P,
236
+ onDelete: () => $ == null ? void 0 : $(e, s)
202
237
  },
203
238
  `url-${e.url}`
204
239
  )),
205
- I.map((e, l) => {
206
- const o = W[l], r = o == null ? void 0 : o.uploaded;
207
- return m && !r ? null : /* @__PURE__ */ a(
208
- K,
240
+ h.map((e, s) => {
241
+ const o = C[s], c = o == null ? void 0 : o.uploaded;
242
+ return g && !c ? null : /* @__PURE__ */ a(
243
+ Q,
209
244
  {
210
245
  source: "file",
211
246
  file: e,
212
- uploaded: r,
247
+ uploaded: c,
213
248
  progress: o == null ? void 0 : o.progress,
214
249
  disabled: p,
215
- readOnly: m,
216
- error: b == null ? void 0 : b.get(e),
217
- note: h == null ? void 0 : h.get(e),
250
+ readOnly: g,
251
+ error: S == null ? void 0 : S.get(e),
252
+ note: F == null ? void 0 : F.get(e),
218
253
  onError: t,
219
- size: $,
254
+ size: P,
220
255
  onDelete: () => {
221
256
  try {
222
- R((s) => {
223
- const d = s.filter((i, C) => C !== l);
224
- return c == null || c(d), d;
225
- }), z == null || z(e, l);
226
- } catch (s) {
227
- const d = s instanceof Error ? s.message : n.fileUpload.deleteError;
228
- t == null || t(d, e);
257
+ b(!1), N(!1), _((l) => {
258
+ const r = l.filter((d, ce) => ce !== s);
259
+ return u == null || u(r), r;
260
+ }), w == null || w(e, s);
261
+ } catch (l) {
262
+ const r = l instanceof Error ? l.message : f.fileUpload.deleteError;
263
+ t == null || t(r, e);
229
264
  }
230
265
  }
231
266
  },
@@ -236,7 +271,7 @@ const ie = B(
236
271
  ] });
237
272
  }
238
273
  );
239
- de.displayName = "FileUpload";
274
+ he.displayName = "FileUpload";
240
275
  export {
241
- de as FileUpload
276
+ he as FileUpload
242
277
  };
@@ -17,6 +17,8 @@ export declare const Disabled: Story;
17
17
  export declare const WithErrorsAndHints: Story;
18
18
  export declare const ReadOnly: Story;
19
19
  export declare const UploadSimulation: Story;
20
+ export declare const WithMaxFiles: Story;
21
+ export declare const WithMaxFilesAndPreselected: Story;
20
22
  export declare const PreselectedUrls: Story;
21
23
  export declare const MixedFilesAndUrls: Story;
22
24
  export declare const SingleFileWithUrl: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"FileUpload.stories.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAuB,MAAM,cAAc,CAAA;AAE9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CA8KjC,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAElC,eAAO,MAAM,OAAO,EAAE,KAerB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAgBtB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAmBnB,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,KAoBpC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAsB9B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAkB3B,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAiBxB,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,KAqBjC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAexB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAiB3B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAmBtB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KA0ChC,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAoBtB,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KA0F9B,CAAA;AAmBD,eAAO,MAAM,eAAe,EAAE,KA0B7B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAoC/B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAsB/B,CAAA"}
1
+ {"version":3,"file":"FileUpload.stories.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAuB,MAAM,cAAc,CAAA;AAE9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAgMjC,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAElC,eAAO,MAAM,OAAO,EAAE,KAiBrB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAgBtB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAmBnB,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,KAoBpC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAsB9B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAkB3B,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAiBxB,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,KAqBjC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAexB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAiB3B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAmBtB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KA0ChC,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAoBtB,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KA0F9B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAiB1B,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,KAuBxC,CAAA;AAmBD,eAAO,MAAM,eAAe,EAAE,KA0B7B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAoC/B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAsB/B,CAAA"}
@@ -23,6 +23,10 @@ export interface FormFieldProps {
23
23
  hintId?: string;
24
24
  /** Extra content rendered inline next to the label (e.g. a tooltip icon). */
25
25
  labelExtra?: ReactNode;
26
+ /** Tooltip content shown in an info icon next to the label. Overridden by `labelExtra` if both are provided. */
27
+ infoTooltip?: string;
28
+ /** Content rendered on the right side of the label row (e.g. a character counter). */
29
+ labelRight?: ReactNode;
26
30
  /** Additional CSS classes for the outer wrapper. */
27
31
  className?: string;
28
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../src/components/FormField/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAKlD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,SAAS,CAAA;IACnB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,SAAS,2GAoDrB,CAAA"}
1
+ {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../src/components/FormField/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAOlD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,SAAS,CAAA;IACnB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,gHAAgH;IAChH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sFAAsF;IACtF,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,SAAS,2GAwErB,CAAA"}
@@ -1,56 +1,69 @@
1
- import { jsxs as f, jsx as m } from "react/jsx-runtime";
2
- import { forwardRef as g } from "react";
3
- import { InputHint as h } from "./InputHint.js";
4
- import { InputLabel as e } from "./InputLabel.js";
5
- import { cn as F } from "../../utils/cn.js";
6
- const N = g(
1
+ import { jsxs as e, jsx as o } from "react/jsx-runtime";
2
+ import { forwardRef as N } from "react";
3
+ import { InputHint as g } from "./InputHint.js";
4
+ import { InputLabel as s } from "./InputLabel.js";
5
+ import { Tooltip as j, TooltipTrigger as C, TooltipContent as F } from "../Tooltip/Tooltip.js";
6
+ import { cn as T } from "../../utils/cn.js";
7
+ import { InfoCircleBold as w } from "@solar-icons/react-perf";
8
+ const y = N(
7
9
  ({
8
- children: t,
9
- label: i,
10
- hint: o,
11
- error: s,
12
- required: r,
13
- disableRequiredAsterisk: p,
14
- htmlFor: c,
15
- labelId: n,
10
+ children: l,
11
+ label: r,
12
+ hint: c,
13
+ error: a,
14
+ required: t,
15
+ disableRequiredAsterisk: m,
16
+ htmlFor: n,
17
+ labelId: p,
16
18
  hintId: x,
17
- labelExtra: d,
18
- className: a
19
- }, l) => /* @__PURE__ */ f(
20
- "div",
21
- {
22
- ref: l,
23
- className: F("flex flex-col gap-comp-input-gap", a),
24
- children: [
25
- i && (d ? /* @__PURE__ */ f("div", { className: "flex items-center gap-2xs", children: [
26
- /* @__PURE__ */ m(
27
- e,
19
+ labelExtra: h,
20
+ infoTooltip: d,
21
+ labelRight: i,
22
+ className: v
23
+ }, u) => {
24
+ const f = h ?? (d ? /* @__PURE__ */ e(j, { children: [
25
+ /* @__PURE__ */ o(C, { asChild: !0, children: /* @__PURE__ */ o(w, { className: "cursor-help text-comp-info-ico-def hover:text-comp-info-ico-hover" }) }),
26
+ /* @__PURE__ */ o(F, { children: d })
27
+ ] }) : void 0);
28
+ return /* @__PURE__ */ e(
29
+ "div",
30
+ {
31
+ ref: u,
32
+ className: T("flex flex-col gap-comp-input-gap", v),
33
+ children: [
34
+ (r || i) && (f || i ? /* @__PURE__ */ e("div", { className: "flex items-center justify-between", children: [
35
+ /* @__PURE__ */ e("div", { className: "flex items-center gap-2xs", children: [
36
+ r && /* @__PURE__ */ o(
37
+ s,
38
+ {
39
+ htmlFor: n,
40
+ id: p,
41
+ required: t,
42
+ disableRequiredAsterisk: m,
43
+ children: r
44
+ }
45
+ ),
46
+ f
47
+ ] }),
48
+ i
49
+ ] }) : /* @__PURE__ */ o(
50
+ s,
28
51
  {
29
- htmlFor: c,
30
- id: n,
31
- required: r,
32
- disableRequiredAsterisk: p,
33
- children: i
52
+ htmlFor: n,
53
+ id: p,
54
+ required: t,
55
+ disableRequiredAsterisk: m,
56
+ children: r
34
57
  }
35
- ),
36
- d
37
- ] }) : /* @__PURE__ */ m(
38
- e,
39
- {
40
- htmlFor: c,
41
- id: n,
42
- required: r,
43
- disableRequiredAsterisk: p,
44
- children: i
45
- }
46
- )),
47
- t,
48
- o && /* @__PURE__ */ m(h, { error: s, id: x, children: o })
49
- ]
50
- }
51
- )
58
+ )),
59
+ l,
60
+ c && /* @__PURE__ */ o(g, { error: a, id: x, children: c })
61
+ ]
62
+ }
63
+ );
64
+ }
52
65
  );
53
- N.displayName = "FormField";
66
+ y.displayName = "FormField";
54
67
  export {
55
- N as FormField
68
+ y as FormField
56
69
  };
@@ -39,6 +39,10 @@ export interface InputProps extends Omit<ComponentProps<'input'>, 'size' | 'pref
39
39
  disableRequiredAsterisk?: boolean;
40
40
  /** Displays helper or error text below the input. */
41
41
  hint?: string;
42
+ /** Extra content rendered inline next to the label (e.g. a tooltip icon). */
43
+ labelExtra?: ReactNode;
44
+ /** Tooltip content shown in an info icon next to the label. Overridden by `labelExtra` if both are provided. */
45
+ infoTooltip?: string;
42
46
  /**
43
47
  * Input mask pattern using react-imask syntax. All alphabetic input is automatically converted to uppercase.
44
48
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAMjE,QAAA,MAAM,oBAAoB;;;8EAyBzB,CAAA;AAgBD;;;;;GAKG;AACH,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,EAC1E,YAAY,CAAC,OAAO,oBAAoB,CAAC;IAC3C,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;IACxD;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,KAAK,sHA0IjB,CAAA"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAMjE,QAAA,MAAM,oBAAoB;;;8EAyBzB,CAAA;AAgBD;;;;;GAKG;AACH,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,EAC1E,YAAY,CAAC,OAAO,oBAAoB,CAAC;IAC3C,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;IACxD;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,gHAAgH;IAChH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,KAAK,sHA8IjB,CAAA"}