{"version":3,"sources":["../../../src/lib/logout-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Flex, Strong } from \"@radix-ui/themes\";\nimport { type ReactNode } from \"react\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport {\n  ActiveSession,\n  getSessionsQueryKey,\n  useRevokeSession,\n} from \"../api/endpoint.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { SaveButton } from \"./save-button.js\";\nimport { parseUserAgent } from \"./utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface LogoutDialogProps extends AlertDialog.RootProps {\n  children?: ReactNode;\n  session: ActiveSession;\n}\n\nexport function LogoutDialog({\n  children,\n  session,\n  open,\n  onOpenChange,\n  ...props\n}: LogoutDialogProps) {\n  const client = useQueryClient();\n  const userAgent = parseUserAgent(session.userAgent);\n  const device = userAgent.pretty;\n\n  const revokeSession = useRevokeSession();\n\n  const handleDone = React.useCallback(() => {\n    onOpenChange?.(false);\n\n    client.invalidateQueries({\n      queryKey: getSessionsQueryKey(),\n      exact: false,\n    });\n  }, [onOpenChange, client]);\n\n  const onSubmitForm = () => {\n    revokeSession.mutate({\n      sessionId: session.id,\n    });\n  };\n\n  return (\n    <AlertDialog.Root open={open} onOpenChange={onOpenChange} {...props}>\n      <AlertDialog.Content maxWidth=\"480px\">\n        <AlertDialog.Title>\n          <Translation\n            defaultMessage=\"Sign out of device?\"\n            id=\"Jic5nB\"\n            description=\"Dialog title asking to confirm signing out of a device\"\n          />\n        </AlertDialog.Title>\n        <AlertDialog.Description>\n          <Translation\n            defaultMessage=\"You will be signed out of {device}.\"\n            id=\"diFnRK\"\n            description=\"Description explaining the user will be signed out of a specific device\"\n            values={{ device: <Strong>{device}</Strong> }}\n          />\n        </AlertDialog.Description>\n\n        <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n          <form\n            onSubmit={(event) => {\n              event.preventDefault();\n              onSubmitForm();\n            }}\n          >\n            <AlertDialog.Cancel>\n              <Button\n                variant=\"secondary\"\n                disabled={revokeSession.isPending || revokeSession.isSuccess}\n              >\n                <Translation\n                  defaultMessage=\"Cancel\"\n                  id=\"KjY2RX\"\n                  description=\"Button to cancel the logout action\"\n                />\n              </Button>\n            </AlertDialog.Cancel>\n\n            <SaveButton\n              asChild\n              loading={revokeSession.isPending}\n              done={revokeSession.isSuccess}\n              onDone={handleDone}\n            >\n              <Button variant=\"destructive\" type=\"submit\">\n                <Translation\n                  defaultMessage=\"Sign out\"\n                  id=\"tRJt/S\"\n                  description=\"Button to confirm signing out of device\"\n                />\n              </Button>\n            </SaveButton>\n          </form>\n        </Flex>\n      </AlertDialog.Content>\n    </AlertDialog.Root>\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqDU;AAnDV,YAAuB;AACvB,oBAA6B;AAE7B,sBAAoC;AACpC,sBAIO;AACP,yBAA+B;AAC/B,yBAA2B;AAC3B,mBAA+B;AAC/B,yBAA4B;AAOrB,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,aAAS,mCAAe;AAC9B,QAAM,gBAAY,6BAAe,QAAQ,SAAS;AAClD,QAAM,SAAS,UAAU;AAEzB,QAAM,oBAAgB,kCAAiB;AAEvC,QAAM,aAAa,MAAM,YAAY,MAAM;AACzC,mBAAe,KAAK;AAEpB,WAAO,kBAAkB;AAAA,MACvB,cAAU,qCAAoB;AAAA,MAC9B,OAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,MAAM,CAAC;AAEzB,QAAM,eAAe,MAAM;AACzB,kBAAc,OAAO;AAAA,MACnB,WAAW,QAAQ;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,SACE,4CAAC,4BAAY,MAAZ,EAAiB,MAAY,cAA6B,GAAG,OAC5D,uDAAC,4BAAY,SAAZ,EAAoB,UAAS,SAC5B;AAAA,gDAAC,4BAAY,OAAZ,EACC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IACA,4CAAC,4BAAY,aAAZ,EACC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA,QACZ,QAAQ,EAAE,QAAQ,4CAAC,wBAAQ,kBAAO,EAAU;AAAA;AAAA,IAC9C,GACF;AAAA,IAEA,4CAAC,sBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,SAAO,MACxC;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,CAAC,UAAU;AACnB,gBAAM,eAAe;AACrB,uBAAa;AAAA,QACf;AAAA,QAEA;AAAA,sDAAC,4BAAY,QAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,UAAU,cAAc,aAAa,cAAc;AAAA,cAEnD;AAAA,gBAAC;AAAA;AAAA,kBACC,gBAAe;AAAA,kBACf,IAAG;AAAA,kBACH,aAAY;AAAA;AAAA,cACd;AAAA;AAAA,UACF,GACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,SAAO;AAAA,cACP,SAAS,cAAc;AAAA,cACvB,MAAM,cAAc;AAAA,cACpB,QAAQ;AAAA,cAER,sDAAC,0BAAO,SAAQ,eAAc,MAAK,UACjC;AAAA,gBAAC;AAAA;AAAA,kBACC,gBAAe;AAAA,kBACf,IAAG;AAAA,kBACH,aAAY;AAAA;AAAA,cACd,GACF;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF,GACF;AAAA,KACF,GACF;AAEJ;","names":[]}