@emporix/component-library 2.2.0 → 2.4.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.
package/README.md CHANGED
@@ -385,13 +385,13 @@ import { BackButton } from '@emporix/component-library'
385
385
 
386
386
  #### Props
387
387
 
388
- | Prop | Type | Default | Description |
389
- | ----------- | ---------- | --------------- | --------------------------------------- |
390
- | onClick | () => void | - | Click handler |
391
- | className | string | - | Additional CSS class |
392
- | disabled | boolean | `false` | Whether the button is disabled |
393
- | ariaLabel | string | `'Back'` | Accessible label for screen readers |
394
- | data-testid | string | `'back-button'` | Test ID for testing |
388
+ | Prop | Type | Default | Description |
389
+ | ----------- | ---------- | --------------- | ----------------------------------- |
390
+ | onClick | () => void | - | Click handler |
391
+ | className | string | - | Additional CSS class |
392
+ | disabled | boolean | `false` | Whether the button is disabled |
393
+ | ariaLabel | string | `'Back'` | Accessible label for screen readers |
394
+ | data-testid | string | `'back-button'` | Test ID for testing |
395
395
 
396
396
  ### ConfirmBox
397
397
 
@@ -399,8 +399,7 @@ Reusable confirmation dialog shell built on top of CL `Dialog`, `PrimaryButton`,
399
399
 
400
400
  ```tsx
401
401
  import { ConfirmBox } from '@emporix/component-library'
402
-
403
- <ConfirmBox
402
+ ;<ConfirmBox
404
403
  visible={visible}
405
404
  onAccept={handleDelete}
406
405
  onReject={() => setVisible(false)}
@@ -413,20 +412,20 @@ import { ConfirmBox } from '@emporix/component-library'
413
412
 
414
413
  #### Props
415
414
 
416
- | Prop | Type | Default | Description |
417
- | ----------- | ------------- | -------- | --------------------------------------------------- |
418
- | visible | boolean | - | Whether the confirm dialog is visible |
419
- | onAccept | () => void | - | Called when the primary action is triggered |
420
- | onReject | () => void | - | Called when the dialog is dismissed |
421
- | loading | boolean | `false` | Disables actions and shows loading on accept |
422
- | title | ReactNode | - | Dialog title area |
423
- | message | ReactNode | - | Main dialog message |
424
- | acceptLabel | ReactNode | `Yes` | Accept button label |
425
- | rejectLabel | ReactNode | `Cancel` | Reject button label |
426
- | children | ReactNode | - | Optional extra body content below the message |
427
- | className | string | - | Additional CSS class on the dialog root |
428
- | style | CSSProperties | - | Inline styles on the dialog root |
429
- | data-testid | string | - | Test ID on the dialog root |
415
+ | Prop | Type | Default | Description |
416
+ | ----------- | ------------- | -------- | --------------------------------------------- |
417
+ | visible | boolean | - | Whether the confirm dialog is visible |
418
+ | onAccept | () => void | - | Called when the primary action is triggered |
419
+ | onReject | () => void | - | Called when the dialog is dismissed |
420
+ | loading | boolean | `false` | Disables actions and shows loading on accept |
421
+ | title | ReactNode | - | Dialog title area |
422
+ | message | ReactNode | - | Main dialog message |
423
+ | acceptLabel | ReactNode | `Yes` | Accept button label |
424
+ | rejectLabel | ReactNode | `Cancel` | Reject button label |
425
+ | children | ReactNode | - | Optional extra body content below the message |
426
+ | className | string | - | Additional CSS class on the dialog root |
427
+ | style | CSSProperties | - | Inline styles on the dialog root |
428
+ | data-testid | string | - | Test ID on the dialog root |
430
429
 
431
430
  ### DateValue
432
431
 
@@ -447,16 +446,16 @@ import { DateValue } from '@emporix/component-library'
447
446
 
448
447
  #### Props
449
448
 
450
- | Prop | Type | Default | Description |
451
- | ----------- | ------------------------ | ------- | ---------------------------------------------- |
452
- | date | `Date \| string \| undefined` | - | Date value to format |
453
- | locale | string | `en` | Locale used for date/time formatting |
454
- | showTime | boolean | `false` | Renders a secondary time value next to the date |
455
- | nullText | string | `--` | Fallback text when the date is missing/invalid |
456
- | timeZone | string | - | Optional `Intl.DateTimeFormat` time zone |
457
- | hour12 | boolean | locale default | Controls 12-hour vs 24-hour time formatting |
458
- | className | string | - | Additional CSS class on the root |
459
- | data-testid | string | - | Test ID on the root |
449
+ | Prop | Type | Default | Description |
450
+ | ----------- | ----------------------------- | -------------- | ----------------------------------------------- |
451
+ | date | `Date \| string \| undefined` | - | Date value to format |
452
+ | locale | string | `en` | Locale used for date/time formatting |
453
+ | showTime | boolean | `false` | Renders a secondary time value next to the date |
454
+ | nullText | string | `--` | Fallback text when the date is missing/invalid |
455
+ | timeZone | string | - | Optional `Intl.DateTimeFormat` time zone |
456
+ | hour12 | boolean | locale default | Controls 12-hour vs 24-hour time formatting |
457
+ | className | string | - | Additional CSS class on the root |
458
+ | data-testid | string | - | Test ID on the root |
460
459
 
461
460
  ### DataTable
462
461
 
@@ -914,6 +913,177 @@ import { Message } from '@emporix/component-library'
914
913
  | className | string | - | Additional CSS class on the root element |
915
914
  | data-testid | string | - | Test ID for testing |
916
915
 
916
+ ### SectionBox
917
+
918
+ Bordered content section with an optional title and actions. Pattern A (no PrimeReact dependency). Common layout primitive for grouping form fields or detail content.
919
+
920
+ ```tsx
921
+ import { SectionBox } from '@emporix/component-library'
922
+ ;<SectionBox name='orderDetails' actions={<PrimaryButton>Add</PrimaryButton>}>
923
+ <p>Section content goes here.</p>
924
+ </SectionBox>
925
+ ```
926
+
927
+ `name` is rendered through a title-case transform (e.g. `orderDetails` renders as `Order Details`); pass already-formatted text if you don't want that transform applied. `SectionTitle` (the title/actions row) is also exported standalone for use outside of `SectionBox`.
928
+
929
+ #### Props
930
+
931
+ | Prop | Type | Default | Description |
932
+ | ---------------- | ------------- | ------- | ------------------------------------------------ |
933
+ | children | ReactNode | - | Content rendered inside the bordered box |
934
+ | name | string | - | Optional title, rendered via `SectionTitle` |
935
+ | actions | ReactNode | - | Optional actions rendered alongside the title |
936
+ | sectionStyles | CSSProperties | - | Inline styles applied to the inner bordered box |
937
+ | sectionClassName | string | - | Additional CSS class applied to the inner box |
938
+ | className | string | - | Additional CSS class applied to the root wrapper |
939
+ | style | CSSProperties | - | Inline styles applied to the root wrapper |
940
+ | data-testid | string | - | Test ID for testing |
941
+
942
+ `SectionTitle` accepts `name`, `actions`, `className`, and `data-testid`.
943
+
944
+ ### Editor
945
+
946
+ Rich-text editor for HTML content, built on [PrimeReact Editor](https://primereact.org/editor/) (Quill). Pattern B — both `primereact` and `quill` ship bundled, and Quill's snow-theme CSS is already inside `@emporix/component-library/styles`, so consumers add no extra dependency or stylesheet.
947
+
948
+ ```tsx
949
+ import { useState } from 'react'
950
+ import { Editor } from '@emporix/component-library'
951
+
952
+ const BrandDescription = () => {
953
+ const [description, setDescription] = useState('')
954
+
955
+ return (
956
+ <Editor
957
+ label='Description'
958
+ required
959
+ value={description}
960
+ onTextChange={event => setDescription(event.htmlValue ?? '')}
961
+ />
962
+ )
963
+ }
964
+ ```
965
+
966
+ Persist `event.htmlValue` — it is `null` when the editor has been emptied. Pass already-translated `label` / `tooltip` strings; the component does no i18n itself.
967
+
968
+ #### Props
969
+
970
+ | Prop | Type | Default | Description |
971
+ | -------------- | ---------------------------------------- | ------- | ----------------------------------------------------------------- |
972
+ | value | string | - | Editor contents as an HTML string |
973
+ | onTextChange | `(event: EditorTextChangeEvent) => void` | - | Called on every content change |
974
+ | label | ReactNode | - | Label rendered above the editor (via `FieldLabel`) |
975
+ | tooltip | string | - | Info icon tooltip next to the label |
976
+ | required | boolean | `false` | Shows a required asterisk on the label |
977
+ | error | ReactNode | - | Error text rendered below the editor |
978
+ | readOnly | boolean | `false` | Disables editing and hides the toolbar |
979
+ | placeholder | string | - | Placeholder shown while empty |
980
+ | showHeader | boolean | `true` | Whether the formatting toolbar renders (forced off when readOnly) |
981
+ | headerTemplate | ReactNode | - | Replaces the default toolbar |
982
+ | contentStyle | CSSProperties | - | Inline styles for the editable area — use it to set `height` |
983
+ | className | string | - | Additional CSS class on the root wrapper |
984
+ | data-testid | string | - | Test ID for testing |
985
+
986
+ `EditorTextChangeEvent` exposes `htmlValue`, `textValue`, `delta`, and `source`.
987
+
988
+ > **Note:** PrimeReact 8's Editor targets Quill 1.x. Pairing it with Quill 2 silently breaks loading existing content (Quill 2 changed `clipboard.convert` to take an object), so the library pins `quill@^1.3.7`.
989
+
990
+ ### FileUpload
991
+
992
+ File picker with drag-and-drop, built on [PrimeReact FileUpload](https://primereact.org/fileupload/). Pattern B. For uploads needing custom transport (signed URLs, progress tracking), set `customUpload` and implement `uploadHandler`.
993
+
994
+ ```tsx
995
+ import { FileUpload } from '@emporix/component-library'
996
+
997
+ const AssetUpload = () => (
998
+ <FileUpload
999
+ accept='image/*'
1000
+ multiple
1001
+ customUpload
1002
+ chooseLabel='Choose'
1003
+ uploadLabel='Upload'
1004
+ cancelLabel='Clear'
1005
+ emptyTemplate={<span>Drag and drop images here</span>}
1006
+ uploadHandler={async event => {
1007
+ await uploadAssets(event.files)
1008
+ event.options.clear()
1009
+ }}
1010
+ />
1011
+ )
1012
+ ```
1013
+
1014
+ Pass already-translated button labels. A `ref` exposes `upload()`, `clear()`, `formatSize(bytes)`, and `getFiles()` via the `FileUploadRef` type.
1015
+
1016
+ #### Props
1017
+
1018
+ | Prop | Type | Default | Description |
1019
+ | ---------------- | ------------------------------------------ | ------------ | ------------------------------------------------- |
1020
+ | mode | `'advanced'` \| `'basic'` | `'advanced'` | Drop area with buttons, or a single button |
1021
+ | multiple | boolean | `false` | Whether several files can be selected |
1022
+ | accept | string | - | Accepted file types, e.g. `image/*` |
1023
+ | disabled | boolean | `false` | Whether the control is disabled |
1024
+ | auto | boolean | `false` | Upload immediately on selection |
1025
+ | maxFileSize | number | - | Maximum accepted size per file, in bytes |
1026
+ | url | string | - | Remote endpoint for the built-in upload |
1027
+ | name | string | - | Request parameter name holding the files |
1028
+ | customUpload | boolean | `false` | Route uploads through `uploadHandler` |
1029
+ | uploadHandler | `(event: FileUploadHandlerEvent) => void` | - | Performs the upload when `customUpload` is set |
1030
+ | onSelect | `(event: FileUploadSelectEvent) => void` | - | Called when files are selected |
1031
+ | onUpload | `(event: FileUploadUploadEvent) => void` | - | Called after a successful built-in upload |
1032
+ | onError | `(event: FileUploadUploadEvent) => void` | - | Called when a built-in upload fails |
1033
+ | onProgress | `(event: FileUploadProgressEvent) => void` | - | Called as a built-in upload progresses |
1034
+ | onRemove | `(event: FileUploadRemoveEvent) => void` | - | Called when a pending file is removed |
1035
+ | onClear | `() => void` | - | Called when the file list is cleared |
1036
+ | onValidationFail | `(file: File) => void` | - | Called when a file fails `accept` / `maxFileSize` |
1037
+ | headerTemplate | ReactNode \| function | - | Replaces the button row |
1038
+ | itemTemplate | ReactNode \| function | - | Renders one pending file row |
1039
+ | emptyTemplate | ReactNode \| function | - | Rendered while no file is pending |
1040
+ | chooseLabel | string | - | Choose button label |
1041
+ | uploadLabel | string | - | Upload button label |
1042
+ | cancelLabel | string | - | Cancel button label |
1043
+ | chooseOptions | FileUploadButtonOptions | - | Choose button appearance |
1044
+ | uploadOptions | FileUploadButtonOptions | - | Upload button appearance |
1045
+ | cancelOptions | FileUploadButtonOptions | - | Cancel button appearance |
1046
+ | className | string | - | Additional CSS class on the root |
1047
+ | style | CSSProperties | - | Inline styles on the root |
1048
+ | data-testid | string | - | Test ID for testing |
1049
+
1050
+ ### ProgressBar
1051
+
1052
+ Horizontal progress indicator for determinate work (uploads, imports) and indeterminate waits. Pattern B, built on [PrimeReact ProgressBar](https://primereact.org/progressbar/). For a blocking spinner use [`ProgressSpinner`](#progressspinner) instead.
1053
+
1054
+ ```tsx
1055
+ import { ProgressBar } from '@emporix/component-library'
1056
+
1057
+ const UploadProgress = () => (
1058
+ <>
1059
+ <ProgressBar value={uploadedPercentage} />
1060
+
1061
+ {/* Absolute progress instead of a percentage */}
1062
+ <ProgressBar
1063
+ value={uploadedPercentage}
1064
+ displayValueTemplate={() => `${uploadedSize} / ${totalSize}`}
1065
+ />
1066
+
1067
+ {/* Unknown duration */}
1068
+ <ProgressBar mode='indeterminate' />
1069
+ </>
1070
+ )
1071
+ ```
1072
+
1073
+ #### Props
1074
+
1075
+ | Prop | Type | Default | Description |
1076
+ | -------------------- | ---------------------------------------- | --------------- | ---------------------------------------------- |
1077
+ | value | number \| string | - | Completion value, normally 0-100 |
1078
+ | mode | `'determinate'` \| `'indeterminate'` | `'determinate'` | Fills to `value`, or loops indefinitely |
1079
+ | showValue | boolean | `true` | Whether the value label renders inside the bar |
1080
+ | unit | string | `'%'` | Suffix appended to the default value label |
1081
+ | color | string | - | Custom bar color |
1082
+ | displayValueTemplate | `(value: ProgressBarValue) => ReactNode` | - | Renders a custom value label |
1083
+ | className | string | - | Additional CSS class on the bar root |
1084
+ | style | CSSProperties | - | Inline styles on the bar root (e.g. `height`) |
1085
+ | data-testid | string | - | Test ID for testing |
1086
+
917
1087
  ### ProgressSpinner
918
1088
 
919
1089
  Indeterminate loading spinner for overlays and blocking states. Pattern A (no PrimeReact dependency). API inspired by [PrimeReact ProgressSpinner](https://primereact.org/progressspinner/).
@@ -0,0 +1,85 @@
1
+ import { CSSProperties, ReactNode } from 'react';
2
+ /**
3
+ * Emitted whenever the document changes. `htmlValue` is what you normally
4
+ * persist; it is `null` when the editor has been emptied.
5
+ */
6
+ export interface EditorTextChangeEvent {
7
+ /** Editor contents as an HTML string, or `null` when empty. */
8
+ htmlValue: string | null;
9
+ /** Editor contents as plain text. */
10
+ textValue: string;
11
+ /** Quill delta describing the change. */
12
+ delta: unknown;
13
+ /** Origin of the change, e.g. `user` or `api`. */
14
+ source: string;
15
+ }
16
+ export interface EditorProps {
17
+ /**
18
+ * Editor contents as an HTML string.
19
+ */
20
+ value?: string;
21
+ /**
22
+ * Called on every content change. Persist `event.htmlValue`.
23
+ */
24
+ onTextChange?: (event: EditorTextChangeEvent) => void;
25
+ /**
26
+ * Label rendered above the editor.
27
+ */
28
+ label?: ReactNode;
29
+ /**
30
+ * When set, an info icon with this tooltip is shown next to the label.
31
+ */
32
+ tooltip?: string;
33
+ /**
34
+ * Whether the field is required (shows an asterisk on the label).
35
+ * @default false
36
+ */
37
+ required?: boolean;
38
+ /**
39
+ * Error text rendered below the editor.
40
+ */
41
+ error?: ReactNode;
42
+ /**
43
+ * When true, content cannot be edited and the toolbar is hidden.
44
+ * @default false
45
+ */
46
+ readOnly?: boolean;
47
+ /**
48
+ * Placeholder shown while the editor is empty.
49
+ */
50
+ placeholder?: string;
51
+ /**
52
+ * Whether the formatting toolbar is rendered. Forced off when `readOnly`.
53
+ * @default true
54
+ */
55
+ showHeader?: boolean;
56
+ /**
57
+ * Replaces the default formatting toolbar.
58
+ */
59
+ headerTemplate?: ReactNode;
60
+ /**
61
+ * Inline styles for the editable content area — use it to set `height`.
62
+ * (PrimeReact applies its `style` prop to the content area, not the root.)
63
+ */
64
+ contentStyle?: CSSProperties;
65
+ /**
66
+ * Additional CSS class name on the root wrapper.
67
+ */
68
+ className?: string;
69
+ /**
70
+ * Test ID for testing.
71
+ */
72
+ 'data-testid'?: string;
73
+ }
74
+ /**
75
+ * Rich-text editor for HTML content, built on
76
+ * [PrimeReact Editor](https://primereact.org/editor/) (Quill).
77
+ *
78
+ * Pass already-translated `label` / `tooltip` strings — the component is
79
+ * context-free and does no i18n itself.
80
+ */
81
+ export declare const Editor: {
82
+ ({ value, onTextChange, label, tooltip, required, error, readOnly, placeholder, showHeader, headerTemplate, contentStyle, className, "data-testid": testId, }: EditorProps): import("react/jsx-runtime").JSX.Element;
83
+ displayName: string;
84
+ };
85
+ //# sourceMappingURL=Editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../../src/components/editor/Editor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMrD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAA;IACd,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAA;IACrD;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;mKAchB,WAAW;;CA2Bb,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { Editor } from './Editor';
2
+ export type { EditorProps, EditorTextChangeEvent } from './Editor';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,188 @@
1
+ import { CSSProperties, ReactNode, SyntheticEvent } from 'react';
2
+ /** `advanced` shows the drop area with choose/upload/cancel buttons; `basic` is a single button. */
3
+ export type FileUploadMode = 'basic' | 'advanced';
4
+ /** Styling and labelling for one of the built-in buttons. */
5
+ export interface FileUploadButtonOptions {
6
+ label?: string;
7
+ icon?: ReactNode;
8
+ iconOnly?: boolean;
9
+ className?: string;
10
+ style?: CSSProperties;
11
+ }
12
+ export interface FileUploadSelectEvent {
13
+ /** Files chosen by the user. */
14
+ files: File[];
15
+ originalEvent: React.ChangeEvent<HTMLInputElement> | DragEvent;
16
+ }
17
+ export interface FileUploadUploadEvent {
18
+ files: File[];
19
+ xhr: XMLHttpRequest;
20
+ }
21
+ export interface FileUploadProgressEvent {
22
+ originalEvent: SyntheticEvent;
23
+ /** Completion percentage, 0-100. */
24
+ progress: number;
25
+ }
26
+ export interface FileUploadRemoveEvent {
27
+ originalEvent: SyntheticEvent;
28
+ file: File;
29
+ }
30
+ /** Passed to `uploadHandler` when `customUpload` is set. */
31
+ export interface FileUploadHandlerEvent {
32
+ files: File[];
33
+ options: {
34
+ /** Clears the pending file list. */
35
+ clear: () => void;
36
+ };
37
+ }
38
+ /** Options object handed to `itemTemplate`. */
39
+ export interface FileUploadItemTemplateOptions {
40
+ onRemove: (event: SyntheticEvent) => void;
41
+ formatSize: string;
42
+ files: File[];
43
+ index: number;
44
+ }
45
+ /** Imperative handle exposed via `ref`. */
46
+ export interface FileUploadRef {
47
+ /** Starts the upload of the pending files. */
48
+ upload: () => void;
49
+ /** Clears the pending file list. */
50
+ clear: () => void;
51
+ /** Formats a byte count as a human-readable string. */
52
+ formatSize: (bytes: number) => string;
53
+ /** Currently pending files. */
54
+ getFiles: () => File[];
55
+ }
56
+ export interface FileUploadProps {
57
+ /**
58
+ * Name of the request parameter holding the files.
59
+ */
60
+ name?: string;
61
+ /**
62
+ * Remote endpoint. Omit it when using `customUpload` + `uploadHandler`.
63
+ */
64
+ url?: string;
65
+ /**
66
+ * Whether the drop area with buttons or a single button is rendered.
67
+ * @default 'advanced'
68
+ */
69
+ mode?: FileUploadMode;
70
+ /**
71
+ * Whether more than one file can be selected.
72
+ * @default false
73
+ */
74
+ multiple?: boolean;
75
+ /**
76
+ * Accepted file types, e.g. `image/*`.
77
+ */
78
+ accept?: string;
79
+ /**
80
+ * Whether the control is disabled.
81
+ * @default false
82
+ */
83
+ disabled?: boolean;
84
+ /**
85
+ * Whether selected files upload immediately, without pressing Upload.
86
+ * @default false
87
+ */
88
+ auto?: boolean;
89
+ /**
90
+ * Maximum accepted size per file, in bytes.
91
+ */
92
+ maxFileSize?: number;
93
+ /**
94
+ * When true, `uploadHandler` performs the upload instead of the built-in XHR.
95
+ * @default false
96
+ */
97
+ customUpload?: boolean;
98
+ /**
99
+ * Performs the upload when `customUpload` is set.
100
+ */
101
+ uploadHandler?: (event: FileUploadHandlerEvent) => void;
102
+ /**
103
+ * Called after a successful built-in upload.
104
+ */
105
+ onUpload?: (event: FileUploadUploadEvent) => void;
106
+ /**
107
+ * Called when the user selects files.
108
+ */
109
+ onSelect?: (event: FileUploadSelectEvent) => void;
110
+ /**
111
+ * Called when a built-in upload fails.
112
+ */
113
+ onError?: (event: FileUploadUploadEvent) => void;
114
+ /**
115
+ * Called when the file list is cleared.
116
+ */
117
+ onClear?: () => void;
118
+ /**
119
+ * Called as a built-in upload progresses.
120
+ */
121
+ onProgress?: (event: FileUploadProgressEvent) => void;
122
+ /**
123
+ * Called when a single pending file is removed.
124
+ */
125
+ onRemove?: (event: FileUploadRemoveEvent) => void;
126
+ /**
127
+ * Called when a file fails `accept` / `maxFileSize` validation.
128
+ */
129
+ onValidationFail?: (file: File) => void;
130
+ /**
131
+ * Replaces the header (button row) content.
132
+ */
133
+ headerTemplate?: ReactNode | ((options: unknown) => ReactNode);
134
+ /**
135
+ * Renders one pending file row.
136
+ */
137
+ itemTemplate?: ReactNode | ((file: object, options: FileUploadItemTemplateOptions) => ReactNode);
138
+ /**
139
+ * Rendered in the drop area while no file is pending.
140
+ */
141
+ emptyTemplate?: ReactNode | (() => ReactNode);
142
+ /**
143
+ * Label for the choose button.
144
+ */
145
+ chooseLabel?: string;
146
+ /**
147
+ * Label for the upload button.
148
+ */
149
+ uploadLabel?: string;
150
+ /**
151
+ * Label for the cancel button.
152
+ */
153
+ cancelLabel?: string;
154
+ /**
155
+ * Appearance of the choose button.
156
+ */
157
+ chooseOptions?: FileUploadButtonOptions;
158
+ /**
159
+ * Appearance of the upload button.
160
+ */
161
+ uploadOptions?: FileUploadButtonOptions;
162
+ /**
163
+ * Appearance of the cancel button.
164
+ */
165
+ cancelOptions?: FileUploadButtonOptions;
166
+ /**
167
+ * Additional CSS class name on the root.
168
+ */
169
+ className?: string;
170
+ /**
171
+ * Inline styles on the root.
172
+ */
173
+ style?: CSSProperties;
174
+ /**
175
+ * Test ID for testing.
176
+ */
177
+ 'data-testid'?: string;
178
+ }
179
+ /**
180
+ * File picker with drag-and-drop, built on
181
+ * [PrimeReact FileUpload](https://primereact.org/fileupload/).
182
+ *
183
+ * Pass already-translated button labels — the component is context-free and
184
+ * does no i18n itself. For uploads that need custom transport (signed URLs,
185
+ * progress tracking), set `customUpload` and implement `uploadHandler`.
186
+ */
187
+ export declare const FileUpload: import('react').ForwardRefExoticComponent<FileUploadProps & import('react').RefAttributes<FileUploadRef>>;
188
+ //# sourceMappingURL=FileUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/components/fileupload/FileUpload.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { FileUpload } from './FileUpload';
2
+ export type { FileUploadProps, FileUploadRef, FileUploadMode, FileUploadButtonOptions, FileUploadSelectEvent, FileUploadUploadEvent, FileUploadProgressEvent, FileUploadRemoveEvent, FileUploadHandlerEvent, FileUploadItemTemplateOptions, } from './FileUpload';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/fileupload/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,cAAc,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { CSSProperties, ReactNode } from 'react';
2
+ /** Value rendered by the bar. `undefined`/`null` renders an empty bar. */
3
+ export type ProgressBarValue = number | string | undefined | null;
4
+ /**
5
+ * `determinate` fills the bar to `value`; `indeterminate` shows a looping
6
+ * animation for work of unknown length.
7
+ */
8
+ export type ProgressBarMode = 'determinate' | 'indeterminate';
9
+ export interface ProgressBarProps {
10
+ /**
11
+ * Completion value, normally 0-100. Ignored in `indeterminate` mode.
12
+ */
13
+ value?: ProgressBarValue;
14
+ /**
15
+ * Whether the bar fills to `value` or loops indefinitely.
16
+ * @default 'determinate'
17
+ */
18
+ mode?: ProgressBarMode;
19
+ /**
20
+ * Whether the value label is rendered inside the bar.
21
+ * @default true
22
+ */
23
+ showValue?: boolean;
24
+ /**
25
+ * Suffix appended to the default value label.
26
+ * @default '%'
27
+ */
28
+ unit?: string;
29
+ /**
30
+ * Custom bar color. Defaults to the primary theme color.
31
+ */
32
+ color?: string;
33
+ /**
34
+ * Renders the value label. Use it to show absolute progress (e.g.
35
+ * `120 kB / 2 MB`) instead of a percentage.
36
+ */
37
+ displayValueTemplate?: (value: ProgressBarValue) => ReactNode;
38
+ /**
39
+ * Additional CSS class name on the bar root.
40
+ */
41
+ className?: string;
42
+ /**
43
+ * Inline styles on the bar root (e.g. `height`, `width`).
44
+ */
45
+ style?: CSSProperties;
46
+ /**
47
+ * Test ID for testing.
48
+ */
49
+ 'data-testid'?: string;
50
+ }
51
+ /**
52
+ * Horizontal progress indicator for determinate work (uploads, imports) and
53
+ * indeterminate waits. For a blocking spinner use `ProgressSpinner` instead.
54
+ */
55
+ export declare const ProgressBar: {
56
+ ({ value, mode, showValue, unit, color, displayValueTemplate, className, style, "data-testid": testId, }: ProgressBarProps): import("react/jsx-runtime").JSX.Element;
57
+ displayName: string;
58
+ };
59
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/progressbar/ProgressBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAIrD,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;AAEjE;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,eAAe,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAA;IAC7D;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW;8GAUrB,gBAAgB;;CAkBlB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { ProgressBar } from './ProgressBar';
2
+ export type { ProgressBarProps, ProgressBarMode, ProgressBarValue, } from './ProgressBar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/progressbar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAA"}