@zydon/common 2.9.12 → 2.9.14
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.
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
3
|
type StepUpMethod = 'TOTP' | 'RECOVERY';
|
|
4
|
+
declare const STEP_UP_REQUIRED_CODE = "STEP_UP_REQUIRED";
|
|
4
5
|
interface StepUpChallenge {
|
|
5
6
|
code: string;
|
|
6
7
|
purpose: string;
|
|
@@ -24,4 +25,4 @@ interface StepUpDialogProps {
|
|
|
24
25
|
|
|
25
26
|
declare const StepUpDialog: ({ challenge, verify, onToken, onClose, }: StepUpDialogProps) => react_jsx_runtime.JSX.Element | null;
|
|
26
27
|
|
|
27
|
-
export { StepUpDialog as default };
|
|
28
|
+
export { STEP_UP_REQUIRED_CODE, StepUpChallenge, StepUpDialogProps, StepUpMethod, StepUpRequest, StepUpResponse, StepUpDialog as default };
|
|
@@ -9,17 +9,17 @@ import '../../chunk-POTVACYB.js';
|
|
|
9
9
|
import '../../chunk-ET3WPQIO.js';
|
|
10
10
|
import { useState, useEffect } from 'react';
|
|
11
11
|
import { useForm } from 'react-hook-form';
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
12
|
+
import M from '@mui/lab/LoadingButton';
|
|
13
|
+
import O from '@mui/material/Box';
|
|
14
|
+
import u from '@mui/material/Button';
|
|
15
|
+
import $ from '@mui/material/Dialog';
|
|
16
|
+
import F from '@mui/material/DialogContent';
|
|
17
|
+
import p from '@mui/material/Stack';
|
|
18
18
|
import { alpha } from '@mui/material/styles';
|
|
19
|
-
import
|
|
19
|
+
import s from '@mui/material/Typography';
|
|
20
20
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _="STEP_UP_REQUIRED";var A=["code1","code2","code3","code4","code5","code6"],d={code1:"",code2:"",code3:"",code4:"",code5:"",code6:"",recoveryCode:""},Y=({challenge:r,verify:P,onToken:v,onClose:c})=>{let{showErrorMessage:D}=a(),[I,g]=useState(!1),[i,f]=useState(!1),[x,h]=useState(!1),S=useForm({defaultValues:d}),{handleSubmit:k,reset:a$5}=S;if(useEffect(()=>{r&&(a$5(d),f(!1),h(!1));},[r,a$5]),!r)return null;let m=x?"warning":"primary",w=async o=>{let W=i?o.recoveryCode.trim():`${o.code1}${o.code2}${o.code3}${o.code4}${o.code5}${o.code6}`;g(!0);try{let{stepUpToken:n}=await P({code:W,method:i?"RECOVERY":"TOTP",purpose:r.purpose,bind:r.bind});await v(n);}catch(n){if(n?.status===409){h(!0);return}D(n,"C\xF3digo inv\xE1lido"),a$5(d);}finally{g(!1);}};return jsx($,{open:!0,onClose:c,fullWidth:!0,PaperProps:{sx:{width:1,maxWidth:480,borderRadius:4,overflow:"hidden",boxShadow:"0 24px 64px -16px rgba(16, 24, 40, 0.28)"}},children:jsx(F,{sx:{p:0},children:jsxs(p,{alignItems:"center",gap:3,sx:{px:{xs:3,sm:4},pt:5,pb:4},children:[jsx(O,{sx:{width:80,height:80,display:"grid",placeItems:"center",borderRadius:"50%",bgcolor:o=>alpha(o.palette[m].main,.12),boxShadow:o=>`0 0 0 8px ${alpha(o.palette[m].main,.05)}`},children:jsx(a$1,{icon:"SECURITY_LOCK",width:36,color:`${m}.main`})}),x?jsxs(Fragment,{children:[jsxs(p,{alignItems:"center",gap:1,children:[jsx(s,{variant:"h6",textAlign:"center",sx:{fontWeight:700},children:"Verifica\xE7\xE3o em duas etapas necess\xE1ria"}),jsxs(s,{variant:"body2",color:"text.secondary",textAlign:"center",sx:{maxWidth:340,lineHeight:1.6},children:["Para autorizar esta opera\xE7\xE3o, ative a verifica\xE7\xE3o em duas etapas em ",jsx("b",{children:"Meu Perfil \u203A Seguran\xE7a"}),"."]})]}),jsx(u,{variant:"contained",fullWidth:!0,onClick:c,sx:{height:48,borderRadius:2,fontWeight:600,textTransform:"none"},children:"Entendi"})]}):jsxs(Fragment,{children:[jsxs(p,{alignItems:"center",gap:1,children:[jsx(s,{variant:"h6",textAlign:"center",sx:{fontWeight:700},children:"Confirme sua identidade"}),jsx(s,{variant:"body2",color:"text.secondary",textAlign:"center",sx:{maxWidth:340,lineHeight:1.6},children:i?"Informe um dos seus c\xF3digos de recupera\xE7\xE3o para autorizar esta opera\xE7\xE3o.":"Informe o c\xF3digo de 6 d\xEDgitos do seu aplicativo autenticador para autorizar esta opera\xE7\xE3o."})]}),jsxs(a$2,{methods:S,onSubmit:k(w),spacing:3,children:[i?jsx(a$3,{name:"recoveryCode",label:"C\xF3digo de recupera\xE7\xE3o",autoComplete:"off",rules:{required:{value:!0,message:"Informe um c\xF3digo de recupera\xE7\xE3o"}}}):jsx(a$4,{name:"code",keyName:"code",inputs:A,autoFocusFirst:!0,rules:{required:{value:!0,message:""}}}),jsx(M,{type:"submit",variant:"contained",color:"primary",loading:I,fullWidth:!0,sx:{height:48,borderRadius:2,fontWeight:600,fontSize:15,textTransform:"none"},children:"Confirmar"})]}),jsxs(p,{alignItems:"center",gap:.5,width:1,children:[jsx(u,{variant:"text",onClick:()=>{f(o=>!o),a$5(d);},sx:{fontWeight:600,textTransform:"none"},children:i?"Usar c\xF3digo do aplicativo":"Usar c\xF3digo de recupera\xE7\xE3o"}),jsx(u,{variant:"text",onClick:c,sx:{color:"text.secondary",textTransform:"none"},children:"Cancelar"})]})]})]})})})},ie=Y;
|
|
23
23
|
|
|
24
|
-
export {
|
|
24
|
+
export { _ as STEP_UP_REQUIRED_CODE, ie as default };
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/StepUpDialog/index.tsx"],"names":["useEffect","useState","useForm","LoadingButton","Box","Button","Dialog","DialogContent","Stack","alpha","Typography","Fragment","jsx","jsxs","CODE_INPUTS","EMPTY","StepUpDialog","challenge","verify","onToken","onClose","showErrorMessage","useApiMessage_default","submitting","setSubmitting","useRecovery","setUseRecovery","enrollmentRequired","setEnrollmentRequired","methods","handleSubmit","reset","accent","onSubmit","values","code","stepUpToken","error","theme","Icon_default","Form_default","Field_default","Codes_default","value","StepUpDialog_default"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport Stack from '@mui/material/Stack';\nimport { alpha } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nimport useApiMessage from '../../hooks/useApiMessage';\nimport Codes from '../form/Codes';\nimport Field from '../form/Field';\nimport Form from '../form/Form';\nimport Icon from '../Icon';\n\nimport { StepUpDialogProps } from './props';\n\nconst CODE_INPUTS = ['code1', 'code2', 'code3', 'code4', 'code5', 'code6'];\n\nconst EMPTY = {\n code1: '',\n code2: '',\n code3: '',\n code4: '',\n code5: '',\n code6: '',\n recoveryCode: '',\n};\n\nconst StepUpDialog = ({\n challenge,\n verify,\n onToken,\n onClose,\n}: StepUpDialogProps) => {\n const { showErrorMessage } = useApiMessage();\n const [submitting, setSubmitting] = useState(false);\n const [useRecovery, setUseRecovery] = useState(false);\n const [enrollmentRequired, setEnrollmentRequired] = useState(false);\n\n const methods = useForm({ defaultValues: EMPTY });\n const { handleSubmit, reset } = methods;\n\n useEffect(() => {\n if (challenge) {\n reset(EMPTY);\n setUseRecovery(false);\n setEnrollmentRequired(false);\n }\n }, [challenge, reset]);\n\n if (!challenge) return null;\n\n const accent = enrollmentRequired ? 'warning' : 'primary';\n\n const onSubmit = async (values: typeof EMPTY) => {\n const code = useRecovery\n ? values.recoveryCode.trim()\n : `${values.code1}${values.code2}${values.code3}${values.code4}${values.code5}${values.code6}`;\n\n setSubmitting(true);\n try {\n const { stepUpToken } = await verify({\n code,\n method: useRecovery ? 'RECOVERY' : 'TOTP',\n purpose: challenge.purpose,\n bind: challenge.bind,\n });\n\n // Mantem o loading ate o retry da operacao protegida terminar, evitando\n // multiplos disparos do endpoint enquanto a chamada esta em voo.\n await onToken(stepUpToken);\n } catch (error) {\n if ((error as { status?: number })?.status === 409) {\n setEnrollmentRequired(true);\n return;\n }\n showErrorMessage(error, 'Código inválido');\n reset(EMPTY);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog\n open\n onClose={onClose}\n fullWidth\n PaperProps={{\n sx: {\n width: 1,\n maxWidth: 480,\n borderRadius: 4,\n overflow: 'hidden',\n boxShadow: '0 24px 64px -16px rgba(16, 24, 40, 0.28)',\n },\n }}\n >\n <DialogContent sx={{ p: 0 }}>\n <Stack\n alignItems=\"center\"\n gap={3}\n sx={{ px: { xs: 3, sm: 4 }, pt: 5, pb: 4 }}\n >\n <Box\n sx={{\n width: 80,\n height: 80,\n display: 'grid',\n placeItems: 'center',\n borderRadius: '50%',\n bgcolor: theme => alpha(theme.palette[accent].main, 0.12),\n boxShadow: theme =>\n `0 0 0 8px ${alpha(theme.palette[accent].main, 0.05)}`,\n }}\n >\n <Icon icon=\"SECURITY_LOCK\" width={36} color={`${accent}.main`} />\n </Box>\n\n {enrollmentRequired ? (\n <>\n <Stack alignItems=\"center\" gap={1}>\n <Typography\n variant=\"h6\"\n textAlign=\"center\"\n sx={{ fontWeight: 700 }}\n >\n Verificação em duas etapas necessária\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"center\"\n sx={{ maxWidth: 340, lineHeight: 1.6 }}\n >\n Para autorizar esta operação, ative a verificação em duas\n etapas em <b>Meu Perfil › Segurança</b>.\n </Typography>\n </Stack>\n\n <Button\n variant=\"contained\"\n fullWidth\n onClick={onClose}\n sx={{\n height: 48,\n borderRadius: 2,\n fontWeight: 600,\n textTransform: 'none',\n }}\n >\n Entendi\n </Button>\n </>\n ) : (\n <>\n <Stack alignItems=\"center\" gap={1}>\n <Typography\n variant=\"h6\"\n textAlign=\"center\"\n sx={{ fontWeight: 700 }}\n >\n Confirme sua identidade\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"center\"\n sx={{ maxWidth: 340, lineHeight: 1.6 }}\n >\n {useRecovery\n ? 'Informe um dos seus códigos de recuperação para autorizar esta operação.'\n : 'Informe o código de 6 dígitos do seu aplicativo autenticador para autorizar esta operação.'}\n </Typography>\n </Stack>\n\n <Form\n methods={methods}\n onSubmit={handleSubmit(onSubmit)}\n spacing={3}\n >\n {useRecovery ? (\n <Field\n name=\"recoveryCode\"\n label=\"Código de recuperação\"\n autoComplete=\"off\"\n rules={{\n required: {\n value: true,\n message: 'Informe um código de recuperação',\n },\n }}\n />\n ) : (\n <Codes\n name=\"code\"\n keyName=\"code\"\n inputs={CODE_INPUTS}\n autoFocusFirst\n rules={{ required: { value: true, message: '' } }}\n />\n )}\n\n <LoadingButton\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n loading={submitting}\n fullWidth\n sx={{\n height: 48,\n borderRadius: 2,\n fontWeight: 600,\n fontSize: 15,\n textTransform: 'none',\n }}\n >\n Confirmar\n </LoadingButton>\n </Form>\n\n <Stack alignItems=\"center\" gap={0.5} width={1}>\n <Button\n variant=\"text\"\n onClick={() => {\n setUseRecovery(value => !value);\n reset(EMPTY);\n }}\n sx={{ fontWeight: 600, textTransform: 'none' }}\n >\n {useRecovery\n ? 'Usar código do aplicativo'\n : 'Usar código de recuperação'}\n </Button>\n <Button\n variant=\"text\"\n onClick={onClose}\n sx={{ color: 'text.secondary', textTransform: 'none' }}\n >\n Cancelar\n </Button>\n </Stack>\n </>\n )}\n </Stack>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default StepUpDialog;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/StepUpDialog/index.tsx","../../../src/components/StepUpDialog/props.ts"],"names":["useEffect","useState","useForm","LoadingButton","Box","Button","Dialog","DialogContent","Stack","alpha","Typography","STEP_UP_REQUIRED_CODE","Fragment","jsx","jsxs","CODE_INPUTS","EMPTY","StepUpDialog","challenge","verify","onToken","onClose","showErrorMessage","useApiMessage_default","submitting","setSubmitting","useRecovery","setUseRecovery","enrollmentRequired","setEnrollmentRequired","methods","handleSubmit","reset","accent","onSubmit","values","code","stepUpToken","error","theme","Icon_default","Form_default","Field_default","Codes_default","value","StepUpDialog_default"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport Stack from '@mui/material/Stack';\nimport { alpha } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nimport useApiMessage from '../../hooks/useApiMessage';\nimport Codes from '../form/Codes';\nimport Field from '../form/Field';\nimport Form from '../form/Form';\nimport Icon from '../Icon';\n\nimport { StepUpDialogProps } from './props';\n\nconst CODE_INPUTS = ['code1', 'code2', 'code3', 'code4', 'code5', 'code6'];\n\nconst EMPTY = {\n code1: '',\n code2: '',\n code3: '',\n code4: '',\n code5: '',\n code6: '',\n recoveryCode: '',\n};\n\nconst StepUpDialog = ({\n challenge,\n verify,\n onToken,\n onClose,\n}: StepUpDialogProps) => {\n const { showErrorMessage } = useApiMessage();\n const [submitting, setSubmitting] = useState(false);\n const [useRecovery, setUseRecovery] = useState(false);\n const [enrollmentRequired, setEnrollmentRequired] = useState(false);\n\n const methods = useForm({ defaultValues: EMPTY });\n const { handleSubmit, reset } = methods;\n\n useEffect(() => {\n if (challenge) {\n reset(EMPTY);\n setUseRecovery(false);\n setEnrollmentRequired(false);\n }\n }, [challenge, reset]);\n\n if (!challenge) return null;\n\n const accent = enrollmentRequired ? 'warning' : 'primary';\n\n const onSubmit = async (values: typeof EMPTY) => {\n const code = useRecovery\n ? values.recoveryCode.trim()\n : `${values.code1}${values.code2}${values.code3}${values.code4}${values.code5}${values.code6}`;\n\n setSubmitting(true);\n try {\n const { stepUpToken } = await verify({\n code,\n method: useRecovery ? 'RECOVERY' : 'TOTP',\n purpose: challenge.purpose,\n bind: challenge.bind,\n });\n\n // Mantem o loading ate o retry da operacao protegida terminar, evitando\n // multiplos disparos do endpoint enquanto a chamada esta em voo.\n await onToken(stepUpToken);\n } catch (error) {\n if ((error as { status?: number })?.status === 409) {\n setEnrollmentRequired(true);\n return;\n }\n showErrorMessage(error, 'Código inválido');\n reset(EMPTY);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog\n open\n onClose={onClose}\n fullWidth\n PaperProps={{\n sx: {\n width: 1,\n maxWidth: 480,\n borderRadius: 4,\n overflow: 'hidden',\n boxShadow: '0 24px 64px -16px rgba(16, 24, 40, 0.28)',\n },\n }}\n >\n <DialogContent sx={{ p: 0 }}>\n <Stack\n alignItems=\"center\"\n gap={3}\n sx={{ px: { xs: 3, sm: 4 }, pt: 5, pb: 4 }}\n >\n <Box\n sx={{\n width: 80,\n height: 80,\n display: 'grid',\n placeItems: 'center',\n borderRadius: '50%',\n bgcolor: theme => alpha(theme.palette[accent].main, 0.12),\n boxShadow: theme =>\n `0 0 0 8px ${alpha(theme.palette[accent].main, 0.05)}`,\n }}\n >\n <Icon icon=\"SECURITY_LOCK\" width={36} color={`${accent}.main`} />\n </Box>\n\n {enrollmentRequired ? (\n <>\n <Stack alignItems=\"center\" gap={1}>\n <Typography\n variant=\"h6\"\n textAlign=\"center\"\n sx={{ fontWeight: 700 }}\n >\n Verificação em duas etapas necessária\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"center\"\n sx={{ maxWidth: 340, lineHeight: 1.6 }}\n >\n Para autorizar esta operação, ative a verificação em duas\n etapas em <b>Meu Perfil › Segurança</b>.\n </Typography>\n </Stack>\n\n <Button\n variant=\"contained\"\n fullWidth\n onClick={onClose}\n sx={{\n height: 48,\n borderRadius: 2,\n fontWeight: 600,\n textTransform: 'none',\n }}\n >\n Entendi\n </Button>\n </>\n ) : (\n <>\n <Stack alignItems=\"center\" gap={1}>\n <Typography\n variant=\"h6\"\n textAlign=\"center\"\n sx={{ fontWeight: 700 }}\n >\n Confirme sua identidade\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"center\"\n sx={{ maxWidth: 340, lineHeight: 1.6 }}\n >\n {useRecovery\n ? 'Informe um dos seus códigos de recuperação para autorizar esta operação.'\n : 'Informe o código de 6 dígitos do seu aplicativo autenticador para autorizar esta operação.'}\n </Typography>\n </Stack>\n\n <Form\n methods={methods}\n onSubmit={handleSubmit(onSubmit)}\n spacing={3}\n >\n {useRecovery ? (\n <Field\n name=\"recoveryCode\"\n label=\"Código de recuperação\"\n autoComplete=\"off\"\n rules={{\n required: {\n value: true,\n message: 'Informe um código de recuperação',\n },\n }}\n />\n ) : (\n <Codes\n name=\"code\"\n keyName=\"code\"\n inputs={CODE_INPUTS}\n autoFocusFirst\n rules={{ required: { value: true, message: '' } }}\n />\n )}\n\n <LoadingButton\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n loading={submitting}\n fullWidth\n sx={{\n height: 48,\n borderRadius: 2,\n fontWeight: 600,\n fontSize: 15,\n textTransform: 'none',\n }}\n >\n Confirmar\n </LoadingButton>\n </Form>\n\n <Stack alignItems=\"center\" gap={0.5} width={1}>\n <Button\n variant=\"text\"\n onClick={() => {\n setUseRecovery(value => !value);\n reset(EMPTY);\n }}\n sx={{ fontWeight: 600, textTransform: 'none' }}\n >\n {useRecovery\n ? 'Usar código do aplicativo'\n : 'Usar código de recuperação'}\n </Button>\n <Button\n variant=\"text\"\n onClick={onClose}\n sx={{ color: 'text.secondary', textTransform: 'none' }}\n >\n Cancelar\n </Button>\n </Stack>\n </>\n )}\n </Stack>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default StepUpDialog;\n\nexport type {\n StepUpChallenge,\n StepUpDialogProps,\n StepUpMethod,\n StepUpRequest,\n StepUpResponse,\n} from './props';\nexport { STEP_UP_REQUIRED_CODE } from './props';\n","export type StepUpMethod = 'TOTP' | 'RECOVERY';\n\nexport const STEP_UP_REQUIRED_CODE = 'STEP_UP_REQUIRED';\n\nexport interface StepUpChallenge {\n code: string;\n purpose: string;\n bind?: string | null;\n}\n\nexport interface StepUpRequest {\n code: string;\n method: StepUpMethod;\n purpose: string;\n bind?: string | null;\n}\n\nexport interface StepUpResponse {\n stepUpToken: string;\n}\n\nexport interface StepUpDialogProps {\n challenge: StepUpChallenge | null;\n verify: (request: StepUpRequest) => Promise<StepUpResponse>;\n onToken: (token: string) => void | Promise<void>;\n onClose: () => void;\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import { styled } from '@mui/material/styles';
|
|
|
4
4
|
import a from '@mui/material/Typography';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var p=styled(i)({display:"grid",gridTemplateColumns:"auto auto"}),l=styled(a)(({theme:r})=>({color:r.palette.text.secondary,display:"flex",gap:"8px"})),m=styled(a)(({theme:r})=>({textAlign:"right",color:r.palette.text.primary}));var y=({data:r,...n})=>r.length===0?null:jsx(p,{gap:1,...n,children:r.map(o=>jsxs(Fragment,{children:[jsx(l,{...o.keyProps,children:o.label}),jsx(m,{variant:"body2",...o.valueProps,children:o.value})]},o.id))}),C=y;
|
|
8
8
|
|
|
9
|
-
export {
|
|
9
|
+
export { C as default };
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Summary/index.tsx","../../../src/components/Summary/styles.ts"],"names":["Fragment","Stack","styled","Typography","Container","Label","theme","Value","jsx","jsxs","Summary","data","other","d","Summary_default"],"mappings":"AAAA,OAAS,YAAAA,MAAgB,QCAzB,OAAOC,MAAW,sBAClB,OAAS,UAAAC,MAAc,uBACvB,OAAOC,MAAgB,2BAEhB,IAAMC,EAAYF,EAAOD,CAAK,EAAE,CACrC,QAAS,OACT,oBAAqB,WACvB,CAAC,EAEYI,EAAQH,EAAOC,CAAU,EAAE,CAAC,CAAE,MAAAG,CAAM,KAAO,CACtD,MAAOA,EAAM,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Summary/index.tsx","../../../src/components/Summary/styles.ts"],"names":["Fragment","Stack","styled","Typography","Container","Label","theme","Value","jsx","jsxs","Summary","data","other","d","Summary_default"],"mappings":"AAAA,OAAS,YAAAA,MAAgB,QCAzB,OAAOC,MAAW,sBAClB,OAAS,UAAAC,MAAc,uBACvB,OAAOC,MAAgB,2BAEhB,IAAMC,EAAYF,EAAOD,CAAK,EAAE,CACrC,QAAS,OACT,oBAAqB,WACvB,CAAC,EAEYI,EAAQH,EAAOC,CAAU,EAAE,CAAC,CAAE,MAAAG,CAAM,KAAO,CACtD,MAAOA,EAAM,QAAQ,KAAK,UAC1B,QAAS,OACT,IAAK,KACP,EAAE,EAEWC,EAAQL,EAAOC,CAAU,EAAE,CAAC,CAAE,MAAAG,CAAM,KAAO,CACtD,UAAW,QACX,MAAOA,EAAM,QAAQ,KAAK,OAC5B,EAAE,EDPM,OACE,OAAAE,EADF,QAAAC,MAAA,oBANR,IAAMC,EAAU,CAAC,CAAE,KAAAC,EAAM,GAAGC,CAAM,IAC5BD,EAAK,SAAW,EAAU,KAG5BH,EAACJ,EAAA,CAAU,IAAK,EAAI,GAAGQ,EACpB,SAAAD,EAAK,IAAIE,GACRJ,EAACT,EAAA,CACC,UAAAQ,EAACH,EAAA,CAAO,GAAGQ,EAAE,SAAW,SAAAA,EAAE,MAAM,EAChCL,EAACD,EAAA,CAAM,QAAQ,QAAS,GAAGM,EAAE,WAC1B,SAAAA,EAAE,MACL,IAJaA,EAAE,EAKjB,CACD,EACH,EAIGC,EAAQJ","sourcesContent":["import { Fragment } from 'react';\n\nimport { SummaryProps } from './props';\nimport { Container, Label, Value } from './styles';\n\nconst Summary = ({ data, ...other }: SummaryProps) => {\n if (data.length === 0) return null;\n\n return (\n <Container gap={1} {...other}>\n {data.map(d => (\n <Fragment key={d.id}>\n <Label {...d.keyProps}>{d.label}</Label>\n <Value variant=\"body2\" {...d.valueProps}>\n {d.value}\n </Value>\n </Fragment>\n ))}\n </Container>\n );\n};\n\nexport default Summary;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const Container = styled(Stack)({\n display: 'grid',\n gridTemplateColumns: 'auto auto',\n});\n\nexport const Label = styled(Typography)(({ theme }) => ({\n color: theme.palette.text.secondary,\n display: 'flex',\n gap: '8px',\n}));\n\nexport const Value = styled(Typography)(({ theme }) => ({\n textAlign: 'right',\n color: theme.palette.text.primary,\n}));\n"]}
|