@tecsinapse/cortex-react 1.9.17 → 1.9.18-beta.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.
- package/dist/cjs/components/Menubar/Item.js +17 -11
- package/dist/cjs/components/ProgressBar/ProgressBar.js +1 -1
- package/dist/cjs/components/Uploader/Dropzone.js +6 -4
- package/dist/cjs/components/Uploader/Upload.js +17 -1
- package/dist/cjs/hooks/useFileUpload.js +3 -1
- package/dist/cjs/styles/menubar.js +2 -2
- package/dist/esm/components/Menubar/Item.js +17 -11
- package/dist/esm/components/ProgressBar/ProgressBar.js +1 -1
- package/dist/esm/components/Uploader/Dropzone.js +6 -4
- package/dist/esm/components/Uploader/Upload.js +17 -1
- package/dist/esm/hooks/useFileUpload.js +3 -1
- package/dist/esm/styles/menubar.js +2 -2
- package/dist/types/components/Uploader/types.d.ts +3 -1
- package/package.json +2 -2
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var React = require('react');
|
|
4
|
-
var menubar = require('../../styles/menubar.js');
|
|
5
|
-
var IconControlSubItem = require('./IconControlSubItem.js');
|
|
6
|
-
var ItemLink = require('./ItemLink.js');
|
|
7
3
|
var clsx = require('clsx');
|
|
4
|
+
var React = require('react');
|
|
8
5
|
require('@internationalized/date');
|
|
9
6
|
require('react-aria');
|
|
10
7
|
require('react-stately');
|
|
@@ -16,6 +13,9 @@ require('currency.js');
|
|
|
16
13
|
require('../../provider/MenubarContext.js');
|
|
17
14
|
require('../../provider/SnackbarProvider.js');
|
|
18
15
|
var useMenubar = require('../../provider/useMenubar.js');
|
|
16
|
+
var menubar = require('../../styles/menubar.js');
|
|
17
|
+
var IconControlSubItem = require('./IconControlSubItem.js');
|
|
18
|
+
var ItemLink = require('./ItemLink.js');
|
|
19
19
|
|
|
20
20
|
const { container, textBehavior } = menubar.item();
|
|
21
21
|
const Item = ({
|
|
@@ -29,20 +29,26 @@ const Item = ({
|
|
|
29
29
|
const [showSubItem, setShowSubItem] = React.useState(false);
|
|
30
30
|
const hasSubItems = (subItems ?? []).length > 0;
|
|
31
31
|
const [, setShow] = useMenubar.useMenubar();
|
|
32
|
+
const handleClickItemMenubar = React.useCallback(
|
|
33
|
+
(e) => {
|
|
34
|
+
if (hasSubItems) {
|
|
35
|
+
e.stopPropagation();
|
|
36
|
+
setShowSubItem((prev) => !prev);
|
|
37
|
+
} else {
|
|
38
|
+
setShow(false);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
[]
|
|
42
|
+
);
|
|
32
43
|
return /* @__PURE__ */ React.createElement(ItemLink, { anchorProps }, /* @__PURE__ */ React.createElement(
|
|
33
44
|
"div",
|
|
34
45
|
{
|
|
35
46
|
"data-testid": "item-menubar",
|
|
36
47
|
...rest,
|
|
37
|
-
onClick:
|
|
38
|
-
if (hasSubItems) e.stopPropagation();
|
|
39
|
-
else {
|
|
40
|
-
setShow(false);
|
|
41
|
-
}
|
|
42
|
-
},
|
|
48
|
+
onClick: handleClickItemMenubar,
|
|
43
49
|
className: clsx(
|
|
44
50
|
container({ className }),
|
|
45
|
-
!hasSubItems && textBehavior()
|
|
51
|
+
(!hasSubItems || anchorProps) && textBehavior()
|
|
46
52
|
)
|
|
47
53
|
},
|
|
48
54
|
children,
|
|
@@ -4,6 +4,7 @@ var React = require('react');
|
|
|
4
4
|
var hi2 = require('react-icons/hi2');
|
|
5
5
|
var cortexCore = require('@tecsinapse/cortex-core');
|
|
6
6
|
var clsx = require('clsx');
|
|
7
|
+
var Tooltip = require('../Tooltip.js');
|
|
7
8
|
|
|
8
9
|
const Dropzone = ({
|
|
9
10
|
dropzoneProps,
|
|
@@ -11,19 +12,20 @@ const Dropzone = ({
|
|
|
11
12
|
dropText = "By dragging and dropping it here or clicking the button below",
|
|
12
13
|
buttonText = "Select File"
|
|
13
14
|
}) => {
|
|
15
|
+
const { getRootProps, getInputProps, isDragActive, isFileLimitReached } = dropzoneProps;
|
|
14
16
|
return /* @__PURE__ */ React.createElement(
|
|
15
17
|
"div",
|
|
16
18
|
{
|
|
17
|
-
...
|
|
19
|
+
...getRootProps(),
|
|
18
20
|
className: clsx(
|
|
19
21
|
"bg-white w-full border-dashed border-2 p-deca flex flex-col justify-center rounded-mili",
|
|
20
22
|
{
|
|
21
|
-
"border-success-medium bg-gray-100":
|
|
23
|
+
"border-success-medium bg-gray-100": isDragActive
|
|
22
24
|
}
|
|
23
25
|
)
|
|
24
26
|
},
|
|
25
|
-
/* @__PURE__ */ React.createElement("input", { ...
|
|
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
|
+
/* @__PURE__ */ React.createElement("input", { ...getInputProps() }),
|
|
28
|
+
/* @__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)), isFileLimitReached ? /* @__PURE__ */ React.createElement(Tooltip.Tooltip, { text: "Voc\xEA s\xF3 pode selecionar um \xFAnico arquivo." }, /* @__PURE__ */ React.createElement("button", { disabled: true, className: clsx(cortexCore.button(), "cursor-not-allowed") }, buttonText)) : /* @__PURE__ */ React.createElement("button", { className: cortexCore.button() }, buttonText))
|
|
27
29
|
);
|
|
28
30
|
};
|
|
29
31
|
|
|
@@ -7,6 +7,16 @@ var md = require('react-icons/md');
|
|
|
7
7
|
var ProgressBar = require('../ProgressBar/ProgressBar.js');
|
|
8
8
|
|
|
9
9
|
const File = ({ file, index, onDelete }) => {
|
|
10
|
+
function statusIntent(status) {
|
|
11
|
+
switch (status) {
|
|
12
|
+
case "success":
|
|
13
|
+
return "success";
|
|
14
|
+
case "error":
|
|
15
|
+
return "error";
|
|
16
|
+
default:
|
|
17
|
+
return "info";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
10
20
|
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
21
|
"img",
|
|
12
22
|
{
|
|
@@ -25,7 +35,13 @@ const File = ({ file, index, onDelete }) => {
|
|
|
25
35
|
})
|
|
26
36
|
},
|
|
27
37
|
/* @__PURE__ */ React.createElement(md.MdClose, { size: 20 })
|
|
28
|
-
)), /* @__PURE__ */ React.createElement(
|
|
38
|
+
)), /* @__PURE__ */ React.createElement(
|
|
39
|
+
ProgressBar.ProgressBar,
|
|
40
|
+
{
|
|
41
|
+
intent: statusIntent(file.status),
|
|
42
|
+
infinite: file.status !== "success"
|
|
43
|
+
}
|
|
44
|
+
));
|
|
29
45
|
};
|
|
30
46
|
|
|
31
47
|
exports.File = File;
|
|
@@ -68,6 +68,7 @@ const useFileUpload = ({
|
|
|
68
68
|
const handleRemoveFile = React.useCallback((index) => {
|
|
69
69
|
setFiles((prevFiles) => prevFiles.filter((_, i) => i !== index));
|
|
70
70
|
}, []);
|
|
71
|
+
const isFileLimitReached = !allowMultiple && files.length > 0;
|
|
71
72
|
return {
|
|
72
73
|
onOpen,
|
|
73
74
|
onClose,
|
|
@@ -75,7 +76,8 @@ const useFileUpload = ({
|
|
|
75
76
|
dropzoneProps: {
|
|
76
77
|
getInputProps,
|
|
77
78
|
getRootProps,
|
|
78
|
-
isDragActive
|
|
79
|
+
isDragActive,
|
|
80
|
+
isFileLimitReached
|
|
79
81
|
},
|
|
80
82
|
open: isOpen,
|
|
81
83
|
files
|
|
@@ -34,8 +34,8 @@ const mostUsedItem = tailwindVariants.tv({
|
|
|
34
34
|
});
|
|
35
35
|
const item = tailwindVariants.tv({
|
|
36
36
|
slots: {
|
|
37
|
-
container: "flex flex-row gap-x-deca items-center text-secondary-dark text-base",
|
|
38
|
-
textBehavior: "hover:text-primary-medium
|
|
37
|
+
container: "flex flex-row gap-x-deca items-center text-secondary-dark hover:cursor-pointer text-base",
|
|
38
|
+
textBehavior: "hover:text-primary-medium",
|
|
39
39
|
icon: "text-primary-medium hover:cursor-pointer"
|
|
40
40
|
}
|
|
41
41
|
});
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import React__default, { useState } from 'react';
|
|
2
|
-
import { item } from '../../styles/menubar.js';
|
|
3
|
-
import IconControlSubItem from './IconControlSubItem.js';
|
|
4
|
-
import ItemLink from './ItemLink.js';
|
|
5
1
|
import clsx from 'clsx';
|
|
2
|
+
import React__default, { useState, useCallback } from 'react';
|
|
6
3
|
import '@internationalized/date';
|
|
7
4
|
import 'react-aria';
|
|
8
5
|
import 'react-stately';
|
|
@@ -14,6 +11,9 @@ import 'currency.js';
|
|
|
14
11
|
import '../../provider/MenubarContext.js';
|
|
15
12
|
import '../../provider/SnackbarProvider.js';
|
|
16
13
|
import { useMenubar } from '../../provider/useMenubar.js';
|
|
14
|
+
import { item } from '../../styles/menubar.js';
|
|
15
|
+
import IconControlSubItem from './IconControlSubItem.js';
|
|
16
|
+
import ItemLink from './ItemLink.js';
|
|
17
17
|
|
|
18
18
|
const { container, textBehavior } = item();
|
|
19
19
|
const Item = ({
|
|
@@ -27,20 +27,26 @@ const Item = ({
|
|
|
27
27
|
const [showSubItem, setShowSubItem] = useState(false);
|
|
28
28
|
const hasSubItems = (subItems ?? []).length > 0;
|
|
29
29
|
const [, setShow] = useMenubar();
|
|
30
|
+
const handleClickItemMenubar = useCallback(
|
|
31
|
+
(e) => {
|
|
32
|
+
if (hasSubItems) {
|
|
33
|
+
e.stopPropagation();
|
|
34
|
+
setShowSubItem((prev) => !prev);
|
|
35
|
+
} else {
|
|
36
|
+
setShow(false);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
[]
|
|
40
|
+
);
|
|
30
41
|
return /* @__PURE__ */ React__default.createElement(ItemLink, { anchorProps }, /* @__PURE__ */ React__default.createElement(
|
|
31
42
|
"div",
|
|
32
43
|
{
|
|
33
44
|
"data-testid": "item-menubar",
|
|
34
45
|
...rest,
|
|
35
|
-
onClick:
|
|
36
|
-
if (hasSubItems) e.stopPropagation();
|
|
37
|
-
else {
|
|
38
|
-
setShow(false);
|
|
39
|
-
}
|
|
40
|
-
},
|
|
46
|
+
onClick: handleClickItemMenubar,
|
|
41
47
|
className: clsx(
|
|
42
48
|
container({ className }),
|
|
43
|
-
!hasSubItems && textBehavior()
|
|
49
|
+
(!hasSubItems || anchorProps) && textBehavior()
|
|
44
50
|
)
|
|
45
51
|
},
|
|
46
52
|
children,
|
|
@@ -2,6 +2,7 @@ import React__default from 'react';
|
|
|
2
2
|
import { HiOutlineCloudArrowUp } from 'react-icons/hi2';
|
|
3
3
|
import { button } from '@tecsinapse/cortex-core';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
|
+
import { Tooltip } from '../Tooltip.js';
|
|
5
6
|
|
|
6
7
|
const Dropzone = ({
|
|
7
8
|
dropzoneProps,
|
|
@@ -9,19 +10,20 @@ const Dropzone = ({
|
|
|
9
10
|
dropText = "By dragging and dropping it here or clicking the button below",
|
|
10
11
|
buttonText = "Select File"
|
|
11
12
|
}) => {
|
|
13
|
+
const { getRootProps, getInputProps, isDragActive, isFileLimitReached } = dropzoneProps;
|
|
12
14
|
return /* @__PURE__ */ React__default.createElement(
|
|
13
15
|
"div",
|
|
14
16
|
{
|
|
15
|
-
...
|
|
17
|
+
...getRootProps(),
|
|
16
18
|
className: clsx(
|
|
17
19
|
"bg-white w-full border-dashed border-2 p-deca flex flex-col justify-center rounded-mili",
|
|
18
20
|
{
|
|
19
|
-
"border-success-medium bg-gray-100":
|
|
21
|
+
"border-success-medium bg-gray-100": isDragActive
|
|
20
22
|
}
|
|
21
23
|
)
|
|
22
24
|
},
|
|
23
|
-
/* @__PURE__ */ React__default.createElement("input", { ...
|
|
24
|
-
/* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col justify-center text-center items-center gap-deca" }, /* @__PURE__ */ React__default.createElement(HiOutlineCloudArrowUp, { className: "text-primary-medium", size: 35 }), /* @__PURE__ */ React__default.createElement("div", { className: "gap-mili" }, /* @__PURE__ */ React__default.createElement("p", { className: "text-lg font-semibold", "data-testid": "select-dropzone" }, selectFileText), /* @__PURE__ */ React__default.createElement("p", { className: "text-sm text-secondary-medium" }, dropText)), /* @__PURE__ */ React__default.createElement("button", { className: button() }, buttonText))
|
|
25
|
+
/* @__PURE__ */ React__default.createElement("input", { ...getInputProps() }),
|
|
26
|
+
/* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col justify-center text-center items-center gap-deca" }, /* @__PURE__ */ React__default.createElement(HiOutlineCloudArrowUp, { className: "text-primary-medium", size: 35 }), /* @__PURE__ */ React__default.createElement("div", { className: "gap-mili" }, /* @__PURE__ */ React__default.createElement("p", { className: "text-lg font-semibold", "data-testid": "select-dropzone" }, selectFileText), /* @__PURE__ */ React__default.createElement("p", { className: "text-sm text-secondary-medium" }, dropText)), isFileLimitReached ? /* @__PURE__ */ React__default.createElement(Tooltip, { text: "Voc\xEA s\xF3 pode selecionar um \xFAnico arquivo." }, /* @__PURE__ */ React__default.createElement("button", { disabled: true, className: clsx(button(), "cursor-not-allowed") }, buttonText)) : /* @__PURE__ */ React__default.createElement("button", { className: button() }, buttonText))
|
|
25
27
|
);
|
|
26
28
|
};
|
|
27
29
|
|
|
@@ -5,6 +5,16 @@ import { MdClose } from 'react-icons/md';
|
|
|
5
5
|
import { ProgressBar } from '../ProgressBar/ProgressBar.js';
|
|
6
6
|
|
|
7
7
|
const File = ({ file, index, onDelete }) => {
|
|
8
|
+
function statusIntent(status) {
|
|
9
|
+
switch (status) {
|
|
10
|
+
case "success":
|
|
11
|
+
return "success";
|
|
12
|
+
case "error":
|
|
13
|
+
return "error";
|
|
14
|
+
default:
|
|
15
|
+
return "info";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
8
18
|
return /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col", key: index }, /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center justify-between border rounded-t-mili shadow p-mili" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex gap-centi" }, file.file && file.file.type.startsWith("image/") ? /* @__PURE__ */ React__default.createElement(
|
|
9
19
|
"img",
|
|
10
20
|
{
|
|
@@ -23,7 +33,13 @@ const File = ({ file, index, onDelete }) => {
|
|
|
23
33
|
})
|
|
24
34
|
},
|
|
25
35
|
/* @__PURE__ */ React__default.createElement(MdClose, { size: 20 })
|
|
26
|
-
)), /* @__PURE__ */ React__default.createElement(
|
|
36
|
+
)), /* @__PURE__ */ React__default.createElement(
|
|
37
|
+
ProgressBar,
|
|
38
|
+
{
|
|
39
|
+
intent: statusIntent(file.status),
|
|
40
|
+
infinite: file.status !== "success"
|
|
41
|
+
}
|
|
42
|
+
));
|
|
27
43
|
};
|
|
28
44
|
|
|
29
45
|
export { File };
|
|
@@ -66,6 +66,7 @@ const useFileUpload = ({
|
|
|
66
66
|
const handleRemoveFile = useCallback((index) => {
|
|
67
67
|
setFiles((prevFiles) => prevFiles.filter((_, i) => i !== index));
|
|
68
68
|
}, []);
|
|
69
|
+
const isFileLimitReached = !allowMultiple && files.length > 0;
|
|
69
70
|
return {
|
|
70
71
|
onOpen,
|
|
71
72
|
onClose,
|
|
@@ -73,7 +74,8 @@ const useFileUpload = ({
|
|
|
73
74
|
dropzoneProps: {
|
|
74
75
|
getInputProps,
|
|
75
76
|
getRootProps,
|
|
76
|
-
isDragActive
|
|
77
|
+
isDragActive,
|
|
78
|
+
isFileLimitReached
|
|
77
79
|
},
|
|
78
80
|
open: isOpen,
|
|
79
81
|
files
|
|
@@ -32,8 +32,8 @@ const mostUsedItem = tv({
|
|
|
32
32
|
});
|
|
33
33
|
const item = tv({
|
|
34
34
|
slots: {
|
|
35
|
-
container: "flex flex-row gap-x-deca items-center text-secondary-dark text-base",
|
|
36
|
-
textBehavior: "hover:text-primary-medium
|
|
35
|
+
container: "flex flex-row gap-x-deca items-center text-secondary-dark hover:cursor-pointer text-base",
|
|
36
|
+
textBehavior: "hover:text-primary-medium",
|
|
37
37
|
icon: "text-primary-medium hover:cursor-pointer"
|
|
38
38
|
}
|
|
39
39
|
});
|
|
@@ -18,12 +18,14 @@ export interface UseDropzoneProps {
|
|
|
18
18
|
getRootProps: <T extends DropzoneRootProps>(props?: T) => T;
|
|
19
19
|
getInputProps: <T extends DropzoneInputProps>(props?: T) => T;
|
|
20
20
|
isDragActive: boolean;
|
|
21
|
+
isFileLimitReached: boolean;
|
|
21
22
|
}
|
|
22
23
|
export interface DropzoneProps {
|
|
23
24
|
dropzoneProps: UseDropzoneProps;
|
|
24
25
|
selectFileText?: string;
|
|
25
26
|
dropText?: string;
|
|
26
27
|
buttonText?: string;
|
|
28
|
+
isFileLimitReached?: boolean;
|
|
27
29
|
}
|
|
28
30
|
export interface ModalProps {
|
|
29
31
|
open: boolean;
|
|
@@ -40,7 +42,7 @@ export type FileUpload<T> = {
|
|
|
40
42
|
file: File;
|
|
41
43
|
metadata?: T;
|
|
42
44
|
uid: string;
|
|
43
|
-
status:
|
|
45
|
+
status: 'success' | 'error' | 'uploading';
|
|
44
46
|
};
|
|
45
47
|
export interface RootUploaderProps<T> {
|
|
46
48
|
open: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tecsinapse/cortex-react",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.18-beta.1",
|
|
4
4
|
"description": "React components based in @tecsinapse/cortex-core",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"react-dom": ">=18.0.0",
|
|
49
49
|
"tailwind": ">=3.3.0"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "83e248c8b7116b83b3c45f960b289d7a737fd9be"
|
|
52
52
|
}
|