diff --git a/fxjs/cjs_event_context.cpp b/fxjs/cjs_event_context.cpp
index 81eabde..87361a1 100644
--- a/fxjs/cjs_event_context.cpp
+++ b/fxjs/cjs_event_context.cpp
@@ -36,7 +36,7 @@
   m_bBusy = true;
 
   DCHECK(IsValid());
-  CJS_Runtime::FieldEvent event(TargetName(), EventType());
+  CJS_Runtime::FieldEvent event(TargetName(), EventKind());
   if (!m_pRuntime->AddEventToSet(event)) {
     return IJS_Runtime::JS_Error(
         1, 1, JSGetStringFromID(JSMessage::kDuplicateEventError));
@@ -96,50 +96,50 @@
 }
 
 void CJS_EventContext::OnDoc_Open(const WideString& strTargetName) {
-  Initialize(JET_DOC_OPEN);
+  Initialize(Kind::kDocOpen);
   m_strTargetName = strTargetName;
 }
 
 void CJS_EventContext::OnDoc_WillPrint() {
-  Initialize(JET_DOC_WILLPRINT);
+  Initialize(Kind::kDocWillPrint);
 }
 
 void CJS_EventContext::OnDoc_DidPrint() {
-  Initialize(JET_DOC_DIDPRINT);
+  Initialize(Kind::kDocDidPrint);
 }
 
 void CJS_EventContext::OnDoc_WillSave() {
-  Initialize(JET_DOC_WILLSAVE);
+  Initialize(Kind::kDocWillSave);
 }
 
 void CJS_EventContext::OnDoc_DidSave() {
-  Initialize(JET_DOC_DIDSAVE);
+  Initialize(Kind::kDocDidSave);
 }
 
 void CJS_EventContext::OnDoc_WillClose() {
-  Initialize(JET_DOC_WILLCLOSE);
+  Initialize(Kind::kDocWillClose);
 }
 
 void CJS_EventContext::OnPage_Open() {
-  Initialize(JET_PAGE_OPEN);
+  Initialize(Kind::kPageOpen);
 }
 
 void CJS_EventContext::OnPage_Close() {
-  Initialize(JET_PAGE_CLOSE);
+  Initialize(Kind::kPageClose);
 }
 
 void CJS_EventContext::OnPage_InView() {
-  Initialize(JET_PAGE_INVIEW);
+  Initialize(Kind::kPageInView);
 }
 
 void CJS_EventContext::OnPage_OutView() {
-  Initialize(JET_PAGE_OUTVIEW);
+  Initialize(Kind::kPageOutView);
 }
 
 void CJS_EventContext::OnField_MouseEnter(bool bModifier,
                                           bool bShift,
                                           CPDF_FormField* pTarget) {
-  Initialize(JET_FIELD_MOUSEENTER);
+  Initialize(Kind::kFieldMouseEnter);
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
@@ -148,7 +148,7 @@
 void CJS_EventContext::OnField_MouseExit(bool bModifier,
                                          bool bShift,
                                          CPDF_FormField* pTarget) {
-  Initialize(JET_FIELD_MOUSEEXIT);
+  Initialize(Kind::kFieldMouseExit);
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
@@ -157,9 +157,7 @@
 void CJS_EventContext::OnField_MouseDown(bool bModifier,
                                          bool bShift,
                                          CPDF_FormField* pTarget) {
-  Initialize(JET_FIELD_MOUSEDOWN);
-  m_eEventType = JET_FIELD_MOUSEDOWN;
-
+  Initialize(Kind::kFieldMouseDown);
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
@@ -168,8 +166,7 @@
 void CJS_EventContext::OnField_MouseUp(bool bModifier,
                                        bool bShift,
                                        CPDF_FormField* pTarget) {
-  Initialize(JET_FIELD_MOUSEUP);
-
+  Initialize(Kind::kFieldMouseUp);
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
@@ -180,8 +177,7 @@
                                      CPDF_FormField* pTarget,
                                      WideString* pValue) {
   DCHECK(pValue);
-  Initialize(JET_FIELD_FOCUS);
-
+  Initialize(Kind::kFieldFocus);
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
@@ -193,8 +189,7 @@
                                     CPDF_FormField* pTarget,
                                     WideString* pValue) {
   DCHECK(pValue);
-  Initialize(JET_FIELD_BLUR);
-
+  Initialize(Kind::kFieldBlur);
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
@@ -218,8 +213,7 @@
   DCHECK(pSelStart);
   DCHECK(pSelEnd);
 
-  Initialize(JET_FIELD_KEYSTROKE);
-
+  Initialize(Kind::kFieldKeystroke);
   m_nCommitKey = 0;
   m_pWideStrChange = strChange;
   m_WideStrChangeEx = strChangeEx;
@@ -245,9 +239,7 @@
                                         bool* pbRc) {
   DCHECK(pValue);
   DCHECK(pbRc);
-
-  Initialize(JET_FIELD_VALIDATE);
-
+  Initialize(Kind::kFieldValidate);
   m_pWideStrChange = strChange;
   m_WideStrChangeEx = strChangeEx;
   m_bKeyDown = bKeyDown;
@@ -264,9 +256,7 @@
                                          bool* pRc) {
   DCHECK(pValue);
   DCHECK(pRc);
-
-  Initialize(JET_FIELD_CALCULATE);
-
+  Initialize(Kind::kFieldCalculate);
   if (pSource)
     m_strSourceName = pSource->GetFullName();
   m_strTargetName = pTarget->GetFullName();
@@ -277,8 +267,7 @@
 void CJS_EventContext::OnField_Format(CPDF_FormField* pTarget,
                                       WideString* pValue) {
   DCHECK(pValue);
-  Initialize(JET_FIELD_FORMAT);
-
+  Initialize(Kind::kFieldFormat);
   m_nCommitKey = 0;
   m_strTargetName = pTarget->GetFullName();
   m_pValue = pValue;
@@ -286,11 +275,11 @@
 }
 
 void CJS_EventContext::OnExternal_Exec() {
-  Initialize(JET_EXTERNAL_EXEC);
+  Initialize(Kind::kExternalExec);
 }
 
-void CJS_EventContext::Initialize(JS_EVENT_T type) {
-  m_eEventType = type;
+void CJS_EventContext::Initialize(Kind kind) {
+  m_eKind = kind;
   m_strTargetName.clear();
   m_strSourceName.clear();
   m_pWideStrChange = nullptr;
@@ -317,10 +306,10 @@
 }
 
 bool CJS_EventContext::IsUserGesture() const {
-  switch (m_eEventType) {
-    case JET_FIELD_MOUSEDOWN:
-    case JET_FIELD_MOUSEUP:
-    case JET_FIELD_KEYSTROKE:
+  switch (m_eKind) {
+    case Kind::kFieldMouseDown:
+    case Kind::kFieldMouseUp:
+    case Kind::kFieldKeystroke:
       return true;
     default:
       return false;
@@ -332,48 +321,48 @@
 }
 
 ByteStringView CJS_EventContext::Name() const {
-  switch (m_eEventType) {
-    case JET_DOC_DIDPRINT:
+  switch (m_eKind) {
+    case Kind::kDocDidPrint:
       return "DidPrint";
-    case JET_DOC_DIDSAVE:
+    case Kind::kDocDidSave:
       return "DidSave";
-    case JET_DOC_OPEN:
+    case Kind::kDocOpen:
       return "Open";
-    case JET_DOC_WILLCLOSE:
+    case Kind::kDocWillClose:
       return "WillClose";
-    case JET_DOC_WILLPRINT:
+    case Kind::kDocWillPrint:
       return "WillPrint";
-    case JET_DOC_WILLSAVE:
+    case Kind::kDocWillSave:
       return "WillSave";
-    case JET_EXTERNAL_EXEC:
+    case Kind::kExternalExec:
       return "Exec";
-    case JET_FIELD_FOCUS:
+    case Kind::kFieldFocus:
       return "Focus";
-    case JET_FIELD_BLUR:
+    case Kind::kFieldBlur:
       return "Blur";
-    case JET_FIELD_MOUSEDOWN:
+    case Kind::kFieldMouseDown:
       return "Mouse Down";
-    case JET_FIELD_MOUSEUP:
+    case Kind::kFieldMouseUp:
       return "Mouse Up";
-    case JET_FIELD_MOUSEENTER:
+    case Kind::kFieldMouseEnter:
       return "Mouse Enter";
-    case JET_FIELD_MOUSEEXIT:
+    case Kind::kFieldMouseExit:
       return "Mouse Exit";
-    case JET_FIELD_CALCULATE:
+    case Kind::kFieldCalculate:
       return "Calculate";
-    case JET_FIELD_FORMAT:
+    case Kind::kFieldFormat:
       return "Format";
-    case JET_FIELD_KEYSTROKE:
+    case Kind::kFieldKeystroke:
       return "Keystroke";
-    case JET_FIELD_VALIDATE:
+    case Kind::kFieldValidate:
       return "Validate";
-    case JET_PAGE_OPEN:
+    case Kind::kPageOpen:
       return "Open";
-    case JET_PAGE_CLOSE:
+    case Kind::kPageClose:
       return "Close";
-    case JET_PAGE_INVIEW:
+    case Kind::kPageInView:
       return "InView";
-    case JET_PAGE_OUTVIEW:
+    case Kind::kPageOutView:
       return "OutView";
     default:
       return "";
@@ -381,31 +370,31 @@
 }
 
 ByteStringView CJS_EventContext::Type() const {
-  switch (m_eEventType) {
-    case JET_DOC_DIDPRINT:
-    case JET_DOC_DIDSAVE:
-    case JET_DOC_OPEN:
-    case JET_DOC_WILLCLOSE:
-    case JET_DOC_WILLPRINT:
-    case JET_DOC_WILLSAVE:
+  switch (m_eKind) {
+    case Kind::kDocDidPrint:
+    case Kind::kDocDidSave:
+    case Kind::kDocOpen:
+    case Kind::kDocWillClose:
+    case Kind::kDocWillPrint:
+    case Kind::kDocWillSave:
       return "Doc";
-    case JET_EXTERNAL_EXEC:
+    case Kind::kExternalExec:
       return "External";
-    case JET_FIELD_BLUR:
-    case JET_FIELD_FOCUS:
-    case JET_FIELD_MOUSEDOWN:
-    case JET_FIELD_MOUSEENTER:
-    case JET_FIELD_MOUSEEXIT:
-    case JET_FIELD_MOUSEUP:
-    case JET_FIELD_CALCULATE:
-    case JET_FIELD_FORMAT:
-    case JET_FIELD_KEYSTROKE:
-    case JET_FIELD_VALIDATE:
+    case Kind::kFieldBlur:
+    case Kind::kFieldFocus:
+    case Kind::kFieldMouseDown:
+    case Kind::kFieldMouseUp:
+    case Kind::kFieldMouseEnter:
+    case Kind::kFieldMouseExit:
+    case Kind::kFieldCalculate:
+    case Kind::kFieldFormat:
+    case Kind::kFieldKeystroke:
+    case Kind::kFieldValidate:
       return "Field";
-    case JET_PAGE_OPEN:
-    case JET_PAGE_CLOSE:
-    case JET_PAGE_INVIEW:
-    case JET_PAGE_OUTVIEW:
+    case Kind::kPageOpen:
+    case Kind::kPageClose:
+    case Kind::kPageInView:
+    case Kind::kPageOutView:
       return "Page";
     default:
       return "";
diff --git a/fxjs/cjs_event_context.h b/fxjs/cjs_event_context.h
index 716333e..3fc3245 100644
--- a/fxjs/cjs_event_context.h
+++ b/fxjs/cjs_event_context.h
@@ -18,33 +18,33 @@
 class CJS_Field;
 class CJS_Runtime;
 
-enum JS_EVENT_T {
-  JET_UNKNOWN,
-  JET_DOC_OPEN,
-  JET_DOC_WILLPRINT,
-  JET_DOC_DIDPRINT,
-  JET_DOC_WILLSAVE,
-  JET_DOC_DIDSAVE,
-  JET_DOC_WILLCLOSE,
-  JET_PAGE_OPEN,
-  JET_PAGE_CLOSE,
-  JET_PAGE_INVIEW,
-  JET_PAGE_OUTVIEW,
-  JET_FIELD_MOUSEDOWN,
-  JET_FIELD_MOUSEUP,
-  JET_FIELD_MOUSEENTER,
-  JET_FIELD_MOUSEEXIT,
-  JET_FIELD_FOCUS,
-  JET_FIELD_BLUR,
-  JET_FIELD_KEYSTROKE,
-  JET_FIELD_VALIDATE,
-  JET_FIELD_CALCULATE,
-  JET_FIELD_FORMAT,
-  JET_EXTERNAL_EXEC,
-};
-
 class CJS_EventContext final : public IJS_EventContext {
  public:
+  enum class Kind : uint8_t {
+    kUnknown,
+    kDocOpen,
+    kDocWillPrint,
+    kDocDidPrint,
+    kDocWillSave,
+    kDocDidSave,
+    kDocWillClose,
+    kPageOpen,
+    kPageClose,
+    kPageInView,
+    kPageOutView,
+    kFieldMouseDown,
+    kFieldMouseUp,
+    kFieldMouseEnter,
+    kFieldMouseExit,
+    kFieldFocus,
+    kFieldBlur,
+    kFieldKeystroke,
+    kFieldValidate,
+    kFieldCalculate,
+    kFieldFormat,
+    kExternalExec,
+  };
+
   explicit CJS_EventContext(CJS_Runtime* pRuntime);
   ~CJS_EventContext() override;
 
@@ -114,7 +114,7 @@
   CJS_Field* SourceField();
   CJS_Field* TargetField();
 
-  JS_EVENT_T EventType() const { return m_eEventType; }
+  Kind EventKind() const { return m_eKind; }
   bool IsValid() const { return m_bValid; }
   bool IsUserGesture() const;
   WideString& Change();
@@ -145,13 +145,13 @@
   void ResetWillCommitForTest() { m_bWillCommit = false; }
 
  private:
-  void Initialize(JS_EVENT_T type);
+  void Initialize(Kind kind);
   void Destroy();
 
   UnownedPtr<CJS_Runtime> const m_pRuntime;
   ObservedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
+  Kind m_eKind = Kind::kUnknown;
   bool m_bBusy = false;
-  JS_EVENT_T m_eEventType = JET_UNKNOWN;
   bool m_bValid = false;
   UnownedPtr<WideString> m_pValue;
   WideString m_strSourceName;
diff --git a/fxjs/cjs_runtime.h b/fxjs/cjs_runtime.h
index 06465bd..d95cb26 100644
--- a/fxjs/cjs_runtime.h
+++ b/fxjs/cjs_runtime.h
@@ -24,7 +24,7 @@
                           public CFXJS_Engine,
                           public Observable {
  public:
-  using FieldEvent = std::pair<WideString, JS_EVENT_T>;
+  using FieldEvent = std::pair<WideString, CJS_EventContext::Kind>;
 
   explicit CJS_Runtime(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   ~CJS_Runtime() override;
