@s_mart/nps 12.0.1 → 16.0.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/index.d.ts +4 -0
- package/dist/index.mjs +379 -1
- package/dist/index.mjs.map +1 -0
- package/dist/nps-dialog/atoms/NPSAvaliacaoButtonNota.d.ts +8 -0
- package/dist/nps-dialog/atoms/NPSAvaliacaoButtonSubmit.d.ts +2 -0
- package/dist/nps-dialog/atoms/NPSFeedbackButtonSubmit.d.ts +2 -0
- package/dist/nps-dialog/atoms/NPSFeedbackTextField.d.ts +2 -0
- package/dist/nps-dialog/atoms/NPSTitle.d.ts +2 -0
- package/dist/nps-dialog/contents/NPSAvaliacaoContent.d.ts +2 -0
- package/dist/nps-dialog/contents/NPSFeedbackContent.d.ts +2 -0
- package/dist/nps-dialog/nps.d.ts +3 -0
- package/dist/nps-dialog/static.d.ts +12 -0
- package/dist/nps-dialog/types.d.ts +39 -0
- package/dist/nps-dialog/useNPS.d.ts +24 -0
- package/dist/nps-popover/feedback/feedback.d.ts +7 -0
- package/dist/nps-popover/notas/notas.d.ts +5 -0
- package/dist/nps-popover/nps.d.ts +2 -0
- package/dist/nps-popover/nps.schema.d.ts +16 -0
- package/dist/nps-popover/nps.styles.d.ts +1 -0
- package/dist/nps-popover/nps.types.d.ts +48 -0
- package/dist/nps-popover/useNps.d.ts +6 -0
- package/package.json +35 -48
- package/dist/index.d.mts +0 -98
package/dist/index.d.ts
ADDED
package/dist/index.mjs
CHANGED
|
@@ -1 +1,379 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Dialog as e, LIcon as t } from "@s_mart/core";
|
|
2
|
+
import { Checkbox as n, Form as r, TextField as i } from "@s_mart/form";
|
|
3
|
+
import { lineTimes as a } from "@s_mart/regular-icons";
|
|
4
|
+
import { Backdrop as o, Button as s, IconButton as c, TextField as l, Typography as u, mergeSlotProps as d, styled as f, useMediaQuery as p, useTheme as m } from "@mui/material";
|
|
5
|
+
import { colorPalette as h } from "@s_mart/tokens";
|
|
6
|
+
import { useFormContext as g, useWatch as _ } from "react-hook-form";
|
|
7
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
8
|
+
import { createContext as x, useCallback as S, useContext as C, useMemo as w, useState as T } from "react";
|
|
9
|
+
import { z as E } from "zod";
|
|
10
|
+
//#region src/nps-popover/notas/notas.tsx
|
|
11
|
+
var D = ({ onSelecionarNota: e }) => {
|
|
12
|
+
let { control: t, setValue: n } = g(), r = p("(max-width: 500px)"), i = _({
|
|
13
|
+
control: t,
|
|
14
|
+
name: "nota"
|
|
15
|
+
}), a = (t) => {
|
|
16
|
+
i !== t && (n("nota", t), e?.(t));
|
|
17
|
+
}, o = /* @__PURE__ */ y(u, {
|
|
18
|
+
variant: "bodyXS",
|
|
19
|
+
color: h.neutral[100],
|
|
20
|
+
children: "Pouco provável"
|
|
21
|
+
});
|
|
22
|
+
return /* @__PURE__ */ b(v, { children: [
|
|
23
|
+
r && /* @__PURE__ */ y("div", {
|
|
24
|
+
style: { marginBottom: "0.5rem" },
|
|
25
|
+
children: o
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ y("div", {
|
|
28
|
+
style: {
|
|
29
|
+
display: "flex",
|
|
30
|
+
gap: "0.3rem",
|
|
31
|
+
flexWrap: "wrap",
|
|
32
|
+
justifyContent: "center"
|
|
33
|
+
},
|
|
34
|
+
children: Array.from({ length: 11 }).map((e, t) => /* @__PURE__ */ y(s, {
|
|
35
|
+
variant: i === t ? "contained" : "outlined",
|
|
36
|
+
style: { minWidth: "3rem" },
|
|
37
|
+
onClick: () => a(t),
|
|
38
|
+
children: t
|
|
39
|
+
}, t))
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ b("div", {
|
|
42
|
+
style: {
|
|
43
|
+
display: "flex",
|
|
44
|
+
justifyContent: "space-between",
|
|
45
|
+
marginTop: "0.5rem"
|
|
46
|
+
},
|
|
47
|
+
children: [/* @__PURE__ */ y("span", { children: !r && o }), /* @__PURE__ */ y(u, {
|
|
48
|
+
variant: "bodyXS",
|
|
49
|
+
color: h.neutral[100],
|
|
50
|
+
children: "Muito provável"
|
|
51
|
+
})]
|
|
52
|
+
})
|
|
53
|
+
] });
|
|
54
|
+
}, O = ({ tipo: e, sistemaNome: t }) => /* @__PURE__ */ y(i, {
|
|
55
|
+
name: "feedback",
|
|
56
|
+
placeholder: e === "promotor" ? `Para mim o ${t} é...` : "Eu acho que...",
|
|
57
|
+
multiline: !0,
|
|
58
|
+
size: "large",
|
|
59
|
+
minRows: 2
|
|
60
|
+
}), k = f("div")(({ theme: e }) => ({
|
|
61
|
+
display: "flex",
|
|
62
|
+
flexDirection: "column",
|
|
63
|
+
gap: "1.5rem",
|
|
64
|
+
padding: "1.5rem",
|
|
65
|
+
borderRadius: Number.parseFloat(e.shape.borderRadius.toString()) * 1.5,
|
|
66
|
+
boxShadow: e.shadows[6],
|
|
67
|
+
border: `1px solid ${e.palette.primary?.main}`,
|
|
68
|
+
background: h.neutral[0],
|
|
69
|
+
position: "absolute",
|
|
70
|
+
bottom: "1.5rem",
|
|
71
|
+
right: "1.75rem",
|
|
72
|
+
zIndex: 102,
|
|
73
|
+
"@media (max-width: 650px)": {
|
|
74
|
+
right: "1.25rem",
|
|
75
|
+
left: "1.25rem"
|
|
76
|
+
}
|
|
77
|
+
})), A = ({ onEnviarNota: e, onNotification: t }) => {
|
|
78
|
+
let [n, r] = T("selecionarNota");
|
|
79
|
+
return {
|
|
80
|
+
step: n,
|
|
81
|
+
handleEnviar: (i, a) => {
|
|
82
|
+
n === "selecionarNota" ? (e?.(i), r(i >= 9 ? "feedbackPromotor" : "feedbackDetrator")) : (a(), t({
|
|
83
|
+
variant: "success",
|
|
84
|
+
title: "Avaliação enviada",
|
|
85
|
+
message: "Agradecemos muito pela sua avaliação.",
|
|
86
|
+
duration: 5e3
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}, j = E.object({
|
|
91
|
+
nota: E.number(),
|
|
92
|
+
feedback: E.string().optional(),
|
|
93
|
+
autorizoPublicacao: E.coerce.boolean()
|
|
94
|
+
}), M = ({ onFinalizar: e, mostrarBackdrop: i, sistemaNome: l, onClose: d, shouldCloseOnBackdropClick: f, onSelecionarNota: p, paperStyle: h, ...g }) => {
|
|
95
|
+
let { step: _, handleEnviar: x } = A(g), S = m(), C = {
|
|
96
|
+
selecionarNota: `De 0 a 10, o quanto você recomendaria o ${l}?`,
|
|
97
|
+
feedbackDetrator: `Como podemos melhorar a sua experiência no ${l}?`,
|
|
98
|
+
feedbackPromotor: `O que você mais gosta no ${l}?`
|
|
99
|
+
};
|
|
100
|
+
return /* @__PURE__ */ y(r, {
|
|
101
|
+
onSubmit: e,
|
|
102
|
+
schema: j,
|
|
103
|
+
children: ({ watch: e, onSubmit: r }) => {
|
|
104
|
+
let m = e("nota");
|
|
105
|
+
return /* @__PURE__ */ b(v, { children: [!!i && /* @__PURE__ */ y(o, {
|
|
106
|
+
open: !0,
|
|
107
|
+
onClick: f ? d : void 0,
|
|
108
|
+
style: { zIndex: 99 }
|
|
109
|
+
}), /* @__PURE__ */ b(k, {
|
|
110
|
+
style: h,
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ b("div", {
|
|
113
|
+
style: {
|
|
114
|
+
display: "flex",
|
|
115
|
+
justifyContent: "space-between",
|
|
116
|
+
alignItems: "center"
|
|
117
|
+
},
|
|
118
|
+
children: [/* @__PURE__ */ y(u, {
|
|
119
|
+
variant: "titleSM",
|
|
120
|
+
color: S.palette.grey[700],
|
|
121
|
+
children: C[_]
|
|
122
|
+
}), /* @__PURE__ */ y(c, {
|
|
123
|
+
size: "small",
|
|
124
|
+
onClick: d,
|
|
125
|
+
children: /* @__PURE__ */ y(t, {
|
|
126
|
+
icon: a,
|
|
127
|
+
removeMargin: !0,
|
|
128
|
+
size: "25px"
|
|
129
|
+
})
|
|
130
|
+
})]
|
|
131
|
+
}),
|
|
132
|
+
/* @__PURE__ */ y("div", { children: _ === "selecionarNota" ? /* @__PURE__ */ y(D, { onSelecionarNota: p }) : /* @__PURE__ */ y(O, {
|
|
133
|
+
tipo: _ === "feedbackPromotor" ? "promotor" : "detrator",
|
|
134
|
+
sistemaNome: l
|
|
135
|
+
}) }),
|
|
136
|
+
/* @__PURE__ */ b("div", {
|
|
137
|
+
style: {
|
|
138
|
+
display: "flex",
|
|
139
|
+
justifyContent: "space-between"
|
|
140
|
+
},
|
|
141
|
+
children: [/* @__PURE__ */ y("div", { children: _ === "feedbackPromotor" && /* @__PURE__ */ y(n, {
|
|
142
|
+
name: "autorizoPublicacao",
|
|
143
|
+
label: /* @__PURE__ */ b(u, {
|
|
144
|
+
variant: "bodyXS",
|
|
145
|
+
children: ["Autorizo a publicação deste comentário no site e em redes sociais do ", l]
|
|
146
|
+
})
|
|
147
|
+
}) }), /* @__PURE__ */ y("div", { children: /* @__PURE__ */ y(s, {
|
|
148
|
+
disabled: m === void 0,
|
|
149
|
+
onClick: () => x(m, r),
|
|
150
|
+
children: "Enviar"
|
|
151
|
+
}) })]
|
|
152
|
+
})
|
|
153
|
+
]
|
|
154
|
+
})] });
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}, N = {
|
|
158
|
+
avaliacao: { title: "O quanto você recomendaria o sistema?" },
|
|
159
|
+
feedback: { title: "Como podemos melhorar a sua experiência?" },
|
|
160
|
+
dialog: {
|
|
161
|
+
disableBackdropClick: !0,
|
|
162
|
+
closeIcon: !0
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region src/nps-dialog/useNPS.ts
|
|
167
|
+
function P(e) {
|
|
168
|
+
let [t, n] = T(""), [r, i] = T(null), [a, o] = T("avaliacao"), s = m(), c = p(s.breakpoints.down("sm")), l = w(() => d(e.slotProps, {
|
|
169
|
+
...N,
|
|
170
|
+
dialog: {
|
|
171
|
+
fullScreen: c,
|
|
172
|
+
...N.dialog
|
|
173
|
+
}
|
|
174
|
+
}), [e.slotProps, c]);
|
|
175
|
+
return {
|
|
176
|
+
feedback: t,
|
|
177
|
+
setFeedback: n,
|
|
178
|
+
nota: r,
|
|
179
|
+
handleChangeAvaliacao: (t) => {
|
|
180
|
+
e.onChangeAvaliacao?.(t), i(t);
|
|
181
|
+
},
|
|
182
|
+
handleProximaEtapa: () => {
|
|
183
|
+
o("feedback"), e.onChangeEtapa?.("feedback");
|
|
184
|
+
},
|
|
185
|
+
etapa: a,
|
|
186
|
+
setEtapa: o,
|
|
187
|
+
handleSubmit: S(() => {
|
|
188
|
+
e.onSubmit({
|
|
189
|
+
nota: r,
|
|
190
|
+
feedback: t.trim()
|
|
191
|
+
});
|
|
192
|
+
}, [
|
|
193
|
+
e.onSubmit,
|
|
194
|
+
r,
|
|
195
|
+
t
|
|
196
|
+
]),
|
|
197
|
+
handleClose: () => {
|
|
198
|
+
e.onClose({ nota: r }), setTimeout(() => {
|
|
199
|
+
i(null), n(""), o("avaliacao");
|
|
200
|
+
}, 100);
|
|
201
|
+
},
|
|
202
|
+
slotProps: l
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//#endregion
|
|
206
|
+
//#region src/nps-dialog/atoms/NPSFeedbackTextField.tsx
|
|
207
|
+
var F = (e) => {
|
|
208
|
+
let { feedback: t, setFeedback: n } = G(), r = (t) => {
|
|
209
|
+
n(t.target.value), e.onChange?.(t);
|
|
210
|
+
};
|
|
211
|
+
return /* @__PURE__ */ y(l, {
|
|
212
|
+
autoFocus: !0,
|
|
213
|
+
fullWidth: !0,
|
|
214
|
+
rows: 3,
|
|
215
|
+
multiline: !0,
|
|
216
|
+
...e,
|
|
217
|
+
value: t,
|
|
218
|
+
onChange: r
|
|
219
|
+
});
|
|
220
|
+
};
|
|
221
|
+
//#endregion
|
|
222
|
+
//#region src/nps-dialog/atoms/NPSFeedbackButtonSubmit.tsx
|
|
223
|
+
function I(e) {
|
|
224
|
+
let { feedback: t, handleSubmit: n } = G();
|
|
225
|
+
return /* @__PURE__ */ y(s, {
|
|
226
|
+
fullWidth: !0,
|
|
227
|
+
disabled: !t.trim(),
|
|
228
|
+
...e,
|
|
229
|
+
onClick: n
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
//#endregion
|
|
233
|
+
//#region src/nps-dialog/atoms/NPSTitle.tsx
|
|
234
|
+
var L = ({ children: e }) => /* @__PURE__ */ y(u, {
|
|
235
|
+
variant: "titleMD",
|
|
236
|
+
sx: { fontSize: "18px" },
|
|
237
|
+
children: e
|
|
238
|
+
});
|
|
239
|
+
//#endregion
|
|
240
|
+
//#region src/nps-dialog/contents/NPSFeedbackContent.tsx
|
|
241
|
+
function R(t) {
|
|
242
|
+
return /* @__PURE__ */ b(v, { children: [
|
|
243
|
+
/* @__PURE__ */ y(e.Header, { children: /* @__PURE__ */ y(L, { children: t.title }) }),
|
|
244
|
+
/* @__PURE__ */ y(e.Content, { children: /* @__PURE__ */ y(F, {}) }),
|
|
245
|
+
/* @__PURE__ */ y(e.Footer, { children: /* @__PURE__ */ y(I, { children: "Enviar" }) })
|
|
246
|
+
] });
|
|
247
|
+
}
|
|
248
|
+
//#endregion
|
|
249
|
+
//#region src/nps-dialog/atoms/NPSAvaliacaoButtonNota.tsx
|
|
250
|
+
var z = (e) => {
|
|
251
|
+
let { handleChangeAvaliacao: t } = G(), n = () => t(e.notaSelecionada === e.nota ? null : e.nota);
|
|
252
|
+
return /* @__PURE__ */ y(s, {
|
|
253
|
+
sx: {
|
|
254
|
+
padding: 0,
|
|
255
|
+
minWidth: "3rem"
|
|
256
|
+
},
|
|
257
|
+
...e,
|
|
258
|
+
variant: e.nota === e.notaSelecionada ? "contained" : "outlined",
|
|
259
|
+
onClick: n,
|
|
260
|
+
children: e.nota
|
|
261
|
+
});
|
|
262
|
+
};
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region src/nps-dialog/atoms/NPSAvaliacaoButtonSubmit.tsx
|
|
265
|
+
function B(e) {
|
|
266
|
+
let { nota: t, handleProximaEtapa: n } = G();
|
|
267
|
+
return /* @__PURE__ */ y(s, {
|
|
268
|
+
fullWidth: !0,
|
|
269
|
+
disabled: t === null,
|
|
270
|
+
...e,
|
|
271
|
+
onClick: n
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
//#endregion
|
|
275
|
+
//#region src/nps-dialog/contents/NPSAvaliacaoContent.tsx
|
|
276
|
+
function V(t) {
|
|
277
|
+
let { nota: n } = G();
|
|
278
|
+
return /* @__PURE__ */ b(v, { children: [
|
|
279
|
+
/* @__PURE__ */ y(e.Header, { children: /* @__PURE__ */ y(L, { children: t.title }) }),
|
|
280
|
+
/* @__PURE__ */ y(e.Content, { children: /* @__PURE__ */ b(H, { children: [
|
|
281
|
+
/* @__PURE__ */ y(z, {
|
|
282
|
+
notaSelecionada: n,
|
|
283
|
+
nota: 0,
|
|
284
|
+
color: "feedbackHard"
|
|
285
|
+
}),
|
|
286
|
+
/* @__PURE__ */ y(z, {
|
|
287
|
+
notaSelecionada: n,
|
|
288
|
+
nota: 1,
|
|
289
|
+
color: "feedbackHard"
|
|
290
|
+
}),
|
|
291
|
+
/* @__PURE__ */ y(z, {
|
|
292
|
+
notaSelecionada: n,
|
|
293
|
+
nota: 2,
|
|
294
|
+
color: "feedbackHard"
|
|
295
|
+
}),
|
|
296
|
+
/* @__PURE__ */ y(z, {
|
|
297
|
+
notaSelecionada: n,
|
|
298
|
+
nota: 3,
|
|
299
|
+
color: "feedbackHard"
|
|
300
|
+
}),
|
|
301
|
+
/* @__PURE__ */ y(z, {
|
|
302
|
+
notaSelecionada: n,
|
|
303
|
+
nota: 4,
|
|
304
|
+
color: "feedbackHard"
|
|
305
|
+
}),
|
|
306
|
+
/* @__PURE__ */ y(z, {
|
|
307
|
+
notaSelecionada: n,
|
|
308
|
+
nota: 5,
|
|
309
|
+
color: "feedbackHard"
|
|
310
|
+
}),
|
|
311
|
+
/* @__PURE__ */ y(z, {
|
|
312
|
+
notaSelecionada: n,
|
|
313
|
+
nota: 6,
|
|
314
|
+
color: "feedbackHard"
|
|
315
|
+
}),
|
|
316
|
+
/* @__PURE__ */ y(z, {
|
|
317
|
+
notaSelecionada: n,
|
|
318
|
+
nota: 7,
|
|
319
|
+
color: "feedbackMedium"
|
|
320
|
+
}),
|
|
321
|
+
/* @__PURE__ */ y(z, {
|
|
322
|
+
notaSelecionada: n,
|
|
323
|
+
nota: 8,
|
|
324
|
+
color: "feedbackMedium"
|
|
325
|
+
}),
|
|
326
|
+
/* @__PURE__ */ y(z, {
|
|
327
|
+
notaSelecionada: n,
|
|
328
|
+
nota: 9,
|
|
329
|
+
color: "feedbackVeryEasy"
|
|
330
|
+
}),
|
|
331
|
+
/* @__PURE__ */ y(z, {
|
|
332
|
+
notaSelecionada: n,
|
|
333
|
+
nota: 10,
|
|
334
|
+
color: "feedbackVeryEasy"
|
|
335
|
+
})
|
|
336
|
+
] }) }),
|
|
337
|
+
/* @__PURE__ */ y(e.Footer, { children: /* @__PURE__ */ y(B, { children: "Enviar" }) })
|
|
338
|
+
] });
|
|
339
|
+
}
|
|
340
|
+
var H = f("div")({
|
|
341
|
+
display: "flex",
|
|
342
|
+
gap: "0.25rem",
|
|
343
|
+
flexWrap: "wrap",
|
|
344
|
+
justifyContent: "center",
|
|
345
|
+
paddingBlock: "0.25rem"
|
|
346
|
+
}), U = x(null);
|
|
347
|
+
function W(e) {
|
|
348
|
+
let { feedback: t, nota: n, setFeedback: r, handleChangeAvaliacao: i, handleClose: a, handleProximaEtapa: o, etapa: s, slotProps: c, handleSubmit: l } = P(e);
|
|
349
|
+
return /* @__PURE__ */ y(K, {
|
|
350
|
+
open: e.isOpen,
|
|
351
|
+
onClose: a,
|
|
352
|
+
...c.dialog,
|
|
353
|
+
children: /* @__PURE__ */ y(U.Provider, {
|
|
354
|
+
value: {
|
|
355
|
+
handleSubmit: l,
|
|
356
|
+
feedback: t,
|
|
357
|
+
setFeedback: r,
|
|
358
|
+
nota: n,
|
|
359
|
+
handleChangeAvaliacao: i,
|
|
360
|
+
handleProximaEtapa: o,
|
|
361
|
+
etapa: s
|
|
362
|
+
},
|
|
363
|
+
children: /* @__PURE__ */ b(v, { children: [s === "avaliacao" && /* @__PURE__ */ y(V, { ...c.avaliacao }), s === "feedback" && /* @__PURE__ */ y(R, { ...c.feedback })] })
|
|
364
|
+
})
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
var G = () => {
|
|
368
|
+
let e = C(U);
|
|
369
|
+
if (!e) throw Error("useNPSContext must be used within a NPSProvider");
|
|
370
|
+
return e;
|
|
371
|
+
}, K = f(e)(({ theme: e }) => ({ [e.breakpoints.down("sm")]: { ".MuiPaper-root": {
|
|
372
|
+
position: "absolute",
|
|
373
|
+
bottom: 0,
|
|
374
|
+
height: "auto"
|
|
375
|
+
} } }));
|
|
376
|
+
//#endregion
|
|
377
|
+
export { W as NPSDialog, M as NPSPopover };
|
|
378
|
+
|
|
379
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/nps-popover/notas/notas.tsx","../src/nps-popover/feedback/feedback.tsx","../src/nps-popover/nps.styles.ts","../src/nps-popover/useNps.ts","../src/nps-popover/nps.schema.ts","../src/nps-popover/nps.tsx","../src/nps-dialog/static.ts","../src/nps-dialog/useNPS.ts","../src/nps-dialog/atoms/NPSFeedbackTextField.tsx","../src/nps-dialog/atoms/NPSFeedbackButtonSubmit.tsx","../src/nps-dialog/atoms/NPSTitle.tsx","../src/nps-dialog/contents/NPSFeedbackContent.tsx","../src/nps-dialog/atoms/NPSAvaliacaoButtonNota.tsx","../src/nps-dialog/atoms/NPSAvaliacaoButtonSubmit.tsx","../src/nps-dialog/contents/NPSAvaliacaoContent.tsx","../src/nps-dialog/nps.tsx"],"sourcesContent":["import { Button, Typography, useMediaQuery } from '@mui/material';\nimport { colorPalette } from '@s_mart/tokens';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport type { FormValues } from '../nps.schema';\n\ninterface NotasProps {\n onSelecionarNota?: (nota: number) => void;\n}\n\nconst Notas = ({ onSelecionarNota }: NotasProps) => {\n const { control, setValue } = useFormContext<FormValues>();\n const maxWidth500 = useMediaQuery('(max-width: 500px)');\n\n const notaSelecionada = useWatch({ control, name: 'nota' });\n\n const handleClick = (nota: number) => {\n if (notaSelecionada === nota) return;\n\n setValue('nota', nota);\n onSelecionarNota?.(nota);\n };\n\n const poucoProvavel = (\n <Typography variant='bodyXS' color={colorPalette.neutral[100]}>\n Pouco provável\n </Typography>\n );\n\n return (\n <>\n {maxWidth500 && <div style={{ marginBottom: '0.5rem' }}>{poucoProvavel}</div>}\n\n <div style={{ display: 'flex', gap: '0.3rem', flexWrap: 'wrap', justifyContent: 'center' }}>\n {Array.from({ length: 11 }).map((_, index) => (\n <Button\n key={index}\n variant={notaSelecionada === index ? 'contained' : 'outlined'}\n style={{ minWidth: '3rem' }}\n onClick={() => handleClick(index)}\n >\n {index}\n </Button>\n ))}\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '0.5rem' }}>\n <span>{!maxWidth500 && poucoProvavel}</span>\n\n <Typography variant='bodyXS' color={colorPalette.neutral[100]}>\n Muito provável\n </Typography>\n </div>\n </>\n );\n};\n\nexport default Notas;\n","import type { FC } from 'react';\n\nimport { TextField } from '@s_mart/form';\n\ninterface FeedbackProps {\n tipo: 'promotor' | 'detrator';\n sistemaNome: string;\n}\n\nconst Feedback: FC<FeedbackProps> = ({ tipo, sistemaNome }) => {\n return (\n <TextField\n name='feedback'\n placeholder={tipo === 'promotor' ? `Para mim o ${sistemaNome} é...` : 'Eu acho que...'}\n multiline\n size='large'\n minRows={2}\n />\n );\n};\n\nexport default Feedback;\n","import { styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n// Hack para evitar erro de importação do @mui/system e @emotion/styled, causado pelo symlink do pnpm\nimport type {} from '@mui/system';\nimport type {} from '@emotion/styled';\n\nexport const SPaper = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: '1.5rem',\n\n padding: '1.5rem',\n borderRadius: Number.parseFloat(theme.shape.borderRadius.toString()) * 1.5,\n boxShadow: theme.shadows[6],\n border: `1px solid ${theme.palette.primary?.main}`,\n background: colorPalette.neutral[0],\n\n position: 'absolute',\n bottom: '1.5rem',\n right: '1.75rem',\n zIndex: 102,\n\n '@media (max-width: 650px)': {\n right: '1.25rem',\n left: '1.25rem',\n },\n}));\n","import { useState } from 'react';\n\nimport type { Steps, UseNpsProps } from './nps.types';\n\nconst useNps = ({ onEnviarNota, onNotification }: UseNpsProps) => {\n const [step, setStep] = useState<Steps>('selecionarNota');\n\n const handleEnviar = (nota: number, onSubmit: () => void) => {\n if (step === 'selecionarNota') {\n onEnviarNota?.(nota);\n\n if (nota >= 9) {\n setStep('feedbackPromotor');\n } else {\n setStep('feedbackDetrator');\n }\n } else {\n onSubmit();\n\n onNotification({\n variant: 'success',\n title: 'Avaliação enviada',\n message: 'Agradecemos muito pela sua avaliação.',\n duration: 5000,\n });\n }\n };\n\n return { step, handleEnviar };\n};\n\nexport default useNps;\n","import { z } from 'zod';\n\nconst schema = z.object({\n nota: z.number(),\n feedback: z.string().optional(),\n autorizoPublicacao: z.coerce.boolean(),\n});\n\nexport type FormValues = z.infer<typeof schema>;\n\nexport default schema;\n","import { LIcon } from '@s_mart/core';\nimport { Checkbox, Form } from '@s_mart/form';\nimport { lineTimes } from '@s_mart/regular-icons';\nimport { Button, Backdrop, IconButton, Typography, useTheme } from '@mui/material';\nimport Notas from './notas/notas';\nimport Feedback from './feedback/feedback';\nimport { SPaper } from './nps.styles';\nimport useNps from './useNps';\nimport schema from './nps.schema';\nimport type { NPSProps, Steps } from './nps.types';\n\nexport const NPS = ({\n onFinalizar,\n mostrarBackdrop,\n sistemaNome,\n onClose,\n shouldCloseOnBackdropClick,\n onSelecionarNota,\n paperStyle,\n ...rest\n}: NPSProps) => {\n const { step, handleEnviar } = useNps(rest);\n const theme = useTheme();\n\n const titles: Record<Steps, string> = {\n selecionarNota: `De 0 a 10, o quanto você recomendaria o ${sistemaNome}?`,\n feedbackDetrator: `Como podemos melhorar a sua experiência no ${sistemaNome}?`,\n feedbackPromotor: `O que você mais gosta no ${sistemaNome}?`,\n };\n\n return (\n <Form onSubmit={onFinalizar} schema={schema}>\n {({ watch, onSubmit }) => {\n const notaSelecionada = watch('nota');\n\n return (\n <>\n {!!mostrarBackdrop && (\n <Backdrop open onClick={shouldCloseOnBackdropClick ? onClose : undefined} style={{ zIndex: 99 }} />\n )}\n\n <SPaper style={paperStyle}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Typography variant='titleSM' color={theme.palette.grey[700]}>\n {titles[step]}\n </Typography>\n\n <IconButton size='small' onClick={onClose}>\n <LIcon icon={lineTimes} removeMargin size='25px' />\n </IconButton>\n </div>\n\n <div>\n {step === 'selecionarNota' ? (\n <Notas onSelecionarNota={onSelecionarNota} />\n ) : (\n <Feedback tipo={step === 'feedbackPromotor' ? 'promotor' : 'detrator'} sistemaNome={sistemaNome} />\n )}\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <div>\n {step === 'feedbackPromotor' && (\n <Checkbox\n name='autorizoPublicacao'\n label={\n <Typography variant='bodyXS'>\n Autorizo a publicação deste comentário no site e em redes sociais do {sistemaNome}\n </Typography>\n }\n />\n )}\n </div>\n\n <div>\n <Button\n disabled={notaSelecionada === undefined}\n onClick={() => handleEnviar(notaSelecionada, onSubmit)}\n >\n Enviar\n </Button>\n </div>\n </div>\n </SPaper>\n </>\n );\n }}\n </Form>\n );\n};\n","import type { NPSProps } from './types';\n\nexport const defaultSlotProps = {\n avaliacao: {\n title: 'O quanto você recomendaria o sistema?',\n },\n feedback: {\n title: 'Como podemos melhorar a sua experiência?',\n },\n dialog: {\n disableBackdropClick: true,\n closeIcon: true,\n },\n} satisfies NPSProps['slotProps'];\n","import { useCallback, useMemo, useState } from 'react';\nimport type { NPSEtapas, NotaValue, NPSProps } from './types';\nimport { mergeSlotProps, useMediaQuery, useTheme } from '@mui/material';\nimport { defaultSlotProps } from './static';\n\nexport function useNPS(props: NPSProps) {\n const [feedback, setFeedback] = useState('');\n const [nota, setNota] = useState<NotaValue>(null);\n const [etapa, setEtapa] = useState<NPSEtapas>('avaliacao');\n\n const theme = useTheme();\n const isDownSM = useMediaQuery(theme.breakpoints.down('sm'));\n\n const slotProps = useMemo(() => {\n return mergeSlotProps(props.slotProps, {\n ...defaultSlotProps,\n dialog: {\n fullScreen: isDownSM,\n ...defaultSlotProps.dialog,\n },\n }) satisfies typeof defaultSlotProps;\n }, [props.slotProps, isDownSM]);\n\n const handleChangeAvaliacao = (notaSelecionada: number | null) => {\n props.onChangeAvaliacao?.(notaSelecionada);\n setNota(notaSelecionada);\n };\n\n const handleClose = () => {\n props.onClose({ nota });\n\n setTimeout(() => {\n setNota(null);\n setFeedback('');\n setEtapa('avaliacao');\n }, 100);\n };\n\n const handleSubmit = useCallback(() => {\n props.onSubmit({ \n // biome-ignore lint/style/noNonNullAssertion: Avaliação não pode ser null, pois para fechar deve ser fechado somente na etapa de feedback\n nota: nota!, \n feedback: feedback.trim() \n });\n }, [props.onSubmit, nota, feedback]);\n\n const handleProximaEtapa = () => {\n setEtapa('feedback');\n props.onChangeEtapa?.('feedback');\n };\n\n return {\n feedback,\n setFeedback,\n nota,\n handleChangeAvaliacao,\n handleProximaEtapa,\n etapa,\n setEtapa,\n handleSubmit,\n handleClose,\n\n slotProps,\n };\n}\n","import { TextField, type TextFieldProps } from '@mui/material';\nimport { useNPSContext } from '../nps';\n\nexport const NPSFeedbackTextField = (props: TextFieldProps) => {\n const { feedback, setFeedback } = useNPSContext();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFeedback(e.target.value);\n props.onChange?.(e);\n };\n\n return <TextField autoFocus fullWidth rows={3} multiline {...props} value={feedback} onChange={handleChange} />;\n};\n","import { Button, type ButtonProps } from '@mui/material';\nimport { useNPSContext } from '../nps';\n\nexport function NPSFeedBackButtonSubmit(props: ButtonProps) {\n const { feedback, handleSubmit } = useNPSContext();\n\n return <Button fullWidth disabled={!feedback.trim()} {...props} onClick={handleSubmit} />;\n}\n","import { Typography } from \"@mui/material\";\nimport type { PropsWithChildren } from \"react\";\n\nexport const NPSTitle = ({ children }: PropsWithChildren) => {\n return (\n <Typography variant='titleMD' sx={{\n fontSize: '18px'\n }}>\n {children}\n </Typography>\n );\n};\n","import { Dialog } from '@s_mart/core';\nimport type { FeedbackContentProps } from '../types';\nimport { NPSFeedbackTextField } from '../atoms/NPSFeedbackTextField';\nimport { NPSFeedBackButtonSubmit } from '../atoms/NPSFeedbackButtonSubmit';\nimport { NPSTitle } from '../atoms/NPSTitle';\n\nexport function NPSFeedbackContent(props: FeedbackContentProps) {\n return (\n <>\n <Dialog.Header>\n <NPSTitle>{props.title}</NPSTitle></Dialog.Header>\n <Dialog.Content>\n <NPSFeedbackTextField />\n </Dialog.Content>\n <Dialog.Footer>\n <NPSFeedBackButtonSubmit>Enviar</NPSFeedBackButtonSubmit>\n </Dialog.Footer>\n </>\n );\n}\n","import { Button, type ButtonProps } from '@mui/material';\nimport { useNPSContext } from '../nps';\nimport type { NotaValue } from '../types';\n\ntype ButtonAvaliacaoProps = Omit<ButtonProps, 'children'> & { nota: number; notaSelecionada: NotaValue };\n\nexport const NPSAvaliacaoButtonNota = (props: ButtonAvaliacaoProps) => {\n const { handleChangeAvaliacao } = useNPSContext();\n\n const handleClick = () => handleChangeAvaliacao(props.notaSelecionada === props.nota ? null : props.nota);\n\n return (\n <Button\n sx={{ padding: 0, minWidth: '3rem' }}\n {...props}\n variant={props.nota === props.notaSelecionada ? 'contained' : 'outlined'}\n onClick={handleClick}\n >\n {props.nota}\n </Button>\n );\n};\n","import { Button, type ButtonProps } from '@mui/material';\nimport { useNPSContext } from '../nps';\n\nexport function NPSAvaliacaoButtonSubmit(props: ButtonProps) {\n const { nota: notaSelecionada, handleProximaEtapa } = useNPSContext();\n\n return <Button fullWidth disabled={notaSelecionada === null} {...props} onClick={handleProximaEtapa} />;\n}\n","import { styled } from '@mui/material';\nimport { Dialog } from '@s_mart/core';\nimport { NPSAvaliacaoButtonNota } from '../atoms/NPSAvaliacaoButtonNota';\nimport { useNPSContext } from '../nps';\nimport type { AvaliacaoContentProps } from '../types';\nimport { NPSAvaliacaoButtonSubmit } from '../atoms/NPSAvaliacaoButtonSubmit';\nimport { NPSTitle } from '../atoms/NPSTitle';\n\nexport function NPSAvaliacaoContent(props: AvaliacaoContentProps) {\n const { nota: notaSelecionada } = useNPSContext();\n\n return (\n <>\n <Dialog.Header>\n <NPSTitle>{props.title}</NPSTitle>\n </Dialog.Header>\n <Dialog.Content>\n <Container>\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={0} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={1} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={2} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={3} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={4} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={5} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={6} color='feedbackHard' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={7} color='feedbackMedium' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={8} color='feedbackMedium' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={9} color='feedbackVeryEasy' />\n <NPSAvaliacaoButtonNota notaSelecionada={notaSelecionada} nota={10} color='feedbackVeryEasy' />\n </Container>\n </Dialog.Content>\n <Dialog.Footer>\n <NPSAvaliacaoButtonSubmit>\n Enviar\n </NPSAvaliacaoButtonSubmit>\n </Dialog.Footer>\n </>\n );\n}\n\nconst Container = styled('div')({\n display: 'flex',\n gap: '0.25rem',\n flexWrap: 'wrap',\n justifyContent: 'center',\n paddingBlock: '0.25rem',\n});\n","import { Dialog } from '@s_mart/core';\nimport { createContext, useContext } from 'react';\nimport type { NPSContextType, NPSProps } from './types';\nimport { useNPS } from './useNPS';\nimport { NPSFeedbackContent } from './contents/NPSFeedbackContent';\nimport { NPSAvaliacaoContent } from './contents/NPSAvaliacaoContent';\nimport { styled } from '@mui/material';\n\nconst NPSContext = createContext<NPSContextType | null>(null);\n\nexport function NPS(props: NPSProps) {\n const {\n feedback,\n nota,\n setFeedback,\n handleChangeAvaliacao,\n handleClose,\n handleProximaEtapa,\n etapa,\n slotProps,\n handleSubmit,\n } = useNPS(props);\n\n return (\n <StyledDialog open={props.isOpen} onClose={handleClose} {...slotProps.dialog}>\n <NPSContext.Provider\n value={{\n handleSubmit,\n feedback,\n setFeedback,\n nota,\n handleChangeAvaliacao,\n handleProximaEtapa,\n etapa,\n }}\n >\n <>\n {etapa === 'avaliacao' && <NPSAvaliacaoContent {...slotProps.avaliacao} />}\n {etapa === 'feedback' && <NPSFeedbackContent {...slotProps.feedback} />}\n </>\n </NPSContext.Provider>\n </StyledDialog>\n );\n}\n\nexport const useNPSContext = () => {\n const context = useContext(NPSContext);\n if (!context) {\n throw new Error('useNPSContext must be used within a NPSProvider');\n }\n return context;\n};\n\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n [theme.breakpoints.down('sm')]: {\n '.MuiPaper-root': {\n position: 'absolute',\n bottom: 0,\n height: 'auto',\n },\n },\n}));\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ButtonProps } from '@mui/material';
|
|
2
|
+
import { NotaValue } from '../types';
|
|
3
|
+
type ButtonAvaliacaoProps = Omit<ButtonProps, 'children'> & {
|
|
4
|
+
nota: number;
|
|
5
|
+
notaSelecionada: NotaValue;
|
|
6
|
+
};
|
|
7
|
+
export declare const NPSAvaliacaoButtonNota: (props: ButtonAvaliacaoProps) => import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { DialogProps } from '@s_mart/core';
|
|
2
|
+
import { Dispatch, SetStateAction } from 'react';
|
|
3
|
+
export type NotaValue = number | null;
|
|
4
|
+
type SubmitValues = {
|
|
5
|
+
nota: NonNullable<NotaValue>;
|
|
6
|
+
feedback: string;
|
|
7
|
+
};
|
|
8
|
+
type NPSCloseValues = {
|
|
9
|
+
nota: NotaValue;
|
|
10
|
+
};
|
|
11
|
+
export type NPSProps = {
|
|
12
|
+
isOpen: boolean;
|
|
13
|
+
onSubmit(values: SubmitValues): void;
|
|
14
|
+
onClose(values: NPSCloseValues): void;
|
|
15
|
+
onChangeAvaliacao?(nota: NotaValue): void;
|
|
16
|
+
onChangeEtapa?(etapa: NPSEtapas): void;
|
|
17
|
+
slotProps?: Partial<{
|
|
18
|
+
dialog?: Partial<DialogProps>;
|
|
19
|
+
avaliacao?: Partial<AvaliacaoContentProps>;
|
|
20
|
+
feedback?: Partial<FeedbackContentProps>;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
export type AvaliacaoContentProps = {
|
|
24
|
+
title: string;
|
|
25
|
+
};
|
|
26
|
+
export type FeedbackContentProps = {
|
|
27
|
+
title: string;
|
|
28
|
+
};
|
|
29
|
+
export type NPSEtapas = 'avaliacao' | 'feedback';
|
|
30
|
+
export type NPSContextType = {
|
|
31
|
+
nota: NotaValue;
|
|
32
|
+
feedback: string;
|
|
33
|
+
setFeedback: Dispatch<SetStateAction<string>>;
|
|
34
|
+
etapa: NPSEtapas;
|
|
35
|
+
handleSubmit(): void;
|
|
36
|
+
handleChangeAvaliacao(notaSelecionada: NotaValue): void;
|
|
37
|
+
handleProximaEtapa(): void;
|
|
38
|
+
};
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NPSEtapas, NotaValue, NPSProps } from './types';
|
|
2
|
+
export declare function useNPS(props: NPSProps): {
|
|
3
|
+
feedback: string;
|
|
4
|
+
setFeedback: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
5
|
+
nota: NotaValue;
|
|
6
|
+
handleChangeAvaliacao: (notaSelecionada: number | null) => void;
|
|
7
|
+
handleProximaEtapa: () => void;
|
|
8
|
+
etapa: NPSEtapas;
|
|
9
|
+
setEtapa: import('react').Dispatch<import('react').SetStateAction<NPSEtapas>>;
|
|
10
|
+
handleSubmit: () => void;
|
|
11
|
+
handleClose: () => void;
|
|
12
|
+
slotProps: {
|
|
13
|
+
avaliacao: {
|
|
14
|
+
title: string;
|
|
15
|
+
};
|
|
16
|
+
feedback: {
|
|
17
|
+
title: string;
|
|
18
|
+
};
|
|
19
|
+
dialog: {
|
|
20
|
+
disableBackdropClick: true;
|
|
21
|
+
closeIcon: true;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const schema: z.ZodObject<{
|
|
3
|
+
nota: z.ZodNumber;
|
|
4
|
+
feedback: z.ZodOptional<z.ZodString>;
|
|
5
|
+
autorizoPublicacao: z.ZodBoolean;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
nota: number;
|
|
8
|
+
autorizoPublicacao: boolean;
|
|
9
|
+
feedback?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
nota: number;
|
|
12
|
+
autorizoPublicacao: boolean;
|
|
13
|
+
feedback?: string | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type FormValues = z.infer<typeof schema>;
|
|
16
|
+
export default schema;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SPaper: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
import { FormValues } from './nps.schema';
|
|
3
|
+
export type Steps = 'selecionarNota' | 'feedbackDetrator' | 'feedbackPromotor';
|
|
4
|
+
export interface DropzoneOnNotificationProps {
|
|
5
|
+
/**
|
|
6
|
+
* @description Deve ser uma string, pois não sabemos qual lib de notificações são utilizadas e nem todas aceita `React.ReactNode`
|
|
7
|
+
*/
|
|
8
|
+
title: string;
|
|
9
|
+
/**
|
|
10
|
+
* @description Deve ser uma string, pois não sabemos qual lib de notificações são utilizadas e nem todas aceita `React.ReactNode`
|
|
11
|
+
*/
|
|
12
|
+
message?: string;
|
|
13
|
+
duration: number;
|
|
14
|
+
variant: 'warning' | 'error' | 'success' | 'info';
|
|
15
|
+
}
|
|
16
|
+
export interface NPSProps {
|
|
17
|
+
sistemaNome: string;
|
|
18
|
+
/**
|
|
19
|
+
* Determina se o backdrop aparecerá no fundo
|
|
20
|
+
*/
|
|
21
|
+
mostrarBackdrop?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Determina se o componente irá fechar quando o usuário clicar fora do paper
|
|
24
|
+
*
|
|
25
|
+
* Funciona apenas se `mostrarBackdrop` for true
|
|
26
|
+
*/
|
|
27
|
+
shouldCloseOnBackdropClick?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Style aplicado no paper do componente. Pode ser usado para alterar a posição do componente
|
|
30
|
+
*/
|
|
31
|
+
paperStyle?: CSSProperties;
|
|
32
|
+
onClose: () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Callback chamada quando o usuário clica no botão de uma nota.
|
|
35
|
+
*/
|
|
36
|
+
onSelecionarNota?: (nota?: number) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Callback chamada quando o usuário clica no botão
|
|
39
|
+
* "Enviar" após selecionar uma nota.
|
|
40
|
+
*/
|
|
41
|
+
onEnviarNota?: (nota?: number) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Callback chamada quando todo o formulário é finalizado.
|
|
44
|
+
*/
|
|
45
|
+
onFinalizar: (values: FormValues) => void;
|
|
46
|
+
onNotification(params: DropzoneOnNotificationProps): void;
|
|
47
|
+
}
|
|
48
|
+
export type UseNpsProps = Pick<NPSProps, 'onEnviarNota' | 'onNotification'>;
|
package/package.json
CHANGED
|
@@ -1,64 +1,51 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@s_mart/nps",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "16.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
4
6
|
"main": "./dist/index.mjs",
|
|
5
7
|
"module": "./dist/index.mjs",
|
|
6
|
-
"types": "./dist/index.d.
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
7
9
|
"sideEffects": false,
|
|
8
|
-
"license": "MIT",
|
|
9
10
|
"files": [
|
|
10
11
|
"dist/**"
|
|
11
12
|
],
|
|
12
|
-
"
|
|
13
|
-
"react
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"@
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@emotion/react": "^11.14.0",
|
|
15
|
+
"@emotion/styled": "^11.14.1",
|
|
16
|
+
"@mui/material": "^9.3.1",
|
|
17
|
+
"@mui/system": "^9.3.0",
|
|
18
|
+
"@s_mart/core": "16.0.0",
|
|
19
|
+
"@s_mart/form": "16.0.0",
|
|
20
|
+
"@s_mart/regular-icons": "16.0.0",
|
|
21
|
+
"@s_mart/tokens": "16.0.0",
|
|
22
|
+
"@types/react": "^19.2.18",
|
|
23
|
+
"@types/react-dom": "^19.2.5",
|
|
24
|
+
"react": "^19.2.8",
|
|
25
|
+
"react-dom": "^19.2.8",
|
|
26
|
+
"react-hook-form": "^7.85.0",
|
|
27
|
+
"typescript": "^7.0.2",
|
|
28
|
+
"zod": "^3.25.76"
|
|
17
29
|
},
|
|
18
30
|
"peerDependencies": {
|
|
19
31
|
"@emotion/react": "^11.11.4",
|
|
20
32
|
"@emotion/styled": "^11.13.0",
|
|
21
|
-
"@mui/material": "^
|
|
22
|
-
"@mui/system": "^
|
|
23
|
-
"@
|
|
24
|
-
"@
|
|
25
|
-
"@
|
|
26
|
-
"
|
|
27
|
-
"react": "
|
|
28
|
-
"react-dom": "
|
|
29
|
-
"react
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"@s_mart/tokens": "6.0.0"
|
|
35
|
-
},
|
|
36
|
-
"publishConfig": {
|
|
37
|
-
"access": "public"
|
|
38
|
-
},
|
|
39
|
-
"devDependencies": {
|
|
40
|
-
"@emotion/react": "^11.11.4",
|
|
41
|
-
"@emotion/styled": "^11.13.0",
|
|
42
|
-
"@mui/material": "^7.2.0",
|
|
43
|
-
"@mui/system": "^7.2.0",
|
|
44
|
-
"@types/node": ">=22.15.17",
|
|
45
|
-
"@types/react": "^18.3.12",
|
|
46
|
-
"@types/react-dom": "^18.3.1",
|
|
47
|
-
"notistack": "^3.0.1",
|
|
48
|
-
"react": "^18.3.1",
|
|
49
|
-
"react-dom": "^18.3.1",
|
|
50
|
-
"react-hook-form": "^7.51.0",
|
|
51
|
-
"zod": "^3.22.4",
|
|
52
|
-
"@s_mart/core": "11.0.1",
|
|
53
|
-
"@s_mart/form": "11.0.1",
|
|
54
|
-
"@s_mart/regular-icons": "6.0.18",
|
|
55
|
-
"@s_mart/tokens": "6.0.0"
|
|
56
|
-
},
|
|
57
|
-
"overrides": {
|
|
58
|
-
"react-is": "^18.3.1"
|
|
33
|
+
"@mui/material": "^9.0.0",
|
|
34
|
+
"@mui/system": "^9.0.0",
|
|
35
|
+
"@s_mart/core": "16.0.0",
|
|
36
|
+
"@s_mart/form": "16.0.0",
|
|
37
|
+
"@s_mart/regular-icons": "16.0.0",
|
|
38
|
+
"@s_mart/tokens": "16.0.0",
|
|
39
|
+
"@types/react": ">=18.3.12",
|
|
40
|
+
"@types/react-dom": ">=18.3.1",
|
|
41
|
+
"react": ">=18.3.1",
|
|
42
|
+
"react-dom": ">=18.3.1",
|
|
43
|
+
"react-hook-form": "^7.85.0",
|
|
44
|
+
"typescript": ">=7.0.2",
|
|
45
|
+
"zod": "^3.22.4"
|
|
59
46
|
},
|
|
60
47
|
"scripts": {
|
|
61
|
-
"build": "
|
|
62
|
-
"
|
|
48
|
+
"build": "pnpm run typecheck && vite build",
|
|
49
|
+
"typecheck": "tsc --noEmit"
|
|
63
50
|
}
|
|
64
51
|
}
|
package/dist/index.d.mts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { CSSProperties } from 'react';
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
import { DialogProps } from '@s_mart/core';
|
|
5
|
-
|
|
6
|
-
declare const schema: z.ZodObject<{
|
|
7
|
-
nota: z.ZodNumber;
|
|
8
|
-
feedback: z.ZodOptional<z.ZodString>;
|
|
9
|
-
autorizoPublicacao: z.ZodBoolean;
|
|
10
|
-
}, "strip", z.ZodTypeAny, {
|
|
11
|
-
nota: number;
|
|
12
|
-
autorizoPublicacao: boolean;
|
|
13
|
-
feedback?: string | undefined;
|
|
14
|
-
}, {
|
|
15
|
-
nota: number;
|
|
16
|
-
autorizoPublicacao: boolean;
|
|
17
|
-
feedback?: string | undefined;
|
|
18
|
-
}>;
|
|
19
|
-
type FormValues = z.infer<typeof schema>;
|
|
20
|
-
|
|
21
|
-
interface DropzoneOnNotificationProps {
|
|
22
|
-
/**
|
|
23
|
-
* @description Deve ser uma string, pois não sabemos qual lib de notificações são utilizadas e nem todas aceita `React.ReactNode`
|
|
24
|
-
*/
|
|
25
|
-
title: string;
|
|
26
|
-
/**
|
|
27
|
-
* @description Deve ser uma string, pois não sabemos qual lib de notificações são utilizadas e nem todas aceita `React.ReactNode`
|
|
28
|
-
*/
|
|
29
|
-
message?: string;
|
|
30
|
-
duration: number;
|
|
31
|
-
variant: 'warning' | 'error' | 'success' | 'info';
|
|
32
|
-
}
|
|
33
|
-
interface NPSProps$1 {
|
|
34
|
-
sistemaNome: string;
|
|
35
|
-
/**
|
|
36
|
-
* Determina se o backdrop aparecerá no fundo
|
|
37
|
-
*/
|
|
38
|
-
mostrarBackdrop?: boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Determina se o componente irá fechar quando o usuário clicar fora do paper
|
|
41
|
-
*
|
|
42
|
-
* Funciona apenas se `mostrarBackdrop` for true
|
|
43
|
-
*/
|
|
44
|
-
shouldCloseOnBackdropClick?: boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Style aplicado no paper do componente. Pode ser usado para alterar a posição do componente
|
|
47
|
-
*/
|
|
48
|
-
paperStyle?: CSSProperties;
|
|
49
|
-
onClose: () => void;
|
|
50
|
-
/**
|
|
51
|
-
* Callback chamada quando o usuário clica no botão de uma nota.
|
|
52
|
-
*/
|
|
53
|
-
onSelecionarNota?: (nota?: number) => void;
|
|
54
|
-
/**
|
|
55
|
-
* Callback chamada quando o usuário clica no botão
|
|
56
|
-
* "Enviar" após selecionar uma nota.
|
|
57
|
-
*/
|
|
58
|
-
onEnviarNota?: (nota?: number) => void;
|
|
59
|
-
/**
|
|
60
|
-
* Callback chamada quando todo o formulário é finalizado.
|
|
61
|
-
*/
|
|
62
|
-
onFinalizar: (values: FormValues) => void;
|
|
63
|
-
onNotification(params: DropzoneOnNotificationProps): void;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
declare const NPS$1: ({ onFinalizar, mostrarBackdrop, sistemaNome, onClose, shouldCloseOnBackdropClick, onSelecionarNota, paperStyle, ...rest }: NPSProps$1) => react_jsx_runtime.JSX.Element;
|
|
67
|
-
|
|
68
|
-
type NotaValue = number | null;
|
|
69
|
-
type SubmitValues = {
|
|
70
|
-
nota: NonNullable<NotaValue>;
|
|
71
|
-
feedback: string;
|
|
72
|
-
};
|
|
73
|
-
type NPSCloseValues = {
|
|
74
|
-
nota: NotaValue;
|
|
75
|
-
};
|
|
76
|
-
type NPSProps = {
|
|
77
|
-
isOpen: boolean;
|
|
78
|
-
onSubmit(values: SubmitValues): void;
|
|
79
|
-
onClose(values: NPSCloseValues): void;
|
|
80
|
-
onChangeAvaliacao?(nota: NotaValue): void;
|
|
81
|
-
onChangeEtapa?(etapa: NPSEtapas): void;
|
|
82
|
-
slotProps?: Partial<{
|
|
83
|
-
dialog?: Partial<DialogProps>;
|
|
84
|
-
avaliacao?: Partial<AvaliacaoContentProps>;
|
|
85
|
-
feedback?: Partial<FeedbackContentProps>;
|
|
86
|
-
}>;
|
|
87
|
-
};
|
|
88
|
-
type AvaliacaoContentProps = {
|
|
89
|
-
title: string;
|
|
90
|
-
};
|
|
91
|
-
type FeedbackContentProps = {
|
|
92
|
-
title: string;
|
|
93
|
-
};
|
|
94
|
-
type NPSEtapas = 'avaliacao' | 'feedback';
|
|
95
|
-
|
|
96
|
-
declare function NPS(props: NPSProps): react_jsx_runtime.JSX.Element;
|
|
97
|
-
|
|
98
|
-
export { NPS as NPSDialog, type NPSProps as NPSDialogProps, NPS$1 as NPSPopover, type NPSProps$1 as NPSPopoverProps };
|