@s_mart/nps 12.0.2 → 16.1.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.
@@ -0,0 +1,4 @@
1
+ export { NPS as NPSPopover } from './nps-popover/nps';
2
+ export type { NPSProps as NPSPopoverProps } from './nps-popover/nps.types';
3
+ export { NPS as NPSDialog } from './nps-dialog/nps';
4
+ export type { NPSProps as NPSDialogProps } from './nps-dialog/types';
package/dist/index.mjs CHANGED
@@ -1 +1,379 @@
1
- import{LIcon as io}from"@s_mart/core";import{Checkbox as lo,Form as so}from"@s_mart/form";import{lineTimes as po}from"@s_mart/regular-icons";import{Button as mo,Backdrop as co,IconButton as uo,Typography as V,useTheme as fo}from"@mui/material";import{Button as U,Typography as E,useMediaQuery as _}from"@mui/material";import{colorPalette as A}from"@s_mart/tokens";import{useFormContext as G,useWatch as J}from"react-hook-form";import{Fragment as Y,jsx as u,jsxs as D}from"react/jsx-runtime";var K=({onSelecionarNota:o})=>{let{control:e,setValue:t}=G(),a=_("(max-width: 500px)"),i=J({control:e,name:"nota"}),c=s=>{i!==s&&(t("nota",s),o?.(s))},l=u(E,{variant:"bodyXS",color:A.neutral[100],children:"Pouco prov\xE1vel"});return D(Y,{children:[a&&u("div",{style:{marginBottom:"0.5rem"},children:l}),u("div",{style:{display:"flex",gap:"0.3rem",flexWrap:"wrap",justifyContent:"center"},children:Array.from({length:11}).map((s,r)=>u(U,{variant:i===r?"contained":"outlined",style:{minWidth:"3rem"},onClick:()=>c(r),children:r},r))}),D("div",{style:{display:"flex",justifyContent:"space-between",marginTop:"0.5rem"},children:[u("span",{children:!a&&l}),u(E,{variant:"bodyXS",color:A.neutral[100],children:"Muito prov\xE1vel"})]})]})},w=K;import{TextField as Z}from"@s_mart/form";import{jsx as oo}from"react/jsx-runtime";var j=({tipo:o,sistemaNome:e})=>oo(Z,{name:"feedback",placeholder:o==="promotor"?`Para mim o ${e} \xE9...`:"Eu acho que...",multiline:!0,size:"large",minRows:2}),H=j;import{styled as eo}from"@mui/material";import{colorPalette as to}from"@s_mart/tokens";var M=eo("div")(({theme:o})=>({display:"flex",flexDirection:"column",gap:"1.5rem",padding:"1.5rem",borderRadius:Number.parseFloat(o.shape.borderRadius.toString())*1.5,boxShadow:o.shadows[6],border:`1px solid ${o.palette.primary?.main}`,background:to.neutral[0],position:"absolute",bottom:"1.5rem",right:"1.75rem",zIndex:102,"@media (max-width: 650px)":{right:"1.25rem",left:"1.25rem"}}));import{useState as ao}from"react";var ro=({onEnviarNota:o,onNotification:e})=>{let[t,a]=ao("selecionarNota");return{step:t,handleEnviar:(c,l)=>{t==="selecionarNota"?(o?.(c),c>=9?a("feedbackPromotor"):a("feedbackDetrator")):(l(),e({variant:"success",title:"Avalia\xE7\xE3o enviada",message:"Agradecemos muito pela sua avalia\xE7\xE3o.",duration:5e3}))}}},z=ro;import{z as y}from"zod";var no=y.object({nota:y.number(),feedback:y.string().optional(),autorizoPublicacao:y.coerce.boolean()}),W=no;import{Fragment as So,jsx as p,jsxs as b}from"react/jsx-runtime";var Po=({onFinalizar:o,mostrarBackdrop:e,sistemaNome:t,onClose:a,shouldCloseOnBackdropClick:i,onSelecionarNota:c,paperStyle:l,...s})=>{let{step:r,handleEnviar:P}=z(s),N=fo(),k={selecionarNota:`De 0 a 10, o quanto voc\xEA recomendaria o ${t}?`,feedbackDetrator:`Como podemos melhorar a sua experi\xEAncia no ${t}?`,feedbackPromotor:`O que voc\xEA mais gosta no ${t}?`};return p(so,{onSubmit:o,schema:W,children:({watch:C,onSubmit:T})=>{let S=C("nota");return b(So,{children:[!!e&&p(co,{open:!0,onClick:i?a:void 0,style:{zIndex:99}}),b(M,{style:l,children:[b("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[p(V,{variant:"titleSM",color:N.palette.grey[700],children:k[r]}),p(uo,{size:"small",onClick:a,children:p(io,{icon:po,removeMargin:!0,size:"25px"})})]}),p("div",{children:r==="selecionarNota"?p(w,{onSelecionarNota:c}):p(H,{tipo:r==="feedbackPromotor"?"promotor":"detrator",sistemaNome:t})}),b("div",{style:{display:"flex",justifyContent:"space-between"},children:[p("div",{children:r==="feedbackPromotor"&&p(lo,{name:"autorizoPublicacao",label:b(V,{variant:"bodyXS",children:["Autorizo a publica\xE7\xE3o deste coment\xE1rio no site e em redes sociais do ",t]})})}),p("div",{children:p(mo,{disabled:S===void 0,onClick:()=>P(S,T),children:"Enviar"})})]})]})]})}})};import{Dialog as Vo}from"@s_mart/core";import{createContext as Io,useContext as Ro}from"react";import{useCallback as bo,useMemo as yo,useState as x}from"react";import{mergeSlotProps as vo,useMediaQuery as ho,useTheme as No}from"@mui/material";var g={avaliacao:{title:"O quanto voc\xEA recomendaria o sistema?"},feedback:{title:"Como podemos melhorar a sua experi\xEAncia?"},dialog:{disableBackdropClick:!0,closeIcon:!0}};function I(o){let[e,t]=x(""),[a,i]=x(null),[c,l]=x("avaliacao"),s=No(),r=ho(s.breakpoints.down("sm")),P=yo(()=>vo(o.slotProps,{...g,dialog:{fullScreen:r,...g.dialog}}),[o.slotProps,r]),N=S=>{o.onChangeAvaliacao?.(S),i(S)},k=()=>{o.onClose({nota:a}),setTimeout(()=>{i(null),t(""),l("avaliacao")},100)},C=bo(()=>{o.onSubmit({nota:a,feedback:e.trim()})},[o.onSubmit,a,e]);return{feedback:e,setFeedback:t,nota:a,handleChangeAvaliacao:N,handleProximaEtapa:()=>{l("feedback"),o.onChangeEtapa?.("feedback")},etapa:c,setEtapa:l,handleSubmit:C,handleClose:k,slotProps:P}}import{Dialog as F}from"@s_mart/core";import{TextField as ko}from"@mui/material";import{jsx as Co}from"react/jsx-runtime";var R=o=>{let{feedback:e,setFeedback:t}=d();return Co(ko,{autoFocus:!0,fullWidth:!0,rows:3,multiline:!0,...o,value:e,onChange:i=>{t(i.target.value),o.onChange?.(i)}})};import{Button as go}from"@mui/material";import{jsx as xo}from"react/jsx-runtime";function $(o){let{feedback:e,handleSubmit:t}=d();return xo(go,{fullWidth:!0,disabled:!e.trim(),...o,onClick:t})}import{Typography as Fo}from"@mui/material";import{jsx as Bo}from"react/jsx-runtime";var v=({children:o})=>Bo(Fo,{variant:"titleMD",fontSize:"18px",children:o});import{Fragment as To,jsx as f,jsxs as Eo}from"react/jsx-runtime";function q(o){return Eo(To,{children:[f(F.Header,{children:f(v,{children:o.title})}),f(F.Content,{children:f(R,{})}),f(F.Footer,{children:f($,{children:"Enviar"})})]})}import{styled as Mo}from"@mui/material";import{Dialog as B}from"@s_mart/core";import{Button as Ao}from"@mui/material";import{jsx as Do}from"react/jsx-runtime";var m=o=>{let{handleChangeAvaliacao:e}=d(),t=()=>e(o.notaSelecionada===o.nota?null:o.nota);return Do(Ao,{sx:{padding:0,minWidth:"3rem"},...o,variant:o.nota===o.notaSelecionada?"contained":"outlined",onClick:t,children:o.nota})};import{Button as wo}from"@mui/material";import{jsx as Ho}from"react/jsx-runtime";function O(o){let{nota:e,handleProximaEtapa:t}=d();return Ho(wo,{fullWidth:!0,disabled:e===null,...o,onClick:t})}import{Fragment as Wo,jsx as n,jsxs as X}from"react/jsx-runtime";function L(o){let{nota:e}=d();return X(Wo,{children:[n(B.Header,{children:n(v,{children:o.title})}),n(B.Content,{children:X(zo,{children:[n(m,{notaSelecionada:e,nota:0,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:1,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:2,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:3,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:4,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:5,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:6,color:"feedbackHard"}),n(m,{notaSelecionada:e,nota:7,color:"feedbackMedium"}),n(m,{notaSelecionada:e,nota:8,color:"feedbackMedium"}),n(m,{notaSelecionada:e,nota:9,color:"feedbackVeryEasy"}),n(m,{notaSelecionada:e,nota:10,color:"feedbackVeryEasy"})]})}),n(B.Footer,{children:n(O,{children:"Enviar"})})]})}var zo=Mo("div")({display:"flex",gap:"0.25rem",flexWrap:"wrap",justifyContent:"center",paddingBlock:"0.25rem"});import{styled as $o}from"@mui/material";import{Fragment as Xo,jsx as h,jsxs as Lo}from"react/jsx-runtime";var Q=Io(null);function qo(o){let{feedback:e,nota:t,setFeedback:a,handleChangeAvaliacao:i,handleClose:c,handleProximaEtapa:l,etapa:s,slotProps:r,handleSubmit:P}=I(o);return h(Oo,{open:o.isOpen,onClose:c,...r.dialog,children:h(Q.Provider,{value:{handleSubmit:P,feedback:e,setFeedback:a,nota:t,handleChangeAvaliacao:i,handleProximaEtapa:l,etapa:s},children:Lo(Xo,{children:[s==="avaliacao"&&h(L,{...r.avaliacao}),s==="feedback"&&h(q,{...r.feedback})]})})})}var d=()=>{let o=Ro(Q);if(!o)throw new Error("useNPSContext must be used within a NPSProvider");return o},Oo=$o(Vo)(({theme:o})=>({[o.breakpoints.down("sm")]:{".MuiPaper-root":{position:"absolute",bottom:0,height:"auto"}}}));export{qo as NPSDialog,Po as NPSPopover};
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,2 @@
1
+ import { ButtonProps } from '@mui/material';
2
+ export declare function NPSAvaliacaoButtonSubmit(props: ButtonProps): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { ButtonProps } from '@mui/material';
2
+ export declare function NPSFeedBackButtonSubmit(props: ButtonProps): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { TextFieldProps } from '@mui/material';
2
+ export declare const NPSFeedbackTextField: (props: TextFieldProps) => import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export declare const NPSTitle: ({ children }: PropsWithChildren) => import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { AvaliacaoContentProps } from '../types';
2
+ export declare function NPSAvaliacaoContent(props: AvaliacaoContentProps): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { FeedbackContentProps } from '../types';
2
+ export declare function NPSFeedbackContent(props: FeedbackContentProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { NPSContextType, NPSProps } from './types';
2
+ export declare function NPS(props: NPSProps): import("react").JSX.Element;
3
+ export declare const useNPSContext: () => NPSContextType;
@@ -0,0 +1,12 @@
1
+ export declare const defaultSlotProps: {
2
+ avaliacao: {
3
+ title: string;
4
+ };
5
+ feedback: {
6
+ title: string;
7
+ };
8
+ dialog: {
9
+ disableBackdropClick: true;
10
+ closeIcon: true;
11
+ };
12
+ };
@@ -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,7 @@
1
+ import { FC } from 'react';
2
+ interface FeedbackProps {
3
+ tipo: 'promotor' | 'detrator';
4
+ sistemaNome: string;
5
+ }
6
+ declare const Feedback: FC<FeedbackProps>;
7
+ export default Feedback;
@@ -0,0 +1,5 @@
1
+ interface NotasProps {
2
+ onSelecionarNota?: (nota: number) => void;
3
+ }
4
+ declare const Notas: ({ onSelecionarNota }: NotasProps) => import("react").JSX.Element;
5
+ export default Notas;
@@ -0,0 +1,2 @@
1
+ import { NPSProps } from './nps.types';
2
+ export declare const NPS: ({ onFinalizar, mostrarBackdrop, sistemaNome, onClose, shouldCloseOnBackdropClick, onSelecionarNota, paperStyle, ...rest }: NPSProps) => import("react").JSX.Element;
@@ -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'>;
@@ -0,0 +1,6 @@
1
+ import { Steps, UseNpsProps } from './nps.types';
2
+ declare const useNps: ({ onEnviarNota, onNotification }: UseNpsProps) => {
3
+ step: Steps;
4
+ handleEnviar: (nota: number, onSubmit: () => void) => void;
5
+ };
6
+ export default useNps;
package/package.json CHANGED
@@ -1,64 +1,51 @@
1
1
  {
2
2
  "name": "@s_mart/nps",
3
- "version": "12.0.2",
3
+ "version": "16.1.0",
4
+ "license": "MIT",
5
+ "type": "module",
4
6
  "main": "./dist/index.mjs",
5
7
  "module": "./dist/index.mjs",
6
- "types": "./dist/index.d.mts",
8
+ "types": "./dist/index.d.ts",
7
9
  "sideEffects": false,
8
- "license": "MIT",
9
10
  "files": [
10
11
  "dist/**"
11
12
  ],
12
- "dependencies": {
13
- "react-is": "^18.3.1",
14
- "tsup": "8.5.0",
15
- "typescript": ">=5.4.2",
16
- "@s_mart/typed": "8.0.1"
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.1.0",
19
+ "@s_mart/form": "16.1.0",
20
+ "@s_mart/regular-icons": "16.1.0",
21
+ "@s_mart/tokens": "16.1.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": "^7.2.0",
22
- "@mui/system": "^7.2.0",
23
- "@types/node": ">=22.15.17",
24
- "@types/react": "^18.3.12",
25
- "@types/react-dom": "^18.3.1",
26
- "notistack": "^3.0.1",
27
- "react": "^18.3.1",
28
- "react-dom": "^18.3.1",
29
- "react-hook-form": "^7.51.0",
30
- "zod": "^3.22.4",
31
- "@s_mart/core": "11.0.3",
32
- "@s_mart/form": "11.0.2",
33
- "@s_mart/regular-icons": "6.0.18",
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.3",
53
- "@s_mart/form": "11.0.2",
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.1.0",
36
+ "@s_mart/form": "16.1.0",
37
+ "@s_mart/regular-icons": "16.1.0",
38
+ "@s_mart/tokens": "16.1.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": "tsup src/index.ts --minify --format esm --dts --external react",
62
- "dev": "tsup src/index.ts --format esm --watch --dts --external react"
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 };