@infineon/infineon-design-system-stencil 33.3.1--canary.1824.9e747abc2c6c3dcc35abd2895ce37d503bd1f141.0 → 33.3.1--canary.1824.e1559ee81653274f5bb99ff7cef4239151a38f75.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,4 +1,38 @@
1
1
  import { action } from "@storybook/addon-actions";
2
+ const hideAllControlsExcept = (allowedKeys) => {
3
+ const allProps = [
4
+ 'dragAndDrop', 'label', 'required', 'labelRequiredError', 'disabled', 'maxFiles', 'maxFileSizeMB',
5
+ 'allowedFileTypes', 'additionalAllowedFileTypes', 'labelBrowseFiles', 'labelDragAndDrop',
6
+ 'labelUploadedFilesHeading', 'labelFileTooLarge', 'labelUnsupportedFileType', 'labelUploaded',
7
+ 'labelSupportedFormatsTemplate', 'labelFileSingular', 'labelFilePlural', 'labelMaxFilesInfo',
8
+ 'labelMaxFilesExceeded', 'labelUploadFailed', 'ariaLabelBrowseFiles', 'ariaLabelDropzone',
9
+ 'ariaLabelFileInput', 'ariaLabelRemoveFile', 'ariaLabelCancelUpload', 'ariaLabelRetryUpload',
10
+ 'ariaLabelUploadingStatus', 'ariaLabelUploadedStatus', 'ariaLabelUploadFailedStatus'
11
+ ];
12
+ const argTypes = {};
13
+ for (const prop of allProps) {
14
+ if (!allowedKeys.includes(prop)) {
15
+ argTypes[prop] = { table: { disable: true } };
16
+ }
17
+ }
18
+ return argTypes;
19
+ };
20
+ const disableCustomEventControls = {
21
+ ifxFileUploadAdd: { table: { disable: true } },
22
+ ifxFileUploadRemove: { table: { disable: true } },
23
+ ifxFileUploadChange: { table: { disable: true } },
24
+ ifxFileUploadError: { table: { disable: true } },
25
+ ifxFileUploadInvalid: { table: { disable: true } },
26
+ ifxFileUploadStart: { table: { disable: true } },
27
+ ifxFileUploadComplete: { table: { disable: true } },
28
+ ifxFileUploadAllComplete: { table: { disable: true } },
29
+ ifxFileUploadAbort: { table: { disable: true } },
30
+ ifxFileUploadDrop: { table: { disable: true } },
31
+ ifxFileUploadClick: { table: { disable: true } },
32
+ ifxFileUploadMaxFilesExceeded: { table: { disable: true } },
33
+ ifxFileUploadValidation: { table: { disable: true } },
34
+ ifxFileUploadRetry: { table: { disable: true } }
35
+ };
2
36
  const meta = {
3
37
  title: 'Components/File Upload',
4
38
  tags: ['autodocs'],
@@ -6,232 +40,230 @@ const meta = {
6
40
  controls: { expanded: true },
7
41
  docs: {
8
42
  description: {
9
- component: 'Upload component with different interaction styles: button or drag-and-drop area.'
10
- }
11
- }
43
+ component: 'Upload component with different interaction styles: button or drag-and-drop area.',
44
+ },
45
+ },
12
46
  },
13
47
  argTypes: {
14
- // GENERAL
48
+ // --- FUNCTION ---
15
49
  dragAndDrop: {
50
+ description: 'Enables drag-and-drop upload area.',
16
51
  control: 'boolean',
17
- description: 'Enables drag-and-drop area. If false, a button-based upload is shown instead.'
52
+ table: { category: 'Function', defaultValue: { summary: 'false' } },
18
53
  },
19
54
  required: {
55
+ description: 'Marks the upload as required.',
20
56
  control: 'boolean',
21
- description: 'If set to true, at least one file must be uploaded. Validation fails if empty.'
57
+ table: { category: 'Function', defaultValue: { summary: 'false' } },
22
58
  },
23
59
  disabled: {
60
+ description: 'Disables the upload input.',
24
61
  control: 'boolean',
25
- description: 'Disables the component and prevents all interaction (upload, drag-and-drop, removal, etc.).',
62
+ table: { category: 'Function', defaultValue: { summary: 'false' } },
26
63
  },
27
64
  maxFileSizeMB: {
65
+ description: 'Maximum file size in MB.',
28
66
  control: 'number',
29
- description: 'Maximum file size allowed per file (in MB). Files larger than this will be rejected.'
67
+ table: { category: 'Function', defaultValue: { summary: '7' } },
30
68
  },
31
69
  allowedFileTypes: {
32
70
  control: { type: 'check' },
33
71
  options: ['jpg', 'png', 'pdf', 'mov', 'mp3', 'mp4'],
34
- description: 'Select one or more allowed file extensions. Internally mapped to MIME types.'
72
+ description: 'Select one or more allowed file extensions. Internally mapped to MIME types.',
73
+ table: { category: 'Function' },
35
74
  },
36
75
  additionalAllowedFileTypes: {
76
+ description: 'Custom MIME types (comma-separated).',
37
77
  control: 'text',
38
- description: 'Adds additional allowed file types using exact MIME types. Example: application/zip'
78
+ table: { category: 'Function' },
39
79
  },
40
80
  maxFiles: {
41
- control: { type: 'number', min: 1, step: 1 },
42
- description: 'Maximum number of files that can be uploaded in total. Must be at least 1. If unset, unlimited.'
81
+ description: 'Maximum number of allowed files.',
82
+ control: 'number',
83
+ table: { category: 'Function' },
43
84
  },
44
- // LABELS
85
+ // --- LABELS ---
45
86
  label: {
46
87
  control: 'text',
47
- description: 'Label shown above the upload area.',
48
- table: { category: 'LABELS' }
88
+ description: 'Main label shown above input.',
89
+ table: { category: 'Label' },
49
90
  },
50
91
  labelRequiredError: {
51
92
  control: 'text',
52
- description: 'Error message shown when no file is uploaded and `required` is true.',
53
- table: { category: 'LABELS' }
93
+ description: 'Shown when required and no file selected.',
94
+ table: { category: 'Label' },
54
95
  },
55
96
  labelBrowseFiles: {
56
97
  control: 'text',
57
- description: 'Text for the file selection button.',
58
- table: { category: 'LABELS' }
98
+ table: { category: 'Label' },
59
99
  },
60
100
  labelDragAndDrop: {
61
101
  control: 'text',
62
- description: 'Text shown inside the drag-and-drop area.',
63
- table: { category: 'LABELS' }
102
+ table: { category: 'Label' },
64
103
  },
65
104
  labelUploadedFilesHeading: {
66
105
  control: 'text',
67
- description: 'Heading above the uploaded files list.',
68
- table: { category: 'LABELS' }
106
+ table: { category: 'Label' },
69
107
  },
70
108
  labelFileTooLarge: {
71
109
  control: 'text',
72
- description: 'Shown when a file exceeds the allowed size. Use {{size}}.',
73
- table: { category: 'LABELS' }
110
+ table: { category: 'Label' },
74
111
  },
75
112
  labelUnsupportedFileType: {
76
113
  control: 'text',
77
- description: 'Shown when an unsupported file type is uploaded.',
78
- table: { category: 'LABELS' }
114
+ table: { category: 'Label' },
79
115
  },
80
116
  labelUploaded: {
81
117
  control: 'text',
82
- description: 'Label shown after successful upload.',
83
- table: { category: 'LABELS' }
84
- },
85
- labelUploadFailed: {
86
- control: 'text',
87
- description: 'Text shown when a file upload fails.',
88
- table: { category: 'LABELS' }
118
+ table: { category: 'Label' },
89
119
  },
90
120
  labelSupportedFormatsTemplate: {
91
121
  control: 'text',
92
- description: 'Template showing supported file formats. Use {{types}} and {{size}}.',
93
- table: { category: 'LABELS' }
122
+ table: { category: 'Label' },
94
123
  },
95
124
  labelFileSingular: {
96
125
  control: 'text',
97
- description: 'Singular word for file.',
98
- table: { category: 'LABELS' }
126
+ table: { category: 'Label' },
99
127
  },
100
128
  labelFilePlural: {
101
129
  control: 'text',
102
- description: 'Plural word for file.',
103
- table: { category: 'LABELS' }
130
+ table: { category: 'Label' },
104
131
  },
105
132
  labelMaxFilesInfo: {
106
133
  control: 'text',
107
- description: 'Message for max file info. Use {{count}}.',
108
- table: { category: 'LABELS' }
134
+ table: { category: 'Label' },
109
135
  },
110
136
  labelMaxFilesExceeded: {
111
137
  control: 'text',
112
- description: 'Error when exceeding max files. Use {{count}}.',
113
- table: { category: 'LABELS' }
138
+ table: { category: 'Label' },
139
+ },
140
+ labelUploadFailed: {
141
+ control: 'text',
142
+ table: { category: 'Label' },
114
143
  },
115
- // ARIA LABELS
144
+ // --- ARIA LABELS ---
116
145
  ariaLabelBrowseFiles: {
117
146
  control: 'text',
118
- description: 'ARIA label for the file upload button.',
119
- table: { category: 'ARIA LABELS' }
147
+ table: { category: 'Aria Labels' },
120
148
  },
121
149
  ariaLabelDropzone: {
122
150
  control: 'text',
123
- description: 'ARIA label for the dropzone.',
124
- table: { category: 'ARIA LABELS' }
151
+ table: { category: 'Aria Labels' },
125
152
  },
126
153
  ariaLabelFileInput: {
127
154
  control: 'text',
128
- description: 'ARIA label for the file input.',
129
- table: { category: 'ARIA LABELS' }
155
+ table: { category: 'Aria Labels' },
130
156
  },
131
157
  ariaLabelRemoveFile: {
132
158
  control: 'text',
133
- description: 'ARIA label for remove button.',
134
- table: { category: 'ARIA LABELS' }
159
+ table: { category: 'Aria Labels' },
135
160
  },
136
161
  ariaLabelCancelUpload: {
137
162
  control: 'text',
138
- description: 'ARIA label for cancel button.',
139
- table: { category: 'ARIA LABELS' }
163
+ table: { category: 'Aria Labels' },
140
164
  },
141
165
  ariaLabelRetryUpload: {
142
166
  control: 'text',
143
- description: 'ARIA label for retry button.',
144
- table: { category: 'ARIA LABELS' }
167
+ table: { category: 'Aria Labels' },
145
168
  },
146
169
  ariaLabelUploadingStatus: {
147
170
  control: 'text',
148
- description: 'ARIA status for uploading.',
149
- table: { category: 'ARIA LABELS' }
171
+ table: { category: 'Aria Labels' },
150
172
  },
151
173
  ariaLabelUploadedStatus: {
152
174
  control: 'text',
153
- description: 'ARIA status for success.',
154
- table: { category: 'ARIA LABELS' }
175
+ table: { category: 'Aria Labels' },
155
176
  },
156
177
  ariaLabelUploadFailedStatus: {
157
178
  control: 'text',
158
- description: 'ARIA status for failed upload.',
159
- table: { category: 'ARIA LABELS' }
179
+ table: { category: 'Aria Labels' },
160
180
  },
161
- // CUSTOM EVENTS
181
+ // --- CUSTOM EVENTS ---
162
182
  ifxFileUploadAdd: {
163
- description: 'Emitted when files are added.',
164
- table: { category: 'CUSTOM EVENTS' }
183
+ action: 'ifxFileUploadAdd',
184
+ table: { category: 'Custom Events' },
185
+ description: 'Triggered when valid files are added (via browse or drop).',
165
186
  },
166
187
  ifxFileUploadRemove: {
167
- description: 'Emitted when a file is removed.',
168
- table: { category: 'CUSTOM EVENTS' }
188
+ action: 'ifxFileUploadRemove',
189
+ table: { category: 'Custom Events' },
190
+ description: 'Fired when a user removes a file from the list.',
169
191
  },
170
192
  ifxFileUploadChange: {
171
- description: 'Emitted when file list changes.',
172
- table: { category: 'CUSTOM EVENTS' }
193
+ action: 'ifxFileUploadChange',
194
+ table: { category: 'Custom Events' },
195
+ description: 'Fired whenever the file list changes (add, remove, retry).',
173
196
  },
174
197
  ifxFileUploadError: {
175
- description: 'Emitted when an upload error occurs.',
176
- table: { category: 'CUSTOM EVENTS' }
198
+ action: 'ifxFileUploadError',
199
+ table: { category: 'Custom Events' },
200
+ description: 'Fired when a file is rejected or an upload fails.',
177
201
  },
178
202
  ifxFileUploadInvalid: {
179
- description: 'Emitted when file is invalid.',
180
- table: { category: 'CUSTOM EVENTS' }
203
+ action: 'ifxFileUploadInvalid',
204
+ table: { category: 'Custom Events' },
205
+ description: 'Fired for invalid files (e.g., wrong type or size).',
181
206
  },
182
207
  ifxFileUploadStart: {
183
- description: 'Emitted when upload starts.',
184
- table: { category: 'CUSTOM EVENTS' }
208
+ action: 'ifxFileUploadStart',
209
+ table: { category: 'Custom Events' },
210
+ description: 'Fired when an upload starts for a file.',
185
211
  },
186
212
  ifxFileUploadComplete: {
187
- description: 'Emitted when upload completes.',
188
- table: { category: 'CUSTOM EVENTS' }
213
+ action: 'ifxFileUploadComplete',
214
+ table: { category: 'Custom Events' },
215
+ description: 'Fired when a single file upload finishes successfully.',
189
216
  },
190
217
  ifxFileUploadAllComplete: {
191
- description: 'Emitted when all uploads are done.',
192
- table: { category: 'CUSTOM EVENTS' }
218
+ action: 'ifxFileUploadAllComplete',
219
+ table: { category: 'Custom Events' },
220
+ description: 'Fired when all current uploads have completed.',
193
221
  },
194
222
  ifxFileUploadAbort: {
195
- description: 'Emitted when an upload is cancelled.',
196
- table: { category: 'CUSTOM EVENTS' }
223
+ action: 'ifxFileUploadAbort',
224
+ table: { category: 'Custom Events' },
225
+ description: 'Fired when a user cancels an in-progress upload.',
197
226
  },
198
227
  ifxFileUploadDrop: {
199
- description: 'Emitted on file drop.',
200
- table: { category: 'CUSTOM EVENTS' }
228
+ action: 'ifxFileUploadDrop',
229
+ table: { category: 'Custom Events' },
230
+ description: 'Fired when files are dropped via drag-and-drop.',
201
231
  },
202
232
  ifxFileUploadClick: {
203
- description: 'Emitted on click.',
204
- table: { category: 'CUSTOM EVENTS' }
233
+ action: 'ifxFileUploadClick',
234
+ table: { category: 'Custom Events' },
235
+ description: 'Fired when the upload button or dropzone is clicked.',
205
236
  },
206
237
  ifxFileUploadMaxFilesExceeded: {
207
- description: 'Emitted when too many files added.',
208
- table: { category: 'CUSTOM EVENTS' }
238
+ action: 'ifxFileUploadMaxFilesExceeded',
239
+ table: { category: 'Custom Events' },
240
+ description: 'Fired when the selected files exceed the maxFiles limit.',
209
241
  },
210
242
  ifxFileUploadValidation: {
211
- description: 'Emitted after required validation.',
212
- table: { category: 'CUSTOM EVENTS' }
243
+ action: 'ifxFileUploadValidation',
244
+ table: { category: 'Custom Events' },
245
+ description: 'Fired after required validation is checked.',
213
246
  },
214
247
  ifxFileUploadRetry: {
215
- description: 'Emitted when retry is triggered.',
216
- table: { category: 'CUSTOM EVENTS' }
217
- }
248
+ action: 'ifxFileUploadRetry',
249
+ table: { category: 'Custom Events' },
250
+ description: 'Fired when the retry button is clicked for a failed upload.',
251
+ },
218
252
  }
219
253
  };
220
254
  export default meta;
221
- const renderFileUpload = (args) => {
255
+ const BaseTemplate = (args) => {
256
+ var _a;
222
257
  const el = document.createElement('ifx-file-upload');
223
258
  if (args.dragAndDrop)
224
259
  el.setAttribute('drag-and-drop', '');
225
260
  el.setAttribute('max-file-size-m-b', args.maxFileSizeMB);
226
261
  const rawTypes = Array.isArray(args.allowedFileTypes)
227
262
  ? args.allowedFileTypes
228
- : args.allowedFileTypes.split(',');
229
- // Map 'jpg' ['jpg', 'jpeg']
230
- const mappedTypes = rawTypes.flatMap(type => {
231
- if (type === 'jpg')
232
- return ['jpg', 'jpeg'];
233
- return [type];
234
- });
263
+ : ((_a = args.allowedFileTypes) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
264
+ const mappedTypes = rawTypes.flatMap(type => type === 'jpg' ? ['jpg', 'jpeg'] : [type]);
265
+ const uniqueTypes = Array.from(new Set(mappedTypes));
266
+ el.setAttribute('allowed-file-types', uniqueTypes.join(','));
235
267
  if (args.additionalAllowedFileTypes) {
236
268
  const value = Array.isArray(args.additionalAllowedFileTypes)
237
269
  ? args.additionalAllowedFileTypes.join(',')
@@ -241,20 +273,8 @@ const renderFileUpload = (args) => {
241
273
  if (args.maxFiles !== undefined && args.maxFiles !== null) {
242
274
  el.setAttribute('max-files', String(args.maxFiles));
243
275
  }
244
- if (args.required) {
245
- el.setAttribute('required', '');
246
- }
247
- else {
248
- el.removeAttribute('required');
249
- }
250
- if (args.disabled) {
251
- el.setAttribute('disabled', '');
252
- }
253
- else {
254
- el.removeAttribute('disabled');
255
- }
256
- const uniqueTypes = Array.from(new Set(mappedTypes));
257
- el.setAttribute('allowed-file-types', uniqueTypes.join(','));
276
+ args.required ? el.setAttribute('required', '') : el.removeAttribute('required');
277
+ args.disabled ? el.setAttribute('disabled', '') : el.removeAttribute('disabled');
258
278
  el.setAttribute('label', args.label);
259
279
  el.setAttribute('label-required-error', args.labelRequiredError);
260
280
  el.setAttribute('label-browse-files', args.labelBrowseFiles);
@@ -293,225 +313,74 @@ const renderFileUpload = (args) => {
293
313
  el.addEventListener('ifxFileUploadRetry', action('ifxFileUploadRetry'));
294
314
  return el;
295
315
  };
296
- export const UploadFileButton = {
297
- name: 'Upload File (Button)',
298
- args: {
299
- dragAndDrop: false,
300
- label: 'Label',
301
- required: false,
302
- labelRequiredError: 'You must upload at least one file.',
303
- disabled: false,
304
- maxFileSizeMB: 7,
305
- allowedFileTypes: ['jpg', 'png', 'pdf'],
306
- additionalAllowedFileTypes: 'application/zip,text/csv',
307
- labelBrowseFiles: 'Browse files',
308
- labelDragAndDrop: 'Drag & Drop or browse files to upload',
309
- labelUploadedFilesHeading: 'Uploaded files',
310
- labelFileTooLarge: 'Upload failed. Max file size: {{size}}MB.',
311
- labelUnsupportedFileType: 'Unsupported file type.',
312
- labelUploaded: 'Successfully uploaded',
313
- labelSupportedFormatsTemplate: 'Supported file formats: {{types}}. Max file size: {{size}}MB.',
314
- labelFileSingular: 'file',
315
- labelFilePlural: 'files',
316
- labelMaxFilesInfo: 'You can upload up to {{count}} {{files}}.',
317
- labelMaxFilesExceeded: 'You have exceeded the maximum of {{count}} {{files}}.',
318
- labelUploadFailed: 'Upload failed. Please try again.',
319
- ariaLabelBrowseFiles: 'Browse files',
320
- ariaLabelDropzone: 'Upload area. Click to browse or drag and drop files.',
321
- ariaLabelFileInput: 'Upload file',
322
- ariaLabelRemoveFile: 'Remove file',
323
- ariaLabelCancelUpload: 'Cancel upload',
324
- ariaLabelRetryUpload: 'Retry upload',
325
- ariaLabelUploadingStatus: 'Upload in progress',
326
- ariaLabelUploadedStatus: 'Upload completed',
327
- ariaLabelUploadFailedStatus: 'Upload failed'
328
- },
329
- render: renderFileUpload
316
+ export const Default = BaseTemplate.bind({});
317
+ Default.args = {
318
+ dragAndDrop: false,
319
+ label: 'Label',
320
+ required: false,
321
+ labelRequiredError: 'You must upload at least one file.',
322
+ disabled: false,
323
+ maxFileSizeMB: 7,
324
+ allowedFileTypes: ['jpg', 'png', 'pdf'],
325
+ additionalAllowedFileTypes: 'application/zip,text/csv',
326
+ labelBrowseFiles: 'Browse files',
327
+ labelDragAndDrop: 'Drag & Drop or browse files to upload',
328
+ labelUploadedFilesHeading: 'Uploaded files',
329
+ labelFileTooLarge: 'Upload failed. Max file size: {{size}}MB.',
330
+ labelUnsupportedFileType: 'Unsupported file type.',
331
+ labelUploaded: 'Successfully uploaded',
332
+ labelSupportedFormatsTemplate: 'Supported file formats: {{types}}. Max file size: {{size}}MB.',
333
+ labelFileSingular: 'file',
334
+ labelFilePlural: 'files',
335
+ labelMaxFilesInfo: 'You can upload up to {{count}} {{files}}.',
336
+ labelMaxFilesExceeded: 'You have exceeded the maximum of {{count}} {{files}}.',
337
+ labelUploadFailed: 'Upload failed. Please try again.',
338
+ ariaLabelBrowseFiles: 'Browse files',
339
+ ariaLabelDropzone: 'Upload area. Click to browse or drag and drop files.',
340
+ ariaLabelFileInput: 'Upload file',
341
+ ariaLabelRemoveFile: 'Remove file',
342
+ ariaLabelCancelUpload: 'Cancel upload',
343
+ ariaLabelRetryUpload: 'Retry upload',
344
+ ariaLabelUploadingStatus: 'Upload in progress',
345
+ ariaLabelUploadedStatus: 'Upload completed',
346
+ ariaLabelUploadFailedStatus: 'Upload failed'
330
347
  };
331
- export const UploadAreaDragDrop = {
332
- name: 'Upload Area (Drag&Drop)',
333
- args: {
334
- dragAndDrop: true,
335
- label: 'Label',
336
- required: false,
337
- labelRequiredError: 'You must upload at least one file.',
338
- disabled: false,
339
- maxFileSizeMB: 7,
340
- allowedFileTypes: ['jpg', 'png', 'pdf'],
341
- additionalAllowedFileTypes: 'application/zip,text/csv',
342
- labelBrowseFiles: 'Browse files',
343
- labelDragAndDrop: 'Drag & Drop or browse files to upload',
344
- labelUploadedFilesHeading: 'Uploaded files',
345
- labelFileTooLarge: 'Upload failed. Max file size: {{size}}MB.',
346
- labelUnsupportedFileType: 'Unsupported file type.',
347
- labelUploaded: 'Successfully uploaded',
348
- labelSupportedFormatsTemplate: 'Supported file formats: {{types}}. Max file size: {{size}}MB.',
349
- labelFileSingular: 'file',
350
- labelFilePlural: 'files',
351
- labelMaxFilesInfo: 'You can upload up to {{count}} {{files}}.',
352
- labelMaxFilesExceeded: 'You have exceeded the maximum of {{count}} {{files}}.',
353
- labelUploadFailed: 'Upload failed. Please try again.',
354
- ariaLabelBrowseFiles: 'Browse files',
355
- ariaLabelDropzone: 'Upload area. Click to browse or drag and drop files.',
356
- ariaLabelFileInput: 'Upload file',
357
- ariaLabelRemoveFile: 'Remove file',
358
- ariaLabelCancelUpload: 'Cancel upload',
359
- ariaLabelRetryUpload: 'Retry upload',
360
- ariaLabelUploadingStatus: 'Upload in progress',
361
- ariaLabelUploadedStatus: 'Upload completed',
362
- ariaLabelUploadFailedStatus: 'Upload failed'
363
- },
364
- render: renderFileUpload
365
- };
366
- export const UploadStatesDemo = {
367
- name: 'Upload States (Demo)',
368
- args: {
369
- dragAndDrop: false
370
- },
371
- parameters: {
372
- docs: {
373
- description: {
374
- story: 'Visual preview of all file states (success, upload in progress, rejected). Only the `dragAndDrop` control is available.'
375
- }
376
- },
377
- previewTabs: {
378
- 'canvas': { hidden: false },
379
- 'storybook/docs/panel': { hidden: false },
380
- 'storybook/actions/panel': { hidden: true },
381
- 'storybook/interactions/panel': { hidden: true }
348
+ export const UploadAreaDragDrop = BaseTemplate.bind({});
349
+ UploadAreaDragDrop.args = Object.assign(Object.assign({}, Default.args), { dragAndDrop: true });
350
+ // Demo UploadStatesDemo
351
+ export const UploadStatesDemo = BaseTemplate.bind({});
352
+ UploadStatesDemo.args = Object.assign(Object.assign({}, Default.args), { dragAndDrop: true });
353
+ UploadStatesDemo.parameters = {
354
+ docs: {
355
+ description: {
356
+ story: 'Visual preview of all file states (success, upload in progress, rejected).'
382
357
  }
383
- },
384
- argTypes: {
385
- dragAndDrop: { control: 'boolean' },
386
- // Disable all other controls
387
- disabled: { table: { disable: true } },
388
- labelUploadFailed: { table: { disable: true } },
389
- required: { table: { disable: true } },
390
- label: { table: { disable: true } },
391
- labelRequiredError: { table: { disable: true } },
392
- maxFileSizeMB: { table: { disable: true } },
393
- allowedFileTypes: { table: { disable: true } },
394
- additionalAllowedFileTypes: { table: { disable: true } },
395
- labelBrowseFiles: { table: { disable: true } },
396
- labelDragAndDrop: { table: { disable: true } },
397
- labelFileSingular: { table: { disable: true } },
398
- labelFilePlural: { table: { disable: true } },
399
- maxFiles: { table: { disable: true } },
400
- labelMaxFilesInfo: { table: { disable: true } },
401
- labelMaxFilesExceeded: { table: { disable: true } },
402
- labelUploadedFilesHeading: { table: { disable: true } },
403
- labelFileTooLarge: { table: { disable: true } },
404
- labelUnsupportedFileType: { table: { disable: true } },
405
- labelUploaded: { table: { disable: true } },
406
- labelSupportedFormatsTemplate: { table: { disable: true } },
407
- ifxFileUploadAdd: { table: { disable: true } },
408
- ifxFileUploadRemove: { table: { disable: true } },
409
- ifxFileUploadChange: { table: { disable: true } },
410
- ifxFileUploadError: { table: { disable: true } },
411
- ifxFileUploadInvalid: { table: { disable: true } },
412
- ifxFileUploadStart: { table: { disable: true } },
413
- ifxFileUploadComplete: { table: { disable: true } },
414
- ifxFileUploadAllComplete: { table: { disable: true } },
415
- ifxFileUploadAbort: { table: { disable: true } },
416
- ifxFileUploadDrop: { table: { disable: true } },
417
- ifxFileUploadClick: { table: { disable: true } },
418
- ifxFileUploadMaxFilesExceeded: { table: { disable: true } },
419
- ifxFileUploadValidation: { table: { disable: true } },
420
- ifxFileUploadRetry: { table: { disable: true } },
421
- // ARIA labels – disabled in demo
422
- ariaLabelBrowseFiles: { table: { disable: true } },
423
- ariaLabelDropzone: { table: { disable: true } },
424
- ariaLabelFileInput: { table: { disable: true } },
425
- ariaLabelRemoveFile: { table: { disable: true } },
426
- ariaLabelCancelUpload: { table: { disable: true } },
427
- ariaLabelRetryUpload: { table: { disable: true } },
428
- ariaLabelUploadingStatus: { table: { disable: true } },
429
- ariaLabelUploadedStatus: { table: { disable: true } },
430
- ariaLabelUploadFailedStatus: { table: { disable: true } },
431
- },
432
- render: (args) => {
433
- const el = document.createElement('ifx-file-upload');
434
- if (args.dragAndDrop) {
435
- el.setAttribute('drag-and-drop', '');
436
- }
437
- setTimeout(() => {
438
- var _a, _b;
439
- (_b = (_a = el).injectDemoState) === null || _b === void 0 ? void 0 : _b.call(_a);
440
- }, 0);
441
- return el;
442
358
  }
443
359
  };
444
- export const UploadRequiredError = {
445
- name: 'Upload Required Error (Demo)',
446
- args: {
447
- dragAndDrop: false
448
- },
449
- parameters: {
450
- docs: {
451
- description: {
452
- story: 'Demonstrates the error state when the upload is required but no files have been added. Only `dragAndDrop` is controllable in this demo.'
453
- }
454
- }
455
- },
456
- argTypes: {
457
- dragAndDrop: { control: 'boolean' },
458
- // Disable all other controls
459
- disabled: { table: { disable: true } },
460
- labelUploadFailed: { table: { disable: true } },
461
- required: { table: { disable: true } },
462
- label: { table: { disable: true } },
463
- labelRequiredError: { table: { disable: true } },
464
- maxFileSizeMB: { table: { disable: true } },
465
- allowedFileTypes: { table: { disable: true } },
466
- additionalAllowedFileTypes: { table: { disable: true } },
467
- labelBrowseFiles: { table: { disable: true } },
468
- labelDragAndDrop: { table: { disable: true } },
469
- labelFileSingular: { table: { disable: true } },
470
- labelFilePlural: { table: { disable: true } },
471
- maxFiles: { table: { disable: true } },
472
- labelMaxFilesInfo: { table: { disable: true } },
473
- labelMaxFilesExceeded: { table: { disable: true } },
474
- labelUploadedFilesHeading: { table: { disable: true } },
475
- labelFileTooLarge: { table: { disable: true } },
476
- labelUnsupportedFileType: { table: { disable: true } },
477
- labelUploaded: { table: { disable: true } },
478
- labelSupportedFormatsTemplate: { table: { disable: true } },
479
- ifxFileUploadAdd: { table: { disable: true } },
480
- ifxFileUploadRemove: { table: { disable: true } },
481
- ifxFileUploadChange: { table: { disable: true } },
482
- ifxFileUploadError: { table: { disable: true } },
483
- ifxFileUploadInvalid: { table: { disable: true } },
484
- ifxFileUploadStart: { table: { disable: true } },
485
- ifxFileUploadComplete: { table: { disable: true } },
486
- ifxFileUploadAllComplete: { table: { disable: true } },
487
- ifxFileUploadAbort: { table: { disable: true } },
488
- ifxFileUploadDrop: { table: { disable: true } },
489
- ifxFileUploadClick: { table: { disable: true } },
490
- ifxFileUploadMaxFilesExceeded: { table: { disable: true } },
491
- ifxFileUploadValidation: { table: { disable: true } },
492
- ifxFileUploadRetry: { table: { disable: true } },
493
- // ARIA labels – disabled in demo
494
- ariaLabelBrowseFiles: { table: { disable: true } },
495
- ariaLabelDropzone: { table: { disable: true } },
496
- ariaLabelFileInput: { table: { disable: true } },
497
- ariaLabelRemoveFile: { table: { disable: true } },
498
- ariaLabelCancelUpload: { table: { disable: true } },
499
- ariaLabelRetryUpload: { table: { disable: true } },
500
- ariaLabelUploadingStatus: { table: { disable: true } },
501
- ariaLabelUploadedStatus: { table: { disable: true } },
502
- ariaLabelUploadFailedStatus: { table: { disable: true } },
503
- },
504
- render: (args) => {
505
- const el = document.createElement('ifx-file-upload');
506
- if (args.dragAndDrop)
507
- el.setAttribute('drag-and-drop', '');
508
- el.setAttribute('required', '');
509
- // Fehlerzustand gezielt triggern
510
- setTimeout(() => {
511
- var _a, _b;
512
- (_b = (_a = el).triggerDemoValidation) === null || _b === void 0 ? void 0 : _b.call(_a);
513
- }, 100);
360
+ UploadStatesDemo.decorators = [
361
+ (storyFn) => {
362
+ const el = storyFn();
363
+ setTimeout(() => { var _a; return (_a = el === null || el === void 0 ? void 0 : el.injectDemoState) === null || _a === void 0 ? void 0 : _a.call(el); }, 0);
514
364
  return el;
515
365
  }
366
+ ];
367
+ UploadStatesDemo.argTypes = Object.assign(Object.assign({}, hideAllControlsExcept(['dragAndDrop'])), disableCustomEventControls);
368
+ // Demo UploadRequiredError
369
+ export const UploadRequiredError = BaseTemplate.bind({});
370
+ UploadRequiredError.args = Object.assign(Object.assign({}, Default.args), { required: true });
371
+ UploadRequiredError.parameters = {
372
+ docs: {
373
+ description: {
374
+ story: 'Demonstrates the error state when the upload is required but no files have been added.'
375
+ }
376
+ }
516
377
  };
378
+ UploadRequiredError.decorators = [
379
+ (storyFn) => {
380
+ const el = storyFn();
381
+ setTimeout(() => { var _a; return (_a = el === null || el === void 0 ? void 0 : el.triggerDemoValidation) === null || _a === void 0 ? void 0 : _a.call(el); }, 100);
382
+ return el;
383
+ }
384
+ ];
385
+ UploadRequiredError.argTypes = Object.assign(Object.assign({}, hideAllControlsExcept(['dragAndDrop'])), disableCustomEventControls);
517
386
  //# sourceMappingURL=file-upload.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.stories.js","sourceRoot":"","sources":["../../../src/components/file-upload/file-upload.stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGlD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,wBAAwB;IAC/B,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EAAE,mFAAmF;aAC/F;SACF;KACF;IACD,QAAQ,EAAE;QACR,UAAU;QACV,WAAW,EAAE;YACX,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,+EAA+E;SAC7F;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,gFAAgF;SAC9F;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,6FAA6F;SAC3G;QACD,aAAa,EAAE;YACb,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,sFAAsF;SACpG;QACD,gBAAgB,EAAE;YAChB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;YACnD,WAAW,EAAE,8EAA8E;SAC5F;QACD,0BAA0B,EAAE;YAC1B,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,qFAAqF;SACnG;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YAC5C,WAAW,EAAE,iGAAiG;SAC/G;QAED,SAAS;QACT,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,oCAAoC;YACjD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,kBAAkB,EAAE;YAClB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,sEAAsE;YACnF,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,gBAAgB,EAAE;YAChB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,qCAAqC;YAClD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,gBAAgB,EAAE;YAChB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,2CAA2C;YACxD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,yBAAyB,EAAE;YACzB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,wCAAwC;YACrD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,iBAAiB,EAAE;YACjB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,2DAA2D;YACxE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,wBAAwB,EAAE;YACxB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,kDAAkD;YAC/D,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,aAAa,EAAE;YACb,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,sCAAsC;YACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,iBAAiB,EAAE;YACjB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,sCAAsC;YACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,6BAA6B,EAAE;YAC7B,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,sEAAsE;YACnF,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,iBAAiB,EAAE;YACjB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,yBAAyB;YACtC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,eAAe,EAAE;YACf,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,uBAAuB;YACpC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,iBAAiB,EAAE;YACjB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,2CAA2C;YACxD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QACD,qBAAqB,EAAE;YACrB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,gDAAgD;YAC7D,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC9B;QAED,cAAc;QACd,oBAAoB,EAAE;YACpB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,wCAAwC;YACrD,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,iBAAiB,EAAE;YACjB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,8BAA8B;YAC3C,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,kBAAkB,EAAE;YAClB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,mBAAmB,EAAE;YACnB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,+BAA+B;YAC5C,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,qBAAqB,EAAE;YACrB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,+BAA+B;YAC5C,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,oBAAoB,EAAE;YACpB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,8BAA8B;YAC3C,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,wBAAwB,EAAE;YACxB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,4BAA4B;YACzC,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,uBAAuB,EAAE;YACvB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,0BAA0B;YACvC,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QACD,2BAA2B,EAAE;YAC3B,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACnC;QAED,gBAAgB;QAChB,gBAAgB,EAAE;YAChB,WAAW,EAAE,+BAA+B;YAC5C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,mBAAmB,EAAE;YACnB,WAAW,EAAE,iCAAiC;YAC9C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,mBAAmB,EAAE;YACnB,WAAW,EAAE,iCAAiC;YAC9C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,kBAAkB,EAAE;YAClB,WAAW,EAAE,sCAAsC;YACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,oBAAoB,EAAE;YACpB,WAAW,EAAE,+BAA+B;YAC5C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,kBAAkB,EAAE;YAClB,WAAW,EAAE,6BAA6B;YAC1C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,qBAAqB,EAAE;YACrB,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,wBAAwB,EAAE;YACxB,WAAW,EAAE,oCAAoC;YACjD,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,kBAAkB,EAAE;YAClB,WAAW,EAAE,sCAAsC;YACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,iBAAiB,EAAE;YACjB,WAAW,EAAE,uBAAuB;YACpC,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,kBAAkB,EAAE;YAClB,WAAW,EAAE,mBAAmB;YAChC,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,6BAA6B,EAAE;YAC7B,WAAW,EAAE,oCAAoC;YACjD,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,uBAAuB,EAAE;YACvB,WAAW,EAAE,oCAAoC;YACjD,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;QACD,kBAAkB,EAAE;YAClB,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACrC;KACF;CACF,CAAC;AAEF,eAAe,IAAI,CAAC;AAIpB,MAAM,gBAAgB,GAAG,CAAC,IAAS,EAAE,EAAE;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,WAAW;QAAE,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC3D,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,gBAAgB;QACvB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEnC,8BAA8B;IAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC;QACpC,EAAE,CAAC,YAAY,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1D,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACrD,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7D,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjE,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9D,EAAE,CAAC,YAAY,CAAC,8BAA8B,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAChF,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChE,EAAE,CAAC,YAAY,CAAC,6BAA6B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC9E,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtD,EAAE,CAAC,YAAY,CAAC,kCAAkC,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACxF,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3D,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChE,EAAE,CAAC,YAAY,CAAC,0BAA0B,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACxE,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE/D,EAAE,CAAC,YAAY,CAAC,yBAAyB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtE,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,EAAE,CAAC,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClE,EAAE,CAAC,YAAY,CAAC,wBAAwB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpE,EAAE,CAAC,YAAY,CAAC,0BAA0B,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACxE,EAAE,CAAC,YAAY,CAAC,yBAAyB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtE,EAAE,CAAC,YAAY,CAAC,6BAA6B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC9E,EAAE,CAAC,YAAY,CAAC,4BAA4B,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5E,EAAE,CAAC,YAAY,CAAC,iCAAiC,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAErF,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpE,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC1E,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC1E,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACxE,EAAE,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC5E,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACxE,EAAE,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC9E,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACxE,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACtE,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACxE,EAAE,CAAC,gBAAgB,CAAC,+BAA+B,EAAE,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC9F,EAAE,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAClF,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAExE,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAU;IACrC,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE;QACJ,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,KAAK;QACf,kBAAkB,EAAE,oCAAoC;QACxD,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACvC,0BAA0B,EAAE,0BAA0B;QACtD,gBAAgB,EAAE,cAAc;QAChC,gBAAgB,EAAE,uCAAuC;QACzD,yBAAyB,EAAE,gBAAgB;QAC3C,iBAAiB,EAAE,2CAA2C;QAC9D,wBAAwB,EAAE,wBAAwB;QAClD,aAAa,EAAE,uBAAuB;QACtC,6BAA6B,EAAE,+DAA+D;QAC9F,iBAAiB,EAAE,MAAM;QACzB,eAAe,EAAE,OAAO;QACxB,iBAAiB,EAAE,2CAA2C;QAC9D,qBAAqB,EAAE,uDAAuD;QAC9E,iBAAiB,EAAE,kCAAkC;QACrD,oBAAoB,EAAE,cAAc;QACpC,iBAAiB,EAAE,sDAAsD;QACzE,kBAAkB,EAAE,aAAa;QACjC,mBAAmB,EAAE,aAAa;QAClC,qBAAqB,EAAE,eAAe;QACtC,oBAAoB,EAAE,cAAc;QACpC,wBAAwB,EAAE,oBAAoB;QAC9C,uBAAuB,EAAE,kBAAkB;QAC3C,2BAA2B,EAAE,eAAe;KAC7C;IACD,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAU;IACvC,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE;QACJ,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,KAAK;QACf,kBAAkB,EAAE,oCAAoC;QACxD,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACvC,0BAA0B,EAAE,0BAA0B;QACtD,gBAAgB,EAAE,cAAc;QAChC,gBAAgB,EAAE,uCAAuC;QACzD,yBAAyB,EAAE,gBAAgB;QAC3C,iBAAiB,EAAE,2CAA2C;QAC9D,wBAAwB,EAAE,wBAAwB;QAClD,aAAa,EAAE,uBAAuB;QACtC,6BAA6B,EAAE,+DAA+D;QAC9F,iBAAiB,EAAE,MAAM;QACzB,eAAe,EAAE,OAAO;QACxB,iBAAiB,EAAE,2CAA2C;QAC9D,qBAAqB,EAAE,uDAAuD;QAC9E,iBAAiB,EAAE,kCAAkC;QACrD,oBAAoB,EAAE,cAAc;QACpC,iBAAiB,EAAE,sDAAsD;QACzE,kBAAkB,EAAE,aAAa;QACjC,mBAAmB,EAAE,aAAa;QAClC,qBAAqB,EAAE,eAAe;QACtC,oBAAoB,EAAE,cAAc;QACpC,wBAAwB,EAAE,oBAAoB;QAC9C,uBAAuB,EAAE,kBAAkB;QAC3C,2BAA2B,EAAE,eAAe;KAC7C;IACD,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAU;IACrC,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE;QACJ,WAAW,EAAE,KAAK;KACnB;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EAAE,yHAAyH;aACjI;SACF;QACD,WAAW,EAAE;YACX,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;YAC3B,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;YACzC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YAC3C,8BAA8B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACjD;KACF;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QACnC,6BAA6B;QAC7B,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnC,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3C,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,0BAA0B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACxD,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7C,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnD,yBAAyB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACvD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtD,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3C,6BAA6B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3D,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnD,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,6BAA6B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3D,uBAAuB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACrD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,iCAAiC;QACjC,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnD,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClD,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtD,uBAAuB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACrD,2BAA2B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;KAC1D;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,UAAU,CAAC,GAAG,EAAE;;YACd,MAAA,MAAC,EAAU,EAAC,eAAe,kDAAI,CAAC;QAClC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAU;IACxC,IAAI,EAAE,8BAA8B;IACpC,IAAI,EAAE;QACJ,WAAW,EAAE,KAAK;KACnB;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EAAE,yIAAyI;aACjJ;SACF;KACF;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QACnC,6BAA6B;QAC7B,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnC,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3C,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,0BAA0B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACxD,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7C,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnD,yBAAyB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACvD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtD,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3C,6BAA6B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3D,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnD,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,6BAA6B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3D,uBAAuB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACrD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,iCAAiC;QACjC,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/C,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAChD,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnD,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClD,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtD,uBAAuB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACrD,2BAA2B,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;KAC1D;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,WAAW;YAAE,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAE3D,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEhC,iCAAiC;QACjC,UAAU,CAAC,GAAG,EAAE;;YACd,MAAA,MAAC,EAAU,EAAC,qBAAqB,kDAAI,CAAC;QACxC,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAC","sourcesContent":["import { action } from '@storybook/addon-actions';\nimport type { Meta, StoryObj } from '@storybook/html';\n\nconst meta: Meta = {\n title: 'Components/File Upload',\n tags: ['autodocs'],\n parameters: {\n controls: { expanded: true },\n docs: {\n description: {\n component: 'Upload component with different interaction styles: button or drag-and-drop area.'\n }\n }\n },\n argTypes: {\n // GENERAL\n dragAndDrop: {\n control: 'boolean',\n description: 'Enables drag-and-drop area. If false, a button-based upload is shown instead.'\n },\n required: {\n control: 'boolean',\n description: 'If set to true, at least one file must be uploaded. Validation fails if empty.'\n },\n disabled: {\n control: 'boolean',\n description: 'Disables the component and prevents all interaction (upload, drag-and-drop, removal, etc.).',\n },\n maxFileSizeMB: {\n control: 'number',\n description: 'Maximum file size allowed per file (in MB). Files larger than this will be rejected.'\n },\n allowedFileTypes: {\n control: { type: 'check' },\n options: ['jpg', 'png', 'pdf', 'mov', 'mp3', 'mp4'],\n description: 'Select one or more allowed file extensions. Internally mapped to MIME types.'\n },\n additionalAllowedFileTypes: {\n control: 'text',\n description: 'Adds additional allowed file types using exact MIME types. Example: application/zip'\n },\n maxFiles: {\n control: { type: 'number', min: 1, step: 1 },\n description: 'Maximum number of files that can be uploaded in total. Must be at least 1. If unset, unlimited.'\n },\n\n // LABELS\n label: {\n control: 'text',\n description: 'Label shown above the upload area.',\n table: { category: 'LABELS' }\n },\n labelRequiredError: {\n control: 'text',\n description: 'Error message shown when no file is uploaded and `required` is true.',\n table: { category: 'LABELS' }\n },\n labelBrowseFiles: {\n control: 'text',\n description: 'Text for the file selection button.',\n table: { category: 'LABELS' }\n },\n labelDragAndDrop: {\n control: 'text',\n description: 'Text shown inside the drag-and-drop area.',\n table: { category: 'LABELS' }\n },\n labelUploadedFilesHeading: {\n control: 'text',\n description: 'Heading above the uploaded files list.',\n table: { category: 'LABELS' }\n },\n labelFileTooLarge: {\n control: 'text',\n description: 'Shown when a file exceeds the allowed size. Use {{size}}.',\n table: { category: 'LABELS' }\n },\n labelUnsupportedFileType: {\n control: 'text',\n description: 'Shown when an unsupported file type is uploaded.',\n table: { category: 'LABELS' }\n },\n labelUploaded: {\n control: 'text',\n description: 'Label shown after successful upload.',\n table: { category: 'LABELS' }\n },\n labelUploadFailed: {\n control: 'text',\n description: 'Text shown when a file upload fails.',\n table: { category: 'LABELS' }\n },\n labelSupportedFormatsTemplate: {\n control: 'text',\n description: 'Template showing supported file formats. Use {{types}} and {{size}}.',\n table: { category: 'LABELS' }\n },\n labelFileSingular: {\n control: 'text',\n description: 'Singular word for file.',\n table: { category: 'LABELS' }\n },\n labelFilePlural: {\n control: 'text',\n description: 'Plural word for file.',\n table: { category: 'LABELS' }\n },\n labelMaxFilesInfo: {\n control: 'text',\n description: 'Message for max file info. Use {{count}}.',\n table: { category: 'LABELS' }\n },\n labelMaxFilesExceeded: {\n control: 'text',\n description: 'Error when exceeding max files. Use {{count}}.',\n table: { category: 'LABELS' }\n },\n\n // ARIA LABELS\n ariaLabelBrowseFiles: {\n control: 'text',\n description: 'ARIA label for the file upload button.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelDropzone: {\n control: 'text',\n description: 'ARIA label for the dropzone.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelFileInput: {\n control: 'text',\n description: 'ARIA label for the file input.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelRemoveFile: {\n control: 'text',\n description: 'ARIA label for remove button.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelCancelUpload: {\n control: 'text',\n description: 'ARIA label for cancel button.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelRetryUpload: {\n control: 'text',\n description: 'ARIA label for retry button.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelUploadingStatus: {\n control: 'text',\n description: 'ARIA status for uploading.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelUploadedStatus: {\n control: 'text',\n description: 'ARIA status for success.',\n table: { category: 'ARIA LABELS' }\n },\n ariaLabelUploadFailedStatus: {\n control: 'text',\n description: 'ARIA status for failed upload.',\n table: { category: 'ARIA LABELS' }\n },\n\n // CUSTOM EVENTS\n ifxFileUploadAdd: {\n description: 'Emitted when files are added.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadRemove: {\n description: 'Emitted when a file is removed.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadChange: {\n description: 'Emitted when file list changes.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadError: {\n description: 'Emitted when an upload error occurs.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadInvalid: {\n description: 'Emitted when file is invalid.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadStart: {\n description: 'Emitted when upload starts.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadComplete: {\n description: 'Emitted when upload completes.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadAllComplete: {\n description: 'Emitted when all uploads are done.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadAbort: {\n description: 'Emitted when an upload is cancelled.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadDrop: {\n description: 'Emitted on file drop.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadClick: {\n description: 'Emitted on click.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadMaxFilesExceeded: {\n description: 'Emitted when too many files added.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadValidation: {\n description: 'Emitted after required validation.',\n table: { category: 'CUSTOM EVENTS' }\n },\n ifxFileUploadRetry: {\n description: 'Emitted when retry is triggered.',\n table: { category: 'CUSTOM EVENTS' }\n }\n }\n};\n\nexport default meta;\n\ntype Story = StoryObj;\n\nconst renderFileUpload = (args: any) => {\n const el = document.createElement('ifx-file-upload');\n\n if (args.dragAndDrop) el.setAttribute('drag-and-drop', '');\n el.setAttribute('max-file-size-m-b', args.maxFileSizeMB);\n\n const rawTypes = Array.isArray(args.allowedFileTypes)\n ? args.allowedFileTypes\n : args.allowedFileTypes.split(',');\n\n // Map 'jpg' ➜ ['jpg', 'jpeg']\n const mappedTypes = rawTypes.flatMap(type => {\n if (type === 'jpg') return ['jpg', 'jpeg'];\n return [type];\n });\n\n if (args.additionalAllowedFileTypes) {\n const value = Array.isArray(args.additionalAllowedFileTypes)\n ? args.additionalAllowedFileTypes.join(',')\n : args.additionalAllowedFileTypes;\n el.setAttribute('additional-allowed-file-types', value);\n }\n\n if (args.maxFiles !== undefined && args.maxFiles !== null) {\n el.setAttribute('max-files', String(args.maxFiles));\n }\n\n if (args.required) {\n el.setAttribute('required', '');\n } else {\n el.removeAttribute('required');\n }\n\n if (args.disabled) {\n el.setAttribute('disabled', '');\n } else {\n el.removeAttribute('disabled');\n }\n\n const uniqueTypes = Array.from(new Set(mappedTypes));\n el.setAttribute('allowed-file-types', uniqueTypes.join(','));\n\n el.setAttribute('label', args.label);\n el.setAttribute('label-required-error', args.labelRequiredError);\n el.setAttribute('label-browse-files', args.labelBrowseFiles);\n el.setAttribute('label-drag-and-drop', args.labelDragAndDrop);\n el.setAttribute('label-uploaded-files-heading', args.labelUploadedFilesHeading);\n el.setAttribute('label-file-too-large', args.labelFileTooLarge);\n el.setAttribute('label-unsupported-file-type', args.labelUnsupportedFileType);\n el.setAttribute('label-uploaded', args.labelUploaded);\n el.setAttribute('label-supported-formats-template', args.labelSupportedFormatsTemplate);\n el.setAttribute('label-file-singular', args.labelFileSingular);\n el.setAttribute('label-file-plural', args.labelFilePlural);\n el.setAttribute('label-max-files-info', args.labelMaxFilesInfo);\n el.setAttribute('label-max-files-exceeded', args.labelMaxFilesExceeded);\n el.setAttribute('label-upload-failed', args.labelUploadFailed);\n\n el.setAttribute('aria-label-browse-files', args.ariaLabelBrowseFiles);\n el.setAttribute('aria-label-dropzone', args.ariaLabelDropzone);\n el.setAttribute('aria-label-file-input', args.ariaLabelFileInput);\n el.setAttribute('aria-label-remove-file', args.ariaLabelRemoveFile);\n el.setAttribute('aria-label-cancel-upload', args.ariaLabelCancelUpload);\n el.setAttribute('aria-label-retry-upload', args.ariaLabelRetryUpload);\n el.setAttribute('aria-label-uploading-status', args.ariaLabelUploadingStatus);\n el.setAttribute('aria-label-uploaded-status', args.ariaLabelUploadedStatus);\n el.setAttribute('aria-label-upload-failed-status', args.ariaLabelUploadFailedStatus);\n\n el.addEventListener('ifxFileUploadAdd', action('ifxFileUploadAdd'));\n el.addEventListener('ifxFileUploadRemove', action('ifxFileUploadRemove'));\n el.addEventListener('ifxFileUploadChange', action('ifxFileUploadChange'));\n el.addEventListener('ifxFileUploadError', action('ifxFileUploadError'));\n el.addEventListener('ifxFileUploadInvalid', action('ifxFileUploadInvalid'));\n el.addEventListener('ifxFileUploadStart', action('ifxFileUploadStart'));\n el.addEventListener('ifxFileUploadComplete', action('ifxFileUploadComplete'));\n el.addEventListener('ifxFileUploadAbort', action('ifxFileUploadAbort'));\n el.addEventListener('ifxFileUploadDrop', action('ifxFileUploadDrop'));\n el.addEventListener('ifxFileUploadClick', action('ifxFileUploadClick'));\n el.addEventListener('ifxFileUploadMaxFilesExceeded', action('ifxFileUploadMaxFilesExceeded'));\n el.addEventListener('ifxFileUploadValidation', action('ifxFileUploadValidation'));\n el.addEventListener('ifxFileUploadRetry', action('ifxFileUploadRetry'));\n\n return el;\n};\n\nexport const UploadFileButton: Story = {\n name: 'Upload File (Button)',\n args: {\n dragAndDrop: false,\n label: 'Label',\n required: false,\n labelRequiredError: 'You must upload at least one file.',\n disabled: false,\n maxFileSizeMB: 7,\n allowedFileTypes: ['jpg', 'png', 'pdf'],\n additionalAllowedFileTypes: 'application/zip,text/csv',\n labelBrowseFiles: 'Browse files',\n labelDragAndDrop: 'Drag & Drop or browse files to upload',\n labelUploadedFilesHeading: 'Uploaded files',\n labelFileTooLarge: 'Upload failed. Max file size: {{size}}MB.',\n labelUnsupportedFileType: 'Unsupported file type.',\n labelUploaded: 'Successfully uploaded',\n labelSupportedFormatsTemplate: 'Supported file formats: {{types}}. Max file size: {{size}}MB.',\n labelFileSingular: 'file',\n labelFilePlural: 'files',\n labelMaxFilesInfo: 'You can upload up to {{count}} {{files}}.',\n labelMaxFilesExceeded: 'You have exceeded the maximum of {{count}} {{files}}.',\n labelUploadFailed: 'Upload failed. Please try again.',\n ariaLabelBrowseFiles: 'Browse files',\n ariaLabelDropzone: 'Upload area. Click to browse or drag and drop files.',\n ariaLabelFileInput: 'Upload file',\n ariaLabelRemoveFile: 'Remove file',\n ariaLabelCancelUpload: 'Cancel upload',\n ariaLabelRetryUpload: 'Retry upload',\n ariaLabelUploadingStatus: 'Upload in progress',\n ariaLabelUploadedStatus: 'Upload completed',\n ariaLabelUploadFailedStatus: 'Upload failed'\n },\n render: renderFileUpload\n};\n\nexport const UploadAreaDragDrop: Story = {\n name: 'Upload Area (Drag&Drop)',\n args: {\n dragAndDrop: true,\n label: 'Label',\n required: false,\n labelRequiredError: 'You must upload at least one file.',\n disabled: false,\n maxFileSizeMB: 7,\n allowedFileTypes: ['jpg', 'png', 'pdf'],\n additionalAllowedFileTypes: 'application/zip,text/csv',\n labelBrowseFiles: 'Browse files',\n labelDragAndDrop: 'Drag & Drop or browse files to upload',\n labelUploadedFilesHeading: 'Uploaded files',\n labelFileTooLarge: 'Upload failed. Max file size: {{size}}MB.',\n labelUnsupportedFileType: 'Unsupported file type.',\n labelUploaded: 'Successfully uploaded',\n labelSupportedFormatsTemplate: 'Supported file formats: {{types}}. Max file size: {{size}}MB.',\n labelFileSingular: 'file',\n labelFilePlural: 'files',\n labelMaxFilesInfo: 'You can upload up to {{count}} {{files}}.',\n labelMaxFilesExceeded: 'You have exceeded the maximum of {{count}} {{files}}.',\n labelUploadFailed: 'Upload failed. Please try again.',\n ariaLabelBrowseFiles: 'Browse files',\n ariaLabelDropzone: 'Upload area. Click to browse or drag and drop files.',\n ariaLabelFileInput: 'Upload file',\n ariaLabelRemoveFile: 'Remove file',\n ariaLabelCancelUpload: 'Cancel upload',\n ariaLabelRetryUpload: 'Retry upload',\n ariaLabelUploadingStatus: 'Upload in progress',\n ariaLabelUploadedStatus: 'Upload completed',\n ariaLabelUploadFailedStatus: 'Upload failed'\n },\n render: renderFileUpload\n};\n\nexport const UploadStatesDemo: Story = {\n name: 'Upload States (Demo)',\n args: {\n dragAndDrop: false\n },\n parameters: {\n docs: {\n description: {\n story: 'Visual preview of all file states (success, upload in progress, rejected). Only the `dragAndDrop` control is available.'\n }\n },\n previewTabs: {\n 'canvas': { hidden: false },\n 'storybook/docs/panel': { hidden: false },\n 'storybook/actions/panel': { hidden: true },\n 'storybook/interactions/panel': { hidden: true }\n }\n },\n argTypes: {\n dragAndDrop: { control: 'boolean' },\n // Disable all other controls\n disabled: { table: { disable: true } },\n labelUploadFailed: { table: { disable: true } },\n required: { table: { disable: true } },\n label: { table: { disable: true } },\n labelRequiredError: { table: { disable: true } },\n maxFileSizeMB: { table: { disable: true } },\n allowedFileTypes: { table: { disable: true } },\n additionalAllowedFileTypes: { table: { disable: true } },\n labelBrowseFiles: { table: { disable: true } },\n labelDragAndDrop: { table: { disable: true } },\n labelFileSingular: { table: { disable: true } },\n labelFilePlural: { table: { disable: true } },\n maxFiles: { table: { disable: true } },\n labelMaxFilesInfo: { table: { disable: true } },\n labelMaxFilesExceeded: { table: { disable: true } },\n labelUploadedFilesHeading: { table: { disable: true } },\n labelFileTooLarge: { table: { disable: true } },\n labelUnsupportedFileType: { table: { disable: true } },\n labelUploaded: { table: { disable: true } },\n labelSupportedFormatsTemplate: { table: { disable: true } },\n ifxFileUploadAdd: { table: { disable: true } },\n ifxFileUploadRemove: { table: { disable: true } },\n ifxFileUploadChange: { table: { disable: true } },\n ifxFileUploadError: { table: { disable: true } },\n ifxFileUploadInvalid: { table: { disable: true } },\n ifxFileUploadStart: { table: { disable: true } },\n ifxFileUploadComplete: { table: { disable: true } },\n ifxFileUploadAllComplete: { table: { disable: true } },\n ifxFileUploadAbort: { table: { disable: true } },\n ifxFileUploadDrop: { table: { disable: true } },\n ifxFileUploadClick: { table: { disable: true } },\n ifxFileUploadMaxFilesExceeded: { table: { disable: true } },\n ifxFileUploadValidation: { table: { disable: true } },\n ifxFileUploadRetry: { table: { disable: true } },\n // ARIA labels – disabled in demo\n ariaLabelBrowseFiles: { table: { disable: true } },\n ariaLabelDropzone: { table: { disable: true } },\n ariaLabelFileInput: { table: { disable: true } },\n ariaLabelRemoveFile: { table: { disable: true } },\n ariaLabelCancelUpload: { table: { disable: true } },\n ariaLabelRetryUpload: { table: { disable: true } },\n ariaLabelUploadingStatus: { table: { disable: true } },\n ariaLabelUploadedStatus: { table: { disable: true } },\n ariaLabelUploadFailedStatus: { table: { disable: true } },\n },\n render: (args) => {\n const el = document.createElement('ifx-file-upload');\n\n if (args.dragAndDrop) {\n el.setAttribute('drag-and-drop', '');\n }\n\n setTimeout(() => {\n (el as any).injectDemoState?.();\n }, 0);\n\n return el;\n }\n};\n\nexport const UploadRequiredError: Story = {\n name: 'Upload Required Error (Demo)',\n args: {\n dragAndDrop: false\n },\n parameters: {\n docs: {\n description: {\n story: 'Demonstrates the error state when the upload is required but no files have been added. Only `dragAndDrop` is controllable in this demo.'\n }\n }\n },\n argTypes: {\n dragAndDrop: { control: 'boolean' },\n // Disable all other controls\n disabled: { table: { disable: true } },\n labelUploadFailed: { table: { disable: true } },\n required: { table: { disable: true } },\n label: { table: { disable: true } },\n labelRequiredError: { table: { disable: true } },\n maxFileSizeMB: { table: { disable: true } },\n allowedFileTypes: { table: { disable: true } },\n additionalAllowedFileTypes: { table: { disable: true } },\n labelBrowseFiles: { table: { disable: true } },\n labelDragAndDrop: { table: { disable: true } },\n labelFileSingular: { table: { disable: true } },\n labelFilePlural: { table: { disable: true } },\n maxFiles: { table: { disable: true } },\n labelMaxFilesInfo: { table: { disable: true } },\n labelMaxFilesExceeded: { table: { disable: true } },\n labelUploadedFilesHeading: { table: { disable: true } },\n labelFileTooLarge: { table: { disable: true } },\n labelUnsupportedFileType: { table: { disable: true } },\n labelUploaded: { table: { disable: true } },\n labelSupportedFormatsTemplate: { table: { disable: true } },\n ifxFileUploadAdd: { table: { disable: true } },\n ifxFileUploadRemove: { table: { disable: true } },\n ifxFileUploadChange: { table: { disable: true } },\n ifxFileUploadError: { table: { disable: true } },\n ifxFileUploadInvalid: { table: { disable: true } },\n ifxFileUploadStart: { table: { disable: true } },\n ifxFileUploadComplete: { table: { disable: true } },\n ifxFileUploadAllComplete: { table: { disable: true } },\n ifxFileUploadAbort: { table: { disable: true } },\n ifxFileUploadDrop: { table: { disable: true } },\n ifxFileUploadClick: { table: { disable: true } },\n ifxFileUploadMaxFilesExceeded: { table: { disable: true } },\n ifxFileUploadValidation: { table: { disable: true } },\n ifxFileUploadRetry: { table: { disable: true } },\n // ARIA labels – disabled in demo\n ariaLabelBrowseFiles: { table: { disable: true } },\n ariaLabelDropzone: { table: { disable: true } },\n ariaLabelFileInput: { table: { disable: true } },\n ariaLabelRemoveFile: { table: { disable: true } },\n ariaLabelCancelUpload: { table: { disable: true } },\n ariaLabelRetryUpload: { table: { disable: true } },\n ariaLabelUploadingStatus: { table: { disable: true } },\n ariaLabelUploadedStatus: { table: { disable: true } },\n ariaLabelUploadFailedStatus: { table: { disable: true } },\n },\n render: (args) => {\n const el = document.createElement('ifx-file-upload');\n\n if (args.dragAndDrop) el.setAttribute('drag-and-drop', '');\n\n el.setAttribute('required', '');\n\n // Fehlerzustand gezielt triggern\n setTimeout(() => {\n (el as any).triggerDemoValidation?.();\n }, 100);\n\n return el;\n }\n};\n"]}
1
+ {"version":3,"file":"file-upload.stories.js","sourceRoot":"","sources":["../../../src/components/file-upload/file-upload.stories.ts"],"names":[],"mappings":"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","sourcesContent":["import { action } from '@storybook/addon-actions';\nimport type { Meta, StoryFn } from '@storybook/html';\n\nconst hideAllControlsExcept = (allowedKeys: string[]) => {\n const allProps = [\n 'dragAndDrop', 'label', 'required', 'labelRequiredError', 'disabled', 'maxFiles', 'maxFileSizeMB',\n 'allowedFileTypes', 'additionalAllowedFileTypes', 'labelBrowseFiles', 'labelDragAndDrop',\n 'labelUploadedFilesHeading', 'labelFileTooLarge', 'labelUnsupportedFileType', 'labelUploaded',\n 'labelSupportedFormatsTemplate', 'labelFileSingular', 'labelFilePlural', 'labelMaxFilesInfo',\n 'labelMaxFilesExceeded', 'labelUploadFailed', 'ariaLabelBrowseFiles', 'ariaLabelDropzone',\n 'ariaLabelFileInput', 'ariaLabelRemoveFile', 'ariaLabelCancelUpload', 'ariaLabelRetryUpload',\n 'ariaLabelUploadingStatus', 'ariaLabelUploadedStatus', 'ariaLabelUploadFailedStatus'\n ];\n\n const argTypes: Record<string, any> = {};\n for (const prop of allProps) {\n if (!allowedKeys.includes(prop)) {\n argTypes[prop] = { table: { disable: true } };\n }\n }\n return argTypes;\n};\n\nconst disableCustomEventControls = {\n ifxFileUploadAdd: { table: { disable: true } },\n ifxFileUploadRemove: { table: { disable: true } },\n ifxFileUploadChange: { table: { disable: true } },\n ifxFileUploadError: { table: { disable: true } },\n ifxFileUploadInvalid: { table: { disable: true } },\n ifxFileUploadStart: { table: { disable: true } },\n ifxFileUploadComplete: { table: { disable: true } },\n ifxFileUploadAllComplete: { table: { disable: true } },\n ifxFileUploadAbort: { table: { disable: true } },\n ifxFileUploadDrop: { table: { disable: true } },\n ifxFileUploadClick: { table: { disable: true } },\n ifxFileUploadMaxFilesExceeded: { table: { disable: true } },\n ifxFileUploadValidation: { table: { disable: true } },\n ifxFileUploadRetry: { table: { disable: true } }\n};\n\nconst meta: Meta = {\n title: 'Components/File Upload',\n tags: ['autodocs'],\n parameters: {\n controls: { expanded: true },\n docs: {\n description: {\n component: 'Upload component with different interaction styles: button or drag-and-drop area.',\n },\n },\n },\n argTypes: {\n // --- FUNCTION ---\n dragAndDrop: {\n description: 'Enables drag-and-drop upload area.',\n control: 'boolean',\n table: { category: 'Function', defaultValue: { summary: 'false' } },\n },\n required: {\n description: 'Marks the upload as required.',\n control: 'boolean',\n table: { category: 'Function', defaultValue: { summary: 'false' } },\n },\n disabled: {\n description: 'Disables the upload input.',\n control: 'boolean',\n table: { category: 'Function', defaultValue: { summary: 'false' } },\n },\n maxFileSizeMB: {\n description: 'Maximum file size in MB.',\n control: 'number',\n table: { category: 'Function', defaultValue: { summary: '7' } },\n },\n allowedFileTypes: {\n control: { type: 'check' },\n options: ['jpg', 'png', 'pdf', 'mov', 'mp3', 'mp4'],\n description: 'Select one or more allowed file extensions. Internally mapped to MIME types.',\n table: { category: 'Function' },\n },\n additionalAllowedFileTypes: {\n description: 'Custom MIME types (comma-separated).',\n control: 'text',\n table: { category: 'Function' },\n },\n maxFiles: {\n description: 'Maximum number of allowed files.',\n control: 'number',\n table: { category: 'Function' },\n },\n\n // --- LABELS ---\n label: {\n control: 'text',\n description: 'Main label shown above input.',\n table: { category: 'Label' },\n },\n labelRequiredError: {\n control: 'text',\n description: 'Shown when required and no file selected.',\n table: { category: 'Label' },\n },\n labelBrowseFiles: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelDragAndDrop: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelUploadedFilesHeading: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelFileTooLarge: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelUnsupportedFileType: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelUploaded: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelSupportedFormatsTemplate: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelFileSingular: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelFilePlural: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelMaxFilesInfo: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelMaxFilesExceeded: {\n control: 'text',\n table: { category: 'Label' },\n },\n labelUploadFailed: {\n control: 'text',\n table: { category: 'Label' },\n },\n\n // --- ARIA LABELS ---\n ariaLabelBrowseFiles: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelDropzone: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelFileInput: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelRemoveFile: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelCancelUpload: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelRetryUpload: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelUploadingStatus: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelUploadedStatus: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n ariaLabelUploadFailedStatus: {\n control: 'text',\n table: { category: 'Aria Labels' },\n },\n // --- CUSTOM EVENTS ---\n ifxFileUploadAdd: {\n action: 'ifxFileUploadAdd',\n table: { category: 'Custom Events' },\n description: 'Triggered when valid files are added (via browse or drop).',\n },\n ifxFileUploadRemove: {\n action: 'ifxFileUploadRemove',\n table: { category: 'Custom Events' },\n description: 'Fired when a user removes a file from the list.',\n },\n ifxFileUploadChange: {\n action: 'ifxFileUploadChange',\n table: { category: 'Custom Events' },\n description: 'Fired whenever the file list changes (add, remove, retry).',\n },\n ifxFileUploadError: {\n action: 'ifxFileUploadError',\n table: { category: 'Custom Events' },\n description: 'Fired when a file is rejected or an upload fails.',\n },\n ifxFileUploadInvalid: {\n action: 'ifxFileUploadInvalid',\n table: { category: 'Custom Events' },\n description: 'Fired for invalid files (e.g., wrong type or size).',\n },\n ifxFileUploadStart: {\n action: 'ifxFileUploadStart',\n table: { category: 'Custom Events' },\n description: 'Fired when an upload starts for a file.',\n },\n ifxFileUploadComplete: {\n action: 'ifxFileUploadComplete',\n table: { category: 'Custom Events' },\n description: 'Fired when a single file upload finishes successfully.',\n },\n ifxFileUploadAllComplete: {\n action: 'ifxFileUploadAllComplete',\n table: { category: 'Custom Events' },\n description: 'Fired when all current uploads have completed.',\n },\n ifxFileUploadAbort: {\n action: 'ifxFileUploadAbort',\n table: { category: 'Custom Events' },\n description: 'Fired when a user cancels an in-progress upload.',\n },\n ifxFileUploadDrop: {\n action: 'ifxFileUploadDrop',\n table: { category: 'Custom Events' },\n description: 'Fired when files are dropped via drag-and-drop.',\n },\n ifxFileUploadClick: {\n action: 'ifxFileUploadClick',\n table: { category: 'Custom Events' },\n description: 'Fired when the upload button or dropzone is clicked.',\n },\n ifxFileUploadMaxFilesExceeded: {\n action: 'ifxFileUploadMaxFilesExceeded',\n table: { category: 'Custom Events' },\n description: 'Fired when the selected files exceed the maxFiles limit.',\n },\n ifxFileUploadValidation: {\n action: 'ifxFileUploadValidation',\n table: { category: 'Custom Events' },\n description: 'Fired after required validation is checked.',\n },\n ifxFileUploadRetry: {\n action: 'ifxFileUploadRetry',\n table: { category: 'Custom Events' },\n description: 'Fired when the retry button is clicked for a failed upload.',\n },\n }\n};\n\nexport default meta;\n\nconst BaseTemplate: StoryFn = (args) => {\n const el = document.createElement('ifx-file-upload');\n\n if (args.dragAndDrop) el.setAttribute('drag-and-drop', '');\n el.setAttribute('max-file-size-m-b', args.maxFileSizeMB);\n\n const rawTypes = Array.isArray(args.allowedFileTypes)\n ? args.allowedFileTypes\n : args.allowedFileTypes?.split(',') || [];\n\n const mappedTypes = rawTypes.flatMap(type => type === 'jpg' ? ['jpg', 'jpeg'] : [type]);\n const uniqueTypes = Array.from(new Set(mappedTypes));\n el.setAttribute('allowed-file-types', uniqueTypes.join(','));\n\n if (args.additionalAllowedFileTypes) {\n const value = Array.isArray(args.additionalAllowedFileTypes)\n ? args.additionalAllowedFileTypes.join(',')\n : args.additionalAllowedFileTypes;\n el.setAttribute('additional-allowed-file-types', value);\n }\n\n if (args.maxFiles !== undefined && args.maxFiles !== null) {\n el.setAttribute('max-files', String(args.maxFiles));\n }\n\n args.required ? el.setAttribute('required', '') : el.removeAttribute('required');\n args.disabled ? el.setAttribute('disabled', '') : el.removeAttribute('disabled');\n\n el.setAttribute('label', args.label);\n el.setAttribute('label-required-error', args.labelRequiredError);\n el.setAttribute('label-browse-files', args.labelBrowseFiles);\n el.setAttribute('label-drag-and-drop', args.labelDragAndDrop);\n el.setAttribute('label-uploaded-files-heading', args.labelUploadedFilesHeading);\n el.setAttribute('label-file-too-large', args.labelFileTooLarge);\n el.setAttribute('label-unsupported-file-type', args.labelUnsupportedFileType);\n el.setAttribute('label-uploaded', args.labelUploaded);\n el.setAttribute('label-supported-formats-template', args.labelSupportedFormatsTemplate);\n el.setAttribute('label-file-singular', args.labelFileSingular);\n el.setAttribute('label-file-plural', args.labelFilePlural);\n el.setAttribute('label-max-files-info', args.labelMaxFilesInfo);\n el.setAttribute('label-max-files-exceeded', args.labelMaxFilesExceeded);\n el.setAttribute('label-upload-failed', args.labelUploadFailed);\n\n el.setAttribute('aria-label-browse-files', args.ariaLabelBrowseFiles);\n el.setAttribute('aria-label-dropzone', args.ariaLabelDropzone);\n el.setAttribute('aria-label-file-input', args.ariaLabelFileInput);\n el.setAttribute('aria-label-remove-file', args.ariaLabelRemoveFile);\n el.setAttribute('aria-label-cancel-upload', args.ariaLabelCancelUpload);\n el.setAttribute('aria-label-retry-upload', args.ariaLabelRetryUpload);\n el.setAttribute('aria-label-uploading-status', args.ariaLabelUploadingStatus);\n el.setAttribute('aria-label-uploaded-status', args.ariaLabelUploadedStatus);\n el.setAttribute('aria-label-upload-failed-status', args.ariaLabelUploadFailedStatus);\n\n el.addEventListener('ifxFileUploadAdd', action('ifxFileUploadAdd'));\n el.addEventListener('ifxFileUploadRemove', action('ifxFileUploadRemove'));\n el.addEventListener('ifxFileUploadChange', action('ifxFileUploadChange'));\n el.addEventListener('ifxFileUploadError', action('ifxFileUploadError'));\n el.addEventListener('ifxFileUploadInvalid', action('ifxFileUploadInvalid'));\n el.addEventListener('ifxFileUploadStart', action('ifxFileUploadStart'));\n el.addEventListener('ifxFileUploadComplete', action('ifxFileUploadComplete'));\n el.addEventListener('ifxFileUploadAbort', action('ifxFileUploadAbort'));\n el.addEventListener('ifxFileUploadDrop', action('ifxFileUploadDrop'));\n el.addEventListener('ifxFileUploadClick', action('ifxFileUploadClick'));\n el.addEventListener('ifxFileUploadMaxFilesExceeded', action('ifxFileUploadMaxFilesExceeded'));\n el.addEventListener('ifxFileUploadValidation', action('ifxFileUploadValidation'));\n el.addEventListener('ifxFileUploadRetry', action('ifxFileUploadRetry'));\n\n return el;\n};\n\nexport const Default = BaseTemplate.bind({});\nDefault.args = {\n dragAndDrop: false,\n label: 'Label',\n required: false,\n labelRequiredError: 'You must upload at least one file.',\n disabled: false,\n maxFileSizeMB: 7,\n allowedFileTypes: ['jpg', 'png', 'pdf'],\n additionalAllowedFileTypes: 'application/zip,text/csv',\n labelBrowseFiles: 'Browse files',\n labelDragAndDrop: 'Drag & Drop or browse files to upload',\n labelUploadedFilesHeading: 'Uploaded files',\n labelFileTooLarge: 'Upload failed. Max file size: {{size}}MB.',\n labelUnsupportedFileType: 'Unsupported file type.',\n labelUploaded: 'Successfully uploaded',\n labelSupportedFormatsTemplate: 'Supported file formats: {{types}}. Max file size: {{size}}MB.',\n labelFileSingular: 'file',\n labelFilePlural: 'files',\n labelMaxFilesInfo: 'You can upload up to {{count}} {{files}}.',\n labelMaxFilesExceeded: 'You have exceeded the maximum of {{count}} {{files}}.',\n labelUploadFailed: 'Upload failed. Please try again.',\n ariaLabelBrowseFiles: 'Browse files',\n ariaLabelDropzone: 'Upload area. Click to browse or drag and drop files.',\n ariaLabelFileInput: 'Upload file',\n ariaLabelRemoveFile: 'Remove file',\n ariaLabelCancelUpload: 'Cancel upload',\n ariaLabelRetryUpload: 'Retry upload',\n ariaLabelUploadingStatus: 'Upload in progress',\n ariaLabelUploadedStatus: 'Upload completed',\n ariaLabelUploadFailedStatus: 'Upload failed'\n};\n\nexport const UploadAreaDragDrop = BaseTemplate.bind({});\nUploadAreaDragDrop.args = {\n ...Default.args,\n dragAndDrop: true\n};\n\n// Demo UploadStatesDemo\nexport const UploadStatesDemo = BaseTemplate.bind({});\nUploadStatesDemo.args = {\n ...Default.args,\n dragAndDrop: true\n};\nUploadStatesDemo.parameters = {\n docs: {\n description: {\n story: 'Visual preview of all file states (success, upload in progress, rejected).'\n }\n }\n};\nUploadStatesDemo.decorators = [\n (storyFn) => {\n const el = storyFn();\n setTimeout(() => (el as any)?.injectDemoState?.(), 0);\n return el;\n }\n];\n\nUploadStatesDemo.argTypes = {\n ...hideAllControlsExcept(['dragAndDrop']),\n ...disableCustomEventControls\n};\n\n// Demo UploadRequiredError\nexport const UploadRequiredError = BaseTemplate.bind({});\nUploadRequiredError.args = {\n ...Default.args,\n required: true\n};\nUploadRequiredError.parameters = {\n docs: {\n description: {\n story: 'Demonstrates the error state when the upload is required but no files have been added.'\n }\n }\n};\nUploadRequiredError.decorators = [\n (storyFn) => {\n const el = storyFn();\n setTimeout(() => (el as any)?.triggerDemoValidation?.(), 100);\n return el;\n }\n];\n\nUploadRequiredError.argTypes = {\n ...hideAllControlsExcept(['dragAndDrop']),\n ...disableCustomEventControls\n};\n"]}
@@ -1,8 +1,7 @@
1
- import type { Meta, StoryObj } from '@storybook/html';
1
+ import type { Meta } from '@storybook/html';
2
2
  declare const meta: Meta;
3
3
  export default meta;
4
- type Story = StoryObj;
5
- export declare const UploadFileButton: Story;
6
- export declare const UploadAreaDragDrop: Story;
7
- export declare const UploadStatesDemo: Story;
8
- export declare const UploadRequiredError: Story;
4
+ export declare const Default: any;
5
+ export declare const UploadAreaDragDrop: any;
6
+ export declare const UploadStatesDemo: any;
7
+ export declare const UploadRequiredError: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infineon/infineon-design-system-stencil",
3
- "version": "33.3.1--canary.1824.9e747abc2c6c3dcc35abd2895ce37d503bd1f141.0",
3
+ "version": "33.3.1--canary.1824.e1559ee81653274f5bb99ff7cef4239151a38f75.0",
4
4
  "private": false,
5
5
  "description": "Infineon design system Stencil web components",
6
6
  "homepage": "https://infineon.github.io/infineon-design-system-stencil",