@flipdish/ui-library 0.31.8 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/components/molecules/Carousel/hooks/useCarouselScroll.cjs +81 -0
  2. package/dist/components/molecules/Carousel/hooks/useCarouselScroll.cjs.map +1 -0
  3. package/dist/components/molecules/Carousel/hooks/useCarouselScroll.d.ts +46 -0
  4. package/dist/components/molecules/Carousel/hooks/useCarouselScroll.d.ts.map +1 -0
  5. package/dist/components/molecules/Carousel/hooks/useCarouselScroll.js +79 -0
  6. package/dist/components/molecules/Carousel/hooks/useCarouselScroll.js.map +1 -0
  7. package/dist/components/molecules/Carousel/index.cjs +8 -55
  8. package/dist/components/molecules/Carousel/index.cjs.map +1 -1
  9. package/dist/components/molecules/Carousel/index.d.ts +3 -7
  10. package/dist/components/molecules/Carousel/index.d.ts.map +1 -1
  11. package/dist/components/molecules/Carousel/index.js +9 -56
  12. package/dist/components/molecules/Carousel/index.js.map +1 -1
  13. package/dist/components/molecules/CodeSnippet/codeSnippet.utils.cjs +17 -0
  14. package/dist/components/molecules/CodeSnippet/codeSnippet.utils.cjs.map +1 -0
  15. package/dist/components/molecules/CodeSnippet/codeSnippet.utils.d.ts +8 -0
  16. package/dist/components/molecules/CodeSnippet/codeSnippet.utils.d.ts.map +1 -0
  17. package/dist/components/molecules/CodeSnippet/codeSnippet.utils.js +15 -0
  18. package/dist/components/molecules/CodeSnippet/codeSnippet.utils.js.map +1 -0
  19. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetCollapse.cjs +29 -0
  20. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetCollapse.cjs.map +1 -0
  21. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetCollapse.d.ts +29 -0
  22. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetCollapse.d.ts.map +1 -0
  23. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetCollapse.js +27 -0
  24. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetCollapse.js.map +1 -0
  25. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetHighlight.cjs +23 -0
  26. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetHighlight.cjs.map +1 -0
  27. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetHighlight.d.ts +21 -0
  28. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetHighlight.d.ts.map +1 -0
  29. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetHighlight.js +21 -0
  30. package/dist/components/molecules/CodeSnippet/hooks/useCodeSnippetHighlight.js.map +1 -0
  31. package/dist/components/molecules/CodeSnippet/index.cjs +7 -22
  32. package/dist/components/molecules/CodeSnippet/index.cjs.map +1 -1
  33. package/dist/components/molecules/CodeSnippet/index.d.ts.map +1 -1
  34. package/dist/components/molecules/CodeSnippet/index.js +8 -23
  35. package/dist/components/molecules/CodeSnippet/index.js.map +1 -1
  36. package/dist/components/molecules/Dropdown/index.cjs +3 -2
  37. package/dist/components/molecules/Dropdown/index.cjs.map +1 -1
  38. package/dist/components/molecules/Dropdown/index.d.ts +9 -4
  39. package/dist/components/molecules/Dropdown/index.d.ts.map +1 -1
  40. package/dist/components/molecules/Dropdown/index.js +4 -3
  41. package/dist/components/molecules/Dropdown/index.js.map +1 -1
  42. package/dist/components/molecules/Tabs/index.cjs +1 -1
  43. package/dist/components/molecules/Tabs/index.cjs.map +1 -1
  44. package/dist/components/molecules/Tabs/index.js +1 -1
  45. package/dist/components/molecules/Tabs/index.js.map +1 -1
  46. package/dist/components/organisms/Charts/components/Metrics.cjs +1 -1
  47. package/dist/components/organisms/Charts/components/Metrics.cjs.map +1 -1
  48. package/dist/components/organisms/Charts/components/Metrics.js +1 -1
  49. package/dist/components/organisms/Charts/components/Metrics.js.map +1 -1
  50. package/dist/components/organisms/DatePicker/calendarCell.utils.cjs +53 -0
  51. package/dist/components/organisms/DatePicker/calendarCell.utils.cjs.map +1 -0
  52. package/dist/components/organisms/DatePicker/calendarCell.utils.d.ts +70 -0
  53. package/dist/components/organisms/DatePicker/calendarCell.utils.d.ts.map +1 -0
  54. package/dist/components/organisms/DatePicker/calendarCell.utils.js +49 -0
  55. package/dist/components/organisms/DatePicker/calendarCell.utils.js.map +1 -0
  56. package/dist/components/organisms/DatePicker/components/Cell.cjs +24 -30
  57. package/dist/components/organisms/DatePicker/components/Cell.cjs.map +1 -1
  58. package/dist/components/organisms/DatePicker/components/Cell.d.ts.map +1 -1
  59. package/dist/components/organisms/DatePicker/components/Cell.js +25 -31
  60. package/dist/components/organisms/DatePicker/components/Cell.js.map +1 -1
  61. package/dist/components/organisms/FileUpload/fileUpload.utils.cjs +69 -0
  62. package/dist/components/organisms/FileUpload/fileUpload.utils.cjs.map +1 -0
  63. package/dist/components/organisms/FileUpload/fileUpload.utils.d.ts +46 -0
  64. package/dist/components/organisms/FileUpload/fileUpload.utils.d.ts.map +1 -0
  65. package/dist/components/organisms/FileUpload/fileUpload.utils.js +65 -0
  66. package/dist/components/organisms/FileUpload/fileUpload.utils.js.map +1 -0
  67. package/dist/components/organisms/FileUpload/index.cjs +15 -66
  68. package/dist/components/organisms/FileUpload/index.cjs.map +1 -1
  69. package/dist/components/organisms/FileUpload/index.d.ts.map +1 -1
  70. package/dist/components/organisms/FileUpload/index.js +13 -64
  71. package/dist/components/organisms/FileUpload/index.js.map +1 -1
  72. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.cjs +8 -18
  73. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.cjs.map +1 -1
  74. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.d.ts +8 -22
  75. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.d.ts.map +1 -1
  76. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.js +10 -20
  77. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.js.map +1 -1
  78. package/dist/components/organisms/FilterBar/index.cjs +2 -18
  79. package/dist/components/organisms/FilterBar/index.cjs.map +1 -1
  80. package/dist/components/organisms/FilterBar/index.d.ts +4 -25
  81. package/dist/components/organisms/FilterBar/index.d.ts.map +1 -1
  82. package/dist/components/organisms/FilterBar/index.js +3 -19
  83. package/dist/components/organisms/FilterBar/index.js.map +1 -1
  84. package/dist/components/organisms/PageHeader/index.cjs +1 -1
  85. package/dist/components/organisms/PageHeader/index.cjs.map +1 -1
  86. package/dist/components/organisms/PageHeader/index.d.ts +2 -2
  87. package/dist/components/organisms/PageHeader/index.js +1 -1
  88. package/dist/components/organisms/PageHeader/index.js.map +1 -1
  89. package/dist/components/organisms/Table/index.cjs +1 -1
  90. package/dist/components/organisms/Table/index.cjs.map +1 -1
  91. package/dist/components/organisms/Table/index.js +1 -1
  92. package/dist/components/organisms/Table/index.js.map +1 -1
  93. package/dist/components/organisms/TreeView/index.cjs +11 -26
  94. package/dist/components/organisms/TreeView/index.cjs.map +1 -1
  95. package/dist/components/organisms/TreeView/index.d.ts.map +1 -1
  96. package/dist/components/organisms/TreeView/index.js +12 -27
  97. package/dist/components/organisms/TreeView/index.js.map +1 -1
  98. package/dist/components/organisms/TreeView/treeView.utils.cjs +40 -0
  99. package/dist/components/organisms/TreeView/treeView.utils.cjs.map +1 -1
  100. package/dist/components/organisms/TreeView/treeView.utils.d.ts +37 -0
  101. package/dist/components/organisms/TreeView/treeView.utils.d.ts.map +1 -1
  102. package/dist/components/organisms/TreeView/treeView.utils.js +39 -1
  103. package/dist/components/organisms/TreeView/treeView.utils.js.map +1 -1
  104. package/package.json +2 -2
@@ -1,51 +1,45 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { cx } from '@flipdish/ui-library/utilities/cx';
3
3
  import { useTestIdPrefix, joinTestId, slugifyTestId } from '@flipdish/ui-library/utilities/testIdUtils';
4
- import { getDayOfWeek, isToday, getLocalTimeZone } from '@internationalized/date';
4
+ import { isToday, getLocalTimeZone } from '@internationalized/date';
5
5
  import { useContext } from 'react';
6
6
  import { useLocale, RangeCalendarStateContext, CalendarCell as CalendarCell$1 } from 'react-aria-components';
7
+ import { getCalendarCellRangePosition, getCalendarCellOutline, isCalendarCellMarkedSelected } from '../calendarCell.utils.js';
7
8
 
8
9
  const CalendarCell = ({ date, isHighlighted, showOutOfRangeDates = false, ...props }) => {
9
10
  const { locale } = useLocale();
10
- const dayOfWeek = getDayOfWeek(date, locale);
11
- // Read the calendar's actual live selection from the state context that `AriaRangeCalendar`
12
- // provides to its own descendants, rather than the ambient `RangeCalendarContext` props
13
- // context — the latter is merged into `AriaRangeCalendar`'s own `value`/`defaultValue` props
14
- // via `useContextProps`, so relying on it here would re-couple this cell's rendering to that
15
- // merge (and any future changes to how a standalone `RangeCalendar` seeds its fallback context).
11
+ // The props context is merged into the calendar's value, so the cell reads the state context instead.
16
12
  const rangeCalendarState = useContext(RangeCalendarStateContext);
17
13
  const isRangeCalendar = !!rangeCalendarState;
18
- const start = rangeCalendarState?.value?.start;
19
- const end = rangeCalendarState?.value?.end;
20
- const isAfterStart = start ? date.compare(start) > 0 : true;
21
- const isBeforeEnd = end ? date.compare(end) < 0 : true;
22
- const isAfterOrOnStart = start && date.compare(start) >= 0;
23
- const isBeforeOrOnEnd = end && date.compare(end) <= 0;
24
- const isInRange = isAfterOrOnStart && isBeforeOrOnEnd;
25
- const lastDayOfMonth = new Date(date.year, date.month, 0).getDate();
26
- const isLastDayOfMonth = date.day === lastDayOfMonth;
27
- const isFirstDayOfMonth = date.day === 1;
14
+ const position = getCalendarCellRangePosition(date, rangeCalendarState?.value ?? null);
28
15
  const isTodayDate = isToday(date, getLocalTimeZone());
29
16
  const prefix = useTestIdPrefix();
30
17
  const cellTestId = prefix ? joinTestId(prefix, `cell-${slugifyTestId(date.toString())}`) : undefined;
31
18
  return (jsx(CalendarCell$1, { ...props, date: date, "data-testid": cellTestId, className: ({ isDisabled, isFocusVisible, isSelectionStart, isSelectionEnd, isSelected, isOutsideMonth }) => {
32
- const isRoundedLeft = isSelectionStart || dayOfWeek === 0;
33
- const isRoundedRight = isSelectionEnd || dayOfWeek === 6;
34
- return cx('relative size-10 focus:outline-hidden', isRoundedLeft && 'rounded-l-full', isRoundedRight && 'rounded-r-full', isInRange && isDisabled && 'bg-secondary', isSelected && isRangeCalendar && 'bg-secondary', isDisabled ? 'pointer-events-none' : 'cursor-pointer', isFocusVisible ? 'z-10' : 'z-0', isOutsideMonth && 'opacity-50', isRangeCalendar && isOutsideMonth && !showOutOfRangeDates && 'hidden',
35
- // Show gradient on last day of month if it's within the selected range.
36
- isLastDayOfMonth &&
37
- isSelected &&
38
- isBeforeEnd &&
39
- isRangeCalendar &&
19
+ const { isRoundedLeft, isRoundedRight, showLeadingGradient, showTrailingGradient } = getCalendarCellOutline({
20
+ date,
21
+ locale,
22
+ isSelectionStart,
23
+ isSelectionEnd,
24
+ isSelected,
25
+ isRangeCalendar,
26
+ position,
27
+ });
28
+ return cx('relative size-10 focus:outline-hidden', isRoundedLeft && 'rounded-l-full', isRoundedRight && 'rounded-r-full', position.isInRange && isDisabled && 'bg-secondary', isSelected && isRangeCalendar && 'bg-secondary', isDisabled ? 'pointer-events-none' : 'cursor-pointer', isFocusVisible ? 'z-10' : 'z-0', isOutsideMonth && 'opacity-50', isRangeCalendar && isOutsideMonth && !showOutOfRangeDates && 'hidden',
29
+ // The range continues into the next month, so the highlight must bleed past this cell.
30
+ showTrailingGradient &&
40
31
  'after:absolute after:inset-0 after:translate-x-full after:bg-gradient-to-l after:from-transparent after:to-bg-secondary in-[[role=gridcell]:last-child]:after:hidden',
41
- // Show gradient on first day of month if it's within the selected range.
42
- isFirstDayOfMonth &&
43
- isSelected &&
44
- isAfterStart &&
45
- isRangeCalendar &&
32
+ // The range continues from the previous month, so the highlight must bleed past this cell.
33
+ showLeadingGradient &&
46
34
  'after:absolute after:inset-0 after:-translate-x-full after:bg-gradient-to-r after:from-transparent after:to-bg-secondary in-[[role=gridcell]:first-child]:after:hidden');
47
35
  }, children: ({ isDisabled, isFocusVisible, isSelectionStart, isSelectionEnd, isSelected, formattedDate }) => {
48
- const markedAsSelected = isSelectionStart || isSelectionEnd || (isSelected && !isDisabled && !isRangeCalendar);
36
+ const markedAsSelected = isCalendarCellMarkedSelected({
37
+ isSelectionStart,
38
+ isSelectionEnd,
39
+ isSelected,
40
+ isDisabled,
41
+ isRangeCalendar,
42
+ });
49
43
  return (jsxs("div", { className: cx('relative flex size-full items-center justify-center rounded-full text-sm text-secondary hover:text-secondary_hover',
50
44
  // Disabled state.
51
45
  isDisabled && 'text-secondary/50',
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","sources":["../../../../../src/components/organisms/DatePicker/components/Cell.tsx"],"sourcesContent":[null],"names":["_jsx","AriaCalendarCell","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Cell.js","sources":["../../../../../src/components/organisms/DatePicker/components/Cell.tsx"],"sourcesContent":[null],"names":["_jsx","AriaCalendarCell","_jsxs"],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Formats a byte count the way the upload list prints it, flooring into the largest 1024-based unit that still fits.
5
+ *
6
+ * @param bytes File size in bytes. `0` is reported as `0 KB` rather than `0 B`.
7
+ * @returns A label such as `0 KB`, `12 KB` or `3 MB`.
8
+ */
9
+ const getReadableFileSize = (bytes) => {
10
+ if (bytes === 0)
11
+ return '0 KB';
12
+ const suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
13
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
14
+ return `${Math.floor(bytes / 1024 ** i)} ${suffixes[i]}`;
15
+ };
16
+ /**
17
+ * Reports whether a file matches an HTML accept string.
18
+ *
19
+ * @param file Name and MIME type to test. The extension is the segment after the last dot, compared case-insensitively; the MIME type is compared exactly.
20
+ * @param accept Comma-separated extensions (`.pdf`), wildcards (`image/*`) or exact MIME types. Omitted or empty accepts every file.
21
+ * @returns `true` when any token matches, or when `accept` is omitted or empty.
22
+ */
23
+ const isFileTypeAccepted = (file, accept) => {
24
+ if (!accept)
25
+ return true;
26
+ const acceptedTypes = accept.split(',').map((type) => type.trim());
27
+ return acceptedTypes.some((acceptedType) => {
28
+ if (acceptedType.startsWith('.')) {
29
+ const extension = `.${file.name.split('.').pop()?.toLowerCase()}`;
30
+ return extension === acceptedType.toLowerCase();
31
+ }
32
+ if (acceptedType.endsWith('/*')) {
33
+ const typePrefix = acceptedType.split('/')[0];
34
+ return file.type.startsWith(`${typePrefix}/`);
35
+ }
36
+ return file.type === acceptedType;
37
+ });
38
+ };
39
+ /**
40
+ * Splits dropped files into accepted, wrong-type and oversized lists. Size is judged before type.
41
+ *
42
+ * @param files Files from a drop or the file input, in arrival order.
43
+ * @param options Limits from the drop zone.
44
+ * @returns The three lists, each preserving input order.
45
+ */
46
+ const classifyDroppedFiles = (files, options) => {
47
+ const accepted = [];
48
+ const unaccepted = [];
49
+ const oversized = [];
50
+ const filesToProcess = options.allowsMultiple ? files : files.slice(0, 1);
51
+ for (const file of filesToProcess) {
52
+ if (options.maxSize && file.size > options.maxSize) {
53
+ oversized.push(file);
54
+ continue;
55
+ }
56
+ if (isFileTypeAccepted(file, options.accept)) {
57
+ accepted.push(file);
58
+ }
59
+ else {
60
+ unaccepted.push(file);
61
+ }
62
+ }
63
+ return { accepted, unaccepted, oversized };
64
+ };
65
+
66
+ exports.classifyDroppedFiles = classifyDroppedFiles;
67
+ exports.getReadableFileSize = getReadableFileSize;
68
+ exports.isFileTypeAccepted = isFileTypeAccepted;
69
+ //# sourceMappingURL=fileUpload.utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUpload.utils.cjs","sources":["../../../../src/components/organisms/FileUpload/fileUpload.utils.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAwBA;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAa,KAAY;IAC3D,IAAI,KAAK,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM;IAE9B,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACtE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEtD,IAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC1D;AAEA;;;;;;AAMG;MACU,kBAAkB,GAAG,CAAC,IAAwC,EAAE,MAAe,KAAa;AACvG,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IAExB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AAElE,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,KAAI;AACzC,QAAA,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,MAAM,SAAS,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE;AACjE,YAAA,OAAO,SAAS,KAAK,YAAY,CAAC,WAAW,EAAE;QACjD;AAEA,QAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAC;QAC/C;AAEA,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY;AACnC,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;AAMG;MACU,oBAAoB,GAAG,CAAwB,KAAmB,EAAE,OAAoC,KAA+B;IAClJ,MAAM,QAAQ,GAAQ,EAAE;IACxB,MAAM,UAAU,GAAQ,EAAE;IAC1B,MAAM,SAAS,GAAQ,EAAE;IACzB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEzE,IAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;AACjC,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;AAClD,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB;QACF;QAEA,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC5C,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB;aAAO;AACL,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB;IACF;AAEA,IAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE;AAC5C;;;;"}
@@ -0,0 +1,46 @@
1
+ /** A dropped file judged by its name, MIME type and byte size. */
2
+ interface DroppedFile {
3
+ name: string;
4
+ type: string;
5
+ size: number;
6
+ }
7
+ /** Files grouped by the drop zone's accept and size rules. */
8
+ export interface ClassifiedDroppedFiles<T> {
9
+ accepted: T[];
10
+ unaccepted: T[];
11
+ oversized: T[];
12
+ }
13
+ /** Limits the drop zone applies while sorting a drop. */
14
+ export interface ClassifyDroppedFilesOptions {
15
+ /** HTML accept string. Omitted or empty accepts every type. */
16
+ accept?: string;
17
+ /** When false, only the first file is classified and the rest are ignored. */
18
+ allowsMultiple: boolean;
19
+ /** Files larger than this many bytes are oversized. `0` and omitted skip the size check. */
20
+ maxSize?: number;
21
+ }
22
+ /**
23
+ * Formats a byte count the way the upload list prints it, flooring into the largest 1024-based unit that still fits.
24
+ *
25
+ * @param bytes File size in bytes. `0` is reported as `0 KB` rather than `0 B`.
26
+ * @returns A label such as `0 KB`, `12 KB` or `3 MB`.
27
+ */
28
+ export declare const getReadableFileSize: (bytes: number) => string;
29
+ /**
30
+ * Reports whether a file matches an HTML accept string.
31
+ *
32
+ * @param file Name and MIME type to test. The extension is the segment after the last dot, compared case-insensitively; the MIME type is compared exactly.
33
+ * @param accept Comma-separated extensions (`.pdf`), wildcards (`image/*`) or exact MIME types. Omitted or empty accepts every file.
34
+ * @returns `true` when any token matches, or when `accept` is omitted or empty.
35
+ */
36
+ export declare const isFileTypeAccepted: (file: Pick<DroppedFile, "name" | "type">, accept?: string) => boolean;
37
+ /**
38
+ * Splits dropped files into accepted, wrong-type and oversized lists. Size is judged before type.
39
+ *
40
+ * @param files Files from a drop or the file input, in arrival order.
41
+ * @param options Limits from the drop zone.
42
+ * @returns The three lists, each preserving input order.
43
+ */
44
+ export declare const classifyDroppedFiles: <T extends DroppedFile>(files: readonly T[], options: ClassifyDroppedFilesOptions) => ClassifiedDroppedFiles<T>;
45
+ export {};
46
+ //# sourceMappingURL=fileUpload.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUpload.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/FileUpload/fileUpload.utils.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,SAAS,EAAE,CAAC,EAAE,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,WAAW,2BAA2B;IAC1C,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,cAAc,EAAE,OAAO,CAAC;IACxB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,KAAG,MAOnD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,SAAS,MAAM,KAAG,OAkB9F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,WAAW,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,SAAS,2BAA2B,KAAG,sBAAsB,CAAC,CAAC,CAoB/I,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Formats a byte count the way the upload list prints it, flooring into the largest 1024-based unit that still fits.
3
+ *
4
+ * @param bytes File size in bytes. `0` is reported as `0 KB` rather than `0 B`.
5
+ * @returns A label such as `0 KB`, `12 KB` or `3 MB`.
6
+ */
7
+ const getReadableFileSize = (bytes) => {
8
+ if (bytes === 0)
9
+ return '0 KB';
10
+ const suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
11
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
12
+ return `${Math.floor(bytes / 1024 ** i)} ${suffixes[i]}`;
13
+ };
14
+ /**
15
+ * Reports whether a file matches an HTML accept string.
16
+ *
17
+ * @param file Name and MIME type to test. The extension is the segment after the last dot, compared case-insensitively; the MIME type is compared exactly.
18
+ * @param accept Comma-separated extensions (`.pdf`), wildcards (`image/*`) or exact MIME types. Omitted or empty accepts every file.
19
+ * @returns `true` when any token matches, or when `accept` is omitted or empty.
20
+ */
21
+ const isFileTypeAccepted = (file, accept) => {
22
+ if (!accept)
23
+ return true;
24
+ const acceptedTypes = accept.split(',').map((type) => type.trim());
25
+ return acceptedTypes.some((acceptedType) => {
26
+ if (acceptedType.startsWith('.')) {
27
+ const extension = `.${file.name.split('.').pop()?.toLowerCase()}`;
28
+ return extension === acceptedType.toLowerCase();
29
+ }
30
+ if (acceptedType.endsWith('/*')) {
31
+ const typePrefix = acceptedType.split('/')[0];
32
+ return file.type.startsWith(`${typePrefix}/`);
33
+ }
34
+ return file.type === acceptedType;
35
+ });
36
+ };
37
+ /**
38
+ * Splits dropped files into accepted, wrong-type and oversized lists. Size is judged before type.
39
+ *
40
+ * @param files Files from a drop or the file input, in arrival order.
41
+ * @param options Limits from the drop zone.
42
+ * @returns The three lists, each preserving input order.
43
+ */
44
+ const classifyDroppedFiles = (files, options) => {
45
+ const accepted = [];
46
+ const unaccepted = [];
47
+ const oversized = [];
48
+ const filesToProcess = options.allowsMultiple ? files : files.slice(0, 1);
49
+ for (const file of filesToProcess) {
50
+ if (options.maxSize && file.size > options.maxSize) {
51
+ oversized.push(file);
52
+ continue;
53
+ }
54
+ if (isFileTypeAccepted(file, options.accept)) {
55
+ accepted.push(file);
56
+ }
57
+ else {
58
+ unaccepted.push(file);
59
+ }
60
+ }
61
+ return { accepted, unaccepted, oversized };
62
+ };
63
+
64
+ export { classifyDroppedFiles, getReadableFileSize, isFileTypeAccepted };
65
+ //# sourceMappingURL=fileUpload.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUpload.utils.js","sources":["../../../../src/components/organisms/FileUpload/fileUpload.utils.ts"],"sourcesContent":[null],"names":[],"mappings":"AAwBA;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAa,KAAY;IAC3D,IAAI,KAAK,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM;IAE9B,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACtE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEtD,IAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC1D;AAEA;;;;;;AAMG;MACU,kBAAkB,GAAG,CAAC,IAAwC,EAAE,MAAe,KAAa;AACvG,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IAExB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AAElE,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,KAAI;AACzC,QAAA,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,MAAM,SAAS,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE;AACjE,YAAA,OAAO,SAAS,KAAK,YAAY,CAAC,WAAW,EAAE;QACjD;AAEA,QAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAC;QAC/C;AAEA,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY;AACnC,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;AAMG;MACU,oBAAoB,GAAG,CAAwB,KAAmB,EAAE,OAAoC,KAA+B;IAClJ,MAAM,QAAQ,GAAQ,EAAE;IACxB,MAAM,UAAU,GAAQ,EAAE;IAC1B,MAAM,SAAS,GAAQ,EAAE;IACzB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEzE,IAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;AACjC,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;AAClD,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB;QACF;QAEA,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC5C,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB;aAAO;AACL,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB;IACF;AAEA,IAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE;AAC5C;;"}
@@ -10,18 +10,13 @@ var cx = require('@flipdish/ui-library/utilities/cx');
10
10
  var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
11
11
  var react = require('motion/react');
12
12
  var React = require('react');
13
+ var fileUpload_utils = require('./fileUpload.utils.cjs');
13
14
 
14
- /**
15
- * Returns a human-readable file size.
16
- * @param bytes - The size of the file in bytes.
17
- * @returns A string representing the file size in a human-readable format.
18
- */
19
- const getReadableFileSize = (bytes) => {
20
- if (bytes === 0)
21
- return '0 KB';
22
- const suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
23
- const i = Math.floor(Math.log(bytes) / Math.log(1024));
24
- return `${Math.floor(bytes / 1024 ** i)} ${suffixes[i]}`;
15
+ const toFileList = (files) => {
16
+ const dataTransfer = new DataTransfer();
17
+ for (const file of files)
18
+ dataTransfer.items.add(file);
19
+ return dataTransfer.files;
25
20
  };
26
21
  /**
27
22
  * Drop target with an upload button that accepts files by drag and drop or the file picker, sorting
@@ -37,26 +32,6 @@ const FileUploadDropZone = ({ className, hint, isDisabled, accept, allowsMultipl
37
32
  const [isDraggingOver, setIsDraggingOver] = React.useState(false);
38
33
  const prefix = testIdUtils.useTestIdPrefix() ?? testIdUtils.rootTestId('file-upload');
39
34
  const dropzoneTestId = dataTestId ?? testIdUtils.joinTestId(prefix, 'dropzone');
40
- const isFileTypeAccepted = (file) => {
41
- if (!accept)
42
- return true;
43
- // Split the accept string into individual types
44
- const acceptedTypes = accept.split(',').map((type) => type.trim());
45
- return acceptedTypes.some((acceptedType) => {
46
- // Handle file extensions (e.g., .pdf, .doc)
47
- if (acceptedType.startsWith('.')) {
48
- const extension = `.${file.name.split('.').pop()?.toLowerCase()}`;
49
- return extension === acceptedType.toLowerCase();
50
- }
51
- // Handle wildcards (e.g., image/*)
52
- if (acceptedType.endsWith('/*')) {
53
- const typePrefix = acceptedType.split('/')[0];
54
- return file.type.startsWith(`${typePrefix}/`);
55
- }
56
- // Handle exact MIME types (e.g., application/pdf)
57
- return file.type === acceptedType;
58
- });
59
- };
60
35
  const handleDragIn = (event) => {
61
36
  if (isDisabled)
62
37
  return;
@@ -74,47 +49,21 @@ const FileUploadDropZone = ({ className, hint, isDisabled, accept, allowsMultipl
74
49
  const processFiles = (files) => {
75
50
  // Reset the invalid state when processing files.
76
51
  setIsInvalid(false);
77
- const acceptedFiles = [];
78
- const unacceptedFiles = [];
79
- const oversizedFiles = [];
80
- // If multiple files are not allowed, only process the first file
81
- const filesToProcess = allowsMultiple ? files : files.slice(0, 1);
82
- filesToProcess.forEach((file) => {
83
- // Check file size first
84
- if (maxSize && file.size > maxSize) {
85
- oversizedFiles.push(file);
86
- return;
87
- }
88
- // Then check file type
89
- if (isFileTypeAccepted(file)) {
90
- acceptedFiles.push(file);
91
- }
92
- else {
93
- unacceptedFiles.push(file);
94
- }
52
+ const { accepted: acceptedFiles, unaccepted: unacceptedFiles, oversized: oversizedFiles, } = fileUpload_utils.classifyDroppedFiles(files, {
53
+ accept,
54
+ allowsMultiple,
55
+ maxSize,
95
56
  });
96
- // Handle oversized files
97
57
  if (oversizedFiles.length > 0 && typeof onSizeLimitExceed === 'function') {
98
- const dataTransfer = new DataTransfer();
99
- // biome-ignore lint/suspicious/useIterableCallbackReturn: We need to return a value from the callback to satisfy the type checker
100
- oversizedFiles.forEach((file) => dataTransfer.items.add(file));
101
58
  setIsInvalid(true);
102
- onSizeLimitExceed(dataTransfer.files);
59
+ onSizeLimitExceed(toFileList(oversizedFiles));
103
60
  }
104
- // Handle accepted files
105
61
  if (acceptedFiles.length > 0 && typeof onDropFiles === 'function') {
106
- const dataTransfer = new DataTransfer();
107
- // biome-ignore lint/suspicious/useIterableCallbackReturn: We need to return a value from the callback to satisfy the type checker
108
- acceptedFiles.forEach((file) => dataTransfer.items.add(file));
109
- onDropFiles(dataTransfer.files);
62
+ onDropFiles(toFileList(acceptedFiles));
110
63
  }
111
- // Handle unaccepted files
112
64
  if (unacceptedFiles.length > 0 && typeof onDropUnacceptedFiles === 'function') {
113
- const unacceptedDataTransfer = new DataTransfer();
114
- // biome-ignore lint/suspicious/useIterableCallbackReturn: We need to return a value from the callback to satisfy the type checker
115
- unacceptedFiles.forEach((file) => unacceptedDataTransfer.items.add(file));
116
65
  setIsInvalid(true);
117
- onDropUnacceptedFiles(unacceptedDataTransfer.files);
66
+ onDropUnacceptedFiles(toFileList(unacceptedFiles));
118
67
  }
119
68
  // Clear the input value to ensure the same file can be selected again
120
69
  if (inputRef.current) {
@@ -137,12 +86,12 @@ const FileUploadDropZone = ({ className, hint, isDisabled, accept, allowsMultipl
137
86
  const FileListItemProgressBar = ({ name, size, progress, failed, type, fileIconVariant, onDelete, onRetry, className }) => {
138
87
  const isComplete = progress === 100;
139
88
  const prefix = testIdUtils.useTestIdPrefix() ?? testIdUtils.rootTestId('file-upload');
140
- return (jsxRuntime.jsxs(react.motion.li, { layout: "position", "data-testid": testIdUtils.joinTestId(prefix, `item-${testIdUtils.slugifyTestId(name)}`), className: cx.cx('relative flex gap-3 rounded-xl bg-primary p-4 ring-1 ring-secondary transition-shadow duration-100 ease-linear ring-inset', failed && 'ring-2 ring-error', className), children: [jsxRuntime.jsx(uiIcons.FileIcon, { className: "size-10 shrink-0 dark:hidden", type: type ?? 'empty', theme: "light", variant: fileIconVariant ?? 'default' }), jsxRuntime.jsx(uiIcons.FileIcon, { className: "size-10 shrink-0 not-dark:hidden", type: type ?? 'empty', theme: "dark", variant: fileIconVariant ?? 'default' }), jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col items-start", children: [jsxRuntime.jsxs("div", { className: "flex w-full max-w-full min-w-0 flex-1", children: [jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-secondary", children: name }), jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [jsxRuntime.jsx("p", { className: "truncate text-sm whitespace-nowrap text-tertiary", children: getReadableFileSize(size) }), jsxRuntime.jsx("hr", { className: "h-3 w-px rounded-t-full rounded-b-full border-none bg-border-primary" }), jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [isComplete && jsxRuntime.jsx(uiIcons.CheckCircle, { className: "size-4 stroke-[2.5px] text-fg-success-primary" }), isComplete && jsxRuntime.jsx("p", { className: "text-sm font-medium text-success-primary", children: "Complete" }), !isComplete && !failed && jsxRuntime.jsx(uiIcons.UploadCloud02, { className: "size-4 stroke-[2.5px] text-fg-quaternary" }), !isComplete && !failed && jsxRuntime.jsx("p", { className: "text-sm font-medium text-quaternary", children: "Uploading..." }), failed && jsxRuntime.jsx(uiIcons.XCircle, { className: "size-4 text-fg-error-primary" }), failed && jsxRuntime.jsx("p", { className: "text-sm font-medium text-error-primary", children: "Failed" })] })] })] }), jsxRuntime.jsx(UtilityButton.ButtonUtility, { color: "tertiary", tooltip: "Delete", icon: uiIcons.Trash01, size: "xs", className: "-mt-2 -mr-2 self-start", onClick: onDelete })] }), !failed && (jsxRuntime.jsx("div", { className: "mt-1 w-full", children: jsxRuntime.jsx(ProgressBar.ProgressBar, { labelPosition: "right", max: 100, min: 0, value: progress }) })), failed && (jsxRuntime.jsx(Button.Button, { color: "link-destructive", size: "sm", onClick: onRetry, className: "mt-1.5", children: "Try again" }))] })] }));
89
+ return (jsxRuntime.jsxs(react.motion.li, { layout: "position", "data-testid": testIdUtils.joinTestId(prefix, `item-${testIdUtils.slugifyTestId(name)}`), className: cx.cx('relative flex gap-3 rounded-xl bg-primary p-4 ring-1 ring-secondary transition-shadow duration-100 ease-linear ring-inset', failed && 'ring-2 ring-error', className), children: [jsxRuntime.jsx(uiIcons.FileIcon, { className: "size-10 shrink-0 dark:hidden", type: type ?? 'empty', theme: "light", variant: fileIconVariant ?? 'default' }), jsxRuntime.jsx(uiIcons.FileIcon, { className: "size-10 shrink-0 not-dark:hidden", type: type ?? 'empty', theme: "dark", variant: fileIconVariant ?? 'default' }), jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col items-start", children: [jsxRuntime.jsxs("div", { className: "flex w-full max-w-full min-w-0 flex-1", children: [jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-secondary", children: name }), jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [jsxRuntime.jsx("p", { className: "truncate text-sm whitespace-nowrap text-tertiary", children: fileUpload_utils.getReadableFileSize(size) }), jsxRuntime.jsx("hr", { className: "h-3 w-px rounded-t-full rounded-b-full border-none bg-border-primary" }), jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [isComplete && jsxRuntime.jsx(uiIcons.CheckCircle, { className: "size-4 stroke-[2.5px] text-fg-success-primary" }), isComplete && jsxRuntime.jsx("p", { className: "text-sm font-medium text-success-primary", children: "Complete" }), !isComplete && !failed && jsxRuntime.jsx(uiIcons.UploadCloud02, { className: "size-4 stroke-[2.5px] text-fg-quaternary" }), !isComplete && !failed && jsxRuntime.jsx("p", { className: "text-sm font-medium text-quaternary", children: "Uploading..." }), failed && jsxRuntime.jsx(uiIcons.XCircle, { className: "size-4 text-fg-error-primary" }), failed && jsxRuntime.jsx("p", { className: "text-sm font-medium text-error-primary", children: "Failed" })] })] })] }), jsxRuntime.jsx(UtilityButton.ButtonUtility, { color: "tertiary", tooltip: "Delete", icon: uiIcons.Trash01, size: "xs", className: "-mt-2 -mr-2 self-start", onClick: onDelete })] }), !failed && (jsxRuntime.jsx("div", { className: "mt-1 w-full", children: jsxRuntime.jsx(ProgressBar.ProgressBar, { labelPosition: "right", max: 100, min: 0, value: progress }) })), failed && (jsxRuntime.jsx(Button.Button, { color: "link-destructive", size: "sm", onClick: onRetry, className: "mt-1.5", children: "Try again" }))] })] }));
141
90
  };
142
91
  const FileListItemProgressFill = ({ name, size, progress, failed, type, fileIconVariant, onDelete, onRetry, className }) => {
143
92
  const isComplete = progress === 100;
144
93
  const prefix = testIdUtils.useTestIdPrefix() ?? testIdUtils.rootTestId('file-upload');
145
- return (jsxRuntime.jsxs(react.motion.li, { layout: "position", "data-testid": testIdUtils.joinTestId(prefix, `item-${testIdUtils.slugifyTestId(name)}`), className: cx.cx('relative flex gap-3 overflow-hidden rounded-xl bg-primary p-4', className), children: [jsxRuntime.jsx("div", { style: { transform: `translateX(-${100 - progress}%)` }, className: cx.cx('absolute inset-0 size-full bg-secondary transition duration-75 ease-linear', isComplete && 'opacity-0'), role: "progressbar", "aria-label": "Upload progress", "aria-valuenow": progress, "aria-valuemin": 0, "aria-valuemax": 100 }), jsxRuntime.jsx("div", { className: cx.cx('absolute inset-0 size-full rounded-[inherit] ring-1 ring-secondary transition duration-100 ease-linear ring-inset', failed && 'ring-2 ring-error') }), jsxRuntime.jsx(uiIcons.FileIcon, { className: "relative size-10 shrink-0 dark:hidden", type: type ?? 'empty', theme: "light", variant: fileIconVariant ?? 'solid' }), jsxRuntime.jsx(uiIcons.FileIcon, { className: "relative size-10 shrink-0 not-dark:hidden", type: type ?? 'empty', theme: "dark", variant: fileIconVariant ?? 'solid' }), jsxRuntime.jsxs("div", { className: "relative flex min-w-0 flex-1", children: [jsxRuntime.jsxs("div", { className: "relative flex min-w-0 flex-1 flex-col items-start", children: [jsxRuntime.jsxs("div", { className: "w-full min-w-0 flex-1", children: [jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-secondary", children: name }), jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [jsxRuntime.jsx("p", { className: "text-sm text-tertiary", children: failed ? 'Upload failed, please try again' : getReadableFileSize(size) }), !failed && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("hr", { className: "h-3 w-px rounded-t-full rounded-b-full border-none bg-border-primary" }), jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [isComplete && jsxRuntime.jsx(uiIcons.CheckCircle, { className: "size-4 stroke-[2.5px] text-fg-success-primary" }), !isComplete && jsxRuntime.jsx(uiIcons.UploadCloud02, { className: "size-4 stroke-[2.5px] text-fg-quaternary" }), jsxRuntime.jsxs("p", { className: "text-sm text-tertiary", children: [progress, "%"] })] })] }))] })] }), failed && (jsxRuntime.jsx(Button.Button, { color: "link-destructive", size: "sm", onClick: onRetry, className: "mt-1.5", children: "Try again" }))] }), jsxRuntime.jsx(UtilityButton.ButtonUtility, { color: "tertiary", tooltip: "Delete", icon: uiIcons.Trash01, size: "xs", className: "-mt-2 -mr-2 self-start", onClick: onDelete })] })] }));
94
+ return (jsxRuntime.jsxs(react.motion.li, { layout: "position", "data-testid": testIdUtils.joinTestId(prefix, `item-${testIdUtils.slugifyTestId(name)}`), className: cx.cx('relative flex gap-3 overflow-hidden rounded-xl bg-primary p-4', className), children: [jsxRuntime.jsx("div", { style: { transform: `translateX(-${100 - progress}%)` }, className: cx.cx('absolute inset-0 size-full bg-secondary transition duration-75 ease-linear', isComplete && 'opacity-0'), role: "progressbar", "aria-label": "Upload progress", "aria-valuenow": progress, "aria-valuemin": 0, "aria-valuemax": 100 }), jsxRuntime.jsx("div", { className: cx.cx('absolute inset-0 size-full rounded-[inherit] ring-1 ring-secondary transition duration-100 ease-linear ring-inset', failed && 'ring-2 ring-error') }), jsxRuntime.jsx(uiIcons.FileIcon, { className: "relative size-10 shrink-0 dark:hidden", type: type ?? 'empty', theme: "light", variant: fileIconVariant ?? 'solid' }), jsxRuntime.jsx(uiIcons.FileIcon, { className: "relative size-10 shrink-0 not-dark:hidden", type: type ?? 'empty', theme: "dark", variant: fileIconVariant ?? 'solid' }), jsxRuntime.jsxs("div", { className: "relative flex min-w-0 flex-1", children: [jsxRuntime.jsxs("div", { className: "relative flex min-w-0 flex-1 flex-col items-start", children: [jsxRuntime.jsxs("div", { className: "w-full min-w-0 flex-1", children: [jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-secondary", children: name }), jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [jsxRuntime.jsx("p", { className: "text-sm text-tertiary", children: failed ? 'Upload failed, please try again' : fileUpload_utils.getReadableFileSize(size) }), !failed && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("hr", { className: "h-3 w-px rounded-t-full rounded-b-full border-none bg-border-primary" }), jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [isComplete && jsxRuntime.jsx(uiIcons.CheckCircle, { className: "size-4 stroke-[2.5px] text-fg-success-primary" }), !isComplete && jsxRuntime.jsx(uiIcons.UploadCloud02, { className: "size-4 stroke-[2.5px] text-fg-quaternary" }), jsxRuntime.jsxs("p", { className: "text-sm text-tertiary", children: [progress, "%"] })] })] }))] })] }), failed && (jsxRuntime.jsx(Button.Button, { color: "link-destructive", size: "sm", onClick: onRetry, className: "mt-1.5", children: "Try again" }))] }), jsxRuntime.jsx(UtilityButton.ButtonUtility, { color: "tertiary", tooltip: "Delete", icon: uiIcons.Trash01, size: "xs", className: "-mt-2 -mr-2 self-start", onClick: onDelete })] })] }));
146
95
  };
147
96
  const FileUploadRoot = ({ 'data-testid': dataTestId, ...props }) => {
148
97
  const resolvedTestId = testIdUtils.useResolvedTestId({ testId: dataTestId, segment: 'file-upload', rootName: 'file-upload' });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/organisms/FileUpload/index.tsx"],"sourcesContent":[null],"names":["useId","useRef","useState","useTestIdPrefix","rootTestId","joinTestId","_jsxs","cx","_jsx","FeaturedIcon","UploadCloud02","Button","motion","slugifyTestId","FileTypeIcon","CheckCircle","XCircle","ButtonUtility","Trash01","ProgressBar","_Fragment","useResolvedTestId","TestIdProvider","AnimatePresence"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/organisms/FileUpload/index.tsx"],"sourcesContent":[null],"names":["useId","useRef","useState","useTestIdPrefix","rootTestId","joinTestId","classifyDroppedFiles","_jsxs","cx","_jsx","FeaturedIcon","UploadCloud02","Button","motion","slugifyTestId","FileTypeIcon","getReadableFileSize","CheckCircle","XCircle","ButtonUtility","Trash01","ProgressBar","_Fragment","useResolvedTestId","TestIdProvider","AnimatePresence"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAM,UAAU,GAAG,CAAC,KAAa,KAAc;AAC7C,IAAA,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK;AAAE,QAAA,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtD,OAAO,YAAY,CAAC,KAAK;AAC3B,CAAC;AAgDD;;;;;;AAMG;AACI,MAAM,kBAAkB,GAAG,CAAC,EACjC,SAAS,EACT,IAAI,EACJ,UAAU,EACV,MAAM,EACN,cAAc,GAAG,IAAI,EACrB,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EAAE,UAAU,GACD,KAAI;AAC5B,IAAA,MAAM,EAAE,GAAGA,WAAK,EAAE;AAClB,IAAA,MAAM,QAAQ,GAAGC,YAAM,CAAmB,IAAI,CAAC;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IAC3D,MAAM,MAAM,GAAGC,2BAAe,EAAE,IAAIC,sBAAU,CAAC,aAAa,CAAC;IAC7D,MAAM,cAAc,GAAG,UAAU,IAAIC,sBAAU,CAAC,MAAM,EAAE,UAAU,CAAC;AAEnE,IAAA,MAAM,YAAY,GAAG,CAAC,KAAsC,KAAI;AAC9D,QAAA,IAAI,UAAU;YAAE;QAEhB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,iBAAiB,CAAC,IAAI,CAAC;AACzB,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,KAAsC,KAAI;AAC/D,QAAA,IAAI,UAAU;YAAE;QAEhB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,iBAAiB,CAAC,KAAK,CAAC;AAC1B,IAAA,CAAC;AAED,IAAA,MAAM,YAAY,GAAG,CAAC,KAAa,KAAU;;QAE3C,YAAY,CAAC,KAAK,CAAC;AAEnB,QAAA,MAAM,EACJ,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,cAAc,GAC1B,GAAGC,qCAAoB,CAAC,KAAK,EAAE;YAC9B,MAAM;YACN,cAAc;YACd,OAAO;AACR,SAAA,CAAC;QAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE;YACxE,YAAY,CAAC,IAAI,CAAC;AAClB,YAAA,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC/C;QAEA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;AACjE,YAAA,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACxC;QAEA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE;YAC7E,YAAY,CAAC,IAAI,CAAC;AAClB,YAAA,qBAAqB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACpD;;AAGA,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;QAC7B;AACF,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,KAAsC,KAAI;AAC5D,QAAA,IAAI,UAAU;YAAE;QAEhB,aAAa,CAAC,KAAK,CAAC;AACpB,QAAA,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,CAAC;AAED,IAAA,MAAM,qBAAqB,GAAG,CAAC,KAA0C,KAAI;AAC3E,QAAA,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACpD,IAAA,CAAC;IAED;;IAEEC,eAAA,CAAA,KAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAEe,cAAc,EAC3B,UAAU,EAAE,YAAY,EACxB,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAEC,KAAE,CACX,8JAA8J,EAC9J,cAAc,IAAI,mBAAmB,EACrC,UAAU,IAAI,iCAAiC,EAC/C,SAAS,CACV,aAEDC,cAAA,CAACC,yBAAY,IAAC,IAAI,EAAEC,qBAAa,EAAE,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAEH,KAAE,CAAC,UAAU,IAAI,YAAY,CAAC,GAAI,EAEtHD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,CAC9CA,yBAAK,SAAS,EAAC,uCAAuC,EAAA,QAAA,EAAA,CACpDE,cAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,cAAc,EACxB,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,qBAAqB,iBAClBJ,sBAAU,CAAC,cAAc,EAAE,OAAO,CAAC,EAAA,CAChD,EACFI,cAAA,CAAA,OAAA,EAAA,EAAO,OAAO,EAAE,EAAE,EAAE,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjDF,eAAA,CAACK,aAAM,EAAA,EACL,KAAK,EAAC,YAAY,EAClB,IAAI,EAAC,IAAI,EACT,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,iBAC3BP,sBAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,CAAA,kBAAA,EAEjCI,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,WAAW,iCAAwB,CAAA,EAAA,CAC5D,EAAA,CACH,EACRA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAwB,CAAA,EAAA,CAC3D,EACNA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAED,KAAE,CAAC,6CAA6C,EAAE,SAAS,IAAI,oBAAoB,CAAC,YAC/F,IAAI,IAAI,uCAAuC,EAAA,CAC9C,CAAA,EAAA,CACA,CAAA,EAAA,CACF;AAEV;AAuBA,MAAM,uBAAuB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAqB,KAAI;AAC3I,IAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,GAAG;IACnC,MAAM,MAAM,GAAGL,2BAAe,EAAE,IAAIC,sBAAU,CAAC,aAAa,CAAC;AAE7D,IAAA,QACEG,eAAA,CAACM,YAAM,CAAC,EAAE,EAAA,EACR,MAAM,EAAC,UAAU,EAAA,aAAA,EACJR,sBAAU,CAAC,MAAM,EAAE,CAAA,KAAA,EAAQS,yBAAa,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC,EAC9D,SAAS,EAAEN,KAAE,CACX,2HAA2H,EAC3H,MAAM,IAAI,mBAAmB,EAC7B,SAAS,CACV,EAAA,QAAA,EAAA,CAEDC,cAAA,CAACM,gBAAY,EAAA,EAAC,SAAS,EAAC,8BAA8B,EAAC,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,EAAC,OAAO,EAAC,OAAO,EAAE,eAAe,IAAI,SAAS,EAAA,CAAI,EACrIN,cAAA,CAACM,gBAAY,EAAA,EAAC,SAAS,EAAC,kCAAkC,EAAC,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,EAAC,MAAM,EAAC,OAAO,EAAE,eAAe,IAAI,SAAS,EAAA,CAAI,EAExIR,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CACvDA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uCAAuC,EAAA,QAAA,EAAA,CACpDA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BE,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAE,IAAI,EAAA,CAAK,EAErEF,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,CAC7CE,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,kDAAkD,EAAA,QAAA,EAAEO,oCAAmB,CAAC,IAAI,CAAC,EAAA,CAAK,EAE/FP,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,sEAAsE,EAAA,CAAG,EAEvFF,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,CACrC,UAAU,IAAIE,cAAA,CAACQ,mBAAW,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,CAAG,EACvF,UAAU,IAAIR,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,UAAA,EAAA,CAAa,EAElF,CAAC,UAAU,IAAI,CAAC,MAAM,IAAIA,eAACE,qBAAa,EAAA,EAAC,SAAS,EAAC,0CAA0C,EAAA,CAAG,EAChG,CAAC,UAAU,IAAI,CAAC,MAAM,IAAIF,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,qCAAqC,6BAAiB,EAE7F,MAAM,IAAIA,cAAA,CAACS,eAAO,EAAA,EAAC,SAAS,EAAC,8BAA8B,EAAA,CAAG,EAC9D,MAAM,IAAIT,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wCAAwC,uBAAW,CAAA,EAAA,CACvE,CAAA,EAAA,CACF,CAAA,EAAA,CACF,EAENA,cAAA,CAACU,2BAAa,EAAA,EAAC,KAAK,EAAC,UAAU,EAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAEC,eAAO,EAAE,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,QAAQ,EAAA,CAAI,CAAA,EAAA,CAC9H,EAEL,CAAC,MAAM,KACNX,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAC1BA,cAAA,CAACY,uBAAW,IAAC,aAAa,EAAC,OAAO,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAA,CAAI,EAAA,CACpE,CACP,EAEA,MAAM,KACLZ,cAAA,CAACG,aAAM,EAAA,EAAC,KAAK,EAAC,kBAAkB,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,CAEtE,CACV,CAAA,EAAA,CACG,CAAA,EAAA,CACI;AAEhB,CAAC;AAED,MAAM,wBAAwB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAqB,KAAI;AAC5I,IAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,GAAG;IACnC,MAAM,MAAM,GAAGT,2BAAe,EAAE,IAAIC,sBAAU,CAAC,aAAa,CAAC;AAE7D,IAAA,QACEG,eAAA,CAACM,YAAM,CAAC,EAAE,EAAA,EACR,MAAM,EAAC,UAAU,EAAA,aAAA,EACJR,sBAAU,CAAC,MAAM,EAAE,CAAA,KAAA,EAAQS,yBAAa,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC,EAC9D,SAAS,EAAEN,KAAE,CAAC,+DAA+D,EAAE,SAAS,CAAC,aAGzFC,cAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAA,YAAA,EAAe,GAAG,GAAG,QAAQ,CAAA,EAAA,CAAI,EAAE,EACvD,SAAS,EAAED,KAAE,CAAC,4EAA4E,EAAE,UAAU,IAAI,WAAW,CAAC,EACtH,IAAI,EAAC,aAAa,EAAA,YAAA,EACP,iBAAiB,EAAA,eAAA,EACb,QAAQ,EAAA,eAAA,EACR,CAAC,EAAA,eAAA,EACD,GAAG,GAClB,EAEFC,cAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAED,KAAE,CACX,mHAAmH,EACnH,MAAM,IAAI,mBAAmB,CAC9B,EAAA,CACD,EACFC,cAAA,CAACM,gBAAY,IAAC,SAAS,EAAC,uCAAuC,EAAC,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,EAAC,OAAO,EAAC,OAAO,EAAE,eAAe,IAAI,OAAO,EAAA,CAAI,EAC5IN,cAAA,CAACM,gBAAY,EAAA,EAAC,SAAS,EAAC,2CAA2C,EAAC,IAAI,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,EAAC,MAAM,EAAC,OAAO,EAAE,eAAe,IAAI,OAAO,EAAA,CAAI,EAE/IR,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAA,CAC3CA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAA,CAChEA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCE,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAE,IAAI,EAAA,CAAK,EAErEF,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,CAC7CE,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,MAAM,GAAG,iCAAiC,GAAGO,oCAAmB,CAAC,IAAI,CAAC,EAAA,CAAK,EAEhH,CAAC,MAAM,KACNT,eAAA,CAAAe,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEb,uBAAI,SAAS,EAAC,sEAAsE,EAAA,CAAG,EACvFF,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,CACrC,UAAU,IAAIE,cAAA,CAACQ,mBAAW,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,CAAG,EACvF,CAAC,UAAU,IAAIR,cAAA,CAACE,qBAAa,EAAA,EAAC,SAAS,EAAC,0CAA0C,EAAA,CAAG,EAEtFJ,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,aAAE,QAAQ,EAAA,GAAA,CAAA,EAAA,CAAM,CAAA,EAAA,CAChD,CAAA,EAAA,CACL,CACJ,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EAEL,MAAM,KACLE,cAAA,CAACG,aAAM,EAAA,EAAC,KAAK,EAAC,kBAAkB,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,CAEtE,CACV,CAAA,EAAA,CACG,EAENH,cAAA,CAACU,2BAAa,IAAC,KAAK,EAAC,UAAU,EAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAEC,eAAO,EAAE,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,QAAQ,EAAA,CAAI,CAAA,EAAA,CAC9H,CAAA,EAAA,CACI;AAEhB,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,KAAK,EAA6D,KAAI;AAC5H,IAAA,MAAM,cAAc,GAAGG,6BAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AAEjH,IAAA,QACEd,cAAA,CAACe,0BAAc,EAAA,EAAC,KAAK,EAAE,cAAc,EAAA,QAAA,EACnCf,cAAA,CAAA,KAAA,EAAA,EAAA,GAAS,KAAK,EAAA,aAAA,EAAe,cAAc,EAAE,SAAS,EAAED,KAAE,CAAC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC,EAAA,QAAA,EAC/F,KAAK,CAAC,QAAQ,EAAA,CACX,EAAA,CACS;AAErB,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,KAAK,EAA4D,KAAI;IAC3H,MAAM,MAAM,GAAGL,2BAAe,EAAE,IAAIC,sBAAU,CAAC,aAAa,CAAC;IAC7D,MAAM,UAAU,GAAG,UAAU,IAAIC,sBAAU,CAAC,MAAM,EAAE,MAAM,CAAC;AAE3D,IAAA,QACEI,cAAA,CAAA,IAAA,EAAA,EAAA,GAAQ,KAAK,EAAA,aAAA,EAAe,UAAU,EAAE,SAAS,EAAED,KAAE,CAAC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC,EAAA,QAAA,EAC3FC,cAAA,CAACgB,qBAAe,EAAA,EAAC,OAAO,EAAE,KAAK,EAAA,QAAA,EAAG,KAAK,CAAC,QAAQ,EAAA,CAAmB,EAAA,CAChE;AAET,CAAC;AAED;;;;;;AAMG;AACI,MAAM,UAAU,GAAG;AACxB,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,QAAQ,EAAE,kBAAkB;AAC5B,IAAA,mBAAmB,EAAE,uBAAuB;AAC5C,IAAA,oBAAoB,EAAE,wBAAwB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/FileUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAe,QAAQ,IAAI,YAAY,EAAmC,MAAM,oBAAoB,CAAC;AAe5G,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAkBnE,UAAU,uBAAuB;IAC/B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC9C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,qJAWhC,uBAAuB,gCA0KzB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,eAAe,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAqJD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU;oDA9B0C,qBAAqB,CAAC,KAAK,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;oDAYzD,qBAAqB,CAAC,IAAI,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;oKAzUtH,uBAAuB;iHAiM8F,iBAAiB;kHA2DhB,iBAAiB;CAqGzI,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/FileUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAe,QAAQ,IAAI,YAAY,EAAmC,MAAM,oBAAoB,CAAC;AAe5G,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAUnE,UAAU,uBAAuB;IAC/B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC9C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,qJAWhC,uBAAuB,gCAwHzB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,eAAe,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAqJD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU;oDA9B0C,qBAAqB,CAAC,KAAK,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;oDAYzD,qBAAqB,CAAC,IAAI,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;oKAvRtH,uBAAuB;iHA+I8F,iBAAiB;kHA2DhB,iBAAiB;CAqGzI,CAAC"}
@@ -8,18 +8,13 @@ import { cx } from '@flipdish/ui-library/utilities/cx';
8
8
  import { useTestIdPrefix, rootTestId, joinTestId, slugifyTestId, useResolvedTestId, TestIdProvider } from '@flipdish/ui-library/utilities/testIdUtils';
9
9
  import { motion, AnimatePresence } from 'motion/react';
10
10
  import { useId, useRef, useState } from 'react';
11
+ import { getReadableFileSize, classifyDroppedFiles } from './fileUpload.utils.js';
11
12
 
12
- /**
13
- * Returns a human-readable file size.
14
- * @param bytes - The size of the file in bytes.
15
- * @returns A string representing the file size in a human-readable format.
16
- */
17
- const getReadableFileSize = (bytes) => {
18
- if (bytes === 0)
19
- return '0 KB';
20
- const suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
21
- const i = Math.floor(Math.log(bytes) / Math.log(1024));
22
- return `${Math.floor(bytes / 1024 ** i)} ${suffixes[i]}`;
13
+ const toFileList = (files) => {
14
+ const dataTransfer = new DataTransfer();
15
+ for (const file of files)
16
+ dataTransfer.items.add(file);
17
+ return dataTransfer.files;
23
18
  };
24
19
  /**
25
20
  * Drop target with an upload button that accepts files by drag and drop or the file picker, sorting
@@ -35,26 +30,6 @@ const FileUploadDropZone = ({ className, hint, isDisabled, accept, allowsMultipl
35
30
  const [isDraggingOver, setIsDraggingOver] = useState(false);
36
31
  const prefix = useTestIdPrefix() ?? rootTestId('file-upload');
37
32
  const dropzoneTestId = dataTestId ?? joinTestId(prefix, 'dropzone');
38
- const isFileTypeAccepted = (file) => {
39
- if (!accept)
40
- return true;
41
- // Split the accept string into individual types
42
- const acceptedTypes = accept.split(',').map((type) => type.trim());
43
- return acceptedTypes.some((acceptedType) => {
44
- // Handle file extensions (e.g., .pdf, .doc)
45
- if (acceptedType.startsWith('.')) {
46
- const extension = `.${file.name.split('.').pop()?.toLowerCase()}`;
47
- return extension === acceptedType.toLowerCase();
48
- }
49
- // Handle wildcards (e.g., image/*)
50
- if (acceptedType.endsWith('/*')) {
51
- const typePrefix = acceptedType.split('/')[0];
52
- return file.type.startsWith(`${typePrefix}/`);
53
- }
54
- // Handle exact MIME types (e.g., application/pdf)
55
- return file.type === acceptedType;
56
- });
57
- };
58
33
  const handleDragIn = (event) => {
59
34
  if (isDisabled)
60
35
  return;
@@ -72,47 +47,21 @@ const FileUploadDropZone = ({ className, hint, isDisabled, accept, allowsMultipl
72
47
  const processFiles = (files) => {
73
48
  // Reset the invalid state when processing files.
74
49
  setIsInvalid(false);
75
- const acceptedFiles = [];
76
- const unacceptedFiles = [];
77
- const oversizedFiles = [];
78
- // If multiple files are not allowed, only process the first file
79
- const filesToProcess = allowsMultiple ? files : files.slice(0, 1);
80
- filesToProcess.forEach((file) => {
81
- // Check file size first
82
- if (maxSize && file.size > maxSize) {
83
- oversizedFiles.push(file);
84
- return;
85
- }
86
- // Then check file type
87
- if (isFileTypeAccepted(file)) {
88
- acceptedFiles.push(file);
89
- }
90
- else {
91
- unacceptedFiles.push(file);
92
- }
50
+ const { accepted: acceptedFiles, unaccepted: unacceptedFiles, oversized: oversizedFiles, } = classifyDroppedFiles(files, {
51
+ accept,
52
+ allowsMultiple,
53
+ maxSize,
93
54
  });
94
- // Handle oversized files
95
55
  if (oversizedFiles.length > 0 && typeof onSizeLimitExceed === 'function') {
96
- const dataTransfer = new DataTransfer();
97
- // biome-ignore lint/suspicious/useIterableCallbackReturn: We need to return a value from the callback to satisfy the type checker
98
- oversizedFiles.forEach((file) => dataTransfer.items.add(file));
99
56
  setIsInvalid(true);
100
- onSizeLimitExceed(dataTransfer.files);
57
+ onSizeLimitExceed(toFileList(oversizedFiles));
101
58
  }
102
- // Handle accepted files
103
59
  if (acceptedFiles.length > 0 && typeof onDropFiles === 'function') {
104
- const dataTransfer = new DataTransfer();
105
- // biome-ignore lint/suspicious/useIterableCallbackReturn: We need to return a value from the callback to satisfy the type checker
106
- acceptedFiles.forEach((file) => dataTransfer.items.add(file));
107
- onDropFiles(dataTransfer.files);
60
+ onDropFiles(toFileList(acceptedFiles));
108
61
  }
109
- // Handle unaccepted files
110
62
  if (unacceptedFiles.length > 0 && typeof onDropUnacceptedFiles === 'function') {
111
- const unacceptedDataTransfer = new DataTransfer();
112
- // biome-ignore lint/suspicious/useIterableCallbackReturn: We need to return a value from the callback to satisfy the type checker
113
- unacceptedFiles.forEach((file) => unacceptedDataTransfer.items.add(file));
114
63
  setIsInvalid(true);
115
- onDropUnacceptedFiles(unacceptedDataTransfer.files);
64
+ onDropUnacceptedFiles(toFileList(unacceptedFiles));
116
65
  }
117
66
  // Clear the input value to ensure the same file can be selected again
118
67
  if (inputRef.current) {