{"version":3,"sources":["../../../src/lib/change-email-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { Form } from \"radix-ui\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport {\n  getMeQueryKey,\n  Me,\n  useAuthenticationInformation,\n  useSendEmailChange,\n  useVerifyEmailChange,\n} from \"../api/endpoint.js\";\nimport { useElevatedAccessToken } from \"../api/api-provider.js\";\nimport { Button, Dialog, Label, TextField } from \"./elements.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\nimport * as Otp from \"./otp-input.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { SetPasswordForm } from \"./set-password-dialog.js\";\n\ninterface ChangeEmailDialogProps {\n  user: Me;\n  children?: ReactNode;\n}\n\nexport function ChangeEmailDialog({ children, user }: ChangeEmailDialogProps) {\n  const [open, setOpen] = React.useState(false);\n\n  const handleClose = React.useCallback(() => {\n    setOpen(false);\n  }, []);\n\n  return (\n    <Dialog.Root open={open} onOpenChange={setOpen}>\n      <Dialog.Trigger>{children}</Dialog.Trigger>\n\n      <Dialog.Content maxWidth=\"480px\">\n        <ElevatedAccess>\n          <Content user={user} onClose={handleClose} />\n        </ElevatedAccess>\n      </Dialog.Content>\n    </Dialog.Root>\n  );\n}\n\ninterface ContentProps {\n  user: Me;\n  onClose: () => void;\n}\n\ntype Step =\n  | { name: \"send\" }\n  | { name: \"verify\"; newEmail: string }\n  | { name: \"set-password\"; newEmail: string };\n\nfunction Content({ user, onClose }: ContentProps) {\n  const [step, setStep] = React.useState<Step>({ name: \"send\" });\n  const authInfo = useAuthenticationInformation();\n\n  const passwordIsSetUp =\n    authInfo.data?.data.verificationMethods.Password?.isSetUp;\n\n  const handleVerified = React.useCallback(\n    (newEmail: string) => {\n      if (passwordIsSetUp === false) {\n        setStep({ name: \"set-password\", newEmail });\n      } else {\n        onClose();\n      }\n    },\n    [passwordIsSetUp, onClose],\n  );\n\n  switch (step.name) {\n    case \"send\":\n      return (\n        <SendEmailChangeForm\n          user={user}\n          onSuccess={(newEmail) => setStep({ name: \"verify\", newEmail })}\n        />\n      );\n    case \"verify\":\n      return (\n        <VerifyEmailChangeForm\n          newEmail={step.newEmail}\n          onBack={() => setStep({ name: \"send\" })}\n          onSuccess={() => handleVerified(step.newEmail)}\n        />\n      );\n    case \"set-password\":\n      return <SetPasswordStep newEmail={step.newEmail} onDone={onClose} />;\n  }\n}\n\ninterface SendEmailChangeFormProps {\n  user: Me;\n  onSuccess: (newEmail: string) => void;\n}\n\nfunction SendEmailChangeForm({ user, onSuccess }: SendEmailChangeFormProps) {\n  const translate = useTranslation();\n  const [newEmail, setNewEmail] = React.useState(\"\");\n  const sendEmailChange = useSendEmailChange({\n    mutation: {\n      onSuccess: (_response, variables) => {\n        onSuccess(variables.data.newEmail);\n      },\n    },\n  });\n\n  return (\n    <>\n      <Dialog.Title mb=\"2\">\n        <Translation\n          defaultMessage=\"Change email address\"\n          id=\"KdUdX9\"\n          description=\"Dialog title for changing the user's email address\"\n        />\n      </Dialog.Title>\n\n      <Dialog.Description mb=\"5\">\n        <Translation\n          defaultMessage=\"We'll send a verification code to your new email address to confirm the change. Your current email is {email}.\"\n          id=\"K6x8v6\"\n          description=\"Description explaining that a verification code will be sent to the new email, including the user's current email\"\n          values={{\n            email: (\n              <Text weight=\"bold\" highContrast>\n                {user.email}\n              </Text>\n            ),\n          }}\n        />\n      </Dialog.Description>\n\n      {sendEmailChange.error ? (\n        <Callout.Root color=\"red\" mt=\"-2\" mb=\"0\">\n          <Callout.Text>\n            {getMutationErrorMessage(sendEmailChange.error)}\n          </Callout.Text>\n        </Callout.Root>\n      ) : null}\n\n      <Form.Root\n        onSubmit={(event) => {\n          event.preventDefault();\n          const trimmed = newEmail.trim();\n          if (!trimmed) return;\n          sendEmailChange.mutate({ data: { newEmail: trimmed } });\n        }}\n      >\n        <Flex my=\"5\" direction=\"column\" gap=\"4\">\n          <Form.Field name=\"newEmail\" asChild>\n            <Flex direction=\"column\" gap=\"1\">\n              <Form.Label asChild>\n                <Label>\n                  <Translation\n                    defaultMessage=\"New email address\"\n                    id=\"dbgchn\"\n                    description=\"Label for the new email input\"\n                  />\n                </Label>\n              </Form.Label>\n              <Form.Control asChild>\n                <TextField\n                  type=\"email\"\n                  autoComplete=\"email\"\n                  autoFocus\n                  required\n                  value={newEmail}\n                  onChange={(event) => setNewEmail(event.target.value)}\n                  placeholder={translate({\n                    defaultMessage: \"name@example.com\",\n                    id: \"QyYabV\",\n                    description: \"Placeholder for the new email input\",\n                  })}\n                  disabled={sendEmailChange.isPending}\n                />\n              </Form.Control>\n            </Flex>\n          </Form.Field>\n        </Flex>\n\n        <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n          <Dialog.Close>\n            <Button\n              variant=\"secondary\"\n              type=\"button\"\n              disabled={sendEmailChange.isPending}\n            >\n              <Translation\n                defaultMessage=\"Cancel\"\n                id=\"hHNj31\"\n                description=\"Cancel button text\"\n              />\n            </Button>\n          </Dialog.Close>\n          <Button\n            type=\"submit\"\n            loading={sendEmailChange.isPending}\n            disabled={!newEmail.trim()}\n          >\n            <Translation\n              defaultMessage=\"Send verification code\"\n              id=\"1bX9l4\"\n              description=\"Button text to send the email change verification code\"\n            />\n          </Button>\n        </Flex>\n      </Form.Root>\n    </>\n  );\n}\n\ninterface VerifyEmailChangeFormProps {\n  newEmail: string;\n  onBack: () => void;\n  onSuccess: () => void;\n}\n\nfunction VerifyEmailChangeForm({\n  newEmail,\n  onBack,\n  onSuccess,\n}: VerifyEmailChangeFormProps) {\n  const client = useQueryClient();\n  const { setElevatedAccess } = useElevatedAccessToken();\n  const verifyEmailChange = useVerifyEmailChange({\n    mutation: {\n      onSuccess: async (response) => {\n        setElevatedAccess({\n          token: response.elevatedAccessToken,\n          expiresAt: response.expiresAt,\n        });\n        client.setQueryData<Me>(getMeQueryKey(), (old) =>\n          old ? { ...old, ...response.user } : response.user,\n        );\n        await client.invalidateQueries({ queryKey: getMeQueryKey() });\n      },\n    },\n  });\n\n  const isSubmitting = verifyEmailChange.isPending;\n\n  const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const formData = new FormData(event.currentTarget);\n    const code = formData.get(\"otp-code\")?.toString() ?? \"\";\n    if (!code) return;\n    verifyEmailChange.mutate({ data: { code } });\n  };\n\n  return (\n    <Form.Root onSubmit={handleSubmit}>\n      <Dialog.Title mb=\"2\">\n        <Translation\n          defaultMessage=\"Enter verification code\"\n          id=\"upvyOt\"\n          description=\"Dialog title for entering the email change verification code\"\n        />\n      </Dialog.Title>\n\n      <Dialog.Description>\n        <Translation\n          defaultMessage=\"A verification code was sent to {email}. Please enter it below.\"\n          id=\"9OH/qs\"\n          description=\"Description explaining where the email change code was sent\"\n          values={{\n            email: (\n              <Text weight=\"bold\" highContrast>\n                {newEmail}\n              </Text>\n            ),\n          }}\n        />\n      </Dialog.Description>\n\n      <Flex direction=\"column\" gap=\"2\" mt=\"5\" mx=\"auto\" width=\"fit-content\">\n        <Otp.Root\n          autoSubmit\n          gap=\"2\"\n          justify=\"center\"\n          columns=\"repeat(6, 48px)\"\n          width=\"fit-content\"\n          rows=\"48px\"\n          name=\"otp-code\"\n          readOnly={isSubmitting}\n        >\n          <Otp.Input required autoFocus autoComplete=\"off\" />\n          <Otp.Input required />\n          <Otp.Input required />\n          <Otp.Input required />\n          <Otp.Input required />\n          <Otp.Input required />\n        </Otp.Root>\n\n        {verifyEmailChange.error ? (\n          <Text color=\"red\" size=\"2\" as=\"p\">\n            {getMutationErrorMessage(verifyEmailChange.error)}\n          </Text>\n        ) : null}\n      </Flex>\n\n      <Flex mt=\"5\" gap=\"3\" justify=\"between\" align=\"center\">\n        <Button\n          variant=\"secondary\"\n          type=\"button\"\n          onClick={onBack}\n          disabled={isSubmitting}\n        >\n          <Translation\n            defaultMessage=\"Use a different email\"\n            id=\"HVuco9\"\n            description=\"Button text to go back and change the new email address\"\n          />\n        </Button>\n        <Flex gap=\"3\">\n          <Dialog.Close>\n            <Button variant=\"secondary\" type=\"button\" disabled={isSubmitting}>\n              <Translation\n                defaultMessage=\"Cancel\"\n                id=\"hHNj31\"\n                description=\"Cancel button text\"\n              />\n            </Button>\n          </Dialog.Close>\n          <SaveButton\n            type=\"submit\"\n            loading={isSubmitting}\n            done={verifyEmailChange.isSuccess}\n            onDone={onSuccess}\n          >\n            <Translation\n              defaultMessage=\"Confirm\"\n              id=\"EmYENK\"\n              description=\"Confirm button text for verification\"\n            />\n          </SaveButton>\n        </Flex>\n      </Flex>\n\n      <VisuallyHidden asChild>\n        <section aria-live=\"polite\">\n          {verifyEmailChange.error\n            ? getMutationErrorMessage(verifyEmailChange.error)\n            : null}\n        </section>\n      </VisuallyHidden>\n    </Form.Root>\n  );\n}\n\ninterface SetPasswordStepProps {\n  newEmail: string;\n  onDone: () => void;\n}\n\nfunction SetPasswordStep({ newEmail, onDone }: SetPasswordStepProps) {\n  return (\n    <SetPasswordForm\n      description={\n        <Dialog.Description>\n          <Translation\n            defaultMessage=\"Your email has been successfully updated to {email}. You can also set a password now if you'd like to be able to sign in with email and password.\"\n            id=\"U7k/vL\"\n            description=\"Description for the set-password step after a successful email change\"\n            values={{\n              email: (\n                <Text weight=\"bold\" highContrast>\n                  {newEmail}\n                </Text>\n              ),\n            }}\n          />\n        </Dialog.Description>\n      }\n      onSuccess={onDone}\n      cancel={\n        <Button variant=\"secondary\" type=\"button\" onClick={onDone}>\n          <Translation\n            defaultMessage=\"Not now\"\n            id=\"/7/PVX\"\n            description=\"Button to dismiss the set-password step and close the dialog\"\n          />\n        </Button>\n      }\n    />\n  );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  if (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"message\" in error &&\n    typeof error.message === \"string\"\n  ) {\n    return error.message;\n  }\n\n  return (\n    <Translation\n      defaultMessage=\"Something went wrong. Please try again.\"\n      id=\"Dn/G2O\"\n      description=\"Generic error message for email change failure\"\n    />\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCI;AAlCJ,oBAAoD;AACpD,yBAA+B;AAC/B,sBAAqB;AACrB,YAAuB;AAEvB,sBAMO;AACP,0BAAuC;AACvC,sBAAiD;AACjD,6BAA+B;AAC/B,yBAA4B;AAC5B,6BAA+B;AAC/B,UAAqB;AACrB,yBAA2B;AAC3B,iCAAgC;AAOzB,SAAS,kBAAkB,EAAE,UAAU,KAAK,GAA2B;AAC5E,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAE5C,QAAM,cAAc,MAAM,YAAY,MAAM;AAC1C,YAAQ,KAAK;AAAA,EACf,GAAG,CAAC,CAAC;AAEL,SACE,6CAAC,uBAAO,MAAP,EAAY,MAAY,cAAc,SACrC;AAAA,gDAAC,uBAAO,SAAP,EAAgB,UAAS;AAAA,IAE1B,4CAAC,uBAAO,SAAP,EAAe,UAAS,SACvB,sDAAC,yCACC,sDAAC,WAAQ,MAAY,SAAS,aAAa,GAC7C,GACF;AAAA,KACF;AAEJ;AAYA,SAAS,QAAQ,EAAE,MAAM,QAAQ,GAAiB;AAChD,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAe,EAAE,MAAM,OAAO,CAAC;AAC7D,QAAM,eAAW,8CAA6B;AAE9C,QAAM,kBACJ,SAAS,MAAM,KAAK,oBAAoB,UAAU;AAEpD,QAAM,iBAAiB,MAAM;AAAA,IAC3B,CAAC,aAAqB;AACpB,UAAI,oBAAoB,OAAO;AAC7B,gBAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AAAA,MAC5C,OAAO;AACL,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,CAAC,iBAAiB,OAAO;AAAA,EAC3B;AAEA,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAW,CAAC,aAAa,QAAQ,EAAE,MAAM,UAAU,SAAS,CAAC;AAAA;AAAA,MAC/D;AAAA,IAEJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,KAAK;AAAA,UACf,QAAQ,MAAM,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,UACtC,WAAW,MAAM,eAAe,KAAK,QAAQ;AAAA;AAAA,MAC/C;AAAA,IAEJ,KAAK;AACH,aAAO,4CAAC,mBAAgB,UAAU,KAAK,UAAU,QAAQ,SAAS;AAAA,EACtE;AACF;AAOA,SAAS,oBAAoB,EAAE,MAAM,UAAU,GAA6B;AAC1E,QAAM,gBAAY,uCAAe;AACjC,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE;AACjD,QAAM,sBAAkB,oCAAmB;AAAA,IACzC,UAAU;AAAA,MACR,WAAW,CAAC,WAAW,cAAc;AACnC,kBAAU,UAAU,KAAK,QAAQ;AAAA,MACnC;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,4EACE;AAAA,gDAAC,uBAAO,OAAP,EAAa,IAAG,KACf;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IAEA,4CAAC,uBAAO,aAAP,EAAmB,IAAG,KACrB;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA,QACZ,QAAQ;AAAA,UACN,OACE,4CAAC,sBAAK,QAAO,QAAO,cAAY,MAC7B,eAAK,OACR;AAAA,QAEJ;AAAA;AAAA,IACF,GACF;AAAA,IAEC,gBAAgB,QACf,4CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,IAAG,MAAK,IAAG,KACnC,sDAAC,sBAAQ,MAAR,EACE,kCAAwB,gBAAgB,KAAK,GAChD,GACF,IACE;AAAA,IAEJ;AAAA,MAAC,qBAAK;AAAA,MAAL;AAAA,QACC,UAAU,CAAC,UAAU;AACnB,gBAAM,eAAe;AACrB,gBAAM,UAAU,SAAS,KAAK;AAC9B,cAAI,CAAC,QAAS;AACd,0BAAgB,OAAO,EAAE,MAAM,EAAE,UAAU,QAAQ,EAAE,CAAC;AAAA,QACxD;AAAA,QAEA;AAAA,sDAAC,sBAAK,IAAG,KAAI,WAAU,UAAS,KAAI,KAClC,sDAAC,qBAAK,OAAL,EAAW,MAAK,YAAW,SAAO,MACjC,uDAAC,sBAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,wDAAC,qBAAK,OAAL,EAAW,SAAO,MACjB,sDAAC,yBACC;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd,GACF,GACF;AAAA,YACA,4CAAC,qBAAK,SAAL,EAAa,SAAO,MACnB;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,cAAa;AAAA,gBACb,WAAS;AAAA,gBACT,UAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,UAAU,CAAC,UAAU,YAAY,MAAM,OAAO,KAAK;AAAA,gBACnD,aAAa,UAAU;AAAA,kBACrB,gBAAgB;AAAA,kBAChB,IAAI;AAAA,kBACJ,aAAa;AAAA,gBACf,CAAC;AAAA,gBACD,UAAU,gBAAgB;AAAA;AAAA,YAC5B,GACF;AAAA,aACF,GACF,GACF;AAAA,UAEA,6CAAC,sBAAK,IAAG,KAAI,KAAI,KAAI,SAAQ,OAC3B;AAAA,wDAAC,uBAAO,OAAP,EACC;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,UAAU,gBAAgB;AAAA,gBAE1B;AAAA,kBAAC;AAAA;AAAA,oBACC,gBAAe;AAAA,oBACf,IAAG;AAAA,oBACH,aAAY;AAAA;AAAA,gBACd;AAAA;AAAA,YACF,GACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,gBAAgB;AAAA,gBACzB,UAAU,CAAC,SAAS,KAAK;AAAA,gBAEzB;AAAA,kBAAC;AAAA;AAAA,oBACC,gBAAe;AAAA,oBACf,IAAG;AAAA,oBACH,aAAY;AAAA;AAAA,gBACd;AAAA;AAAA,YACF;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAQA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,aAAS,mCAAe;AAC9B,QAAM,EAAE,kBAAkB,QAAI,4CAAuB;AACrD,QAAM,wBAAoB,sCAAqB;AAAA,IAC7C,UAAU;AAAA,MACR,WAAW,OAAO,aAAa;AAC7B,0BAAkB;AAAA,UAChB,OAAO,SAAS;AAAA,UAChB,WAAW,SAAS;AAAA,QACtB,CAAC;AACD,eAAO;AAAA,cAAiB,+BAAc;AAAA,UAAG,CAAC,QACxC,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,KAAK,IAAI,SAAS;AAAA,QAChD;AACA,cAAM,OAAO,kBAAkB,EAAE,cAAU,+BAAc,EAAE,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,eAAe,kBAAkB;AAEvC,QAAM,eAAe,CAAC,UAA4C;AAChE,UAAM,eAAe;AACrB,UAAM,WAAW,IAAI,SAAS,MAAM,aAAa;AACjD,UAAM,OAAO,SAAS,IAAI,UAAU,GAAG,SAAS,KAAK;AACrD,QAAI,CAAC,KAAM;AACX,sBAAkB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,EAC7C;AAEA,SACE,6CAAC,qBAAK,MAAL,EAAU,UAAU,cACnB;AAAA,gDAAC,uBAAO,OAAP,EAAa,IAAG,KACf;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IAEA,4CAAC,uBAAO,aAAP,EACC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA,QACZ,QAAQ;AAAA,UACN,OACE,4CAAC,sBAAK,QAAO,QAAO,cAAY,MAC7B,oBACH;AAAA,QAEJ;AAAA;AAAA,IACF,GACF;AAAA,IAEA,6CAAC,sBAAK,WAAU,UAAS,KAAI,KAAI,IAAG,KAAI,IAAG,QAAO,OAAM,eACtD;AAAA;AAAA,QAAC,IAAI;AAAA,QAAJ;AAAA,UACC,YAAU;AAAA,UACV,KAAI;AAAA,UACJ,SAAQ;AAAA,UACR,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,MAAK;AAAA,UACL,MAAK;AAAA,UACL,UAAU;AAAA,UAEV;AAAA,wDAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC,WAAS,MAAC,cAAa,OAAM;AAAA,YACjD,4CAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC;AAAA,YACpB,4CAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC;AAAA,YACpB,4CAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC;AAAA,YACpB,4CAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC;AAAA,YACpB,4CAAC,IAAI,OAAJ,EAAU,UAAQ,MAAC;AAAA;AAAA;AAAA,MACtB;AAAA,MAEC,kBAAkB,QACjB,4CAAC,sBAAK,OAAM,OAAM,MAAK,KAAI,IAAG,KAC3B,kCAAwB,kBAAkB,KAAK,GAClD,IACE;AAAA,OACN;AAAA,IAEA,6CAAC,sBAAK,IAAG,KAAI,KAAI,KAAI,SAAQ,WAAU,OAAM,UAC3C;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UAEV;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA;AAAA,UACd;AAAA;AAAA,MACF;AAAA,MACA,6CAAC,sBAAK,KAAI,KACR;AAAA,oDAAC,uBAAO,OAAP,EACC,sDAAC,0BAAO,SAAQ,aAAY,MAAK,UAAS,UAAU,cAClD;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,MAAM,kBAAkB;AAAA,YACxB,QAAQ;AAAA,YAER;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEA,4CAAC,gCAAe,SAAO,MACrB,sDAAC,aAAQ,aAAU,UAChB,4BAAkB,QACf,wBAAwB,kBAAkB,KAAK,IAC/C,MACN,GACF;AAAA,KACF;AAEJ;AAOA,SAAS,gBAAgB,EAAE,UAAU,OAAO,GAAyB;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aACE,4CAAC,uBAAO,aAAP,EACC;AAAA,QAAC;AAAA;AAAA,UACC,gBAAe;AAAA,UACf,IAAG;AAAA,UACH,aAAY;AAAA,UACZ,QAAQ;AAAA,YACN,OACE,4CAAC,sBAAK,QAAO,QAAO,cAAY,MAC7B,oBACH;AAAA,UAEJ;AAAA;AAAA,MACF,GACF;AAAA,MAEF,WAAW;AAAA,MACX,QACE,4CAAC,0BAAO,SAAQ,aAAY,MAAK,UAAS,SAAS,QACjD;AAAA,QAAC;AAAA;AAAA,UACC,gBAAe;AAAA,UACf,IAAG;AAAA,UACH,aAAY;AAAA;AAAA,MACd,GACF;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,wBAAwB,OAAgB;AAC/C,MAAI,iBAAiB,OAAO;AAC1B,WAAO,MAAM;AAAA,EACf;AAEA,MACE,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,OAAO,MAAM,YAAY,UACzB;AACA,WAAO,MAAM;AAAA,EACf;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAe;AAAA,MACf,IAAG;AAAA,MACH,aAAY;AAAA;AAAA,EACd;AAEJ;","names":[]}