@grazziotin/react-components 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -24
- package/dist/150.index.js +1 -0
- package/dist/815.index.js +1 -0
- package/dist/908.index.js +2 -0
- package/dist/908.index.js.LICENSE.txt +9 -0
- package/dist/988.index.js +1 -0
- package/dist/assets/fonts/Montserrat-Black.ttf +0 -0
- package/dist/assets/fonts/Montserrat-BlackItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-Bold.ttf +0 -0
- package/dist/assets/fonts/Montserrat-BoldItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-ExtraBold.ttf +0 -0
- package/dist/assets/fonts/Montserrat-ExtraBoldItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-ExtraLight.ttf +0 -0
- package/dist/assets/fonts/Montserrat-ExtraLightItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-Italic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-Light.ttf +0 -0
- package/dist/assets/fonts/Montserrat-LightItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-Medium.ttf +0 -0
- package/dist/assets/fonts/Montserrat-MediumItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-Regular.ttf +0 -0
- package/dist/assets/fonts/Montserrat-SemiBold.ttf +0 -0
- package/dist/assets/fonts/Montserrat-SemiBoldItalic.ttf +0 -0
- package/dist/assets/fonts/Montserrat-Thin.ttf +0 -0
- package/dist/assets/fonts/Montserrat-ThinItalic.ttf +0 -0
- package/dist/components/Inputs/Input/index.d.ts +39 -18
- package/dist/components/Inputs/Input/index.js +122 -28
- package/dist/components/Inputs/Input/utils/input-styled.d.ts +4 -0
- package/dist/components/Inputs/Input/utils/input-styled.js +63 -0
- package/dist/components/Inputs/Input/utils/interface.d.ts +21 -0
- package/dist/components/Inputs/Input/utils/interface.js +1 -0
- package/dist/components/Inputs/Input/utils/mask-custom.d.ts +4 -0
- package/dist/components/Inputs/Input/utils/mask-custom.js +30 -0
- package/dist/components/Inputs/input-select/index.d.ts +42 -0
- package/dist/components/Inputs/input-select/index.js +84 -0
- package/dist/components/Inputs/input-select/utils/interface.d.ts +43 -0
- package/dist/components/Inputs/input-select/utils/interface.js +1 -0
- package/dist/components/Loader/index.d.ts +5 -0
- package/dist/components/Loader/index.js +7 -0
- package/dist/components/barcode/BarcodeScanner.d.ts +26 -0
- package/dist/components/barcode/barcode-scanner.d.ts +26 -0
- package/dist/components/barcode/barcode-scanner.js +433 -0
- package/dist/components/barcode/index.d.ts +36 -0
- package/dist/components/barcode/index.js +65 -0
- package/dist/components/barcode/utils/constants.d.ts +139 -0
- package/dist/components/barcode/utils/constants.js +224 -0
- package/dist/components/barcode/utils/interface.d.ts +50 -0
- package/dist/components/barcode/utils/interface.js +1 -0
- package/dist/components/button/button-excel/index.d.ts +32 -0
- package/dist/components/button/button-excel/index.js +143 -0
- package/dist/components/button/index.d.ts +21 -0
- package/dist/components/button/index.js +101 -0
- package/dist/components/card/index.d.ts +21 -0
- package/dist/components/card/index.js +48 -0
- package/dist/components/datatable/index.d.ts +8 -0
- package/dist/components/datatable/index.js +103 -0
- package/dist/components/datatable/utils/constants.d.ts +8 -0
- package/dist/components/datatable/utils/constants.js +42 -0
- package/dist/components/filtro/components/card.d.ts +24 -0
- package/dist/components/filtro/components/card.js +49 -0
- package/dist/components/filtro/components/filtros.d.ts +19 -0
- package/dist/components/filtro/components/filtros.js +77 -0
- package/dist/components/filtro/index.d.ts +28 -0
- package/dist/components/filtro/index.js +38 -0
- package/dist/components/filtro/utils/interface.d.ts +105 -0
- package/dist/components/filtro/utils/interface.js +1 -0
- package/dist/components/icons/index.d.ts +21 -0
- package/dist/components/icons/index.js +39 -0
- package/dist/components/tabs/index.d.ts +24 -0
- package/dist/components/tabs/index.js +39 -0
- package/dist/functions/mascaras/index.js +1 -1
- package/dist/index.d.ts +12 -8
- package/dist/index.js +1 -1
- package/dist/theme.css +1058 -99
- package/package.json +29 -16
|
@@ -20,40 +20,134 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
-
import {
|
|
25
|
-
import { sx, standard, theme } from 'src/styles/sx';
|
|
23
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
|
+
import { limitDecimais, mascaradorTelefone, mascaradorInputMoeda, } from 'src/functions/mascaras';
|
|
26
25
|
import { cn } from 'src/lib/utils';
|
|
27
|
-
import {
|
|
26
|
+
import { CameraAlt } from '@mui/icons-material';
|
|
27
|
+
import { BarcodeDialog } from 'src/components/barcode';
|
|
28
|
+
import { InputAdornment } from '@mui/material';
|
|
29
|
+
import { lazy, useState, useEffect, useCallback } from 'react';
|
|
30
|
+
var MaskCustom = lazy(function () { return import('./utils/mask-custom'); });
|
|
31
|
+
var InputTextField = lazy(function () { return import('./utils/input-styled'); });
|
|
28
32
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @
|
|
33
|
+
* Aplica máscara de CPF ou CNPJ automaticamente com base no comprimento.
|
|
34
|
+
*
|
|
35
|
+
* @param {string} cpfCnpj - Valor numérico do CPF ou CNPJ (com ou sem formatação).
|
|
36
|
+
* @returns {string} Documento com máscara de CPF ou CNPJ.
|
|
32
37
|
*/
|
|
33
|
-
|
|
34
|
-
var
|
|
38
|
+
function mascararDocumento(cpfCnpj) {
|
|
39
|
+
var value = cpfCnpj.replace(/\D/g, '');
|
|
40
|
+
if (!value)
|
|
41
|
+
return '';
|
|
42
|
+
if (value.length <= 11) {
|
|
43
|
+
var cpf = value.slice(0, 11);
|
|
44
|
+
return cpf
|
|
45
|
+
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
46
|
+
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
47
|
+
.replace(/(\d{3})(\d{1,2})$/, '$1-$2');
|
|
48
|
+
}
|
|
49
|
+
var cnpj = value.slice(0, 14);
|
|
50
|
+
return cnpj
|
|
51
|
+
.replace(/^(\d{2})(\d)/, '$1.$2')
|
|
52
|
+
.replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
|
|
53
|
+
.replace(/\.(\d{3})(\d)/, '.$1/$2')
|
|
54
|
+
.replace(/(\d{4})(\d)/, '$1-$2');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Componente de entrada (Input) personalizado baseado no MUI (Material-UI) para uso específico no projeto.
|
|
58
|
+
* Ele inclui diversas funcionalidades como máscaras para formatos específicos (CPF, telefone, moeda) e suporte a captura de código de barras via câmera.
|
|
59
|
+
*
|
|
60
|
+
*
|
|
61
|
+
* @version 0.0.1
|
|
62
|
+
* @author Flaviasoz
|
|
63
|
+
* @date 2024-10-21
|
|
64
|
+
*
|
|
65
|
+
* @param {InputProps} props - As propriedades do componente Input.
|
|
66
|
+
* @param {string} [props.mask] - A máscara personalizada a ser aplicada ao campo de entrada, usada em conjunto com o componente `MaskCustom`. **Nota:** Versão beta, não utilizar em telas de produção.
|
|
67
|
+
* @param {boolean} [props.onCamera] - Função a ser executada após a captura de um código de barras pela câmera.
|
|
68
|
+
* @param {boolean} [props.openCamera] - Define se a câmera está aberta para captura de código de barras.
|
|
69
|
+
* @param {function} [props.onKeyEnter] - Callback executado quando a tecla "Enter" é pressionada.
|
|
70
|
+
* @param {string} [props.type='text'] - Define o tipo do campo de entrada. Pode ser 'text', 'real', 'float', 'cpf', 'celular', ou outros tipos de entrada aceitos pelo HTML.
|
|
71
|
+
* @param {function} [props.setOpenCamera] - Função para controlar a abertura/fechamento da câmera.
|
|
72
|
+
* @param {React.InputHTMLAttributes<HTMLInputElement>} [props.rest] - Qualquer outra propriedade HTML ou de entrada aceitas pelo componente Input.
|
|
73
|
+
*
|
|
74
|
+
* @returns {JSX.Element} Componente de entrada customizado.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```jsx
|
|
78
|
+
* const MyComponent = () => (
|
|
79
|
+
* <Input
|
|
80
|
+
* mask="cpf"
|
|
81
|
+
* type="cpf"
|
|
82
|
+
* onChange={(e) => console.log(e.target.value)}
|
|
83
|
+
* onCamera={(code) => console.log("Código de barras:", code)}
|
|
84
|
+
* openCamera={true}
|
|
85
|
+
* setOpenCamera={(open) => console.log("Câmera aberta:", open)}
|
|
86
|
+
* />
|
|
87
|
+
* );
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
var Input = function (_a) {
|
|
91
|
+
var mask = _a.mask, onCamera = _a.onCamera, openCamera = _a.openCamera, onKeyEnter = _a.onKeyEnter, _b = _a.type, type = _b === void 0 ? 'text' : _b, setOpenCamera = _a.setOpenCamera, rest = __rest(_a, ["mask", "onCamera", "openCamera", "onKeyEnter", "type", "setOpenCamera"]);
|
|
92
|
+
var _c = useState(false), open = _c[0], setOpen = _c[1];
|
|
93
|
+
var _d = useState(), inputProps = _d[0], setInputProps = _d[1];
|
|
94
|
+
useEffect(function () {
|
|
95
|
+
var inputProps = __assign(__assign(__assign({}, rest.InputProps), (mask && {
|
|
96
|
+
inputComponent: MaskCustom,
|
|
97
|
+
inputProps: { mask: mask },
|
|
98
|
+
})), (onCamera &&
|
|
99
|
+
!rest.disabled && {
|
|
100
|
+
endAdornment: (_jsx(InputAdornment, { className: "cursor-pointer text-grzprimary", position: "end", onClick: function () {
|
|
101
|
+
return setOpenCamera ? setOpenCamera(true) : setOpen(true);
|
|
102
|
+
}, children: _jsx(CameraAlt, { className: "cursor-pointer text-grzprimary", fontSize: "small" }) })),
|
|
103
|
+
}));
|
|
104
|
+
setInputProps(inputProps);
|
|
105
|
+
}, [onCamera, mask, rest.disabled, rest.InputProps, setOpenCamera]);
|
|
106
|
+
/**
|
|
107
|
+
* Formata o valor de entrada de acordo com o tipo definido (ex.: CPF, telefone, moeda).
|
|
108
|
+
*
|
|
109
|
+
* @param {string} value - O valor a ser formatado.
|
|
110
|
+
* @returns {string} O valor formatado.
|
|
111
|
+
*/
|
|
112
|
+
var formatValue = useCallback(function (value) {
|
|
113
|
+
switch (type) {
|
|
114
|
+
case 'real':
|
|
115
|
+
return mascaradorInputMoeda(value.replace(',', '.'));
|
|
116
|
+
case 'float':
|
|
117
|
+
return limitDecimais(value.replace(',', '.'), 8);
|
|
118
|
+
case 'cpf':
|
|
119
|
+
return mascararDocumento(value);
|
|
120
|
+
case 'celular':
|
|
121
|
+
return mascaradorTelefone(value);
|
|
122
|
+
default:
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
}, [type]);
|
|
126
|
+
/**
|
|
127
|
+
* Manipula a alteração do valor de entrada, aplicando a formatação correta.
|
|
128
|
+
*
|
|
129
|
+
* @param {React.ChangeEvent<HTMLInputElement>} e - Evento de alteração da entrada.
|
|
130
|
+
*/
|
|
131
|
+
var handleChange = function (e) {
|
|
132
|
+
var newValue = e.target.value;
|
|
133
|
+
rest.onChange &&
|
|
134
|
+
rest.onChange(__assign(__assign({}, e), { target: __assign(__assign({}, e.target), { value: formatValue(newValue) }) }));
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Lida com o pressionamento da tecla "Enter", disparando o callback `onKeyEnter` se fornecido.
|
|
138
|
+
*
|
|
139
|
+
* @param {KeyboardEvent<HTMLDivElement>} e - Evento de pressionamento da tecla.
|
|
140
|
+
*/
|
|
35
141
|
function onEnter(e) {
|
|
36
142
|
if (e.key === 'Enter' && onKeyEnter) {
|
|
143
|
+
e.preventDefault();
|
|
37
144
|
onKeyEnter();
|
|
38
145
|
}
|
|
39
146
|
rest.onKeyDown && rest.onKeyDown(e);
|
|
40
147
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
value = limitDecimais(value, 8);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
rest.onChange &&
|
|
53
|
-
rest.onChange(__assign(__assign({}, e), { target: __assign(__assign({}, e.target), { value: value }) }));
|
|
54
|
-
};
|
|
55
|
-
var InputProps = __assign({ readOnly: readOnly }, rest.InputProps);
|
|
56
|
-
return (_jsx(ThemeProvider, { theme: theme, children: _jsx(TextField, __assign({}, rest, { sx: rest.variant === 'standard' ? standard : sx, onKeyDown: onEnter, InputLabelProps: __assign(__assign({}, rest.InputLabelProps), { shrink: shrink }), InputProps: InputProps, size: size, className: cn('select-none', rest.className), type: ['real', 'float'].includes(type) ? 'text' : type, onChange: handleChange, inputProps: __assign(__assign({}, rest.inputProps), { step: (type === 'real' && '0.01') ||
|
|
57
|
-
(type === 'float' && '0.0000001') ||
|
|
58
|
-
'1' }) })) }));
|
|
59
|
-
}
|
|
148
|
+
return (_jsxs(_Fragment, { children: [_jsx(InputTextField, __assign({}, rest, { size: "small", onKeyDown: onEnter, InputProps: inputProps, onChange: handleChange, className: cn('select-none', rest.className), inputProps: __assign(__assign({}, rest.inputProps), { step: (type === 'real' && '0.01') ||
|
|
149
|
+
(type === 'float' && '0.0000001') ||
|
|
150
|
+
'1' }), type: ['real', 'float'].includes(type) ? 'text' : type })), onCamera && (_jsx(BarcodeDialog, { open: openCamera || open, setOpen: setOpenCamera || setOpen, setCode: onCamera }))] }));
|
|
151
|
+
};
|
|
152
|
+
Input.displayName = 'Input';
|
|
153
|
+
export default Input;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const _default: import("react").NamedExoticComponent<{
|
|
2
|
+
variant?: import("@mui/material").TextFieldVariants | undefined;
|
|
3
|
+
} & Omit<import("@mui/material").StandardTextFieldProps | import("@mui/material").FilledTextFieldProps | import("@mui/material").OutlinedTextFieldProps, "variant"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>>;
|
|
4
|
+
export default _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { memo } from 'react';
|
|
2
|
+
import { styled, TextField } from '@mui/material';
|
|
3
|
+
var InputTextField = styled(TextField)({
|
|
4
|
+
'& input': {
|
|
5
|
+
fontFamily: 'Montserrat !important',
|
|
6
|
+
fontSize: '14px',
|
|
7
|
+
color: '#333',
|
|
8
|
+
},
|
|
9
|
+
'& label': {
|
|
10
|
+
fontFamily: 'Montserrat !important',
|
|
11
|
+
fontSize: '14px',
|
|
12
|
+
color: '#333',
|
|
13
|
+
},
|
|
14
|
+
'& label.Mui-focused': {
|
|
15
|
+
color: '#00B2A6',
|
|
16
|
+
},
|
|
17
|
+
'& .MuiInput-underline:after': {
|
|
18
|
+
borderBottomColor: '#00B2A6',
|
|
19
|
+
},
|
|
20
|
+
'& .MuiOutlinedInput-root': {
|
|
21
|
+
fontFamily: 'Montserrat !important',
|
|
22
|
+
borderRadius: '8px',
|
|
23
|
+
backgroundColor: '#fff',
|
|
24
|
+
'& fieldset': {
|
|
25
|
+
borderColor: 'rgba(0, 178, 166, 0.5)',
|
|
26
|
+
borderRadius: '8px',
|
|
27
|
+
},
|
|
28
|
+
'&:hover fieldset': {
|
|
29
|
+
borderColor: '#00B2A6',
|
|
30
|
+
},
|
|
31
|
+
'&.Mui-focused fieldset': {
|
|
32
|
+
borderColor: '#00B2A6',
|
|
33
|
+
borderWidth: '1px',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
'& .MuiFilledInput-root': {
|
|
37
|
+
fontFamily: 'Montserrat !important',
|
|
38
|
+
backgroundColor: '#f5f5f5',
|
|
39
|
+
'&:hover': {
|
|
40
|
+
backgroundColor: '#e0e0e0',
|
|
41
|
+
},
|
|
42
|
+
'&:before': {
|
|
43
|
+
borderBottomColor: '#00B2A6',
|
|
44
|
+
},
|
|
45
|
+
'&:hover:before': {
|
|
46
|
+
borderBottomColor: '#00B2A6',
|
|
47
|
+
},
|
|
48
|
+
'&:after': {
|
|
49
|
+
borderBottomColor: '#00B2A6',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
'& .MuiInputBase-input': {
|
|
53
|
+
fontFamily: 'Montserrat !important',
|
|
54
|
+
fontSize: '14px',
|
|
55
|
+
color: '#333',
|
|
56
|
+
},
|
|
57
|
+
'& .MuiFormHelperText-root': {
|
|
58
|
+
fontFamily: 'Montserrat !important',
|
|
59
|
+
fontSize: '10px',
|
|
60
|
+
marginLeft: 2,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
export default memo(InputTextField);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactMaskOpts } from 'react-imask';
|
|
2
|
+
import { TextFieldProps } from '@mui/material';
|
|
3
|
+
export type InputPropsCustomTypes = 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' | 'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' | 'week' | 'float' | 'real' | 'cpf' | 'celular';
|
|
4
|
+
export type InputProps = TextFieldProps & {
|
|
5
|
+
openCamera?: boolean;
|
|
6
|
+
onKeyEnter?: () => void;
|
|
7
|
+
type?: InputPropsCustomTypes;
|
|
8
|
+
mask?: ReactMaskOpts['mask'];
|
|
9
|
+
onCamera?: (v: string) => void;
|
|
10
|
+
setOpenCamera?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
11
|
+
};
|
|
12
|
+
export interface MaskCustomProps {
|
|
13
|
+
onChange: (event: {
|
|
14
|
+
target: {
|
|
15
|
+
name: string;
|
|
16
|
+
value: string;
|
|
17
|
+
};
|
|
18
|
+
}) => void;
|
|
19
|
+
name: string;
|
|
20
|
+
mask: any[];
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import React, { memo } from 'react';
|
|
25
|
+
import { IMaskInput } from 'react-imask';
|
|
26
|
+
var MaskCustom = React.forwardRef(function TextMaskCustom(props, ref) {
|
|
27
|
+
var onChange = props.onChange, mask = props.mask, other = __rest(props, ["onChange", "mask"]);
|
|
28
|
+
return (_jsx(IMaskInput, __assign({}, other, { overwrite: true, mask: mask, inputRef: ref, onAccept: function (value) { return onChange({ target: { name: props.name, value: value } }); } })));
|
|
29
|
+
});
|
|
30
|
+
export default memo(MaskCustom);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { InputSelectProps } from './utils/interface';
|
|
2
|
+
/**
|
|
3
|
+
* Componente InputSelect que encapsula o Autocomplete do Material-UI com um campo de entrada personalizado.
|
|
4
|
+
*
|
|
5
|
+
* Este componente permite a seleção de uma ou mais opções com base nos parâmetros fornecidos.
|
|
6
|
+
* Ele é altamente configurável e utiliza as propriedades do Autocomplete do Material-UI,
|
|
7
|
+
* com a adição de um campo de entrada customizável através de `textFieldProps`.
|
|
8
|
+
*
|
|
9
|
+
* @version 0.0.1
|
|
10
|
+
* @author Flaviasoz
|
|
11
|
+
* @date 2024-10-21
|
|
12
|
+
*
|
|
13
|
+
* @template T - O tipo dos itens de opções exibidos no seletor.
|
|
14
|
+
* @template M - Define se o seletor permite múltiplas seleções (booleano). O padrão é `false` (seletor único).
|
|
15
|
+
*
|
|
16
|
+
* @param {InputSelectProps<T, M>} props - As propriedades que configuram o comportamento do componente.
|
|
17
|
+
* @param {boolean} [props.multiple=false] - Define se múltiplas opções podem ser selecionadas. Se `true`, o usuário pode selecionar várias opções.
|
|
18
|
+
* @param {(data: T) => string} props.optionLabel - Função que recebe uma opção e retorna o rótulo (string) a ser exibido na interface.
|
|
19
|
+
* @param {function(React.SyntheticEvent, M extends true ? T[] : T | null, AutocompleteChangeReason, AutocompleteChangeDetails<T>): void} [props.onChange] - Função de callback acionada quando o valor selecionado é alterado. Recebe o evento, o novo valor, o motivo da alteração e detalhes adicionais.
|
|
20
|
+
* @param {InputProps} [props.textFieldProps] - Propriedades adicionais para personalizar o campo de entrada (componente Input).
|
|
21
|
+
* @param {T[]} props.options - Lista de opções disponíveis no seletor.
|
|
22
|
+
* @param {Omit<AutocompleteProps<T, M, boolean | undefined, boolean | undefined>, 'renderInput' | 'onChange'>} rest - Outras propriedades do Autocomplete do Material-UI, exceto `renderInput` e `onChange`, que são gerenciadas internamente.
|
|
23
|
+
*
|
|
24
|
+
* @returns {JSX.Element} O componente `InputSelect`, que inclui o Autocomplete com um campo de entrada personalizado.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```jsx
|
|
28
|
+
* const options = [{ id: 1, label: 'Opção 1' }, { id: 2, label: 'Opção 2' }];
|
|
29
|
+
*
|
|
30
|
+
* const MyComponent = () => (
|
|
31
|
+
* <InputSelect
|
|
32
|
+
* options={options}
|
|
33
|
+
* optionLabel={(option) => option.label}
|
|
34
|
+
* onChange={(event, value) => console.log('Valor selecionado:', value)}
|
|
35
|
+
* multiple={true}
|
|
36
|
+
* />
|
|
37
|
+
* );
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
declare const InputSelect: <T, M extends boolean = false>({ multiple, optionLabel, onChange, textFieldProps, ...rest }: InputSelectProps<T, M>) => JSX.Element;
|
|
41
|
+
export default InputSelect;
|
|
42
|
+
export type { InputSelectProps } from './utils/interface';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import Input from 'src/components/inputs/input';
|
|
25
|
+
import Autocomplete from '@mui/material/Autocomplete';
|
|
26
|
+
/**
|
|
27
|
+
* Componente InputSelect que encapsula o Autocomplete do Material-UI com um campo de entrada personalizado.
|
|
28
|
+
*
|
|
29
|
+
* Este componente permite a seleção de uma ou mais opções com base nos parâmetros fornecidos.
|
|
30
|
+
* Ele é altamente configurável e utiliza as propriedades do Autocomplete do Material-UI,
|
|
31
|
+
* com a adição de um campo de entrada customizável através de `textFieldProps`.
|
|
32
|
+
*
|
|
33
|
+
* @version 0.0.1
|
|
34
|
+
* @author Flaviasoz
|
|
35
|
+
* @date 2024-10-21
|
|
36
|
+
*
|
|
37
|
+
* @template T - O tipo dos itens de opções exibidos no seletor.
|
|
38
|
+
* @template M - Define se o seletor permite múltiplas seleções (booleano). O padrão é `false` (seletor único).
|
|
39
|
+
*
|
|
40
|
+
* @param {InputSelectProps<T, M>} props - As propriedades que configuram o comportamento do componente.
|
|
41
|
+
* @param {boolean} [props.multiple=false] - Define se múltiplas opções podem ser selecionadas. Se `true`, o usuário pode selecionar várias opções.
|
|
42
|
+
* @param {(data: T) => string} props.optionLabel - Função que recebe uma opção e retorna o rótulo (string) a ser exibido na interface.
|
|
43
|
+
* @param {function(React.SyntheticEvent, M extends true ? T[] : T | null, AutocompleteChangeReason, AutocompleteChangeDetails<T>): void} [props.onChange] - Função de callback acionada quando o valor selecionado é alterado. Recebe o evento, o novo valor, o motivo da alteração e detalhes adicionais.
|
|
44
|
+
* @param {InputProps} [props.textFieldProps] - Propriedades adicionais para personalizar o campo de entrada (componente Input).
|
|
45
|
+
* @param {T[]} props.options - Lista de opções disponíveis no seletor.
|
|
46
|
+
* @param {Omit<AutocompleteProps<T, M, boolean | undefined, boolean | undefined>, 'renderInput' | 'onChange'>} rest - Outras propriedades do Autocomplete do Material-UI, exceto `renderInput` e `onChange`, que são gerenciadas internamente.
|
|
47
|
+
*
|
|
48
|
+
* @returns {JSX.Element} O componente `InputSelect`, que inclui o Autocomplete com um campo de entrada personalizado.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```jsx
|
|
52
|
+
* const options = [{ id: 1, label: 'Opção 1' }, { id: 2, label: 'Opção 2' }];
|
|
53
|
+
*
|
|
54
|
+
* const MyComponent = () => (
|
|
55
|
+
* <InputSelect
|
|
56
|
+
* options={options}
|
|
57
|
+
* optionLabel={(option) => option.label}
|
|
58
|
+
* onChange={(event, value) => console.log('Valor selecionado:', value)}
|
|
59
|
+
* multiple={true}
|
|
60
|
+
* />
|
|
61
|
+
* );
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
var InputSelect = function (_a) {
|
|
65
|
+
var multiple = _a.multiple, optionLabel = _a.optionLabel, onChange = _a.onChange, textFieldProps = _a.textFieldProps, rest = __rest(_a, ["multiple", "optionLabel", "onChange", "textFieldProps"]);
|
|
66
|
+
var handleChange = function (event, value, reason, details) {
|
|
67
|
+
if (onChange) {
|
|
68
|
+
onChange(event, value, reason, details);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
return (_jsx(Autocomplete, __assign({}, rest, { size: "small", multiple: multiple, getOptionLabel: function (v) { return (typeof v !== 'string' ? optionLabel(v) : ''); }, onChange: handleChange, slotProps: __assign({ paper: {
|
|
72
|
+
sx: {
|
|
73
|
+
borderRadius: '12px',
|
|
74
|
+
marginTop: 0.5,
|
|
75
|
+
boxShadow: '0 4px 12px rgba(0,0,0,0.1)',
|
|
76
|
+
},
|
|
77
|
+
} }, rest.slotProps), sx: __assign({ '& .MuiOutlinedInput-root': {
|
|
78
|
+
borderRadius: '8px',
|
|
79
|
+
'& fieldset': { borderRadius: '8px' },
|
|
80
|
+
}, '& .MuiChip-root': {
|
|
81
|
+
borderRadius: '6px',
|
|
82
|
+
} }, rest.sx), renderInput: function (params) { return (_jsx(Input, __assign({}, params, textFieldProps, { size: "small" }))); } })));
|
|
83
|
+
};
|
|
84
|
+
export default InputSelect;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { AutocompleteChangeDetails, AutocompleteChangeReason, AutocompleteProps } from '@mui/material';
|
|
2
|
+
import { InputProps } from 'src/components/inputs/input/utils/interface';
|
|
3
|
+
export interface AdicionalPropsInput {
|
|
4
|
+
order?: number;
|
|
5
|
+
xs?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Interface para as propriedades do componente InputSelect.
|
|
9
|
+
*
|
|
10
|
+
* @template T - O tipo dos itens de opções no seletor.
|
|
11
|
+
* @template M - Valor booleano que define se a seleção pode ser múltipla.
|
|
12
|
+
*/
|
|
13
|
+
export interface InputSelectProps<T, M extends boolean = false> extends Omit<AutocompleteProps<T, M, boolean | undefined, boolean | undefined>, 'renderInput' | 'onChange'> {
|
|
14
|
+
/**
|
|
15
|
+
* Propriedades adicionais para o campo de entrada.
|
|
16
|
+
* @type {(Omit<InputProps, 'sx'> & AdicionalPropsInput)}
|
|
17
|
+
*/
|
|
18
|
+
textFieldProps?: Omit<InputProps, 'sx'> & AdicionalPropsInput;
|
|
19
|
+
/**
|
|
20
|
+
* As opções a serem exibidas no seletor.
|
|
21
|
+
* @type {T[]}
|
|
22
|
+
*/
|
|
23
|
+
options: T[];
|
|
24
|
+
/**
|
|
25
|
+
* Função que retorna a string a ser exibida como o rótulo de uma opção.
|
|
26
|
+
* @param {T} data - A opção de dado.
|
|
27
|
+
* @returns {string} O rótulo da opção.
|
|
28
|
+
*/
|
|
29
|
+
optionLabel: (data: T) => string;
|
|
30
|
+
/**
|
|
31
|
+
* Define se o seletor permite múltiplas seleções.
|
|
32
|
+
* @type {M}
|
|
33
|
+
*/
|
|
34
|
+
multiple?: M;
|
|
35
|
+
/**
|
|
36
|
+
* Função de callback disparada quando o valor do seletor é alterado.
|
|
37
|
+
* @param {React.SyntheticEvent} event - O evento que disparou a alteração.
|
|
38
|
+
* @param {M extends true ? T[] : T | null} value - O novo valor selecionado.
|
|
39
|
+
* @param {AutocompleteChangeReason} reason - O motivo da alteração.
|
|
40
|
+
* @param {AutocompleteChangeDetails<T>} [details] - Detalhes adicionais da alteração (opcional).
|
|
41
|
+
*/
|
|
42
|
+
onChange?: (event: React.SyntheticEvent, value: M extends true ? T[] : T | null, reason: AutocompleteChangeReason, details?: AutocompleteChangeDetails<T>) => void;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Backdrop, CircularProgress } from '@mui/material';
|
|
3
|
+
function Loader(_a) {
|
|
4
|
+
var open = _a.open;
|
|
5
|
+
return (_jsx(Backdrop, { open: open, invisible: true, sx: { zIndex: function (theme) { return theme.zIndex.drawer + 1; } }, children: _jsx(CircularProgress, { color: "inherit" }) }));
|
|
6
|
+
}
|
|
7
|
+
export default Loader;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BarcodeScannerProps } from './utils/interface';
|
|
2
|
+
/**
|
|
3
|
+
* Componente scanner de código de barras que utiliza a biblioteca Quagga.js
|
|
4
|
+
* para capturar códigos de barras através da câmera do dispositivo.
|
|
5
|
+
*
|
|
6
|
+
* @component
|
|
7
|
+
* @param props - Propriedades do componente
|
|
8
|
+
* @param props.setCode - Função callback para definir o código lido
|
|
9
|
+
* @param props.open - Estado que controla se o scanner está aberto/ativo
|
|
10
|
+
* @param props.setOpen - Função para controlar o estado de abertura do scanner
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* const [code, setCode] = useState('')
|
|
15
|
+
* const [scannerOpen, setScannerOpen] = useState(false)
|
|
16
|
+
*
|
|
17
|
+
* return (
|
|
18
|
+
* <BarcodeScanner
|
|
19
|
+
* setCode={setCode}
|
|
20
|
+
* open={scannerOpen}
|
|
21
|
+
* setOpen={setScannerOpen}
|
|
22
|
+
* />
|
|
23
|
+
* )
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function BarcodeScanner({ setCode, open, setOpen, }: Readonly<BarcodeScannerProps>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BarcodeScannerProps } from './utils/interface';
|
|
2
|
+
/**
|
|
3
|
+
* Componente scanner de código de barras que utiliza a biblioteca Quagga.js
|
|
4
|
+
* para capturar códigos de barras através da câmera do dispositivo.
|
|
5
|
+
*
|
|
6
|
+
* @component
|
|
7
|
+
* @param props - Propriedades do componente
|
|
8
|
+
* @param props.setCode - Função callback para definir o código lido
|
|
9
|
+
* @param props.open - Estado que controla se o scanner está aberto/ativo
|
|
10
|
+
* @param props.setOpen - Função para controlar o estado de abertura do scanner
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* const [code, setCode] = useState('')
|
|
15
|
+
* const [scannerOpen, setScannerOpen] = useState(false)
|
|
16
|
+
*
|
|
17
|
+
* return (
|
|
18
|
+
* <BarcodeScanner
|
|
19
|
+
* setCode={setCode}
|
|
20
|
+
* open={scannerOpen}
|
|
21
|
+
* setOpen={setScannerOpen}
|
|
22
|
+
* />
|
|
23
|
+
* )
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function BarcodeScanner({ setCode, open, setOpen, }: Readonly<BarcodeScannerProps>): import("react/jsx-runtime").JSX.Element;
|