@tecsinapse/cortex-react 1.6.0-beta.0 → 1.7.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Calendar/Calendar.js +2 -0
- package/dist/cjs/components/Calendar/CalendarCell.js +2 -0
- package/dist/cjs/components/Calendar/CalendarGrid.js +2 -0
- package/dist/cjs/components/Calendar/RangeCalendar.js +2 -0
- package/dist/cjs/components/DatePicker/DatePickerInput.js +2 -0
- package/dist/cjs/components/DatePicker/DateRangePickerInput.js +2 -0
- package/dist/cjs/components/Input/Mask.js +2 -0
- package/dist/cjs/components/Input/Search.js +2 -0
- package/dist/cjs/components/Menubar/Dropdown.js +2 -0
- package/dist/cjs/components/Menubar/Header.js +2 -0
- package/dist/cjs/components/Menubar/ItemLink.js +2 -0
- package/dist/cjs/components/Menubar/Search.js +2 -0
- package/dist/cjs/components/Popover/Provider.js +2 -0
- package/dist/cjs/components/ProgressBar/ProgressBar.js +41 -0
- package/dist/cjs/components/ProgressBar/ProgressBarInfinite.js +15 -0
- package/dist/cjs/components/ProgressBar/ProgressBarSegments.js +48 -0
- package/dist/cjs/components/Select/GroupedOptions.js +2 -0
- package/dist/cjs/components/Select/MultiGroupedOptions.js +2 -0
- package/dist/cjs/components/Select/MultiOptions.js +2 -0
- package/dist/cjs/components/Select/Options.js +2 -0
- package/dist/cjs/components/Tooltip.js +2 -0
- package/dist/cjs/components/Uploader/Dropzone.js +30 -0
- package/dist/cjs/components/Uploader/Files.js +14 -0
- package/dist/cjs/components/Uploader/Modal.js +38 -0
- package/dist/cjs/components/Uploader/Root.js +38 -0
- package/dist/cjs/components/Uploader/Upload.js +31 -0
- package/dist/cjs/components/Uploader/index.js +16 -0
- package/dist/cjs/components/Uploader/types.js +70 -0
- package/dist/cjs/hooks/useFileUpload.js +85 -0
- package/dist/cjs/index.js +10 -1
- package/dist/cjs/provider/MenubarProvider.js +2 -0
- package/dist/cjs/styles/progressBar.js +32 -1
- package/dist/esm/components/Calendar/Calendar.js +2 -0
- package/dist/esm/components/Calendar/CalendarCell.js +2 -0
- package/dist/esm/components/Calendar/CalendarGrid.js +2 -0
- package/dist/esm/components/Calendar/RangeCalendar.js +2 -0
- package/dist/esm/components/DatePicker/DatePickerInput.js +2 -0
- package/dist/esm/components/DatePicker/DateRangePickerInput.js +2 -0
- package/dist/esm/components/Input/Mask.js +2 -0
- package/dist/esm/components/Input/Search.js +2 -0
- package/dist/esm/components/Menubar/Dropdown.js +2 -0
- package/dist/esm/components/Menubar/Header.js +2 -0
- package/dist/esm/components/Menubar/ItemLink.js +2 -0
- package/dist/esm/components/Menubar/Search.js +2 -0
- package/dist/esm/components/Popover/Provider.js +2 -0
- package/dist/esm/components/ProgressBar/ProgressBar.js +39 -0
- package/dist/esm/components/ProgressBar/ProgressBarInfinite.js +13 -0
- package/dist/esm/components/ProgressBar/ProgressBarSegments.js +46 -0
- package/dist/esm/components/Select/GroupedOptions.js +2 -0
- package/dist/esm/components/Select/MultiGroupedOptions.js +2 -0
- package/dist/esm/components/Select/MultiOptions.js +2 -0
- package/dist/esm/components/Select/Options.js +2 -0
- package/dist/esm/components/Tooltip.js +2 -0
- package/dist/esm/components/Uploader/Dropzone.js +28 -0
- package/dist/esm/components/Uploader/Files.js +12 -0
- package/dist/esm/components/Uploader/Modal.js +36 -0
- package/dist/esm/components/Uploader/Root.js +36 -0
- package/dist/esm/components/Uploader/Upload.js +29 -0
- package/dist/esm/components/Uploader/index.js +13 -0
- package/dist/esm/components/Uploader/types.js +67 -0
- package/dist/esm/hooks/useFileUpload.js +83 -0
- package/dist/esm/index.js +5 -1
- package/dist/esm/provider/MenubarProvider.js +2 -0
- package/dist/esm/styles/progressBar.js +32 -2
- package/dist/types/components/{ProgressBar.d.ts → ProgressBar/ProgressBar.d.ts} +4 -3
- package/dist/types/components/ProgressBar/ProgressBarInfinite.d.ts +6 -0
- package/dist/types/components/ProgressBar/ProgressBarSegments.d.ts +9 -0
- package/dist/types/components/ProgressBar/index.d.ts +1 -0
- package/dist/types/components/Uploader/Dropzone.d.ts +3 -0
- package/dist/types/components/Uploader/Files.d.ts +3 -0
- package/dist/types/components/Uploader/Modal.d.ts +2 -0
- package/dist/types/components/Uploader/Root.d.ts +3 -0
- package/dist/types/components/Uploader/Upload.d.ts +3 -0
- package/dist/types/components/Uploader/index.d.ts +9 -0
- package/dist/types/components/Uploader/types.d.ts +63 -0
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/useFileUpload.d.ts +23 -0
- package/dist/types/styles/progressBar.d.ts +167 -0
- package/package.json +6 -4
- package/dist/cjs/components/ProgressBar.js +0 -71
- package/dist/esm/components/ProgressBar.js +0 -69
|
@@ -7,6 +7,8 @@ require('react-aria');
|
|
|
7
7
|
require('react-stately');
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
var CalendarGrid = require('./CalendarGrid.js');
|
|
11
13
|
var CalendarHeader = require('./CalendarHeader.js');
|
|
12
14
|
|
|
@@ -7,6 +7,8 @@ require('react-stately');
|
|
|
7
7
|
var useCalendarCell = require('../../hooks/useCalendarCell.js');
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
var calendarCell = require('../../styles/calendar-cell.js');
|
|
11
13
|
require('../../styles/groupButton.js');
|
|
12
14
|
require('../../styles/progressBar.js');
|
|
@@ -7,6 +7,8 @@ require('react-stately');
|
|
|
7
7
|
var useCalendarGrid = require('../../hooks/useCalendarGrid.js');
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
var CalendarGridBodyRows = require('./CalendarGridBodyRows.js');
|
|
11
13
|
var CalendarGridHeaderRow = require('./CalendarGridHeaderRow.js');
|
|
12
14
|
|
|
@@ -7,6 +7,8 @@ require('react-stately');
|
|
|
7
7
|
require('@floating-ui/react');
|
|
8
8
|
require('currency.js');
|
|
9
9
|
var useRangeCalendar = require('../../hooks/useRangeCalendar.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
var CalendarGrid = require('./CalendarGrid.js');
|
|
11
13
|
var CalendarHeader = require('./CalendarHeader.js');
|
|
12
14
|
|
|
@@ -8,6 +8,8 @@ var utils = require('../utils.js');
|
|
|
8
8
|
var useDatePickerInput = require('../../hooks/useDatePickerInput.js');
|
|
9
9
|
require('@floating-ui/react');
|
|
10
10
|
require('currency.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var Calendar = require('../Calendar/Calendar.js');
|
|
12
14
|
var DateField = require('./DateField.js');
|
|
13
15
|
var DatePickerInputBase = require('./DatePickerInputBase.js');
|
|
@@ -8,6 +8,8 @@ var utils = require('../utils.js');
|
|
|
8
8
|
var useDateRangePickerInput = require('../../hooks/useDateRangePickerInput.js');
|
|
9
9
|
require('@floating-ui/react');
|
|
10
10
|
require('currency.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var RangeCalendar = require('../Calendar/RangeCalendar.js');
|
|
12
14
|
var DateField = require('./DateField.js');
|
|
13
15
|
var DatePickerInputBase = require('./DatePickerInputBase.js');
|
|
@@ -7,6 +7,8 @@ require('react-stately');
|
|
|
7
7
|
require('@floating-ui/react');
|
|
8
8
|
var useNumberMask = require('../../hooks/useNumberMask.js');
|
|
9
9
|
var useStringMask = require('../../hooks/useStringMask.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
var Root = require('./Root.js');
|
|
11
13
|
|
|
12
14
|
const InputMask = React.forwardRef(
|
|
@@ -8,6 +8,8 @@ require('react-stately');
|
|
|
8
8
|
var useDebouncedState = require('../../hooks/useDebouncedState.js');
|
|
9
9
|
require('@floating-ui/react');
|
|
10
10
|
require('currency.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var Box = require('./Box.js');
|
|
12
14
|
var Face = require('./Face.js');
|
|
13
15
|
var Left = require('./Left.js');
|
|
@@ -8,6 +8,8 @@ require('react-aria');
|
|
|
8
8
|
require('react-stately');
|
|
9
9
|
require('@floating-ui/react');
|
|
10
10
|
require('currency.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
require('../../provider/MenubarContext.js');
|
|
12
14
|
require('../../provider/SnackbarProvider.js');
|
|
13
15
|
var useMenubar = require('../../provider/useMenubar.js');
|
|
@@ -7,6 +7,8 @@ require('react-aria');
|
|
|
7
7
|
require('react-stately');
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
require('../../provider/MenubarContext.js');
|
|
11
13
|
require('../../provider/SnackbarProvider.js');
|
|
12
14
|
var useMenubar = require('../../provider/useMenubar.js');
|
|
@@ -7,6 +7,8 @@ require('react-aria');
|
|
|
7
7
|
require('react-stately');
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
|
+
require('react-dropzone');
|
|
11
|
+
require('uuid');
|
|
10
12
|
require('../../provider/MenubarContext.js');
|
|
11
13
|
require('../../provider/SnackbarProvider.js');
|
|
12
14
|
var useMenubar = require('../../provider/useMenubar.js');
|
|
@@ -9,6 +9,8 @@ require('react-aria');
|
|
|
9
9
|
require('react-stately');
|
|
10
10
|
require('@floating-ui/react');
|
|
11
11
|
require('currency.js');
|
|
12
|
+
require('react-dropzone');
|
|
13
|
+
require('uuid');
|
|
12
14
|
require('../../provider/MenubarContext.js');
|
|
13
15
|
require('../../provider/SnackbarProvider.js');
|
|
14
16
|
var useMenubar = require('../../provider/useMenubar.js');
|
|
@@ -6,6 +6,8 @@ require('react-aria');
|
|
|
6
6
|
require('react-stately');
|
|
7
7
|
var useFloatingLogic = require('../../hooks/useFloatingLogic.js');
|
|
8
8
|
require('currency.js');
|
|
9
|
+
require('react-dropzone');
|
|
10
|
+
require('uuid');
|
|
9
11
|
var Context = require('./Context.js');
|
|
10
12
|
|
|
11
13
|
const PopoverProvider = ({
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var ProgressBarInfinite = require('./ProgressBarInfinite.js');
|
|
5
|
+
var ProgressBarSegments = require('./ProgressBarSegments.js');
|
|
6
|
+
|
|
7
|
+
const ProgressBar = ({
|
|
8
|
+
segments: _segments = 1,
|
|
9
|
+
valueMin = 0,
|
|
10
|
+
valueMax = 100,
|
|
11
|
+
valueCurrent = 50,
|
|
12
|
+
intentProgress = "default",
|
|
13
|
+
type = "default",
|
|
14
|
+
animated = true
|
|
15
|
+
}) => {
|
|
16
|
+
const [displayedValue, setDisplayedValue] = React.useState(0);
|
|
17
|
+
const [showAnimation, setShowAnimation] = React.useState(true);
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
const timeout = setTimeout(() => {
|
|
20
|
+
if (valueCurrent < displayedValue) {
|
|
21
|
+
setShowAnimation(false);
|
|
22
|
+
}
|
|
23
|
+
if (animated && valueCurrent > displayedValue) setShowAnimation(true);
|
|
24
|
+
setDisplayedValue(valueCurrent);
|
|
25
|
+
}, 0);
|
|
26
|
+
return () => clearTimeout(timeout);
|
|
27
|
+
}, [valueCurrent]);
|
|
28
|
+
const totalProgress = (displayedValue - valueMin) / (valueMax - valueMin) * 100;
|
|
29
|
+
const segments = Math.max(1, _segments);
|
|
30
|
+
return type === "infinite" ? /* @__PURE__ */ React.createElement(ProgressBarInfinite.ProgressBarInfinite, { intentProgress }) : /* @__PURE__ */ React.createElement(
|
|
31
|
+
ProgressBarSegments.ProgressBarSegments,
|
|
32
|
+
{
|
|
33
|
+
segments,
|
|
34
|
+
totalProgress,
|
|
35
|
+
intentProgress,
|
|
36
|
+
showAnimation
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
exports.ProgressBar = ProgressBar;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
require('../../styles/calendar-cell.js');
|
|
5
|
+
require('../../styles/groupButton.js');
|
|
6
|
+
var progressBar = require('../../styles/progressBar.js');
|
|
7
|
+
|
|
8
|
+
const { container, bar, progress } = progressBar.progressBarInfiniteVariants();
|
|
9
|
+
const ProgressBarInfinite = ({
|
|
10
|
+
intentProgress
|
|
11
|
+
}) => {
|
|
12
|
+
return /* @__PURE__ */ React.createElement("div", { className: container() }, /* @__PURE__ */ React.createElement("div", { className: bar(), "data-testid": "infinite-progress-bar" }, /* @__PURE__ */ React.createElement("div", { className: progress({ status: intentProgress }) })));
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
exports.ProgressBarInfinite = ProgressBarInfinite;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
require('../../styles/calendar-cell.js');
|
|
5
|
+
require('../../styles/groupButton.js');
|
|
6
|
+
var progressBar = require('../../styles/progressBar.js');
|
|
7
|
+
|
|
8
|
+
const ProgressBarSegments = ({
|
|
9
|
+
segments,
|
|
10
|
+
totalProgress,
|
|
11
|
+
intentProgress,
|
|
12
|
+
showAnimation
|
|
13
|
+
}) => {
|
|
14
|
+
const lengthSeg = 100 / segments;
|
|
15
|
+
const items = [...Array(segments).keys()];
|
|
16
|
+
const progressStyle = React.useCallback(
|
|
17
|
+
(width, index) => {
|
|
18
|
+
return {
|
|
19
|
+
width: `${width}%`,
|
|
20
|
+
transitionDelay: `${showAnimation ? `${index * 1e3}ms` : `0ms`}`
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
[showAnimation]
|
|
24
|
+
);
|
|
25
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex gap-x-nano flex-row", "data-testid": "progress-bar" }, items.map((_, index) => {
|
|
26
|
+
const max = lengthSeg * (index + 1);
|
|
27
|
+
const min = lengthSeg * index;
|
|
28
|
+
const minmax = (totalProgress - min) / (max - min);
|
|
29
|
+
const width = (minmax > 1 ? 1 : minmax < 0 ? 0 : minmax) * 100;
|
|
30
|
+
return /* @__PURE__ */ React.createElement(
|
|
31
|
+
"div",
|
|
32
|
+
{
|
|
33
|
+
key: index,
|
|
34
|
+
className: "h-[0.5rem] bg-secondary-light flex flex-1 first:rounded-l-pill last:rounded-r-pill"
|
|
35
|
+
},
|
|
36
|
+
/* @__PURE__ */ React.createElement(
|
|
37
|
+
"div",
|
|
38
|
+
{
|
|
39
|
+
style: progressStyle(width, index),
|
|
40
|
+
"data-testid": "div-segment-filled",
|
|
41
|
+
className: progressBar.progressBarFilled({ intentProgress, showAnimation })
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
);
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
exports.ProgressBarSegments = ProgressBarSegments;
|
|
@@ -8,6 +8,8 @@ require('react-stately');
|
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
10
|
var useSelectGroupedOptions = require('../../hooks/useSelectGroupedOptions.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var Context = require('../Popover/Context.js');
|
|
12
14
|
var Option = require('./Option.js');
|
|
13
15
|
var SkeletonOptions = require('./SkeletonOptions.js');
|
|
@@ -8,6 +8,8 @@ require('react-stately');
|
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
10
|
var useSelectGroupedOptions = require('../../hooks/useSelectGroupedOptions.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var MultiOption = require('./MultiOption.js');
|
|
12
14
|
var SkeletonOptions = require('./SkeletonOptions.js');
|
|
13
15
|
var context = require('./context.js');
|
|
@@ -8,6 +8,8 @@ require('react-stately');
|
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
10
|
var useSelectOptions = require('../../hooks/useSelectOptions.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var MultiOption = require('./MultiOption.js');
|
|
12
14
|
var SkeletonOptions = require('./SkeletonOptions.js');
|
|
13
15
|
var context = require('./context.js');
|
|
@@ -8,6 +8,8 @@ require('react-stately');
|
|
|
8
8
|
require('@floating-ui/react');
|
|
9
9
|
require('currency.js');
|
|
10
10
|
var useSelectOptions = require('../../hooks/useSelectOptions.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
var Context = require('../Popover/Context.js');
|
|
12
14
|
var Option = require('./Option.js');
|
|
13
15
|
var SkeletonOptions = require('./SkeletonOptions.js');
|
|
@@ -8,6 +8,8 @@ require('react-stately');
|
|
|
8
8
|
var utils = require('./utils.js');
|
|
9
9
|
var useFloatingLogic = require('../hooks/useFloatingLogic.js');
|
|
10
10
|
require('currency.js');
|
|
11
|
+
require('react-dropzone');
|
|
12
|
+
require('uuid');
|
|
11
13
|
|
|
12
14
|
const Tooltip = React.forwardRef(
|
|
13
15
|
(props, ref) => {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var hi2 = require('react-icons/hi2');
|
|
5
|
+
var cortexCore = require('@tecsinapse/cortex-core');
|
|
6
|
+
var clsx = require('clsx');
|
|
7
|
+
|
|
8
|
+
const Dropzone = ({
|
|
9
|
+
dropzoneProps,
|
|
10
|
+
selectFileText = "Select a file to start",
|
|
11
|
+
dropText = "By dragging and dropping it here or clicking the button below",
|
|
12
|
+
buttonText = "Select File"
|
|
13
|
+
}) => {
|
|
14
|
+
return /* @__PURE__ */ React.createElement(
|
|
15
|
+
"div",
|
|
16
|
+
{
|
|
17
|
+
...dropzoneProps.getRootProps(),
|
|
18
|
+
className: clsx(
|
|
19
|
+
"bg-white w-full border-dashed border-2 p-deca flex flex-col justify-center rounded-mili",
|
|
20
|
+
{
|
|
21
|
+
"border-success-medium bg-gray-100": dropzoneProps.isDragActive
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
},
|
|
25
|
+
/* @__PURE__ */ React.createElement("input", { ...dropzoneProps.getInputProps() }),
|
|
26
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center text-center items-center gap-deca" }, /* @__PURE__ */ React.createElement(hi2.HiOutlineCloudArrowUp, { className: "text-primary-medium", size: 35 }), /* @__PURE__ */ React.createElement("div", { className: "gap-mili" }, /* @__PURE__ */ React.createElement("p", { className: "text-lg font-semibold", "data-testid": "select-dropzone" }, selectFileText), /* @__PURE__ */ React.createElement("p", { className: "text-sm text-secondary-medium" }, dropText)), /* @__PURE__ */ React.createElement("button", { className: cortexCore.button() }, buttonText))
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
exports.Dropzone = Dropzone;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var Upload = require('./Upload.js');
|
|
5
|
+
|
|
6
|
+
const Files = ({
|
|
7
|
+
files,
|
|
8
|
+
onDelete,
|
|
9
|
+
uploadProgressText = "Upload(s) in progress"
|
|
10
|
+
}) => {
|
|
11
|
+
return /* @__PURE__ */ React.createElement("div", { className: "bg-white w-full border-2 p-deca flex flex-col overflow-y-auto rounded-mili" }, /* @__PURE__ */ React.createElement("div", { className: "flex gap-mili items-center mb-deca" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-center w-deca h-deca bg-primary-medium rounded-full text-micro text-white" }, `${files.length}`), /* @__PURE__ */ React.createElement("h2", { className: "text-md font-semibold", "data-testid": "upload-progress" }, uploadProgressText)), files.map((file, index) => /* @__PURE__ */ React.createElement(Upload.File, { key: file.uid, file, index, onDelete })));
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.Files = Files;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var md = require('react-icons/md');
|
|
5
|
+
var cortexCore = require('@tecsinapse/cortex-core');
|
|
6
|
+
var Modal$1 = require('../Modal.js');
|
|
7
|
+
var reactDom = require('react-dom');
|
|
8
|
+
|
|
9
|
+
const Modal = ({
|
|
10
|
+
open,
|
|
11
|
+
onClose,
|
|
12
|
+
children,
|
|
13
|
+
title = "File Upload"
|
|
14
|
+
}) => {
|
|
15
|
+
return reactDom.createPortal(
|
|
16
|
+
/* @__PURE__ */ React.createElement(
|
|
17
|
+
Modal$1.Modal,
|
|
18
|
+
{
|
|
19
|
+
open,
|
|
20
|
+
onClose,
|
|
21
|
+
className: "flex-col w-[70%] h-[50%] bg-secondary-xlight rounded-mili"
|
|
22
|
+
},
|
|
23
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex w-full items-center justify-between mb-deca" }, /* @__PURE__ */ React.createElement("div", null), /* @__PURE__ */ React.createElement("h2", { className: "text-deca font-semibold" }, title), /* @__PURE__ */ React.createElement(
|
|
24
|
+
"button",
|
|
25
|
+
{
|
|
26
|
+
className: cortexCore.button({ size: "square" }),
|
|
27
|
+
onClick: onClose,
|
|
28
|
+
"data-testid": "close-button"
|
|
29
|
+
},
|
|
30
|
+
/* @__PURE__ */ React.createElement(md.MdClose, { size: 20 })
|
|
31
|
+
)),
|
|
32
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex flex-col md:flex-row w-full h-full max-h-[85%] gap-deca" }, children)
|
|
33
|
+
),
|
|
34
|
+
document.body
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.Modal = Modal;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var Modal = require('./Modal.js');
|
|
5
|
+
var Dropzone = require('./Dropzone.js');
|
|
6
|
+
var Files = require('./Files.js');
|
|
7
|
+
|
|
8
|
+
const Root = ({
|
|
9
|
+
open,
|
|
10
|
+
onClose,
|
|
11
|
+
files,
|
|
12
|
+
onDelete,
|
|
13
|
+
dropzoneProps,
|
|
14
|
+
selectFileText,
|
|
15
|
+
dropText,
|
|
16
|
+
buttonText,
|
|
17
|
+
uploadProgressText,
|
|
18
|
+
titleModal
|
|
19
|
+
}) => {
|
|
20
|
+
return /* @__PURE__ */ React.createElement(Modal.Modal, { onClose, open, title: titleModal }, /* @__PURE__ */ React.createElement(
|
|
21
|
+
Dropzone.Dropzone,
|
|
22
|
+
{
|
|
23
|
+
dropzoneProps,
|
|
24
|
+
selectFileText,
|
|
25
|
+
dropText,
|
|
26
|
+
buttonText
|
|
27
|
+
}
|
|
28
|
+
), /* @__PURE__ */ React.createElement(
|
|
29
|
+
Files.Files,
|
|
30
|
+
{
|
|
31
|
+
files,
|
|
32
|
+
onDelete,
|
|
33
|
+
uploadProgressText
|
|
34
|
+
}
|
|
35
|
+
));
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.Root = Root;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var fa6 = require('react-icons/fa6');
|
|
5
|
+
var cortexCore = require('@tecsinapse/cortex-core');
|
|
6
|
+
var md = require('react-icons/md');
|
|
7
|
+
var ProgressBar = require('../ProgressBar/ProgressBar.js');
|
|
8
|
+
|
|
9
|
+
const File = ({ file, index, onDelete }) => {
|
|
10
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col", key: index }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between border rounded-t-mili shadow p-mili" }, /* @__PURE__ */ React.createElement("div", { className: "flex gap-centi" }, file.file && file.file.type.startsWith("image/") ? /* @__PURE__ */ React.createElement(
|
|
11
|
+
"img",
|
|
12
|
+
{
|
|
13
|
+
src: URL.createObjectURL(file.file),
|
|
14
|
+
alt: "Preview",
|
|
15
|
+
className: "w-tera h-tera rounded-mili"
|
|
16
|
+
}
|
|
17
|
+
) : /* @__PURE__ */ React.createElement("span", { className: "border-2 text-kilo text-primary-medium w-tera h-tera flex items-center justify-center rounded-mili" }, /* @__PURE__ */ React.createElement(fa6.FaRegFileLines, null)), /* @__PURE__ */ React.createElement("div", { className: "flex-col" }, /* @__PURE__ */ React.createElement("p", { className: "font-semibold truncate max-w-[200px]" }, file.file.name), /* @__PURE__ */ React.createElement("p", { className: "text-sm text-gray-500" }, (file.file.size / 1024).toFixed(2), " KB"))), file.status === "success" && /* @__PURE__ */ React.createElement(
|
|
18
|
+
"button",
|
|
19
|
+
{
|
|
20
|
+
onClick: () => onDelete(index),
|
|
21
|
+
"data-testid": "remove-button",
|
|
22
|
+
className: cortexCore.button({
|
|
23
|
+
className: " bg-inherit border-2 border-primary-light text-primary-light",
|
|
24
|
+
size: "small"
|
|
25
|
+
})
|
|
26
|
+
},
|
|
27
|
+
/* @__PURE__ */ React.createElement(md.MdClose, { size: 20 })
|
|
28
|
+
)), /* @__PURE__ */ React.createElement(ProgressBar.ProgressBar, { intentProgress: file.status, type: "infinite" }));
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
exports.File = File;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Dropzone = require('./Dropzone.js');
|
|
4
|
+
var Files = require('./Files.js');
|
|
5
|
+
var Modal = require('./Modal.js');
|
|
6
|
+
var Root = require('./Root.js');
|
|
7
|
+
|
|
8
|
+
const Uploader = {
|
|
9
|
+
Dropzone: Dropzone.Dropzone,
|
|
10
|
+
Files: Files.Files,
|
|
11
|
+
Modal: Modal.Modal,
|
|
12
|
+
Root: Root.Root
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
exports.Root = Root.Root;
|
|
16
|
+
exports.Uploader = Uploader;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var FileStatus = /* @__PURE__ */ ((FileStatus2) => {
|
|
4
|
+
FileStatus2["SUCCESS"] = "success";
|
|
5
|
+
FileStatus2["ERROR"] = "error";
|
|
6
|
+
FileStatus2["UPLOADING"] = "uploading";
|
|
7
|
+
return FileStatus2;
|
|
8
|
+
})(FileStatus || {});
|
|
9
|
+
const AcceptSpecificMap = {
|
|
10
|
+
APPLICATION: [
|
|
11
|
+
"application/pdf",
|
|
12
|
+
"application/zip",
|
|
13
|
+
"application/msword",
|
|
14
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
15
|
+
"application/vnd.ms-excel",
|
|
16
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
17
|
+
"application/vnd.ms-powerpoint",
|
|
18
|
+
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
19
|
+
"application/x-rar-compressed",
|
|
20
|
+
"application/x-7z-compressed",
|
|
21
|
+
"application/json",
|
|
22
|
+
"application/xml",
|
|
23
|
+
"application/rtf",
|
|
24
|
+
"application/x-tar",
|
|
25
|
+
"application/x-httpd-php",
|
|
26
|
+
"application/octet-stream"
|
|
27
|
+
],
|
|
28
|
+
IMAGE: [
|
|
29
|
+
"image/jpeg",
|
|
30
|
+
"image/png",
|
|
31
|
+
"image/gif",
|
|
32
|
+
"image/bmp",
|
|
33
|
+
"image/svg+xml",
|
|
34
|
+
"image/tiff",
|
|
35
|
+
"image/webp",
|
|
36
|
+
"image/x-icon"
|
|
37
|
+
],
|
|
38
|
+
VIDEO: [
|
|
39
|
+
"video/mp4",
|
|
40
|
+
"video/mpeg",
|
|
41
|
+
"video/quicktime",
|
|
42
|
+
"video/x-msvideo",
|
|
43
|
+
"video/x-ms-wmv",
|
|
44
|
+
"video/webm",
|
|
45
|
+
"video/ogg",
|
|
46
|
+
"video/x-flv"
|
|
47
|
+
],
|
|
48
|
+
AUDIO: [
|
|
49
|
+
"audio/mpeg",
|
|
50
|
+
"audio/wav",
|
|
51
|
+
"audio/ogg",
|
|
52
|
+
"audio/x-aac",
|
|
53
|
+
"audio/flac",
|
|
54
|
+
"audio/mp4",
|
|
55
|
+
"audio/aac",
|
|
56
|
+
"audio/webm"
|
|
57
|
+
],
|
|
58
|
+
TEXT: [
|
|
59
|
+
"text/plain",
|
|
60
|
+
"text/csv",
|
|
61
|
+
"text/html",
|
|
62
|
+
"text/css",
|
|
63
|
+
"text/xml",
|
|
64
|
+
"text/javascript",
|
|
65
|
+
"text/markdown"
|
|
66
|
+
]
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
exports.AcceptSpecificMap = AcceptSpecificMap;
|
|
70
|
+
exports.FileStatus = FileStatus;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var reactDropzone = require('react-dropzone');
|
|
5
|
+
var uuid = require('uuid');
|
|
6
|
+
var types = require('../components/Uploader/types.js');
|
|
7
|
+
|
|
8
|
+
const useFileUpload = ({
|
|
9
|
+
accept = {},
|
|
10
|
+
onAccept,
|
|
11
|
+
maxSize,
|
|
12
|
+
allowMultiple = true
|
|
13
|
+
}) => {
|
|
14
|
+
const [files, setFiles] = React.useState([]);
|
|
15
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
16
|
+
const onOpen = React.useCallback(() => setIsOpen(true), []);
|
|
17
|
+
const onClose = React.useCallback(() => setIsOpen(false), []);
|
|
18
|
+
const updateFiles = React.useCallback(
|
|
19
|
+
(prevFiles, newFiles) => {
|
|
20
|
+
const current = /* @__PURE__ */ new Map();
|
|
21
|
+
[...prevFiles, ...newFiles].forEach((file) => current.set(file.uid, file));
|
|
22
|
+
return [...current.values()];
|
|
23
|
+
},
|
|
24
|
+
[]
|
|
25
|
+
);
|
|
26
|
+
const onDrop = async (acceptedFiles) => {
|
|
27
|
+
const newFiles = acceptedFiles.map((file) => ({
|
|
28
|
+
file,
|
|
29
|
+
status: onAccept ? types.FileStatus.UPLOADING : types.FileStatus.SUCCESS,
|
|
30
|
+
uid: uuid.v4()
|
|
31
|
+
}));
|
|
32
|
+
try {
|
|
33
|
+
setFiles((prevFiles) => [...prevFiles, ...newFiles]);
|
|
34
|
+
if (onAccept) {
|
|
35
|
+
const updatedFiles = await onAccept(newFiles);
|
|
36
|
+
setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
|
|
37
|
+
}
|
|
38
|
+
} catch (e) {
|
|
39
|
+
const updatedFiles = newFiles.map((f) => ({
|
|
40
|
+
...f,
|
|
41
|
+
status: types.FileStatus.ERROR
|
|
42
|
+
}));
|
|
43
|
+
setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const addMimeTypes = (key, acc) => {
|
|
47
|
+
types.AcceptSpecificMap[key].forEach((mimeType) => {
|
|
48
|
+
acc[mimeType] = [];
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const mappedAccept = Object.keys(accept).reduce((acc, key) => {
|
|
52
|
+
const mimeTypes = accept[key];
|
|
53
|
+
if (Array.isArray(mimeTypes) && mimeTypes.length === 0) {
|
|
54
|
+
addMimeTypes(key, acc);
|
|
55
|
+
} else if (mimeTypes) {
|
|
56
|
+
mimeTypes.forEach((mimeType) => {
|
|
57
|
+
acc[mimeType] = [];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return acc;
|
|
61
|
+
}, {});
|
|
62
|
+
const { getRootProps, getInputProps, isDragActive } = reactDropzone.useDropzone({
|
|
63
|
+
onDrop,
|
|
64
|
+
accept: mappedAccept,
|
|
65
|
+
multiple: allowMultiple,
|
|
66
|
+
maxSize
|
|
67
|
+
});
|
|
68
|
+
const handleRemoveFile = React.useCallback((index) => {
|
|
69
|
+
setFiles((prevFiles) => prevFiles.filter((_, i) => i !== index));
|
|
70
|
+
}, []);
|
|
71
|
+
return {
|
|
72
|
+
onOpen,
|
|
73
|
+
onClose,
|
|
74
|
+
onDelete: handleRemoveFile,
|
|
75
|
+
dropzoneProps: {
|
|
76
|
+
getInputProps,
|
|
77
|
+
getRootProps,
|
|
78
|
+
isDragActive
|
|
79
|
+
},
|
|
80
|
+
open: isOpen,
|
|
81
|
+
files
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
exports.useFileUpload = useFileUpload;
|