eatopia-ds 0.0.85
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 +200 -0
- package/build/index.css +1 -0
- package/build/index.js +17 -0
- package/build/index.js.map +1 -0
- package/build/index12.js +20 -0
- package/build/index12.js.map +1 -0
- package/build/index13.js +134 -0
- package/build/index13.js.map +1 -0
- package/build/index14.js +5 -0
- package/build/index14.js.map +1 -0
- package/build/index15.js +29 -0
- package/build/index15.js.map +1 -0
- package/build/index16.js +605 -0
- package/build/index16.js.map +1 -0
- package/build/index17.js +5 -0
- package/build/index17.js.map +1 -0
- package/build/index18.js +5 -0
- package/build/index18.js.map +1 -0
- package/build/index19.js +28 -0
- package/build/index19.js.map +1 -0
- package/build/index2.js +28 -0
- package/build/index2.js.map +1 -0
- package/build/index20.js +25 -0
- package/build/index20.js.map +1 -0
- package/build/index21.js +42 -0
- package/build/index21.js.map +1 -0
- package/build/index22.js +21 -0
- package/build/index22.js.map +1 -0
- package/build/index3.js +36 -0
- package/build/index3.js.map +1 -0
- package/build/index4.js +11 -0
- package/build/index4.js.map +1 -0
- package/build/index5.js +187 -0
- package/build/index5.js.map +1 -0
- package/build/index6.js +423 -0
- package/build/index6.js.map +1 -0
- package/build/index7.js +290 -0
- package/build/index7.js.map +1 -0
- package/build/index8.js +268 -0
- package/build/index8.js.map +1 -0
- package/build/index9.js +9 -0
- package/build/index9.js.map +1 -0
- package/build/logo.png +0 -0
- package/build/vite.svg +1 -0
- package/package.json +102 -0
package/README.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# DS-Eatopia
|
|
2
|
+
|
|
3
|
+
Uma biblioteca de componentes React independente de CSS externo, com todos os estilos embutidos inline.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- ✅ **Zero dependências de CSS externo** - Todos os estilos são inline
|
|
8
|
+
- ✅ **Componentes prontos para uso** - Não precisa configurar Tailwind ou outros frameworks CSS
|
|
9
|
+
- ✅ **Totalmente responsivo** - Funciona em todos os dispositivos
|
|
10
|
+
- ✅ **Mobile-first** - Modal com largura total em dispositivos móveis
|
|
11
|
+
- ✅ **Acessível** - Segue as melhores práticas de acessibilidade
|
|
12
|
+
- ✅ **TypeScript** - Tipagem completa incluída
|
|
13
|
+
|
|
14
|
+
## Instalação
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install ds-eatopia
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Uso
|
|
21
|
+
|
|
22
|
+
### EstoqueCard
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { EstoqueCard, Produto, ContagemInicial } from "ds-eatopia";
|
|
26
|
+
|
|
27
|
+
const produto: Produto = {
|
|
28
|
+
id: 1,
|
|
29
|
+
name: "Arroz Integral",
|
|
30
|
+
sku: "ARROZ001",
|
|
31
|
+
categoria: "Grãos",
|
|
32
|
+
estoque: 50,
|
|
33
|
+
unidades: [
|
|
34
|
+
{ label: "kg", value: "1" },
|
|
35
|
+
{ label: "Caixa 5kg", value: "5" },
|
|
36
|
+
],
|
|
37
|
+
unidade_sap: "kg",
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const contagemInicial: ContagemInicial[] = [
|
|
41
|
+
{
|
|
42
|
+
quantidade: 2,
|
|
43
|
+
unidade: {
|
|
44
|
+
label: "KG",
|
|
45
|
+
value: "1"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
quantidade: 4,
|
|
50
|
+
unidade: {
|
|
51
|
+
label: "PCT 0,5 KG",
|
|
52
|
+
value: "0.5"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
function App() {
|
|
58
|
+
return (
|
|
59
|
+
<div>
|
|
60
|
+
<EstoqueCard produto={produto} contagemInicial={contagemInicial} />
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### UnitSelect
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import { UnitSelect, UnitOption } from "ds-eatopia";
|
|
70
|
+
|
|
71
|
+
function App() {
|
|
72
|
+
const [selectedUnit, setSelectedUnit] = useState("1");
|
|
73
|
+
|
|
74
|
+
const units: UnitOption[] = [
|
|
75
|
+
{ label: "kg", value: "1" },
|
|
76
|
+
{ label: "Caixa 5kg", value: "5" },
|
|
77
|
+
{ label: "Saco 25kg", value: "25" },
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<UnitSelect
|
|
82
|
+
units={units}
|
|
83
|
+
selectedUnit={selectedUnit}
|
|
84
|
+
onUnitChange={setSelectedUnit}
|
|
85
|
+
defaultUnit="1"
|
|
86
|
+
/>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Responsividade Automática
|
|
92
|
+
|
|
93
|
+
O componente `EstoqueCard` detecta automaticamente dispositivos móveis (≤768px) e ajusta o modal para largura total:
|
|
94
|
+
|
|
95
|
+
- **Desktop/Tablet**: Modal com largura fixa de 400px
|
|
96
|
+
- **Mobile**: Modal com largura total (100%) e padding otimizado
|
|
97
|
+
|
|
98
|
+
### QuantidadeInput
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
import { QuantidadeInput } from "ds-eatopia";
|
|
102
|
+
|
|
103
|
+
function App() {
|
|
104
|
+
const [quantidade, setQuantidade] = useState(5);
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<QuantidadeInput
|
|
108
|
+
valor={quantidade}
|
|
109
|
+
onChange={setQuantidade}
|
|
110
|
+
atalhos={[10, 25, 50, -10, -25, -50]}
|
|
111
|
+
selectedUnit="kg"
|
|
112
|
+
addStockItem={(valor) => {
|
|
113
|
+
console.log(`Adicionando ${valor} kg ao estoque`);
|
|
114
|
+
}}
|
|
115
|
+
/>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Atalhos Inteligentes
|
|
121
|
+
|
|
122
|
+
Os atalhos negativos só aparecem quando fazem sentido:
|
|
123
|
+
|
|
124
|
+
- **Valor atual: 5** → Mostra apenas: +10, +25, +50
|
|
125
|
+
- **Valor atual: 15** → Mostra: +10, +25, +50, -10
|
|
126
|
+
- **Valor atual: 60** → Mostra: +10, +25, +50, -10, -25, -50
|
|
127
|
+
|
|
128
|
+
## Componentes Disponíveis
|
|
129
|
+
|
|
130
|
+
### EstoqueCard
|
|
131
|
+
|
|
132
|
+
- Gerencia itens de estoque com diferentes unidades
|
|
133
|
+
- Interface intuitiva para adicionar/remover itens
|
|
134
|
+
- Cálculo automático de totais
|
|
135
|
+
- Modal integrado para inserção de novos itens
|
|
136
|
+
|
|
137
|
+
### QuantidadeInput
|
|
138
|
+
|
|
139
|
+
- Input numérico com controles + e -
|
|
140
|
+
- Atalhos personalizáveis para valores comuns
|
|
141
|
+
- **Atalhos negativos inteligentes** - Só aparecem quando fazem sentido
|
|
142
|
+
- Suporte a unidades de medida
|
|
143
|
+
- Botão para adicionar ao estoque
|
|
144
|
+
|
|
145
|
+
### UnitSelect
|
|
146
|
+
|
|
147
|
+
- Select customizado e bonito para unidades
|
|
148
|
+
- Navegação por teclado (setas, Enter, Escape)
|
|
149
|
+
- Animações suaves e feedback visual
|
|
150
|
+
- Totalmente acessível (ARIA labels)
|
|
151
|
+
- Suporte a hover e focus states
|
|
152
|
+
|
|
153
|
+
### Modal
|
|
154
|
+
|
|
155
|
+
- Modal responsivo com animações suaves
|
|
156
|
+
- **Largura total em dispositivos móveis** (≤768px)
|
|
157
|
+
- Seletor de unidades integrado
|
|
158
|
+
- Controle de foco e acessibilidade
|
|
159
|
+
|
|
160
|
+
## Vantagens
|
|
161
|
+
|
|
162
|
+
### Sem Dependências Externas
|
|
163
|
+
|
|
164
|
+
- Não precisa instalar Tailwind CSS
|
|
165
|
+
- Não precisa configurar PostCSS
|
|
166
|
+
- Não precisa importar arquivos CSS
|
|
167
|
+
- Funciona em qualquer projeto React
|
|
168
|
+
|
|
169
|
+
### Performance
|
|
170
|
+
|
|
171
|
+
- Estilos inline são mais rápidos para carregar
|
|
172
|
+
- Sem overhead de frameworks CSS
|
|
173
|
+
- Bundle menor
|
|
174
|
+
|
|
175
|
+
### Facilidade de Uso
|
|
176
|
+
|
|
177
|
+
- Instale e use imediatamente
|
|
178
|
+
- Sem configuração adicional
|
|
179
|
+
- Compatível com qualquer setup de build
|
|
180
|
+
- **Responsivo automático** - Detecta dispositivos móveis automaticamente
|
|
181
|
+
|
|
182
|
+
## Desenvolvimento
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Instalar dependências
|
|
186
|
+
npm install
|
|
187
|
+
|
|
188
|
+
# Executar em modo de desenvolvimento
|
|
189
|
+
npm run dev
|
|
190
|
+
|
|
191
|
+
# Build para produção
|
|
192
|
+
npm run build
|
|
193
|
+
|
|
194
|
+
# Executar Storybook
|
|
195
|
+
npm run storybook
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Licença
|
|
199
|
+
|
|
200
|
+
MIT
|
package/build/index.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.storybook-button{display:inline-block;cursor:pointer;border:0;border-radius:.5rem;font-weight:700;line-height:1;font-family:Nunito Sans,Helvetica Neue,Helvetica,Arial,sans-serif}.storybook-button--primary{background-color:#ff4e00;color:#fff}.storybook-button--secondary{box-shadow:#00000026 0 0 0 1px inset;background-color:transparent;color:#333}.storybook-button--small{padding:10px 16px;font-size:12px}.storybook-button--medium{padding:11px 20px;font-size:14px}.storybook-button--large{padding:12px 24px;font-size:16px}.storybook-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid rgba(0,0,0,.1);background-color:#0e0f12;padding:15px 20px;font-family:Nunito Sans,Helvetica Neue,Helvetica,Arial,sans-serif}.storybook-header svg{display:inline-block;vertical-align:top}.storybook-header h1{display:inline-block;vertical-align:top;margin:6px 0 6px 10px;font-weight:700;font-size:20px;line-height:1}.storybook-header button+button{margin-left:10px}.storybook-header .welcome{margin-right:10px;color:#333;font-size:14px}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Button as t } from "./index2.js";
|
|
2
|
+
import { Header as p } from "./index3.js";
|
|
3
|
+
import { Logo as m } from "./index4.js";
|
|
4
|
+
import { List as a } from "./index5.js";
|
|
5
|
+
import { QuantidadeInput as n } from "./index6.js";
|
|
6
|
+
import { EstoqueCard as i } from "./index7.js";
|
|
7
|
+
import { UnitSelect as L } from "./index8.js";
|
|
8
|
+
export {
|
|
9
|
+
t as Button,
|
|
10
|
+
i as EstoqueCard,
|
|
11
|
+
p as Header,
|
|
12
|
+
a as List,
|
|
13
|
+
m as Logo,
|
|
14
|
+
n as QuantidadeInput,
|
|
15
|
+
L as UnitSelect
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
package/build/index12.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import c from "./index19.js";
|
|
2
|
+
/**
|
|
3
|
+
* @license lucide-react v0.503.0 - ISC
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the ISC license.
|
|
6
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
const e = [
|
|
9
|
+
["circle", { cx: "9", cy: "12", r: "1", key: "1vctgf" }],
|
|
10
|
+
["circle", { cx: "9", cy: "5", r: "1", key: "hp0tcf" }],
|
|
11
|
+
["circle", { cx: "9", cy: "19", r: "1", key: "fkjjf6" }],
|
|
12
|
+
["circle", { cx: "15", cy: "12", r: "1", key: "1tmaij" }],
|
|
13
|
+
["circle", { cx: "15", cy: "5", r: "1", key: "19l28e" }],
|
|
14
|
+
["circle", { cx: "15", cy: "19", r: "1", key: "f4zoj3" }]
|
|
15
|
+
], i = c("grip-vertical", e);
|
|
16
|
+
export {
|
|
17
|
+
e as __iconNode,
|
|
18
|
+
i as default
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index12.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index12.js","sources":["../node_modules/lucide-react/dist/esm/icons/grip-vertical.js"],"sourcesContent":["/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n];\nconst GripVertical = createLucideIcon(\"grip-vertical\", __iconNode);\n\nexport { __iconNode, GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n"],"names":["__iconNode","GripVertical","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAACA,IAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,KAAK,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACvD,CAAC,UAAU,EAAE,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,UAAU;AAAA,EACtD,CAAC,UAAU,EAAE,IAAI,KAAK,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACvD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,KAAK,GAAG,KAAK,KAAK,UAAU;AAAA,EACvD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D,GACMC,IAAeC,EAAiB,iBAAiBF,CAAU;","x_google_ignoreList":[0]}
|
package/build/index13.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { j as t } from "./index9.js";
|
|
2
|
+
import { createPortal as c } from "react-dom";
|
|
3
|
+
const h = ({
|
|
4
|
+
isOpen: n,
|
|
5
|
+
onClose: l,
|
|
6
|
+
width: r,
|
|
7
|
+
minHeight: s = "50vh",
|
|
8
|
+
title: a,
|
|
9
|
+
children: i,
|
|
10
|
+
unidades: u,
|
|
11
|
+
selectedUnit: x,
|
|
12
|
+
setSelectedUnit: p
|
|
13
|
+
}) => {
|
|
14
|
+
const d = (o) => {
|
|
15
|
+
o.target === o.currentTarget && l();
|
|
16
|
+
}, e = {
|
|
17
|
+
overlay: {
|
|
18
|
+
position: "fixed",
|
|
19
|
+
inset: 0,
|
|
20
|
+
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
|
21
|
+
display: "flex",
|
|
22
|
+
justifyContent: "center",
|
|
23
|
+
alignItems: "flex-end",
|
|
24
|
+
zIndex: 9999,
|
|
25
|
+
transition: "opacity 0.3s ease-in-out",
|
|
26
|
+
opacity: n ? 1 : 0,
|
|
27
|
+
pointerEvents: n ? "auto" : "none"
|
|
28
|
+
},
|
|
29
|
+
modal: {
|
|
30
|
+
position: "fixed",
|
|
31
|
+
backgroundColor: "white",
|
|
32
|
+
maxWidth: r || "auto",
|
|
33
|
+
margin: "0 auto",
|
|
34
|
+
minHeight: s,
|
|
35
|
+
maxHeight: "90vh",
|
|
36
|
+
width: "100%",
|
|
37
|
+
overflowY: "auto",
|
|
38
|
+
borderRadius: r === "100%" ? "0" : "16px 16px 0 0",
|
|
39
|
+
bottom: 0,
|
|
40
|
+
left: 0,
|
|
41
|
+
right: 0,
|
|
42
|
+
transition: "all 0.3s ease-in-out",
|
|
43
|
+
transform: n ? "translateY(0)" : "translateY(100%)",
|
|
44
|
+
opacity: n ? 1 : 0
|
|
45
|
+
},
|
|
46
|
+
header: {
|
|
47
|
+
position: "sticky",
|
|
48
|
+
top: 0,
|
|
49
|
+
zIndex: 10,
|
|
50
|
+
backgroundColor: "white",
|
|
51
|
+
borderBottom: "1px solid #e5e7eb",
|
|
52
|
+
padding: r === "100%" ? "16px" : "16px 24px",
|
|
53
|
+
borderRadius: r === "100%" ? "0" : "16px 16px 0 0"
|
|
54
|
+
},
|
|
55
|
+
headerContent: {
|
|
56
|
+
display: "flex",
|
|
57
|
+
alignItems: "center",
|
|
58
|
+
justifyContent: "space-between"
|
|
59
|
+
},
|
|
60
|
+
title: {
|
|
61
|
+
fontSize: "20px",
|
|
62
|
+
fontWeight: "600",
|
|
63
|
+
color: "#111827",
|
|
64
|
+
margin: 0
|
|
65
|
+
},
|
|
66
|
+
headerControls: {
|
|
67
|
+
display: "flex",
|
|
68
|
+
alignItems: "center",
|
|
69
|
+
gap: "8px"
|
|
70
|
+
},
|
|
71
|
+
closeButton: {
|
|
72
|
+
padding: "8px",
|
|
73
|
+
color: "#9ca3af",
|
|
74
|
+
border: "none",
|
|
75
|
+
background: "none",
|
|
76
|
+
borderRadius: "8px",
|
|
77
|
+
cursor: "pointer",
|
|
78
|
+
transition: "all 0.2s"
|
|
79
|
+
},
|
|
80
|
+
closeButtonHover: {
|
|
81
|
+
color: "#6b7280",
|
|
82
|
+
backgroundColor: "#f3f4f6"
|
|
83
|
+
},
|
|
84
|
+
content: {
|
|
85
|
+
padding: r === "100%" ? "16px" : "24px"
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
return c(
|
|
89
|
+
/* @__PURE__ */ t.jsx("div", { style: e.overlay, onClick: d, children: /* @__PURE__ */ t.jsxs("div", { style: e.modal, onClick: (o) => o.stopPropagation(), children: [
|
|
90
|
+
a && /* @__PURE__ */ t.jsx("div", { style: e.header, children: /* @__PURE__ */ t.jsxs("div", { style: e.headerContent, children: [
|
|
91
|
+
/* @__PURE__ */ t.jsx("h2", { style: e.title, children: a }),
|
|
92
|
+
/* @__PURE__ */ t.jsx("div", { style: e.headerControls, children: /* @__PURE__ */ t.jsx(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
type: "button",
|
|
96
|
+
onClick: l,
|
|
97
|
+
style: e.closeButton,
|
|
98
|
+
onMouseEnter: (o) => {
|
|
99
|
+
o.currentTarget.style.color = e.closeButtonHover.color, o.currentTarget.style.backgroundColor = e.closeButtonHover.backgroundColor;
|
|
100
|
+
},
|
|
101
|
+
onMouseLeave: (o) => {
|
|
102
|
+
o.currentTarget.style.color = e.closeButton.color, o.currentTarget.style.backgroundColor = "";
|
|
103
|
+
},
|
|
104
|
+
"aria-label": "Fechar modal",
|
|
105
|
+
children: /* @__PURE__ */ t.jsx(
|
|
106
|
+
"svg",
|
|
107
|
+
{
|
|
108
|
+
style: { width: "24px", height: "24px" },
|
|
109
|
+
fill: "none",
|
|
110
|
+
viewBox: "0 0 24 24",
|
|
111
|
+
stroke: "currentColor",
|
|
112
|
+
children: /* @__PURE__ */ t.jsx(
|
|
113
|
+
"path",
|
|
114
|
+
{
|
|
115
|
+
strokeLinecap: "round",
|
|
116
|
+
strokeLinejoin: "round",
|
|
117
|
+
strokeWidth: 2,
|
|
118
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
) })
|
|
125
|
+
] }) }),
|
|
126
|
+
/* @__PURE__ */ t.jsx("div", { style: e.content, children: i })
|
|
127
|
+
] }) }),
|
|
128
|
+
document.body
|
|
129
|
+
);
|
|
130
|
+
};
|
|
131
|
+
export {
|
|
132
|
+
h as default
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=index13.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index13.js","sources":["../src/components/Modal/index.tsx"],"sourcesContent":["import React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n width?: string;\r\n minHeight?: string;\r\n title?: string;\r\n children: React.ReactNode;\r\n unidades?: { label: string; value: string }[];\r\n selectedUnit?: string;\r\n setSelectedUnit?: (unit: string) => void;\r\n}\r\n\r\nconst Modal: React.FC<ModalProps> = ({\r\n isOpen,\r\n onClose,\r\n width,\r\n minHeight = \"50vh\",\r\n title,\r\n children,\r\n unidades,\r\n selectedUnit,\r\n setSelectedUnit,\r\n}) => {\r\n const handleOverlayClick = (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget) {\r\n onClose();\r\n }\r\n };\r\n\r\n // Estilos inline para substituir Tailwind\r\n const styles = {\r\n overlay: {\r\n position: \"fixed\" as const,\r\n inset: 0,\r\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"flex-end\",\r\n zIndex: 9999,\r\n transition: \"opacity 0.3s ease-in-out\",\r\n opacity: isOpen ? 1 : 0,\r\n pointerEvents: isOpen ? (\"auto\" as const) : (\"none\" as const),\r\n },\r\n modal: {\r\n position: \"fixed\" as const,\r\n backgroundColor: \"white\",\r\n maxWidth: width || \"auto\",\r\n margin: \"0 auto\",\r\n minHeight: minHeight,\r\n maxHeight: \"90vh\",\r\n width: \"100%\",\r\n overflowY: \"auto\" as const,\r\n borderRadius: width === \"100%\" ? \"0\" : \"16px 16px 0 0\",\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n transition: \"all 0.3s ease-in-out\",\r\n transform: isOpen ? \"translateY(0)\" : \"translateY(100%)\",\r\n opacity: isOpen ? 1 : 0,\r\n },\r\n header: {\r\n position: \"sticky\" as const,\r\n top: 0,\r\n zIndex: 10,\r\n backgroundColor: \"white\",\r\n borderBottom: \"1px solid #e5e7eb\",\r\n padding: width === \"100%\" ? \"16px\" : \"16px 24px\",\r\n borderRadius: width === \"100%\" ? \"0\" : \"16px 16px 0 0\",\r\n },\r\n headerContent: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n },\r\n title: {\r\n fontSize: \"20px\",\r\n fontWeight: \"600\",\r\n color: \"#111827\",\r\n margin: 0,\r\n },\r\n headerControls: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n },\r\n selectContainer: {\r\n position: \"relative\" as const,\r\n },\r\n select: {\r\n appearance: \"none\" as const,\r\n backgroundColor: \"white\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: \"6px\",\r\n paddingLeft: \"12px\",\r\n paddingRight: \"40px\",\r\n paddingTop: \"8px\",\r\n paddingBottom: \"8px\",\r\n fontSize: \"14px\",\r\n color: \"#374151\",\r\n cursor: \"pointer\",\r\n transition: \"all 0.2s ease-in-out\",\r\n },\r\n selectHover: {\r\n borderColor: \"#3b82f6\",\r\n },\r\n selectFocus: {\r\n outline: \"none\",\r\n borderColor: \"#3b82f6\",\r\n boxShadow: \"0 0 0 2px rgba(59, 130, 246, 0.2)\",\r\n },\r\n selectArrow: {\r\n position: \"absolute\" as const,\r\n top: \"50%\",\r\n right: \"8px\",\r\n transform: \"translateY(-50%)\",\r\n pointerEvents: \"none\" as const,\r\n color: \"#6b7280\",\r\n },\r\n closeButton: {\r\n padding: \"8px\",\r\n color: \"#9ca3af\",\r\n border: \"none\",\r\n background: \"none\",\r\n borderRadius: \"8px\",\r\n cursor: \"pointer\",\r\n transition: \"all 0.2s\",\r\n },\r\n closeButtonHover: {\r\n color: \"#6b7280\",\r\n backgroundColor: \"#f3f4f6\",\r\n },\r\n content: {\r\n padding: width === \"100%\" ? \"16px\" : \"24px\",\r\n },\r\n };\r\n\r\n return createPortal(\r\n <div style={styles.overlay} onClick={handleOverlayClick}>\r\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\r\n {title && (\r\n <div style={styles.header}>\r\n <div style={styles.headerContent}>\r\n <h2 style={styles.title}>{title}</h2>\r\n <div style={styles.headerControls}>\r\n {/* <div style={styles.selectContainer}>\r\n <select\r\n value={selectedUnit}\r\n onChange={(e) => setSelectedUnit?.(e.target.value)}\r\n style={styles.select}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.borderColor =\r\n styles.selectHover.borderColor!;\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.borderColor = styles.select.border!;\r\n }}\r\n onFocus={(e) => {\r\n e.target.style.outline = styles.selectFocus.outline!;\r\n e.target.style.borderColor =\r\n styles.selectFocus.borderColor!;\r\n e.target.style.boxShadow = styles.selectFocus.boxShadow!;\r\n }}\r\n onBlur={(e) => {\r\n e.target.style.outline = \"\";\r\n e.target.style.borderColor = styles.select.border!;\r\n e.target.style.boxShadow = \"\";\r\n }}\r\n >\r\n {unidades?.map((unidade) => (\r\n <option key={unidade.value} value={unidade.value}>\r\n {unidade.label}\r\n </option>\r\n ))}\r\n </select>\r\n <div style={styles.selectArrow}>\r\n <svg\r\n style={{ width: \"16px\", height: \"16px\" }}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M19 9l-7 7-7-7\"\r\n />\r\n </svg>\r\n </div>\r\n </div> */}\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n style={styles.closeButton}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.color =\r\n styles.closeButtonHover.color!;\r\n e.currentTarget.style.backgroundColor =\r\n styles.closeButtonHover.backgroundColor!;\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.color = styles.closeButton.color!;\r\n e.currentTarget.style.backgroundColor = \"\";\r\n }}\r\n aria-label=\"Fechar modal\"\r\n >\r\n <svg\r\n style={{ width: \"24px\", height: \"24px\" }}\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M6 18L18 6M6 6l12 12\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n <div style={styles.content}>{children}</div>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n};\r\n\r\nexport default Modal;\r\n"],"names":["Modal","isOpen","onClose","width","minHeight","title","children","unidades","selectedUnit","setSelectedUnit","handleOverlayClick","e","styles","createPortal","jsxs","jsx"],"mappings":"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"}
|
package/build/index14.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index14.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/build/index15.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { __exports as t } from "./index17.js";
|
|
2
|
+
import R from "react";
|
|
3
|
+
/**
|
|
4
|
+
* @license React
|
|
5
|
+
* react-jsx-runtime.production.min.js
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the MIT license found in the
|
|
10
|
+
* LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/
|
|
12
|
+
var p;
|
|
13
|
+
function v() {
|
|
14
|
+
if (p) return t;
|
|
15
|
+
p = 1;
|
|
16
|
+
var s = R, m = Symbol.for("react.element"), l = Symbol.for("react.fragment"), c = Object.prototype.hasOwnProperty, d = s.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, y = { key: !0, ref: !0, __self: !0, __source: !0 };
|
|
17
|
+
function _(o, r, i) {
|
|
18
|
+
var e, n = {}, u = null, f = null;
|
|
19
|
+
i !== void 0 && (u = "" + i), r.key !== void 0 && (u = "" + r.key), r.ref !== void 0 && (f = r.ref);
|
|
20
|
+
for (e in r) c.call(r, e) && !y.hasOwnProperty(e) && (n[e] = r[e]);
|
|
21
|
+
if (o && o.defaultProps) for (e in r = o.defaultProps, r) n[e] === void 0 && (n[e] = r[e]);
|
|
22
|
+
return { $$typeof: m, type: o, key: u, ref: f, props: n, _owner: d.current };
|
|
23
|
+
}
|
|
24
|
+
return t.Fragment = l, t.jsx = _, t.jsxs = _, t;
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
v as __require
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index15.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index15.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n"],"names":["f","require$$0","k","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min"],"mappings":";;;;;;;;;;;;;;;AASa,MAAIA,IAAEC,GAAiBC,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAEC,IAAE,OAAO,UAAU,gBAAeC,IAAEJ,EAAE,mDAAmD,mBAAkBK,IAAE,EAAC,KAAI,IAAG,KAAI,IAAG,QAAO,IAAG,UAAS,GAAE;AAClP,WAASC,EAAEC,GAAEC,GAAEC,GAAE;AAAC,QAAIC,GAAEC,IAAE,CAAA,GAAGC,IAAE,MAAKC,IAAE;AAAK,IAASJ,MAAT,WAAaG,IAAE,KAAGH,IAAYD,EAAE,QAAX,WAAiBI,IAAE,KAAGJ,EAAE,MAAcA,EAAE,QAAX,WAAiBK,IAAEL,EAAE;AAAK,SAAIE,KAAKF,EAAE,CAAAL,EAAE,KAAKK,GAAEE,CAAC,KAAG,CAACL,EAAE,eAAeK,CAAC,MAAIC,EAAED,CAAC,IAAEF,EAAEE,CAAC;AAAG,QAAGH,KAAGA,EAAE,aAAa,MAAIG,KAAKF,IAAED,EAAE,cAAaC,EAAE,CAASG,EAAED,CAAC,MAAZ,WAAgBC,EAAED,CAAC,IAAEF,EAAEE,CAAC;AAAG,WAAM,EAAC,UAASR,GAAE,MAAKK,GAAE,KAAIK,GAAE,KAAIC,GAAE,OAAMF,GAAE,QAAOP,EAAE,QAAO;AAAA,EAAC;AAAC,SAAAU,aAAiB,GAAEA,EAAA,MAAYR,GAAEQ,EAAA,OAAaR;;","x_google_ignoreList":[0]}
|